Open-Source SPRING

Luis Donatiu


Open-Source Instructions for Building SPRING System

1. Getting Started

1.0 Getting Started: A Quick Note

Current research to understand and enhance the development of children with neurological differences, including Autism Spectrum Disorder (ASD), is often severely limited by the small sample sizes of human-gathered data in artificially structured learning environments. SPRING (Smart Platform for Research, Intervention, and Neurodevelopmental Growth) is a hardware and software system designed to 1) automate quantitative data acquisition, 2) optimize learning progression through customized, motivating stimuli, and 3) encourage social, cognitive, and motor development in a personalized, child-led play environment. SPRING can also be paired with sensors to probe the physiological underpinnings of motivation, engagement, and cognition.

The SPRING project, invented by Kristy Johnson, is in constant progression at the MIT Media Lab's Affective Computing Group and, as such, new features will be integrated. Do not be concerned if any pictures show newer or older versions of the SPRING you are constructing (e.g. singular shape modules or updated piezo sensor cutouts), as the basic building blocks that compose these step by step instructions will remain the same. This remains true for different iterations of SPRING as well. The current module, a shape sorter game, can be taken out of the base and an endless array of games and research tools can be designed to take its place--many of which are in progress at the Affective Computing Group.

 The addition of new features and revision of old features will be denoted with the date of the update. When a new game module is released, the instructions will be posted in a new category. When following SPRING instructions, it will be to your advantage to read through all of the steps for a particular task before proceeding. Thank you for choosing to build SPRING: a tangible, customizable, responsive device designed to accelerate learning and skill acquisition for children using objective data. 

The SPRING team would like to thank Rosalind Picard, founder and director of the Affective Computing Group, for her constant innovation and endless support of the project. We would also like to extend a special credit to Luis Donatiu for creating the framework of SPRING since its inception, building it from the ideation phase to an adaptable system. 

1.1 Getting Started: Shape Sorter Game Description and Research

The Shape Sorter Game begins with a free play level, where the child receives motivating feedback (e.g., lights, music, videos) for each successfully inserted shape. The game can then progress to a series of matching levels, which work on matching, 2D-to-3D generalization, and abstract-to-concrete generalization. The learning continues to grow with the child, covering concepts such as sequencing, basic word and number recognition, and auditory recognition skills. Many of these concepts can be challenging to teach, so the Shape Sorter Game provides an opportunity for a child to repeatedly develop and hone their knowledge in a highly motivating, responsive environment.

Shape Sorter Game Levels: 

Free Play: No prompt. Shape play is reinforced with personalized feedback after each insertion.

Basic Match: Screen displays a high-contrast silhouette of a shape. Child receives personalized feedback upon inserting the correct corresponding shape. Note that, if the prompt is a triangle, only placing a triangle will elicit feedback. Inserting any other shape will not produce an effect.

 Complex Match: Screen displays an abstract representation of a shape (e.g., a basketball, a yield sign, a starfish). As before, child receives personalized feedback only upon insertion of the correct corresponding shape. (Feedback continues in this manner for all subsequent levels, unless otherwise specified.)

Advanced Complex Match: Screen displays a more complex abstract representation of a shape or shape category (e.g., a pile of overlapping coins, a screen filled with gumballs, several boats with triangular sails).

Number Match: Screen displays a number that corresponds to the number of points on a shape (e.g., ‘5’ for the star, ‘4’ for the square). Painting dots on each shape can assist the user. 

Shape Name Match: Screen displays a word corresponding to a shape name.

Spoken Number: Phone audio states a number corresponding to the number of points on a shape (e.g., “The next number is 4,” for the square.)

Spoken Shape Name: Phone audio states a shape name (e.g., “The next shape is triangle.”) This level requires the user to listen closely to the prompt in order to respond.

Patterns: Screen first displays a single high- contrast white-on-black shape as in the matching levels. Then, once this shape has been inserted correctly, the screen displays two shapes. The leftmost shape is white, while the other is shaded gray. Once the leftmost shape has been inserted, it turns gray and then next sequential shape becomes white. After completing the two-shape prompt, three shapes are displayed, and so on. Personalized feedback is presented only after the completion of the full sequence of shapes in each prompt. Placing an “incorrect” shape moves the user back a level within this Patterns activity (e.g., from four shapes to three) without presenting feedback.       

The plot above shows cumulative shape placements as a function of time for a single user over 6 sessions within an 8-day period.  The purpose behind the test was to explore motivation-driven learning for a child with autism. Sessions 1, 2, 4, and 6 used the SPRING Shape Sorter Module while Sessions 3 and 5 used a traditional, non-responsive shape sorter. Each session with a traditional shape sorter resulted in only 3 shape placements. Note the sustained periods of engagement with SPRING and the increasing rate of shape placement with subsequent SPRING sessions. Parental guidance and praise was similar across all trials.

