Archives for the ‘robots’ Category

Several months ago I backed a Kickstarter campaign for Primo, a simple Arduino-based teaching tool for introducing programming logic to kids age 4-7. My oldest daughter was just 3, but my pledge got me plans and code only, and I figured the way projects go around here it just might be done by the time she’s 4. The Primo experience involves a cute (albeit simple) little robot named “Cubetto”, and right off the bat I figured I would modify some things to make him more… well, awesome. Little did I know of the rabbit hole I was about to tumble into.

As usual I started off with some sketches, thinking about what the robot could do aside from the Primo stuff. A suite of sensors would enable all sorts of behaviors, from simple (light seeking, line following) to more complex (play catch, drawbot). I would definitely enable a simple “radio control” mode, but I’m much more interested in autonomous (or semi-autonomous) behaviors. Isabell is obsessed with the Curiosity Mars rover, so it should definitely have some of that DNA. I also believe the rover should have some personality, so I’m looking into some simple dot-matrix display “eyes” that can communicate artificial emotion, and a simple speaker to give it a voice.

I’m focusing on a tracked design for now, so it can navigate a moderately challenging indoor environment. I love the idea of solar charging, or at least autonomously finding its own charging station. Of course it needs a camera so I’m drawn to the Raspberry Pi as a brain, which might also make remote control from an iPad relatively easy. I imagine the Rasp Pi might talk to one or more Arduinos, which can handle low-level functions like battery monitoring or distance sensors. I already have some small full-rotation servos, which will make the drivetrain simpler (vs. motor controllers, gearboxes, etc.).

My main guiding principle here will be flexibility/modularity, so features can be added or changed as we try things, get bored with them, imagine new uses, learn stuff, etc. Next step, start building the platform.

I found it surprisingly difficult to find just the right small-scale tank treads I wanted for Isabell’s robot, so naturally I looked into brewing-my-own. I first went down the RTV silicone path, but soon reeled it back to reality… I want to get this off the ground soon, then maybe look into full custom treads for the next generation. So the following is an experiment, sort of a feasibility test for 3D-printed tank treads.

This is really my first pass at a “tooth” design in CAD, based on nothing really. The cog teeth are simply arc sections meant to make the lead-in and lead-out smooth, and the tread profile is a rough approximation of the cog teeth.

This is the result, using an FDM tread on a laser-cut acrylic wheel assembly. I actually made three different sized sets of wheels and picked the best fit, then measured and cut the rectangular parts to provide a decent pre-load on the tread. The whole thing is held together precariously with a couple of dowel pins (and comes apart quite easily).

I had some concerns and they were mostly justified… The tread slips off the wheels easily after playing with the assembly for a couple of minutes, but that could be fixed with some retaining features. Also I suspected the tread would take a ‘set’ after sitting still for a couple of days– a function of the creep properties of ABS. Sure enough, a few days later I took the tread off and it had an elliptical shape, which I could feel in the form of on-again-off-again resistance when rolling the assembly along. I’ll bet a thinner-walled tread would be less prone to taking a set but still be strong enough to survive all the deformation. Ultimately I think the idea is feasible, but an RTV-cast silicone part would be my first choice for many reasons.

Once I decided a custom tank tread wasn’t going to work for me, I went back to searching the internet for an off-the-shelf solution. Someone recommended looking at Lego Technic parts, and sure enough I found this on Ebay (EDIT: a helpful commenter on hackaday pointed out this much cheaper option). I don’t know what set this came from, but they are just about the right size (a little on the small side, maybe) and the price was right. Once they arrived I got them into CAD and quickly pulled together a basic design.

Aside from the treads this design is driven entirely by a few key components. First are two small SM-S4303R servos, which offer continuous rotation without modification. After much debate I decided on this lithium ion battery pack from Adafruit for two reasons: it has 6600mAh capacity which should provide hours of use between charging, and it is known to work well with this multi-source charger, also from Adafruit. I have plans to include solar charging in the future, which will impose some challenges, but I’ll get into that later.

