This is a parts list for a single snake, if you want to make both snakes you will need to double the volume of components.

  • 10 MG996R servos*
  • 1.75mm 3D printing filament
  • 10 ball bearings, part number 608 (I salvaged mine from the outer rim of Jitterspin fidget spinners)
  • 20 small ball bearings, part number r188, for the wheels** (I salvaged mine from the inner part of Jitterspin fidget spinners)
  • 40 philips head screws 6-32 x 1/2" (or similar)
  • 8 longer screws (I don't have a part number but they are the same diameter as the screws above)
  • At least 20 pieces of 4 inch zipties (its up to you how many you want to use)
  • 5m each of red and black power wire
  • Standard signal wire
  • 30 male header pins (split into 10 lots of 3)
  • Arduino Nano
  • 3D printed parts (see next section)
  • Some form of power (see the section: "Powering the snake" for more info), I personally used a modified ATX power supply
  • 1000uF 25V electrolytic capacitor
  • Heat shrink tube of various sizes, solder, and other miscellaneous tools

*you can use other types but you will need to redesign the 3D files to fit with your servos. Also if you try using smaller servos like the sg90, you may find they are not strong enough (I have not tested this and it will be up to you to experiment).

**you don't need to use small ball bearings for the wheels, I just had a lot laying around. Alternatively you could use LEGO wheels or other toy wheels.

3D Printing Components

If you are making the 1D snake print these pieces.

If you are making the 2D snake print these pieces.

Important note: The scale might be wrong! I design my components in Fusion 360 (in mm units), exported the design as an .stl file into MakerBot software and then printed it on a Qidi Tech printer (a clone version of the MakerBot Replicator 2X). Somewhere along this workflow there is a bug and all of my prints come out too small. I have been unable to identify the location of the bug but have a temporary fix of scaling each print to 106% size in the MakerBot software, this fixes the problem.

Given this, be warned that if you print off the files above they may be incorrectly scaled. I suggest printing just one piece and checking if it fits with your MG996R servo before printing them all.

If you do print any of the files please let me know what the outcome is: if the print is too small, just right, too large and by how much percent. By working together as a community we can troubleshoot the location of the bug using different 3D printers and .stl slicers. Once the issue is resolved I will update this section and the links above.

Assembly of the Snakes

The assembly process is mostly the same for both versions of the snake. The only difference is the in the 2D snake each motor is rotated 90 degrees relative to the previous, whereas in the 1D snake all the motors are aligned in a single axis.

Begin by unscrewing the servo, save the screws and remove the top and bottom pieces of the black plastic frame, and be careful not to lose any of the gears! Slide the servo into the 3D printed frame, orientated as in the pictures above. Replace the top of the servo case, and screw it in place with four 6-32 1/2" screws. Save the bottom of the servo frame (in case you want to use it again in later projects) and replace it with the 3D printed case, the only difference being the additional knob for a ball bearing to slip over. Screw the servo back together, repeat 10 times.

IMPORTANT: Before continuing you must upload code to the Arduino and move each servo to 90 degrees. Failure to do this could result in you breaking one or more servo and/or the 3D printed frames. If you are unsure how to move a servo to 90 degrees see this page. Basically connect the red wire of the servo to 5V on the Arduino, the brown wire to GND and the yellow wire to digital pin 9, then upload the code in the link.

Now that each servo is at 90 degrees, continue:

Connect the 10 segments by inserting the 3D printed knob from one...

Read more »