The above plot shows a child’s electrodermal activity (EDA; blue line) as a function of time during a pilot case study with time-synchronized SPRING data overlaid. EDA data were captured via a wrist-worn sensor with wet electrodes at 32 samples per second. These data were filtered by taking a moving median of +/- 3 seconds about each point (i.e., 192 samples per window). Vertical gray dotted lines indicate the start of a new level using the SPRING Shape Sorter Module, while vertical pink dashed lines mark the child’s first shape placement for that level. Each colored shape marker denotes placement of that shape in SPRING. Video capture shows that the declines in arousal correspond to the child’s deep engagement or boredom in relatively rote activities that were either visibly easy (Basic Match) or too challenging (Shape Name Match). However, during the last level (Complex Match), the child’s arousal rose as he strategized the correct shape. These data suggest that SPRING may facilitate measurement of physiological signatures of learning and engagement for children. 

1.2 Getting Started: Materials

  • 5’ x  5’ 1/4” Wood
  • Carpenters Wood Glue
  • Neopixel RGB 144 LED Strip -1m White (Only 108 Pixels needed)
  • 58 D32 3/16” x 1/18”, N42 Cylinder Magnets
  • 8 Pogo Pins (ED9001-ND)
  • Proximity Sensor (SHARP 2Y0A21)
  • 8 Reed Switches (306-1124-1-ND)
  • 6 Teenuts (90975A012)
  • 6 8-32 x ¾ Hex Socket Head Cap Screws  
  • Hot Glue
  • Wire (white, red, yellow, green, blue and black)
  • Lead Free Solder
  • 0.575" Thick Copper Plate
  • 1/8” Router Bit
  • Silicone Mat
  • ¼ “ Translucent Acrylic 
  • Arduino Uno w/ USB Cord
  • Protoshield
  • 470Ω Resistor
  • 10KΩ Resistor 
  • 1mF Capacitor
  • Bluefruit LE UART Friend
  • USB connector
  • Battery with USB Port
  • 20 D43-N52 Cylinder Magnets: Circle (8), Star (5), Square (4), Triangle (3)
  • Gopro Hero Mount Adapter
  • Phone Holder
  • Tape

1.3 Getting Started: Machines and Tools

  •  CNC Machine
  • Laser Cutter Machine
  • Hot Glue Gun
  • Soldering Iron
  • Desoldering Device
  • 9/64” Allen Key
  • Small Tweezers
  • 220 Fine Grit Sand Paper
  • Phillips-Head Screw Driver 
  • Multimeter 
  • Scissors 
  • Box Cutters 
  • Wire Strippers 
  • Clamps
  • Calipers (or a very precise ruler)
  • Mallet (helpful)
  • 9/32" drill bit
  • Drill Press or Hand Drill
  • Soldering Flux
  • Alligator Clips 
  • Breadboard
  • Epoxy Glue
  • Clamps
  • Towel or Paper Towel 
  • Computer

1.4 Getting Started: Understanding Orientation

There are five main layered components for SPRING that require an understanding of directionality. They are the module, base, back leg, front left leg and front right leg. For the module and the base, the top of a layer should ultimately be facing up and the bottom of the layer should be facing down. Layer 1 represents the highest layer, and layer 5 represents the lowest layer for both. For the legs, the interior face of a layer is considered to be the face  closest to the center of the device, and the exterior face of the layer is the face farthest from the center of the device. Layer 1 will represent the layer closest to you (the first  layer you see when you look at a fully constructed leg ), and layer 5 will represent the layer farthest from you (most interior layer). 

2. Cutting Wood

2.0 Cutting Wood: Understanding Steps

There are a few steps involved in turning SolidWorks models into layers of wood, but depending on your agenda, they might not all be applicable to you. Please read through these short descriptions to decide at which step to begin.

2.1 Converting SolidWorks models to DXF files (attached here are the SolidWorks files).  This step is only necessary if you decide to modify our SolidWorks files, as you would then need to convert your new files to a DXF format. If you are not looking to modify the SolidWorks files, skip this step. 

2.2 Editing DXF files in VCarve and generating a tool path for the ShopBot CNC Router (attached are the DXF files). This step is only necessary if you decide to modify our DXF files. If you proceeded with step 2.1 and have generated new DXF files, you will need to complete this step as well to generate tool paths for your new files. Otherwise, this step is optional. If you do not want to modify our DXF files, skip this step. 

2.3 Cutting wood with a ShopBot CNC Router file (attached are the VCarve tool path files and the shopbot files). If you would simply like to use our ShopBot files, or if you have now generated your own, proceed to this step and set up the CNC Router to begin cutting your pieces. 

