The file 'Rubik Cube Solver Robot (V-shape) 3D Printer Model' is (stl,f3d) file type, size is 15.0MB.
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:
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 |