NameNetIDCourse
Patrick Baerpbaer2ECE 110
John Wallsjwwalls2ECE 110
  1. Introduction
    1. Statement of Purpose: The goal of this project is to design and build a machine that can autonomously fully solve a Rubik's Cube, given any random initial state.
    2. Background Research: We are working on this project because the Rubik's is a well known complicated mind puzzle, and we think it would be interesting and rewarding to build a machine that solves this puzzle on its own. After looking through Google and Youtube at other people who have done this, we have decided to use six fixed stepper motors, one to turn each side of the cube, controlled by one Raspberry Pi. The Raspberry Pi will take images from two cameras as inputs and translate these images into a map of the cube, which will then be used to create a list of moves that will solve the cube. These moves will then be used to move the motors in order to solve the cube. We listed the main two sources that we used at the bottom of our proposal. 
  2. Design Details
    1. Block Diagram:
    2. System Overview: Each of the two cameras takes a picture of three faces (inclined views) and sends that image to the Raspberry Pi over a USB connection. We will use a USB camera because a USB connection allows us to connect multiple cameras to the Raspberry Pi. The Raspberry Pi will then use the two images to generate a cube state, which is then fed into a Python dependency that returns a list of moves to solve the cube. The Raspberry Pi will then execute each move in order, sending a signal via GPIO to one of six motor drivers which will in turn turn a motor that rotates one side. After every move has been executed, the cube will be solved.
    3. Parts:
      1. Raspberry Pi 3 B+
        1. ECE Supply Center - 740162520
        2. $42
      2. Raspberry Pi Power Supply
        1. ECE Supply Center - 740162522
        2. $11
      3. MicroSD Card
        1. https://www.amazon.com/Sandisk-Ultra-Micro-UHS-I-Adapter/dp/B073K14CVB/ref=sr_1_3?crid=3RY5IY59QCGLG&keywords=raspberry+pi+micro+sd+card&qid=1581487460&sprefix=raspberry+pi+mic%2Caps%2C150&sr=8-3
        2. $6
      4. Six Stepper Motors and Drivers
        1. https://www.amazon.com/Longruner-Stepper-Uln2003-arduino-LK67/dp/B06X982PSL/ref=sr_1_1?keywords=raspberry%2Bpi%2Bstepper%2Bmotor&qid=1581486900&sr=8-1&th=1
        2. ~$26 total
      5. Two USB Cameras
        1. https://www.amazon.com/Logitech-Desktop-Widescreen-Calling-Recording/dp/B004FHO5Y6/ref=sr_1_3?keywords=usb%2Bcamera&qid=1581487565&sr=8-3&th=1
        2. $17 each
      6. Mechanical Frame
      7. Rubik's Cube
        1. https://www.amazon.com/Magic-Turning-Smooth-Durable-Puzzle/dp/B07JKDYWZD/ref=sxin_3_ac_d_pm?ac_md=1-0-VW5kZXIgJDEw-ac_d_pm&cv_ct_cx=rubiks+cube&keywords=rubiks+cube&pd_rd_i=B07JKDYWZD&pd_rd_r=06352dbd-e9a5-4626-95bd-575c469182b2&pd_rd_w=cmoAy&pd_rd_wg=3csEl&pf_rd_p=516e6e17-ed95-417b-b7a4-ad2c7b9cbae3&pf_rd_r=WZF6BAA1R1QYEGQ2GZAJ&psc=1&qid=1581487490&sr=1-1-22d05c05-1231-4126-b7c4-3e7a9c0027d0
        2. $6
    4. Challenges: The first challenge will be correctly converting images to a Rubik's Cube state. The second challenge will be constructing the frame to hold all of the pieces together and remain stable. We will either 3D print the frame or build a simple frame with help from the machine shop.
    5. References:
      1. Youtube Rubik's Cube Solver: 

      2. Controlling Stepper Motors with Raspberry Pi: https://medium.com/@Keithweaver_/controlling-stepper-motors-using-python-with-a-raspberry-pi-b3fbd482f886

  3. Proposal Changes
    1. Added a bill of materials.
    2. Specified that the Raspberry Pi is connected to each motor driver via a Four Pin GPIO Connection
    3. Clarified that a motor driver and stepper motor is connected via five wires per motor
    4. The algorithm to solve the cube has already been written
    5. Our team possesses adequate knowledge in terms of Inventor (to design/draft the mechanical frame). However, we fully intend to heed the recommendations of the machine shop, especially when we get to the step of 3D printing
    6. We are able to connect two cameras to the Raspberry Pi by using two of the four usb ports and two usb cameras.
    7. Although there is not a library to do the image recognition exactly as we are planning, we have found example code that accomplishes similar tasks.

Comments:

Looks like a good start. There's a few things I'd recommend adding:

Your block diagram needs a bit more detail; you should include how the stepper motor drivers are connected, how the stepper motor drivers communicate with the Pi, and how the cameras communicate to the Pi. A bit of concern for using multiple cameras; as far as I can remember, most Pis only have a single camera connection. You should look into this.

Another considerable challenge will be the physical design. Are you going to be using someone else's CAD/3D printing files? Does your team have significant on-board mechanical design expertise? If not, this may be a large stumbling block in your project process. This is not a mechanical design lab, and most of the CAs here will not be able to assist you in your mechanical design process. I would also recommend talking to the Machine Shop in the ECEB; they are talented mechanical designers and can partially design some of your device for you (but they need a significant amount of input, help, and information to do so!)

Thirdly, your list of components/bill of materials requires links to order the parts and the estimated prices.

Those are the three main concerns; mechanical design, block diagram detail, and BoM improvements. Good start! 


Posted by fns2 at Feb 11, 2020 19:19

Are parts of the code you plan on using (such as detecting the configuration of the cube, the algorithm to solve the cube, and controlling the stepper motors) already written? Doing image recognition may be slightly challenging if nobody in the group has worked with it before.

Posted by jamesw10 at Feb 15, 2020 20:13

Cool idea! I agree with Fin. Talk to the Machine Shop earlier since they will be busy soon with the senior projects.

Posted by yuchenc2 at Feb 16, 2020 02:35

Just to reinforce everyone's comments, I would look for as many tips as you can for mechanical design, whether that be others' CAD/3D printing files or the expertise of the machine shop. Also I am curious if one method of solving a rubix cube can be easier to integrate than others. That also may help with eliminating other mechanical hurdles. Good work!

Posted by dbycul2 at Feb 16, 2020 22:13

I might be able to help with the CAD design some (smile) I would say I have intermediate experience in Inventor.

That being said, I agree that connecting servos to rubik's cube is not easy. 

Glad to see you aren't trying to make a cube solving algo! That would be a very bad idea.

Posted by weustis2 at Feb 16, 2020 22:58

Approved, Feb 20th

Posted by fns2 at Feb 20, 2020 18:58