NOTE (Please read fully) : A longstanding problem we face is an issue of wood tolerance. Most wood manufacturers have a tolerance of close to 0.02", which means the 1/4" thick wood can range from 0.23" to 0.27" in thickness. Given the precise nature of this design, this causes problems with the interfacing of the base, legs and modules. Therefore, I have added a duplicate base layer 3 that can be used to adjust the thickness of the base if your wood is too thin by cutting the layer's face down until its thickness makes up the difference.  This would require creating new DXF files (from modifying the SolidWorks to be the proper dimensions for your wood) for the VCarve platform, then generating new toolpaths for the CNC Router. If your wood is too thick,  you can simply cut each face down until the machine is starting at a face that is set to our file thickness. This would  only require modifying the  VCarve file to create an additional initial cut. CURRENTLY, THE FILES YOU UPLOADED ARE SET FOR A WOOD THICKNESS OF 0.225”. This is because the wood we last received was of this thickness. When we upload a new file, we will make sure to let you know what thickness it is set to (hopefully 0.25”!). If you only have a minor difference in thickness from our files, you can just cut our files and then use sandpaper to make up the difference. If it is a major difference in thickness, you will need to: 

1) Change the slot thickness on the base (the long slot and the little slot for the fourth leg) so that whatever leg thickness you have fits inside.

2) Change the cutout depth for the proximity sensor so that it fits in between the shortened layers.

3) Make sure to adjust the thickness of both the base and module to a standard size of your preference because you will want to have the ability to put multiple modules inside, and these other modules might be cut with a different wood thickness.

2.1 Cutting Wood: Exporting SolidWorks (CAD 3-D model) files to DXF format (2-D)

Here are the SolidWorks files:

Note: If you plan to modify the SolidWorks model, make sure to only create pocket cuts (cutouts that only go partially through the wood) on the same face where other pocket cuts exist. This is because the CNC Router can only cut from one face, so if you have pocket cuts on both faces of the layer, the machine will only be able to cut one of them as turning the piece over is not an option. 

1.  Open the SolidWorks model and locate the face that requires the machining of pocket cuts. This should be the face of the layer that is most intricate--the face that has cuts that go only partially into the wood. For example, for layer 5 of the module, this would be the layer's bottom face as it has a circular cutout around the circular hole. This is one of the only tricky details to spot. A slightly more noticeable example would be layer 3 of the module, where you should select the layer's top face as it has the pocket cutouts for the reed switches. 

2. Make sure this selected face is fully visible on the screen and that the model is not slightly angled. To do this, use the tool "view orientation" and select the proper face.

3. Go to: File -> Save As -> Make Copy -> [create folder] -> type "DXF file" -> Save. Make sure to choose "Dxf (*.dxf)" for the "Save as type" section. 

4. On the left of the of the SolidWorks windows, where it asks to select the type of view to save, select "Current View" 

2.2 Cutting Wood: Editing DXF files and generating a tool path for the ShopBot CNC Router                                      

Please watch the video for instruction on how to modify a SPRING DXF file and generate tool paths for each pocket, through hole and profile cut. 

2.3 Cutting Wood: Using the ShopBot CNC Router

Here are the ShopBot files (these are the individual tool path files to send to the ShopBot CNC Router that were generated from the VCarve file):

                                                                           Base and Legs Cuts

NOTE: The first two files are to be cut using a 5/64" drill bit, and the rest of the files use a 1/8" end mill. The paths are grouped into a file based on what tool size they use and the depth of the cut. The order of the files is based on maintaining stability of the parts as they are cut, with small and internal jobs completed first. If you want to create your own tool paths for a modified system, keep these factors in mind. 

Here is the VCarve file (the collection of all the tool paths that can be modified on the computer):

We will not be providing instructions on how to operate the ShopBot CNC Router, as only a trained user should be operating this machine. We do not have the authorization to train anyone. Every CNC Router operates differently, so if you are not a trained user, please find one to help you cut your parts. 

Sanding Wood: To avoid injuries and create a more pleasurable building experience, it is very important to sand all of the wood that is cut. I used 220 grit sand paper, but any fine grit sand paper can work. Make sure to sand down both the interior and exterior edges. Furthermore, be sure to avoid sanding too much of the interior slot on the third layer of the module (where the reed switches are placed). The slots for the reed switches are very precise and sanding them down too much can result in a less functional device.              

3. Universal Steps

3.0 Universal Steps: What are universal steps?

Universal steps apply to both the base and the modules. At the beginning of each universal step, all of the specific layers to which the task applies will be noted.  It is recommended that universal steps are completed for all layers before proceeding, for more simplicity while building. 

3.1 Universal Steps: Tee-Nuts

1. Locate all the layers that contain tee-nut holes (they are three small holes in a triangular configuration).

