Rubik Cube Solver Robot (V-shape) 3D Printer Model

License: CC BY-SA
File formats: stl,f3d
Download type: zip
Size:15.0MB

The file 'Rubik Cube Solver Robot (V-shape) 3D Printer Model' is (stl,f3d) file type, size is 15.0MB.

Summary

Core requirements
Stand-alone (no PC; no smartphone)
Nice looking (minimum cable; solid standing; no “gimmics”)
Should work for all cubes (typical size 2”), in any sticker configuration (pure color; no pattern)
Should work in difficult light situation.
If center stick is marked with a logo it might be required to cover it with the appropriate color (normally those logos are printed on the white center – therefore no problem using a white sticker)
No speed record - but reasonable fast

Concept and idea:
https://forum.arduino.cc/index.php?topic=271827.0

Heavy duty gripper (including link to Fusion360 Files):
https://www.thingiverse.com/thing:2800244
changes, improvements:

  • Holder with soft rubber (4mm) to control gripper force more easily
  • Smaller holder due to conflict caused by inaccurate gripper movement (mechanics and servos)
  • Support of turning servo (turning supported by basement and not only hold by servo axis)

result:
https://youtu.be/Xv4a6-XM1M4

Typical solving time including scanning and calculation < 2 min.

I'm using 270° servos to enable 180° moves (stepper motor might be faster, but more effort for initialization). Other servos could be used – with the limitation to 90° moves (the SW on Github is configured for standard 180° servos)
Small display with core messages (count down; timer and calibration assistance)
Teaching / calibration of servos without external computer

Mechanical assembly with M3 Allen screws
Screws in plastic with brass threads. https://www.youtube.com/watch?v=KUEFhiFB6Zs)

Use wb_shield if gripper is not printed in White. White area is needed to adjust white balance. White balance of picam does not work very well.

SW available on Github:
https://github.com/DrVoHo/Rubik_solver

Driver for display and kociemba solver needs to be installed separately.

Parts needed:
Raspberry pi
Pi-cam
Servos: MG996 (for given timing in the SW) or Miuzei DS3218 with 270° turning angle to enable the 180° feature. But be aware of the changed Timing.
Display: I used AZDelivery 128 x 64 (luma OLED ssd1306) as found on the big online store. You need to install the luma Driver as described in the handbook. If you decide to use a different Display, be aware to change a couple of parts in the SW, due to the fact that the functions of the library are not the same. Especially the start of the Program and the function "Anzeige()" needed to be adapted.
Optional: PCA9685 PWM Driver board. Creates stable servo moves without jitter (please find adapted program on github
power supply (5V 50W due to high power servos)
set of M3 allen screws (different length)
set of M3 brass threads (only short length required)
microswitches for "+" "-" "Enter. They need to switch GND to the GPIO pin
mini solder boards

Wiring:
The Display is directly connected to the I2C Bus, according the documentation of the Display. Please test with one of the supplied test Programs.

For the microswitches and servos use the GPIO Ports as in the SW described:

PLUS_BUTTON = 11
MINUS_BUTTON = 13
ENTER_BUTTON = 15

LINKS_DREH = 36
LINKS_GRIP = 37
RECHTS_DREH = 18
RECHTS_GRIP = 16

Be aware that those numbers are the Pins of the GPIO Board and not the GPIO number.
If you use "GPIO.BCM" (actual GPIO number and not the Pin) you have to transform the numbers. (s. https://indibit.de/raspberry-pi-die-gpio-schnittstelle-grundlagenbelegung/ - a documentation in German). Some display libraries are using GPIO.BCM and you cannot switch back to GPIO.BOARD.

Make sure that only the control line of the servos goes to the Raspberry Pi. Power an GND of the servos must be directly connected to the power supply. The Raspberry Pi cannot deliver the required current for the servos. Make sure that GND of Raspberry Pi is connected to the GND of the servos
Servo Timing:
Raspberry Pi can only create PWM with 50Hz frequency (20 ms duration). All servos are controlled with a PWM with a Minimum time and a maximum time. You can use different servos with different Timing. The SERVO_PWM_xxx and SERVO_OFFSET_xxx needed to be calculated according the timing of the servo which is sometimes difficult to get.
SERVO_OFFSET_xxx = Minimum_Time / 20 x 100 (Minimum time in percent of PWM Duration)
SERVO_PWM_xxx = (Maximum_Time - Minimum_Time)/ 20 x 100
TURN_MAX_xxx = maximum turn angle of the servos according the timing.
Raspberry Pi is doing a SW-PWM. That means that start and end point of the PWM Signal are created by SW routines (inside Raspberry Pi). If there are background tasks the PWM timing can be influenced, resulting in some jitter on the servos (shaking arms). If this is not acceptable you can use a PCA9685 PWM board. This board creates HW-based PWM Signals without any jitter. You can also use higher PWM frequency (does not Change anything in the behavior of the robot)

Arm_left_body.stl 406.2KB
Arm_left_lid.stl 111.6KB
Arm_right_body.stl 432.0KB
Arm_right_lid.stl 110.0KB
Body.stl 810.6KB
Body_lid.stl 107.7KB
cam_holder_picam_v1.stl 97.0KB
Cam_internal_cover.stl 7.3KB
cam_lower_lid.stl 50.9KB
cam_lower_part.stl 87.0KB
cam_upper_lid.stl 107.5KB
cam_upper_part.stl 113.8KB
gear_Left_update.stl 101.1KB
gear_R_update.stl 93.1KB
gripper_arm_left.stl 120.7KB
gripper_arm_right.stl 121.9KB
gripper_lower_plate_update.stl 245.8KB
gripper_middle_plate_update.stl 219.0KB
gripper_short_connect_2x.stl 63.0KB
gripper_upper_plate_update.stl 332.1KB
interlink_right_arm_cam_arm_2x.stl 58.3KB
rear_plate_update.stl 96.6KB
rod_X4.stl 26.4KB
Rubik_Robot_Final.f3d 14.3MB
Servo_cover_2x.stl 260.0KB
wb_shield.stl 43.8KB