Professional Documents
Culture Documents
Table of Contents
Step 2: Electronics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Related Instructables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Advertisements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
http://www.instructables.com/id/Rubiks-Cube-Solver/
Intro: Rubik's Cube Solver
[Play Video]
I learned how to solve a Rubiks cube last year, and I was also into Arduino, so eventually I ended up with an idea to make my own Rubiks cube solver.
A lot of people have probably seen the tilted twister design by Hans Andersson:
[Play Video]
I looked around at the existing Rubik's cube solvers, and I liked that design, so I built a similar version of it with (mostly) popsicle sticks, using an Arduino and 2 servos.
- Arduino UNO R3
- wires
- USB cable
You can get all of these parts from any robotics store. I got them from canadarobotix.com
Hardware:
- popsicle sticks
- wooden skewers
- thin plywood
- hot glue
Software:
- Pyserial
http://www.instructables.com/id/Rubiks-Cube-Solver/
Step 2: Electronics
Wiring up the servos to the Arduino was pretty simple.
- Connect the yellow (signal) wires for the push and rotation servo to pin 6 and 9, respectively.
- Connect the positive and negative wires to the 5v power source and ground. Sometimes the servos had jitters, so I think capacitors could have smoothed out the
signals.
When I first tried to build the solver, I tried to follow building instructions here:
But I was pretty lazy and didn't follow the instructions, so I made a wooden replica with a few tweaks.
I haven't documented every step of the build process, but I think you can reproduce the tilted twister design with a few tweaks:
Honestly building the physical solver was a lot harder and complex than I expected, so if you have any questions on how I built the solver, just ask.
http://www.instructables.com/id/Rubiks-Cube-Solver/
Image Notes
1. Side View
Image Notes
1. Slants to prevent snagging
http://www.instructables.com/id/Rubiks-Cube-Solver/
Image Notes
1. Popsicle stick joint
http://www.instructables.com/id/Rubiks-Cube-Solver/
Image Notes Image Notes
1. Back View 1. Front View
So basically the code I wrote uses combinations of pushes, holds and platform rotations to apply algorithms to the cube.
There are 3 main parts of my code: the algortihm, GUI (enter cube state) and the serial communications
Let's start with the Arduino sketch. It basically uses algorithms to manipulate the cube colours:
2. Using a basic layer by layer method of solving the Rubik's cube, I made a function, cube_decide(), that goes through each stage or the cube solving process.
3. Within each stage, such as cube_decide_cross() (solving the cross), the program would check for specific locations of colours in the cube, and if an algorithm was
matched with the condition, cube notation like 'U' (Up) or entire algorithms, like fix_cross_instance_1() would be run.
4. The cube notation and algorithms control the servo functions, such as push_cube() or rotate_one().
Cube Decide functions < Cube Algorithms < Cube Move functions < Servo functions < Move Function
One major breakthrough I had was that I actually simulated the cube's movements in the program. The program reassigns the values in the arrays to simulate and cube
rotation. This way, the program can simulate the cube move before it physically executes it.
http://www.instructables.com/id/Rubiks-Cube-Solver/
Image Notes
1. Cube notation used in the program
Image Notes
1. Main loop
Image Notes
1. Code structure
http://www.instructables.com/id/Rubiks-Cube-Solver/
Step 5: Python GUI
I needed a better way of entering the cube state than directly typing them into the Arduino sketch, so I got the idea of creating a GUI from this robot:
Because I'm new to making Tkinter GUI's (Graphical user interface) and didn't want to make one from scratch, I found a tic tac toe GUI here.
Then I turned the 3x3 array of buttons into something resembling a cube and added a few buttons. I also added buttons that would change colour each time they were
clicked. Finally I made 5 more windows that would pop up one after the other, and transfer the colours entered into a local array in the script.
However, I really slapped the code together in a mess, since I simply copy and pasted 6 separate windows, with almost identical functions. Any suggestions on how I
could clean up the code is welcome!
To do that, I used a library called Pyserial, which helps my python script communicate with the Arduino over a serial interface.
1. After the cube colours were entered in the GUI in Send_Cube_State.py, I converted the data into a string
2. Used a 'handshake', which in this case the Arduino tells the computer it's ready, then the computer transfers the data to the robot.
3. The Arduino converts the string received into chars, which are assigned to arrays in the sketch.
4. Now that the cube colours have been successfully transferred from the computer to the Arduino, the cube colours can be put through the algorithms and solve the
Rubiks cube.
http://www.instructables.com/id/Rubiks-Cube-Solver/
Step 7: How To Use
After downloading the project files here: https://github.com/matt2uy/Cube-Solver
5. Put the cube in the robot, with the yellow face in front and blue on top, as shown in the picture above.
7. Watch:
Related Instructables
Advertisements
Comments
4 comments Add Comment
http://www.instructables.com/id/Rubiks-Cube-Solver/
matt2uy says: Jun 21, 2014. 7:28 PM REPLY
Thanks!
http://www.instructables.com/id/Rubiks-Cube-Solver/