2. Place the tee-nuts into the holes. The head of the tee-nut should fit into the larger countersinking slot. Make sure the three prongs of the tee-nut line up with the three pilot holes around the perimeter.

3. It should be a tight fit. You may need to hit the head of the tee-nut with a mallet. To do so, place the layer on a flat surface and hang the section of wood with the tee-nut over the edge of that surface. Hold the layer down with one hand (or a clamp) and hit the tee-nut repeatedly with the mallet.

4. The bottom of the tee-nut should protrude out from the bottom surface of the layer, so make sure not to hit the tee-nut while it is over the table. Otherwise, the tee-nut will only go as far as to be flush with (at the same height as) the bottom surface. 

3.2 Universal Steps: Magnets

1. Locate all the layers that contain magnet slots (they are holes with a 0.125" depth). You can measure the depth with calipers to be sure.

2. The purpose of these magnets are to connect two layers such that each magnet on the first layer has a corresponding magnet on the second layer. When the layers of magnets are perfectly aligned, all of the interior shapes will align as well. Make sure to identify the sets of corresponding magnet holes.

3. Remove any excess materials from inside the holes so that the magnets can slide as deep into the hole as possible.

4. Place D32 cylindrical magnets into the holes of the first layer. It is a fairly tight fit. You may need to use tools to push the magnets fully into the holes.

5. After you have completed the first layer, take the remaining magnets of the second layer and let them attract to the first layer magnets. This will show you which sides of the magnets attract. This is critical to allow layers to connect and not push each other away. 

6. After you determine the side of a second-layer magnet that attracts to its corresponding first-layer magnet, place the other side of that magnet (the non-attracting side) into the second layer but do not push it in all the way. Repeat this step for the remaining second-layer magnets.

7. Before fully pushing in the second-layer magnets, try to connect to the two layers in the proper orientation and make sure that all magnets are attracting each other as opposed to repelling. If any magnet pair repels, take one magnet out with pliers and place that magnet into the hole in the other orientation.

8. Once you have determined that all of the magnets attract, push the four second-layer magnets fully into their holes. It is okay if the magnets are not perfectly flush with the surface, but try to push them in as much as possible.

9. When inserting the magnets that connect the module (bottom layer 4) to the base (top layer 5) , it is critical that the magnets on a single layer have the same orientation (in addition to the magnet pairs between layers attracting). This is because multiple modules can attach to the base, and it is important to be consistent in magnet direction so that each module will properly attract to the base. 

10. For the three magnets on  bottom layer 4 of the module, you will need to additionally place a tiny bit of hot glue into the hole and push the magnet inside. Hold the magnets down while the glue dries. 

4. Assembling the Base

4.0 Assembling the Base: Acrylic Cover for the Neopixel Strip

1. The acrylic cover must be manufactured on the laser cutter. Here are the DXF files to be laser cut:

Helpful laser cutting tips and  reminders:

a. Activate all laser cutter safety measures (air compressor, vacuums, etc).

b. Measure and input the size of your acrylic sheet into the program.

c. Select (under Properties -> PEN) black and white.

d. Set the configuration (under Properties -> PEN) to:

           Speed: 1

           PPI: 500

          Power: 100%

e. Select 2 repetitions for this cut.

f. Wait 15 - 30 seconds after the cut finishes to allow time for the toxic gases to be vacuumed out .

g. Before removing the entire piece of acrylic, make sure that all the paths have been cut through all the way. If not, run the job again (TIP: It is important not to increase the cutting speed, but if the laser does not cut all the way through the acrylic, you may increase the PPI value to 600).

h. Make sure to peel the layer of paper on the surface of the acrylic off of the parts.

2. Push the acrylic parts into their slots in layer 1 . If the slot is too small, or if there seems to be too much  friction between the acrylic cover and slot when you try pushing, take some sand paper and sand down the sides that are causing the tight fit. You do not want the fit to be too loose, though, or the cover might fall out of the layer. Make sure to repeatedly check to see how well the part fits after you sand for a bit. You can also check to see what area of the slot in particular is causing trouble, as shown.

4.1 Assembling the Base: Modifying Proximity Sensor

1. Carefully cut and remove the white plug from the proximity sensor by bending it up and cutting the three pins connecting it to the sensor body.

2. Cut the bottom black protective plastic, as well as the two side mounting holes, as pictured.

3. Solder the wires, in accordance with the pictured color scheme, to the back side of the three pins that were cut in step 1. 

4. Be very careful to avoid pulling out the pins you soldered (example included below), as that will  strip the copper lane within the circuit and you will need to use a different sensor.

5. Cover the soldered region with hot glue for stability. Try to limit the glue to the region above the wires  and as close to the surface of the circuit as possible, because too much glue can prevent the sensor from fitting properly into the layer. If you applied too much glue, simply wait for it to dry and then cut and peel the glue away.

6. Test the proximity sensor by following this guide on how to connect it to an Arduino. Run the code and make sure the sensor is functional by putting your hand closer and farther away from the front face and checking that the numbers given on the serial monitor accurately represent the change in distance of your hand. 

If the sensor is not responding or if the numbers given seem random, carefully peel off the glue, unsolder the wires, and proceed with step 3. If that does not work, try a different sensor. 

7. Once the sensor  is working, slot it into layer 4 top and run the wires through the wire channel, hot gluing them down at a few locations to prevent the wires from popping out of their channel. 

8. Make sure that the sensor fits within the slots of the other base layers as well. If not, the other layers might require some sanding.

4.2 Assembling the Base: Gluing the Legs

NOTE: When gluing two legs layers together, glue should be applied to the face of both layers. For any layers that have slots, pockets, holes, etc. in them, make sure to keep the glue farther away from those areas as you do not want the glue to spread and fill inside any needed openings.  Also, make sure to check where the two layers meet so as to avoid gluing on wood that won't be touching other wood. For instance, do not apply glue to the top part of layer 2 legs (the longest layer of each leg that will slot into the base) as you do not want that part to thicken. Only a small amount of glue is necessary to keep the legs together. Make sure to have a damp towel or paper towel to clean up any excess glue. Also make sure to clamp the layers together after gluing them since wood glue only works with pressure. Try to clamp at as many corners and sides as possible. You can clamp multiple layers at once, but make sure all the layers are perfectly aligned as once the glue dries, you cannot move the leg layers anymore. 

Back Leg

1. Glue and clamp the middle three layers together using wood glue following instructions in the NOTE above. Make sure that layer 4 exterior face is against layer 3 interior face, and layer 3 exterior face is against layer 2 interior face. Glue should be applied between these two interactions. It is advised to proceed with step 1 (gluing) of the left leg and right leg now as well (down below), and then come back here for step 2.

2. Take the parent interrupt button and solder two short wires to each leg. Make sure to first check, using a multimeter, that the two legs you chose are only connected when the button is pressed.

3. Place the wires and legs of the button through the four small holes of layer 4 interior face. Then make sure the button fits through the hole of layer 5 when it is connected. If it is a tight fit, sand down the button hole of layer 5 until the button can be pushed smoothly. 

4. Layer 1 can attach to layer 2 and layer 5 can attach to layer 4 using the magnetic connection.

Left Leg 

1. Glue and clamp the first four interior layers together using wood glue following instructions in the NOTE above. Make sure that layer 5 exterior face is against layer 4 interior face, layer 4 exterior face is against layer 3 interior face, and layer 3 exterior face is against layer 2 interior face. Glue should be applied between these three interactions.                       

2. Layer 1 can attach to layer 2 using the magnetic connection.

Right Leg             

1. Glue and clamp the first four interior layers together using wood glue following instructions in the NOTE above. Make sure that layer 5 exterior face is against layer 4 interior face, layer 4 exterior face is against layer 3 interior face, and layer 3 exterior face is against layer 2 interior face. Glue should be applied between these three interactions.                                  

2. Layer 1 can attach to layer 2 using the magnetic connection.

4.3 Assembling the Base: Gluing and Soldering the Pogo Pins

1. Fix the  top half of the pogo pin in place (use a "helping hand" to hold it, tape it against a flat surface, etc.). Make sure that you have fully covered the top half of the pogo pin  in the process such that the solder will not move above the top half (and into the spring region). 

2. Strip both ends of an approximately 12 inch long wire (slightly longer for pins further away from the back leg) and twist one end into a hook. The wire color should vary for each pin in a set, and should remain consistent across the three sets to allow for easy wiring. Secure the wire in place by taping the bottom to the edge of a table.

3. Hook the wire around the bottom half of the pogo pin, making sure the wire is only slightly above the pin's base. Then, solder the hooked wire to the pogo pins.

4. Locate the indented holes on the lowest layer of the base. Place the bottom of the pogo pins inside the holes, making sure to adjust the attached wires such that they can all fit in their allotted space. The pogo pins will only be able to go as deep as the location of the soldered wire, which should have been very close to the bottom. As much of the pins as possible should be elevated.

5. Once you are comfortable with the wire placement and the pogo pins are resting in the holes, hold down the wire from farther back with one hand, and hot glue the wire to the wood with the other hand. Try to hot glue at least half an inch away from the pogo pins to avoid damaging them. 

6. Let the hot glue dry for 1 minute. Then, use a very thin object to place epoxy along the edges of the pogo pins. Do not apply any epoxy above the soldered wire as you risk hardening the spring.

7. Wait for a couple of minutes to allow the epoxy to slightly dry. 

8. Make sure that you can press down on the pogo pins and that the pins will easily spring back into place. 

9. If any given pogo pin is not functioning properly, you will need to remove that pin and repeat steps 1 through 8. You should be able to pluck the pogo pin out from the hole and rip the wire from the hardened pool of hot glue. Use pliers if necessary.

10. The epoxy should require approximately 24 hours to completely dry. 

4.4 Assembling the Base: Gluing and Soldering the Neopixel Strips

1. You will need 6 sets of 18 pixels. This requires cutting through the 19th pixel of every set to ensure a functional 18 pixel set.  More cutting details in step 2.

2. When cutting the broken pixel before and after your set of 18, cut the very edge of the white square on the side closest to the pixel set you are cutting out (as shown). You will need to cut through two pixels to form each set with the exception of the first set, which has wires already attached. 

 3. Pull off any of the cut pixel remaining to access the copper circles. 

 4. Cut off the plastic covering directly over the copper pad at either end to make soldering easier.

5. For the first pixel set (the one with the wires attached), you will need to shave the plastic wire covering by cutting off a few layers. This allows the wires to fit in place. 

6. Line up the 6 pixel strips with the arrows pointing in the same direction.

7. Cut, and strip, 5 sets of three wires (red [+5V], black[GND] and white[Data]) to connect the six pixel strips with each other.  To ensure a proper connection, cut the red wires approximately 0.4 inches, the white wires approximately 0.5 inches and the black wires approximately 0.6 inches. 

8. Place the six pixel strips, with the arrows all pointing in the same direction, in their proper pocket location on the base layer 2 top (as shown). 

9. Now place the wires in between the pixel strips at the corners of the pocket, and make sure each wire is long enough to reach both of its copper pads. The red wires are closest to the center of the base, the black are closest to the edge and the white are in between.  If a wire is too short, cut a longer one. When all wires are of proper length, take them off of the layer. 

10. At the corners of the base layer 2 top pocket, place a bit of glue (super glue or epoxy, but not hot glue). 

11. Let the glue dry for approximately 5 minutes.

12. Set the wires, in their respective positions, on the glue. Make sure that the exposed tips are touching the circular copper pads on both ends as you place the wire down. You can push down on the wires with tweezers  or pliers to press it flat against the surface while making sure the two ends touch the copper pads. 

13. Wait until the glue fully dries and the wires are secured in place. Then, carefully solder the wires to the neopixel circular copper pads. It is very difficult to solder to these pads, so do not despair if you struggle. Keep trying different soldering methods until you find one that works. You can try soldering onto each pad first and then heating up the solder as you place the wire end into it. You can try having the wires to the side of the pad and apply solder between the pad and the wire. You can try using a larger soldering iron tip, which seemed to work well for me. Experiment also with lead free solder versus lead solder (lead free was easiest for me). Using flux can also help.

14. After you finish making these electrical connections, check their continuity across the different pads (making certain they are properly connected) using a multimeter. To do this, twist the dial to the icon pictured. Then take the red multimeter probe and place the tip on a soldered connection for either the red or black wire (the white wire does not have continuity). Then, take the black probe and place the tip on a soldered connection of the wire color previously chosen for a different pixel strip. If you hear a buzzing sound, then there is continuity between those wires. 

15. If there is not continuity across all pixel strips for both the red and black wires, then desolder the problematic connection and try again. 

16. When there is continuity, download strandtest from the following link:

and connect the set of strips to an Arduino to test the lights. Learn how to connect all of the electronics from the "Basic Connections" section, then read the "Best Practices" and "Powering NeoPixels" sections for more useful info. Once you have finished, you can download the software in the "Arduino Library Installation" section and learn about how the code works from the "Arduino Library Use" section. Then, you should be ready to set up and try the test.

17. It is possible that the lights will not work despite there being continuity. In this case, you must unplug the pixel strips from the Arduino and check that the connections are "solid". If they are, then apply heat to all the solder connections such that the solder melts and then solidifies again. You can repeat this process multiple times until the pixels work, testing them with the Arduino but making sure to unplug them any time you solder. 

18. If there remains a problem with the pixels after many re-solidifying attempts: do not give up--be patient, it will work eventually! Desolder the wires, go back to step 11 and try again. If all else fails, try using a different pixel strip.  

4.5 Assembling the Base: USB Connector for Battery

1. Solder long  red and black wires to the USB connector in the positions shown. 

2. Hot glue the soldered region for stability. Then, hot glue the wires to the appropriate channel  (alongside the proximity sensor wires) on base layer 4. Make sure to temporarily slot the leg into place and check for the best location along the channel to apply the glue (a location that allows the wires and connector to run through the leg).

4.6  Assembling the Base: Connecting Legs and Base Layers

1. Create a countersink hole on base layer 5 bottom such that the screw head sits flush with the layer. Use a 9/32" drill bit to make this countersink with a 0.17" depth.

2. Screw the three head cap screws through the bottom three  base layers using a 9/64" Allen key. Make sure that all wires contained within these layers stay inside their channels (you can use tape to temporarily hold them down) and come out of the back hole where the back leg belongs. 

3. With base layer 5 bottom facing up, slot the legs into their appropriate locations on the base. Pay attention to where the left and right legs should go in this upside down configuration. For the back leg, make sure all wires go in-between the two outer leg layers so that the leg can fit into the slot and the two end layer can snap on. 

4. Screw in the final layers, making sure that any additional wires run through their channels and into the  back leg. All wires should now lead to inside of the back leg.

4.7. Assembling the Base: Installing Arduino and Wiring

Note: The current base electronics only supports a subset of the total pogo pins, allowing for compatibility with shape sorter modules and a few other modules currently in the works. A more global electrical scheme (utilizing all pogo pins) is currently being produced and will be released as soon as possible.

1.  Snap the  pins that come with the ProtoShield such that each set of pins matches the number of holes in a set. There are four sets, as illustrated below.  

2. Insert the shorter ends of the pins into the corresponding ProtoShield holes shown, then solder the pins to the ProtoShield. It might be easiest to stabilize the pins by inserting the longer ends into a breadboard.

3. On the back of the Bluefruit LE UART Friend, stick a rubber bumper at the top. Then place the shorter ends of the pins through the bottom Bluefruit holes, as shown, and solder them to the front of the Bluefruit. Again, it is likely easiest to place the longer ends of the pins into a breadboard for stability while soldering. 

4. Take the longer ends of the Bluefruit pins out of the breadboard and place them into the individual ProtoShield holes on the upper left side of the board. The exact holes used are not important, as long as there is room for the connecting wires below the Bluefruit and the connection sites to the right of the Bluefruit (as shown).  

5. In order to connect the Bluefruit to the connection sites on the ProtoShield, we much first connect the Bluefruit to the wires directly below each pin. To do so, we manually bridge the Bluefruit pins sticking  out the back of ProtoShield to the corresponding wire below it using a glob of solder. This is done on the back of the ProtoShield  and results in a large solder joint that essentially makes each wire an extension of the Bluefruit pin.  These bridges are indicated in the schematic using pink lines.

6. The ProtoShield pins (previously soldered on) plug into the Arduino Uno.

7.  Follow the written and pictured electrical schematics. 

Connecting the Bluefruit:

·             MOD pin -> green wire to digital pin 12

·             CTS pin -> yellow wire to digital pin 11

·             TXO pin ->  blue wire to digital pin 10

·             RXI pin -> green wire to digital pin 9

·             VIN pin -> red wire to 5V

·             RTS pin -> yellow wire to digital pin 8

·             GND pin -> black wire to GND

·             DFU pin -> no wire there (N/A)

Connecting the Pogo Pins:

·             Yellow wire -> digital pin 5

·             Blue wire -> digital pin 4

·             White wire  -> digital pin 3

·             Green wire -> digital pin 2

·             Black wire -> GND

Connecting the Proximity Sensor:

·             White wire -> analog pin 0

·             Black wire -> GND

·             Red wire ->  5V

Connecting the Neopixel Strips:

·             White wire -> 470Ω resistor -> digital pin 7

·             Black wire -> GND

·             Red wire -> 5V

Connecting the Battery:

·             Black wire -> GND

·             Red wire -> 5V

Connecting the 1mF Capacitor:

·             Short Leg (negative) -> GND (top hole)

·             Long Leg (positive)  -> 5V (bottom hole)

8. To turn on the  base, simply plug in the battery and place inside the left leg.

5. Shape Sorter Module

5.0 Shape Sorter Module: Shape Blocks

1. Locate the middle layer of each block, which contains slots for D43-N52 magnets. Glue the magnets inside each slot with an orientation that positions the magnet shaft to be parallel with the reed switch shaft.

2. Glue all of the block layers together using wood glue. The orientations of the other layers do not matter as long as the magnet layer is in the middle.

5.1 Shape Sorter Module: Reed Switches

1. Straighten the legs of the reed switches with pliers.

2. Using a reasonably long amount of wire, strip both ends of a black wire and a different color wire. The color that you choose will now be the defining color for that shape. You must make sure to remain consistent in using that color to help avoid confusion when working with the electronics. 

3. If a shape has more than one reed switch, then use the same color for both wires and the same black wire as for both as well . Cut the black and colored wires for the second reed switch much shorter than the first switch. Also expose a bit of wire with a notch for the two longer ones a couple of inches away from one end.

4. Twist one end of the small colored wire around the exposed notch of the longer colored wire and solder it. Do the same for black. Then, solder the black wire to one leg and the colored wire to the other leg for both reed switches. Make sure, for the longer wires, that the side with the notch is the same side that gets soldered to the reed switch.

5. After all the soldering is finished, it is time to test the reed switches. To do this, you will need a 5 volt power source (you can use the 5 volt pin on an Arduino), a 10KΩ resistor a multimeter, two alligator clips and a breadboard.

6. Run a wire (shown as white) from the 5V pin on the Arduino to the breadboard. Now place one leg of the 10KΩ resistor into the same row as the wire  and the other leg into a second row. 

7. Take a wire (shown as green) and plug one end into the second resistor row. Attach an alligator clip (shown as green) to the other end of the wire.

8.  Hook up the other end of the alligator clip to the multimeter's red terminal. Now place the colored reed switch wire (shown as yellow)  into the second row and the black reed switch wire into a third row.

9.  Take two wires and place them into the third row as well. For the first wire (shown as red), plug in the end to the GND pin. For the second wire (shown as blue), attach a second alligator clip (shown as white). The other end of that alligator clip will attach to the multimeter's black terminal. Note: do not be alarmed by the lack of non-triangle shapes.

10. Place the reed switches into their proper slots on the third to last layer of the module. Make sure the flat side of the reed switch faces the shape and the bracket side faces away from the shape. Do not glue them yet!

11. Plug in the Arduino and turn the multimeter to the DC Voltage setting shown. The multimeter should read a value of close to 5V. 

12. Place the shaped block into the corresponding  hole in the third to last layer. The multimeter should now read 0V. 

13. If the multimeter does not read 0V after you place the block in and through the hole, check your wiring to make sure everything is correctly connected. If the wiring doesn't seem problematic, then desolder the reed switch connections and start over.

14. Hot glue them to their final positions, as pictured, in the third to last layer of the module. 

15. At the wires' final destination, where all wires go through a single slot, create a soldered connection between all of the black wires to form a single black wire. Make sure to only perform this step for the black wires, as only the ground pins can be connected. 

5.2 Shape Sorter Module: Copper Pads

1. Locate the copper pad pockets on the bottom of layer 4.

2. Cut copper pieces to fit the shape of the pocket. I used wire cutters and only took off a bit of copper at a time, as it can be pretty difficult to cut through a larger chunk. 

3. Place layer 3 underneath layer 4 with the reed switches facing down (the top of layer 4 and the bottom of layer 3 should be in contact, and the bottom of layer 4 should be facing up). Pull the reed switch wires through the hole as shown.

 4. Look at the color scheme for the pogo pins' wires and make sure to note which copper pad will be in contact with which pogo pin when the module is locked into the base. Notice, in the picture, how the wire color for the copper pads on the left matches the wire color for the pogo pins on the right.

5. For each copper pad, solder the wire with the same color as the corresponding pogo pin.

6. Place hot glue in the copper pad pocket and lay the copper piece inside, placing the face with the soldered wire into the glue.

7.  Make sure that the copper pad is flush with the face of the wood. If the pad is too low, you may have a bad connection with the pogo pins. If the pad is too high, you may have trouble turning the module inside the base when locking the module into place. If the pad is not flush, you might try manually drilling pockets slightly and trying again.

5.3 Shape Sorter Module: Silicone Mat

1. Locate module layer 5 and place the entire bottom of the layer on top of the silicone mat.

2. Trace on the mat in pencil the perimeter of the layer, the interior of the shapes and the interior of the three small holes. Then remove the layer from the mat and cut out the perimeter trace and the three small circles traced.

3. Place layer 5 back onto this cutout and make sure the perimeter of the silicone mat is flush with the perimeter of the layer. Trim away any part of the mat that extends beyond the layer. Also make sure the shape traces and the holes align with the layer.

4. Within each shape on the mat, trace the lines indicated.

5. Using box cutters, cut along the traced lines. Make sure to begin your cut in the center and cut outwards toward the edge of the shape. Do not cut all the way to the edge, as cutting too much will hurt stability. You can always cut further outwards later, so be conservative.

6. Test the shapes by holding the silicone mat to the layer (with tape or clamps) and place each shape through its corresponding hole. Make sure it is not too difficult to push the shapes through. If it is, then you must cut the lines a bit longer. If the silicone mat does not support the shape at all though (meaning the shape immediately falls through to the ground without pushing), then you have cut too much and need to start again. 

7. Using epoxy, glue the silicone mat to the bottom of the lowest layer. Make sure that the shapes and holes line up perfectly with the layer.

5.4 Shape Sorter Module: Code