The rear tank tread wheel is mounted to a sliding part that allows the tread to be tensioned just right. The front wheels are attached directly to the servos, via a modified servo horn that I turned down to size on the lathe and glued into the wheel. Shown below (from left to right) is the original servo horn, the same part after turning its diameter down, and the wheel it is about to be glued into.

Once glued together, the screw that holds the wheel onto the servo is trapped in the assembly:

The chassis is 3D-printed, and I used small brass threaded inserts everywhere, considering how much I expect to be disassembling/reconfiguring things…

…which made assembly nice and smooth.

The top part is a slab of polycarbonate, meant to be easily removed and re-drilled, etc. as things change and evolve. Here it is, ready for electronics!

With Adafruit’s lithium ion battery pack and USB/DC/Solar charger our power strategy is off to a good start. I chose those in part because I could easily add a solar panel later, but assuming the robot is running continuously, that would result in a possible output voltage range from 2.5V (the shutdown voltage of the LiIon battery pack) to 6V (the full-sun output of the solar panel). The Raspberry Pi (and ATMEGAs, which I’ll probably use as ‘standalone’ Arduinos) want a 5V supply, requiring either a buck or boost depending on the output voltage from the charger. I couldn’t find any turnkey solutions, but I did find this buck-boost DC-DC converter IC. The LTC3112 from Linear takes 2.7 – 15V in and provides 2.5 – 14V out, configurable with two resistors. Maximum current depends on Vout, at 3V in and 5V out I should get at least 1A. The documentation included some pretty thorough design guidelines, including a complete demo board schematic and layout, so I set about designing one of my own.

The design is pretty similar to the demo board. I removed a few things I didn’t need and added a bunch of output pads, and a second set of inputs so additional boards can be daisy chained. I’m told the component layout of boards like these is extremely sensitive, so I stayed as true to the demo board’s layout as possible.

I’ve been wanting to try outsourcing my PCB fabrication, and I think this finicky design was a good one to start with. The best value for this one seemed to be OSH-Park, and the process was really easy and smooth. They even take native Eagle files, so there was no messing with Gerbers, etc., and the instant preview made it easy to catch errors. Two weeks later I got three of these beauties in the mail. Ten bucks, delivered.

Typically the next step for me would be dabbing tiny dots of solder paste onto the pads and mashing the components into them, but these boards look so nice and professional that I knew it was time to try a solder stencil. I recently gained access to a laser cutter, so I ordered some .004″ thick Mylar from McMaster and conducted a quick test.

I first exported the “Cream” and “Dimension” layers from Eagle as a 1200 dpi .png image, then brought that into Photoshop. I then selected all the pads (Select -> Color Range on black) and shrunk them down one pixel layer at a time using Select -> Modify -> Contract, Saving As every time until I had seven different versions, each one eroding the pads by about .0008″ all around. I cut these on the laser, using Raster settings of 30% power and 40% speed. Turns out the best one for this layout (with the fine pitch of that IC) was the “minus 4 pixels” version. By the way the fogginess of the Mylar there is the result of sanding off some very small ridges that had formed around all of the openings.

Next I made a couple of fresh ones and cut a piece of 1/16″ acrylic to serve as a fixture to hold the board in alignment with the stencil.

Here we go. First try, not bad! I made a little mess in the mounting holes, but generally the transfer was nice and clean.

I tweezered the components onto the board (my cheat sheet can be seen in the background) and fired up the reflow toaster oven.

About 6 minutes later…

The inductor slid around a bit as the solder melted, but it’s still on its pads and not touching anything else. The IC looks perfect. You can see where R1 and R2 can be changed with thru-hole resistors to provide any output between 2.5 and 14V. The IOUT pad provides an analog voltage proportional to the current draw of the load, which I may end up using to monitor which systems are consuming the most power.

I works! 9V on the left, 3V on the right, identical output (and pretty darn close to 5V, too). I realized I had to hook up an LED to get a good output, probably because the multimeter was not drawing enough current and the IC went into a shutdown mode.