Saturday 10 January 2015

Building the Primo

The Primo is an educational toy designed to teach programming concepts to children without the need for them to be literate.  The Primo was "Kickstarted" and commercial product is being delivered early 2015.  In addition to selling it as a product, the designers have open-sourced the design and have even put together a how-to guide.  See primo.io

I thought this would be a neat project, combining woodworking and electronics.  I am fairly well-versed in the former but only have a shallow knowledge of the latter, so I saw this as an opportunity to learn lots about electronics.  The Primo uses two Arduino, wireless communication, and gearmotors.

I:  The wood parts.
The instructions call for Primo to be made from 1mm and 4mm plywood.  I have used birch ply in the past to build projects and loved its dimensional stability and resistance to warping.  I had hopes of using it on this project but could find none affordably here in New Zealand.  I settled on 4mm Fijian Kauri ply purchased from a local builder's yard.  A full sheet was about $NZ50.  I could find no 1mm ply, so on the suggestion of the designers I used 1mm card stock purchased at a local stationery store.  This is basically used as a shim layer so the overall strength isn't greatly important.  I had the parts cut out at our local fablab (Fab Lab xChc).  The fablab had just opened and were still coming to terms with the operation of their 150W ThunderLaser so the cutting was not ideal, but successful (and cheap!).  We had issues with the ply not sitting flat on the bed, so the areas that warped upwards were outside of the focus of the laser.  Also had significant charring, and the kerf ended up being about .43mm (0.017") which to me is quite wide.  Because the layout of the parts is "nested", the edge of one part ends up being the edge of another, so we couldn't tweak the laser to cut farther from the centreline.  This isn't a huge problem, but on corners of the control box and of the Cubetto remote, the meshing sides don't sit entirely flush with each other.  More of an aesthetic issue in that case, but the charring has required significant hand sanding as well.

Laser cutting the 4mm ply in progress










Cutting the 1mm card stock.  We had to put slots and profile in different layers so all the slots were cut first.  As soon as profile was cut, the air blow on the nozzle would occasionally blow the piece clear and if the slots hadn't been cut yet, the part would be a loss.

Selected parts after laser cutting.











Control Box:

The first step is to glue control box parts 1+2 and 3+4 together.  To keep them aligned as I glued them, I drilled the screw holes in upper right and lower left corners out to accept a couple of drill bits (I used a #29 and #30).  We were out of waxed paper so I laid plastic cling wrap on the workbench and also between the two sets to keep squeezeout from sticking.  I used aliphatic resin woodworking glue.  I had issues with the warped layers not pulling together well enough.  Ideally a vacuum clamping setup or luthier's go-bar deck could be used for this, but I had neither so used luthier's cam clamps and Vise-Grip quick clamps on two edges, and then piled bricks on top.  After an hour or so, I unclamped everything, cleaned up excess glue, then re-clamped.

Aliphatic resin glue (Tite-bond to most US woodworkers) applied to top of part 2
The stack of top parts being glued. Note drill bits in corners for alignment. From the workbench upwards, the layers are
-clingwrap
-part 4 / glue / part 3
-clingwrap
-part 2 / glue / part 1
-bricks




Instruction blocks

I glued the paper layer to wooden layer with four small dots of CA glue.  Because the laser cut more off the edge of the wood than it did off the paper, the paper piece ended up being slightly larger.  I aligned the curved bit and trimmed excess off flat edge with sharp chisel.  If you try to sand it, the paper edge will "fluff" up.  Use a vise - that scar on my index finger is from the last time I tried to hand-hold something while using a chisel.


Copper tape.  Instructions call for 5mm, I had 6mm.  I found I needed to cut it to 4.5mm to thread it through the slots in the instruction blocks.  Also, instructions call for 40mm lengths, I found 30mm lengths were better.  Taping it to cutting mat made narrowing it easier, and then it was easy to count three squares to cut it to length.

Magnets purchased from Aliexpress.  4mm dia x 3mm thick.








After dropping magnets in the holes in instruction blocks, I placed them on a metal rule to ensure magnets were fully seated, then applied a small drop of CA glue.  It is essential that you retain the same magnet polarity for each instruction block.




I bent the legs of the resistor with tweezers so it would sit flush.

Resistor soldered to instruction block base.  I trimmed the ends with a very small pair of side cutters.  If you don't have a pair of these, you may wish to trim the resistors before soldering.  Another option would be to drill a tiny hole through the copper and bend the legs to drop in there, but I don't currently have a drill press, and didn't fancy trying my luck with a hand drill.  On the right, I'm making sure the intermediate layer clears all the solder, on a couple I had to file off excess solder for it to fit.  Check them as you go.

Scratchy break!



















Back to the Control Box

Next, the magnets were dropped in the holes on the wood side (double check polarity! Last chance...) and secured with CA glue.  Then strips of tape were cut for the contacts.  Fortunately the slots in the top were wide enough that I did not need to trim the tape to width as I did on the blocks. I found it helpful to line both sides with a pencil to help lay the tape down straight.  Test fit the LEDs to the top board (I had to open up the holes with 5mm drill bit).  Then I glued the 1+2 and 3+4 pieces to each other.

Gluing sides to back.  I had to screw back to workbench as it was quite warped.  I used CA glue with accelerator.  And a glass of whiskey. Arduino Mega will go in upper left corner.
Top on, looking good.  Top has about five coats of Danish Oil.
Back with rubber feet.  The outline in lower left was supposed to be burned into the top of the back as registration for lining up something.  Not sure what it was supposed to be for.  It accidentally got put on the cut layer during laser cutting.



Beginning to wire up underside of top.










 Ribbon cable used to wire LEDs.

Soldering ribbon cable was a bit fussy but not as bad as I expected.  These plug in ports 30-45 of the Arduino.









Second ribbon cable soldered, this one to two 8-pin single row headers.  These go to Anaolg 0-15 inputs of the Arduino.  You can see the Mega mounted in the bottom of the case.  Still waiting for the wireless card to arrive.
Mostly completed main unit.  Instead of trying to paint the outline around the subroutine steps at the bottom, I had our local Fablab take the rectangle shape out of the laser cutting file and cut it out of green vinyl.  far easier than trying to mask and paint.  Now to start on the Cubetto!







Cubetto:

This is where it starts to get a bit curly as there simply isn't enough information in the instructions to build this.  I've spent quite a bit of time going over data sheets for the optosensors and the motor driver to try to trace what goes to what.  In addition, the instructions don't tell you what Arduino pins you need to hook to, I had to reverse engineer that from the software.

The "Elecrow" protoboard I bought off Aliexpress.  The instructions specify one from the official Arduino store but it was out of stock for months.  Here I've wired up all the outputs from the motor driver chip.  The analog inputs from the wheel optosensors attach to A1 and A4 under the board as I ran out of room on the top.  The pins at the top and bottom of the prototyping area go to the motors and optosensors.  Motor driver chip and Xbee unit on foam at left.




My notes.  Be aware that my understanding of a lot of this is fairly vague; I'm learning a lot as I go!









This document will be updated as I construct the Primo.  Please contact me with questions or if you wish to share your experiences - Thaddeus Swarfburn


Parts sources:

For economic reasons ;) I've used some different sources for my parts than those suggested by the designers.  The following is a table of where I sourced my parts:

4mm Wood:  Fijian Kauri ply, local builder's yard (ITM) about $50 (full sheet)
Copper tape:  Had on hand from aborted slot-car track building project.  VentureTape MasterFoil Plus.  Try stained-glass supply houses or workshops.
Paint: I'm using mostly "test pots" of Resene (NZ brand), about $5 each.
  • Green - Kermit
  • Yellow - Turbo
  • Blue - Resolution
  • Red - Red Enz brand fire engine red
Cubetto:

Arduino UNO copy: US$3.56 - Aliexpress
Elecrow Proto Wireless Shield - US$9.00 - Aliexpress
XBee Series 1: NZ$34 - robotbits.co.nz
SolarBotics Wheels x 2 : NZ$5.75 ea - robokits.co.nz
SolarBotics Gear Motors GM3 x 2 : NZ$9.99 ea - robokits.co.nz
2 Ball Casters : NZ$2.86ea - robokits.co.nz
SN754410 Motor Driver : US$5.99/5 -  Aliexpress
CNY70 x 2 : US$3.76/10 - Aliexpress
Battery Holder : US$3.25 - Aliexpress (got one with Arduino plug already on it)

Interface Board:

Arduino Mega 2560 copy: US$8.73 - Aliexpress
Elecrow Proto Wireless Shield - US$9.00 - Aliexpress
XBee Series 1: NZ$34 - robotbits.co.nz
16 5mm Red LED : US$3.59/100 - Aliexpress
16 220 Ω Resistors : US$2.96/100 - Aliexpress
16 10K Ω Resistors : US$2.96/100 - Aliexpress
1 Push Button : Had on hand from Arduino experimenter's pack from Aliexpress. 12mm square momentary.
50 Male Headers : US$1.69/10 - Aliexpress
16 Double male headers : US$1.80/10 - Aliexpress
50 female headers : US$3.20/20 - Aliexpress
16 Magnets ø 4 h 3 : US$5.58/50 - Aliexpress

Instruction Blocks:

4 x 4.7K Ω Resistor : NZ$0.55/8 - Jaycar.co.nz
4 x 100K Ω Resistor : NZ$0.55/8 - Jaycar.co.nz
4 x 220 Ω Resistor : NZ$0.55/8 - Jaycar.co.nz
4 x 10K Ω Resistor : NZ$0.55/8 - Jaycar.co.nz
16 Magnets ø 4 h 3 : US$5.58/50 - Aliexpress