Tiny Drawing Robot Updates, Incremental Progress, and More!

This slideshow requires JavaScript.


It’s been about a week since my last blog post and I’ve really been enjoying working on all aspects of the Tiny CNC.  With the year winding to a close, I wanted to squeeze in one last update.

The really cool thing about working on a robotics project from the ground up is that you can work totally different aspects of the project, whatever happens to interest you at that moment.  Sometimes 3D design appeals to me, other times working on Arduino or Processing code.  And then sometimes working on making the project really real by contacting suppliers to source parts for kits.  Here’s what’s going on now:

  • Adventures with Online Ordering.  I pulled the trigger and bought 100 micro servo motors.  I’m hoping that once I get this tiny drawing robot’s designs a little more finalized some people will be interested in having me create kits for them.  I simply cannot tell you how much fun it was to open up a box fresh from China stuffed with 100 motors.1 I spent several days shopping around on Alibaba and trying to reach out directly to motor manufacturers and in the end I finally placed an order with a “distributor/middleman” because it was a decent deal and he could ship immediately.  I know I overpaid a little, but this is kind of a test run anyhow.  With 100 micro servo motors, and each robot taking 3 motors, I’ll be able to create at most about 30 bare-bones kits for sale.
  • Micro Servo Motors.  These are the really common, and reasonably cheap, TowerPro SG90 motors that you see for sale everywhere.  People who have printed the Tiny CNC on Thingiverse to date have had to try to get their more standard micro servos to work in my designs that were made for the more badass Batan 2122 analog feedback micro servos that I received courtesy of Adafruit and Make.2
  • Arduino Code.  With the gentle prodding of TechNinja42, I created a Github account where I’ve uploaded some of the Arduino code I’ve been experimenting with so far.  While I have uploaded my prior sketches to Thingiverse, Github does seem like a better place to share these files which are changing quickly.  If you grab this code and load it up, you’ll be able to control your Tiny CNC drawing robot just by using the Arduino’s serial monitor and the WASD for directional control and OL to raise and lower the Z axis.
  • Teaching Programming to a 6 Year Old.  Christmas day was the first time I wrote some Arduino code that actually made my robot do something interesting.  Long story short, I actually got my daughter on the first step to programming.  I had her draw a simple shape on some graph paper, we took down the coordinates, plugged the coordinates into the Arduino code, and then the little robot got to work.  We had a great time creating the program and an even better time watching the robot repeat her drawing, pause for five seconds, and do it again.  The reason for the five-second pause was so that we could slip a sheet of paper into the robot, have it draw something, then pull the paper out.  I can’t wait to get this robot drawing more complex pictures.  🙂
  • Tiny 3-Axis CNC Redesign, Again.  I’ve already started revising my designs to work with the Tower Pro SG90 motor form factors, so it will be easier for everyone to print and build their own drawing robots.  I’ve added lots of improvements based on feedback from those who have printed their own, and I’m very nearly done with this latest version.  So far it is shorter, probably uses less plastic, should be offer more stable and accurate drawing, and uses one more plastic piece than prior versions – all while slightly increasing the drawing area.  Since I offered a sneak peak at this design in progress in an earlier post, I’ll leave off with a glimpse of this design-in-progress.
Tiny 3-Axis CNC version 0.34

Tiny 3-Axis CNC version 0.34

  1. And one Arduino Uno of dubious authenticity []
  2. I call these motors badass because they’ve got metal gears inside rather than plastic, analog feedback so they can sense and report their position back to the microcontroller, and cost $15 each []

Designing with Injection Molding in Mind

Injection molded parts

Injection molded parts 

I had always assumed injection molding was a pretty straightforward process.1 You send your digital files to the injection molder, you pay a bunch of money, and plastic parts show up.  While looking into the process of injection molding, I discovered there are all kinds of design requirements.

  • Uniform Thickness.  Apparently having a non-uniform thickness to plastic injection molded parts causes lots of problem.  The plastic can flow into the mold unevenly and cause bubbles or voids.  The thinner parts would cool quicker and the thicker parts would stay warm longer, causing the part to warp as it cools.
  • Draft.  Apparently all parts that are injection molded require some amount of “draft.”  This means that a part should be tapered outward slightly – so that it can slide easier out of the mold and incur less friction as the mold parts slide together and apart.  The various resources I’ve found suggest a minimum draft angle of 0.5 degrees to as much as 5 degrees for parts with lots of surface texture elements.
  • Part Radiusing.  Since the plastic shot into a mold is basically a viscous liquid, it flows better around curved corners and has a difficult time flowing around sharp angles.  The guides online suggest that internal curves should have an internal radius of 0.5 times the wall thickness and an external radius of 1.5 times the wall thickness.  Plus, proper radiusing means consistent wall thickness, even around part corners.
  • Coring Out.  The process of removing excess material, leaving the bare minimum uniform wall thickness in walls and ribs for strength.  This allows the finished part to be of uniform thickness to prevent uneven shrinking and internal part stress.
  • Radiused Corners.  As a part’s geometry is carved by a CNC mill out of the metal mold the CNC can only carve with a minimum diameter equal to the CNC’s bit.  This means corners won’t ever be true corners, but rather small curved internal corners.

Interestingly, these design requirements also explain why so many plastic parts are basically shells.  I had always assumed this was done to reduce plastic and cost.

  1. Photo courtesy of Creative Tools []

Competing Design Ideals in a Drawing Robot

New possible design direction for the Tiny 3-Axis CNC

New possible design direction for the Tiny 3-Axis CNC

I find myself at a design crossroads, as it were, with the Tiny 3-Axis CNC.  There are certain improvements that I think are necessary to make the overall robot more functional and reliable.  However, to adjust these designs to accomplish these improvements would require a compromise of some part of the design ideals I’ve been employing so far.

One unintended consequence of having a low number of interlocking parts is that when I make a design change to one part of the robot, the design implications ripple throughout the rest of the robot.  Thankfully, this is made slightly easier by using OpenSCAD which automatically adjusts parts depending upon changes to variables.  These changes also have the side effect of making each version of the robot unique enough that almost no parts are compatible with other versions.  As a result, I’ve got a pile of parts from intermediate non-functional versions which don’t really work with any robot version.

In order to overcome some problems with the last design1 , I basically now need to choose what I value most:

  • Elegance.  Design elegance is a very murky and personal topic.  I think of design elegance as incorporating the fewest possible number of parts, simplicity, and (when possible) symmetry or the reuse of parts.  Even “simplicity” is a convoluted and subjective ideal.  I think of this as the least amount of plastic and least amount of complex features.
  • Low Part Count.  I love the idea of a super low part count.  If I were to print parts with support structures or had a very complex design for injection molding, I could probably reduce the part count to the absolute bare minimum possible number of parts – 7.2 However, if I try to make the parts easily printable without overhangs or support structures I have to increase the number of parts.
  • Easy to Print.  Even if a 3D printer is capable of printing with mild overhangs and support structures, a design is more easily printed if it doesn’t include such features.  It is very important to me that the parts are easy for people to replicate on their own.  For me, part of being “easy” to print is having as little plastic as is required.  The most recent stable version of this design takes about 2 hours of printing on my Replicator.  I think I can do better.
  • Easy to Assemble.  Generally, I’ve found the more complex and numerous the parts, the more difficult and less intuitive a thing is to assemble.  I would really like this robot to be able to be assembled by my 6 year old with minimal adult intervention.  She’s pretty good at building Lego designs from the graphical instructions and I’d like to have something similar here.  Fortunately, OpenSCAD make it really easy to create Ikea/Lego style graphical assembly instructions.

After discussing these issues with some friends, I think I’m going to sacrifice the super low part count as I push the design forward.  I don’t anticipate this will cause the design to have a higher plastic content – just a few more pieces.  Overall, if I had to sacrifice one particular design ideal in order to adhere more closely to the others, I would have to choose the super low part count.  After all, I could always publish an additional version that combines two or more parts into a version that could be printed with support structures.  🙂

  1. Principally the XYZ carriage tipping out of the X rack []
  2. I think this would require: the X rack/base, the X pinion, X motor mount, Y pinion, Y rack, Z pinion, and Z rack. []

Nine Drawing Robots On the Loose!

It’s incredibly exciting to me to see people printing my designs and posting pictures.  It’s even more exciting to see more drawing robots appear in the world.  Since I released my first designs for this robot on 11/18/2013 at least eight people besides me now have really tiny drawing robots of their very own.  Since the design is moving fast and many of the parts aren’t compatible with other versions, I’ve particularly appreciated the feedback of those people who have made their own since their observations, suggestions, and comments have helped me improve the design in many different ways.

Here are six copies of version 0.18, the XY plotter on Thingiverse (plus one I sent to Stephen Laporte):

This slideshow requires JavaScript.

Dan Sinker even uploaded a video of his little robot at work.

This slideshow requires JavaScript.

If you’ve made one, please email me and click “Made One” over on Thingiverse.

Tiny 3-Axis CNC Drawing Robot – Software Update and Design version 0.29 postmortem

Above is a very short video showing the Tiny 3-Axis CNC, powered by an Adafruit Trinket, using all three axes.

In order to push the Tiny CNC robot design further, I had to actually wire it up and test it.  Only by actually trying to put it through its paces am I able to detect design defects for correction/improvement in the next version.  What follows are basically my notes working with the Trinket and thoughts on the design of the robot thus far.  It helps me to document such notes for future reference – so you may or may not find this stuff interesting.  🙂

  1. Adafruit Trinket
    1. While I’ve wired the Tiny CNC to an Arduino Uno and a Mintduino before, I really wanted to get it to work with my Adafruit Trinket (courtesy of Adafruit and Hackaday!).  I figured this was as goo a time as any, so I soldered the headers onto the Trinket and got started on the process of augmenting my Arduino IDE to work with it.
    2. The Adafruit Learning System website has an entire section introducing the Trinket. The process is well documented, but still a bit fiddly.  It’s not nearly as “plug and play” as working with an Arduino Uno.  However, this is a perfectly acceptable tradeoff for the size and price of the device.  If you want a “quick start” guide to getting the Trinket to work with your Windows system, this a rough outline of my process:
      1. Download the Trinket drivers.  The notes for different operating systems is helpful here.
      2. Add ATtiny85 support to your Arduino IDE.  This is for the “slow” way of augmenting your existing Arduino IDE.  I prefer doing this to having multiple versions of the Arduino IDE on my system.
      3. Rename and replace the avrdude.conf file in the “hardware\tools\avr\etc” folder.
      4. Rename and replace the avr-Id.exe file in the “hardware\tools\avr\bin” folder.
    3. In an ideal world, I’ll be able to use the Trinket to both control three servo motors and speak to the fake serial port so it I can send instructions from the computer.  However, due to the limitations1 of the Trinket, the way it handles servos and serial communications are a bit hacky.
      1. Trinket servo motor control.  Servo motor control apparently requires the microcontroller utilize an internal timer/clock.  However, since the Trinket sacrifices this for size/space reasons, a work around using an internal clock/timer has to be implemented.  The result is that you have to use a different servo motor controller library that implements the software clock/timer.  The trick is that the timer has to be refreshed every 20 ms or so to operate the servo.  Using a simplified version of the Adafruit Trinket servo motor control sketch, I was able to get the Trinket to move all three axes.
      2. Trinket serial port communication.  Again, the Trinket sacrifices serial port communications in favor of size/space requirements.2 Fortunately, there appears to be a work-around for this limitation using a “fake USB serial” connection.  I haven’t finished this process and don’t have much to say about it at the moment.
  2. Tiny CNC Arduino (not Trinket) Sketch
    1. Using Oliv4945’s Arduino Gcode interpreter for Mini-CNC as a starting point, I wrote a sketch for making the Tiny CNC respond over the USB serial connection to WSAD (forward, back, left, right) and OL (up, down) commands.  The good thing about this sketch is that you can give the ‘bot a series of commands, hit Enter, and have it carry the instructions out.
  3. Tiny CNC Trinket Sketch
    1. This sketch is a simplified version of the Adafruit Trinket servo control sketch.  The XY servos move over about 30-40 degrees while the Z axis pumps up and down.  This is what you see happening in the video above.
  4. MORE Tiny CNC Design Thoughts
    1. Overall, I’m very happy with version 0.29.  The bottom line is that it works.  As Michael Curry recently pointed out, “at this point you have something that works, so the rest is just corrections.”  If you build this version on your own, you’ll get a little robot that is a bit finicky – but will actually be a no foolin’ tiny 3-axis CNC.  It won’t be super precise or able to handle a router or mill attachment, but it also won’t cost $400 for a kit.  🙂
    2. Here’s What Worked
      1. Z axis.  My first attempt at printing a Z axis works.  The Z rack isn’t much more than a thin plank of plastic with a rack of teeth and some holes to help mount a pen or whatever to it – but, again, it works.
      2. Y rack and Y stage/motor mount.  The parts in this little robot are designed to fit/slot/snap together and lock themselves and each other into place.  I’m really really happy with how this designed worked out.  I basically entirely changed the entire method of securing the Y rack from version 0.18 to version 0.29.  In version 0.18 the Y rack slid along each side of the X motor mount.  In this version, it rides between the X and Y mounts, held in place by the Y pinion (gear), riding over the Y stage motor mount, and constrained by the X and Y motor mounts.  While not actually simple to accomplish, I feel like this was an elegant solution.  While I have some improvements planned for the next version, I don’t anticipate this changing at all.
      3. Rubber band gaskets.  The problem with using printed pinions (gears) instead of the servo horns that come with the servos is that they don’t have the itty itty splines to mesh closely with the grooves on the servo motor gear.  As a result, no matter how hard you tighten down the servo motor set screw, the gear can twist away.  My method of dealing with this was to cut a small piece out of wide rubber band to use as a “gasket” between the set screw and the gear.  As you tighten down the set screw, it puts pressure on the rubber band and gear.  When the gear moves, the rubber band gasket prevents the set screw from rotating/sliding and loosening with use.
      4. Zip tie.  The zip tie on the Z motor seems to work very well.  I used a similar system for holding the servo in my PlotterBot pen holder.  The motor is held in place securely without much room for wiggling.  Although it is definitely possible to create a printable Z motor holder that doesn’t require any zip tie, the version I designed doesn’t require any overhangs.  I’m trying to avoid overhangs and support requirements in parts (which rules out all kinds of nifty groove/slide systems) so make everything easier to print and possibly easier for injection molding.
      5. Twist tie.  While not part of the directions or other documentation so far, I found a twist tie very helpful in controlling the sevo motor wires by bundling them together.
      6. Thinning and hollowing the XY pinions.  Since the most recent published version I made these big pinions slightly thinner and hollowed them out a little.  This theoretically reduces plastic a little.  Indeed, the 3-axis version of the robot actually uses less plastic than the 2-axis version I had uploaded a few weeks earlier.
    3. Here’s What Didn’t Work/Could Be Improved
      1. Rubber band gaskets.  These gaskets provide a drastic improvement for the gear’s ability to stay properly tightened on the servo shafts.  However, they’re not ideal since the rubber band gaskets just serve to create a little extra friction/traction between the set screw and the pinion (gear).  Now I’m trying something new that seems to work even better.  My daughter has these adhesive foam stickers in the shape of letters and animals.  For shapes with cutouts (like the letter “O”) the inside of the cutout is useless to her and is either found floating around the bottom of the bag or still slightly attached.3 I’ve place one of these between each of the set screws and pinions (gears).  The benefit of these is that they actually adhere to the surface of the pinion and actively resist being turned against the pinion. Another benefit of these is that they are thicker than a rubber band, so the set screw has to sink into them – creating more surface area contact between the “gasket” and the set screw.
      2. Y rack/Z motor mount.  I found that the zip tie for the Z mount interferes slightly with the Y rack slide.  I’ll need to raise the Z motor mount slightly to compensate.  Plus, I only just now realized there’s a slight overhang in this part I would like to eliminate.
      3. Z pinion.  The Z pinion includes a little flange to keep the Z rack in place.  The flange is a little too large and needs to be reduced slightly for easier operation.
      4. Z rack.  The Z rack isn’t much of anything, as mentioned above.  It’s just a rack with a plank with holes in it. It could be better refined to work as a pen holder without a lot of design work.  I just banged this one out so that I could have an actual no foolin’ 3 axis CNC to work with.  I have some ideas on how to make a simple pen holder.  Ideally, I would have two separate Z racks for this robot – one for holding a pen and another for use as an actual 3 axis CNC.
      5. Carriage tipping.  When the XYZ carriage has the Y rack extended as far out a possible, the weight of the extended Y rack with the Z motor and pen are more than enough to cause the entire XYZ carriage to tip out of the X rack.  This could be fixed by just creating a little guide, applying a piece of wire, or any number of minor hacks.  However, I’d like to have this issue resolved as part of the design of the robot.  Thus, I’m thinking of inverting the entire X rack to cause the X pinion to lock the X gear in place against the X motor mount.  The problem with this method is that it will basically require redesigning the X and Y pinions again.
    4. Anticipated Hardware Changes.  If I implement the improvements and changes I’m contemplating, this would mean redesigning the X rack (to invert it), X and Y pinions (to work with newly inverted X rack), Z pinion (to reduce the flange size), Z rack (to include a better pen holder). Y rack/Z motor mount (so the Z motor zip tie doesn’t hit the X motor mount), possibly Y motor mounts (to thicken the base slightly), and possibly the X motor mount to reduce plastic usage (since it wouldn’t have to be as big any more).  And… that’s a change to all 8 pieces.  :/
    5. Anticipated Software Changes.  Trinket space permitting, I would like to incorporate a small Gcode interpreter and fake USB serial connection.  I don’t know if this is possible, but I’d like to do this.  Also, my daughter specifically requested a 6-button interface to operate the robot.  I don’t know how to do this yet – but I’m willing to learn.  🙂  With three pins on the Trinket used for the three motors, there are only two pins left for buttons.  I’m pretty sure there’s no way to hook up a set of 5+ buttons to a Trinket and still have it operate all three motors.
    6. Fanciful Potential Changes.
      1. Keypad.  If this robot were to be powered by an Arduino Uno, you could probably incorporate this awesome 10-digit keypad from Adafruit to control the robot.  I think that would be a fun and accessible way for a kid to interact with this robot.
      2. Robotic Gripper.  With a fourth servo, a small robotic gripper hand could be attached to the Z axis – allowing this robot to do all kinds of interesting things.  It could be used to play chess, sort marbles, flip switches, or pick peas out of your dinner.
  1. And, again, these are perfectly acceptable tradeoffs given the size and price! []
  2. And, again, this is totally worth it []
  3. Much like a hanging chad []

How to Build a Tiny 3-Axis CNC Drawing Robot

Assembled Tiny 3-Axis CNC Drawing Robot

Assembled Tiny 3-Axis CNC Drawing Robot

FYI, if you like drawing robots and want to stay updated, please consider joining my newsletter.  Just stuff about drawing robots, no spam.

The Tiny 3-Axis CNC robot is a cheap, easy to build, extremely minimalistic but very capable little robot.1 This is the assembly guide for the version 0.29 robot available for download from Thingiverse.  The above picture shows the fully assembled robot.  If you have ever put together a lego set or built anything from Ikea, you should be able to build the entire robot in less than 5 minutes.  I’ve uploaded step-by-step photographs with each “step” organized into a short slide show of pictures.

This slideshow requires JavaScript.

Here’s everything you need to build your robot.

Stuff You Need

Tools

  • One small precision screwdriver
  • Scissors and/or wire cutters

Parts

There are eight plastic parts, one rubber band, one zip tie, and three micro servo motors.  Once the robot is assembled, you’ll need to wire it up to the microcontroller of your choice.  I’ll link to the wiring tutorial at the end of this post.

Assembly

Step 0:  Print the plastic parts

All 8 plastic parts

All 8 plastic parts

Although you can fit all 8 parts onto the build platform for a MakerBot Replicator 1, you’re probably better off only about half the files at a time.  I would suggest printing the five short pieces at once and the three tall pieces together.  All the parts together are about 30 grams of plastic and took my printer about 2.5 hours total.  I should point out that I incorporated thin little discs onto the corners of the larger STL files.  These are only to help the parts adhere to the build platform and fight warping.  You should be able to easily peel them off the pieces without any tools.

Step 1:  Build the Z axis

This slideshow requires JavaScript.

  • Gather the parts for the Z axis.  You will need three plastic parts (the printed Z pinion (gear), Z rack, and Z motor mount/Y axis), the zip tie, and a rubber band.
  • Use the scissors (or wire cutters) to cut a 5-10mm long piece out of the wide rubber band.  This piece of rubber band will work as a “gasket” to keep the Z pinion tightly secured to the Z motor shaft.
  • Push the screw through the rubber band gasket.  Place the Z motor into the motor mount.
  • Insert the screw (with gasket) into larger side of the Z pinion.  Insert the zip tie into the hole in the Z motor mount and secure the motor in place as show.  Try to zip tie your motor in a similar way – if you do it differently the zip tie can hit other moving parts.2
  • Cut off the excess zip tie with your wire cutters3
  • Place the Z rack as shown and secure the Z pinion in place using the precision screwdriver.  Rotate the pinion back and forth to make sure the Z pinion is placed well on the Z rack.
  • All done!

Step 2:  Build the Y axis

This slideshow requires JavaScript.

  • Gather the parts for the Y axis.  You will need two plastic parts (the printed Y pinion and Y motor mount) and another rubber band gasket.
  • Insert motor into motor mount and set screw into the gasket
  • Secure the Y pinion onto the Y motor using the set screw and you’re done!

Step 3:  Build the X axis

This slideshow requires JavaScript.

  • Gather the parts for the X axis.  You will need three plastic parts (the printed X pinion, the X motor mount, and the big X rack) and another rubber band gasket.
  • Insert motor into motor mount and create another screw-gasket-pinion combo
  • Secure X pinion to the X motor using the set screw
  • Looking at parts from top, rotate the X pinion counterclockwise until it stops and place it on the X rack as shown.  Roll it back and forth to make sure it stops at either end.  If it stops in the middle, just pluck it out and move it to where it needs to be.

Step 4:  Put it all together!

This slideshow requires JavaScript.

  • Gather the Y and Z axes.  The Z axis is basically the same part as the Y rack.4
  • Looking at parts from top, rotate the Y pinion clockwise until it stops. Insert the long flat “fin” on the Y axis through the thin slot in the Z axis.  The Y pinion teeth should mesh well with the Y rack.5 Make sure the Z axis is as close to the Y axis as possible.  Roll Z axis back and forth to make sure it stops at either end.  If it stops in the middle, just reposition the Z axis to where it needs to be.
  • Gather the X axis.
  • Route the X motor wires through the hole in the Y axis “fin.”6
  • Pressure fit the YZ axis assembly onto the X axis.  Make sure the Y axis isn’t too tight on the X pinion.

Step 5:  Add something to the Z axis

Pen secured to Z axis with rubber band

Pen secured to Z axis with rubber band

This Tiny 3-Axis CNC is designed to be a platform for you to turn into anything you want.  Personally, I think it would be most fun as a tiny drawing robot.  If that’s your interest too, you could use a rubber band or zip ties to secure a pen to the Z rack.  However, there’s no reason you couldn’t use it to perform any number of tasks.  A fully functional Z axis allows the little robot to actually apply pressure to the drawing surface – making crayon drawings feasible, painting with brushes, some kind of automatic pin-pricking machine, or a gentle tickling robot.  By adding a fourth servo motor you could add a robotic gripper, automated syringe/plunger/eyedropper, or something else so entirely amazing that no one has thought of it yet.

Step 6:  Wire the robot to a brain

If you want to use an Arduino, I’ve already written a guide on how to run your DIY drawing robot to a variety of Arduino boards.  However, there’s no reason you couldn’t run this robot from any other kind of microcontroller or computer provided you figure out a way to operate servos with those devices.

Step 7:  Program your Tiny CNC drawing robot

Okay, confession time.  I don’t have any software to offer you … yet.  As I write this post, my first Tiny CNC design isn’t even 30 days old and is being improved upon and changed quickly.  Fortunately, at least two other fine persons have already contributed to this area.

Stephen Laporte has written some software to run an XY version of this robot.  Additionally, Thingiverse citizen Oliv4945 has created a Gcode interpreter just for the XY version of the Tiny CNC.

Room for Improvement

Even though this design is only a day old as I write this post, I’ve already got lots of ideas on improving it:

  • Pen Holder.  I want a better Z rack that is specifically designed to work as a pen holder.  I will always offer a non-pen-holder version so people can use this robot as a 3-axis CNC to do their7 bidding.
  • More Secure Drawing.  A redesign of the X pinion and X rack.  Right now the entire XYZ carriage can pop out of the X rack if the robot meets too much resistance.8  I have an idea to fix this problem completely.  If it works, the robot could be bolted mounted vertically or upside down and still work just fine.
  • Reducing plastic.  Interestingly, I reduced the amount of plastic in the design from version 0.18 to version 0.29 even though I added an entire additional axis.  The plastic could be reduced by thinning some parts and adding holes to other parts as The NewHobbyist did.  The interesting thing about “holes to reduce plastic” is that the actual “savings” may be illusory.  With 3D printed plastic parts adding holes to a design can significantly increase the amount of plastic used – when you’re printing at less than 100% infill. As a thought experiment, think of two plastic cubes with a 1mm thick wall around all surfaces.  One plastic cube has no holes and is printed at 10% infill.  The second plastic cube is also printed at 10% infill – but because it is riddled with holes that require a 1mm wall around every hole, there  is basically no space for the 10% infill.  The “holes to reduce plastic” trick only works on 3D printed parts that are thin pieces.  When it comes to parts that are injection molded, it’s my understanding that additional “holes” all the way through a part adds to the design complexity and can increase tooling costs.  That said, it would actually result in a reduction of plastic in a design.
  • Electronics.  For a variety of reasons, there isn’t one particular electronics/microcontroller solution that strikes me as the “best.”  ((That said, the Adafruit Trinket is ALMOST perfect for this job!))  For this reason I’ve considered possibly designing a tiny Arduino board with three or four servo pin-outs specifically for this robot.
  • Software.  I have some ideas on this and a heck of a headstart from Stephen and Oliv4945.  🙂
  • AFRON UAER Challenge.  If you haven’t heard about it, African Robotics Network (AFRON) has a new Ultra Affordable Educational Robot (UAER) design challenge this year.  They’ve also extended the submission time for the 2013 challenge to January 15, 2014.  With some creative sourcing and scrounging, I think I could bring the “cost” of this robot down to $10-$20.  This is a somewhat artificial goal since the “cost” as far as the UAER does not include shipping, taxes, tools, packaging, computing, and is based on the proportional cost of bulk-pricing.  I think I could enter this robot into the hardware, software, and community challenges.  I don’t have enough experience designing educational curriculum to outline the 20+ hours worth of material necessary to enter the curriculum category of the challenge.

If you’ve enjoyed this post, perhaps you’d consider donating a +1 to my WyoLum Innovation Grant challenge entry.  🙂

  1. Smaller than a paperback novel!!! []
  2. It won’t damage anything, but it will be a nuisance! []
  3. This is where they really come in handy []
  4. I know, the teeth are a dead giveaway []
  5. AKA Z axis []
  6. I really need to think up a better name for that design feature []
  7. Very tiny []
  8. RESISTANCE!!! IS!!! USELESS! []

Tiny CNC Software Update

Stephen's version 0.18 robot drawing away!

Stephen’s version 0.18 robot drawing away!

I want to start this post with a shout out to Stephen Laporte.  I met Stephen at the Bay Area 2013 Maker Faire when he came over from the Wikipedia booth to see if I could draw a giant Wikipedia logo for their booth with my large PlotterBot.  Stephen was also the winning bidder for the version 0.18 parts I listed for sale on eBay a few weeks ago.  I shipped out the parts as soon as the auction ended and he got them the Friday after Thanksgiving.

Now, here’s the cool part…  While I’ve been busy hammering away at the design aspects of this tiny robot, Stephen put together some software to get it drawing something more than grids!  He has graciously shared his Arduino and Python code on Github for everyone to use.  With just a few lines of code, you could easily add in support for the brand-spanking-new third axis.

Tiny CNC – now a 3 Axis CNC!

Tiny CNC - Now with 50% more axes!

Tiny CNC – Now with 50% more axes!

With some helpful feedback from several readers, I’ve been working on improving the design for the Tiny CNC.  Last night I was able to print the latest version and assemble the robot.

Here’s a quick tour of the new features:

  • Z-Axis / Pen Lift.  This is by far the most requested feature – and the aspect of this robot I was most anxious to complete.  In order work within my design ideals (low part counts, easy printing, etc) I had to make a concession.  To fit the Z axis between the X and Y motors, I had to reduce the size of the Z axis gear. The result is that the Z axis can only lift by about 15mm.  Thus, the robot has a maximum operational area of 76mm x 76 mm x 15 mm.1 While the Z axis lift isn’t anything spectacular, it is sufficient to have an actual drawing robot.
  • Low Part Count.  The new design consists of 7 unique printed plastic parts, one of which needs to be printed twice, for a total of 8 parts.  Designing for a low part count meant that I had to design some fairly (for me) complex parts.
  • Easy Printing. I designed all seven parts to be printed easily without support.  While there have been vast improvements in 3D printing support structure technology in just the last year, you won’t need any of that.  These parts should be easy to print with just about any machine.
  • Snap-Fit Design (mostly).  I personally enjoy printed parts that just fit together without the need for additional tools and materials.  While there’s more work to be done on the design to make sure the parts have a better fit, this iteration just needs to be snap fit together.  As you build the robot several of the pieces help keep earlier pieces in place.  The only part that doesn’t snap-fit in place is the Z axis motor – which requires a single zip tie.
  • Mounting Holes.  This version includes a much requested feature – mounting holes.  The entire plastic frame is extremely lightweight and the motors can easily make the entire robot hop around.  The mounting holes will allow the robot to be bolted or screwed directly to a surface.

To Do List:

  • Herringbone Rack and Pinions.  It’s still possible to include these – and I’ve even already written the code to incorporate them.  However, I’m going to hold off integrating this feature until I can actually draw something.
  • Improved Y Rack.  The Y rack I am using had one end that lifted off the build platform slightly and is consequently curved.  A better version of this part would be wider to eliminate some wobble.
  • Balance Y Rack.  As mentioned earlier, the entire robot is very light.  As the Y axis is fully extended, the Z axis motor can cause the entire robot to tip over or the X stage to pop off the X rack.  If there was a weight of some sort at the other end of the Y rack, this may not be such a problem.
  • Better Z Axis Holder.  Right now the Z axis rack is basically a rack with a plank with holes in it.  While it’s not really pretty, it can get the job done.  I would like to design and incorporate something that’s a lot more aesthetically pleasing and functional.

Now that I have a robot again, I’m looking forward to trying to draw something with it!

In the meantime, if you’d like to build your own, download the parts from Thingiverse!

  1. This is about 3″ x 3″ x 0.5″, for you imperialists out there []

How to Wire a Tiny CNC

Easier than this to wire up

Easier than this to wire up

Don’t you just hate it when you read an online tutorial shows you how to build something – but totally glosses over how to wire it up?1 Me too.  Fortunately for you, dear reader, I’m not going to let that happen to you.  Not today, my friend, NOT TODAY.

The Basics

A few weeks ago I knew next to nothing about how to do anything with an Arduino and least of all how to wire one up.  Even though people had told me it was easy, I couldn’t make much sense of Arduinos except to load sketches I had downloaded.  Here’s some of the stuff I would loved to have known:

  1. Arduinos have a bunch of “pins” that can act as either inputs or outputs.
  2. When you program the Arduino, you tell it whether a pin is supposed to be an input or output.
  3. When the Arduino uses a pin as an “output” it can send a little bit of power to that pin.  That’s enough power to run an LED and maybe a small motor, but not enough to do a whole lot.  For things that require more power, you have to get it power from elsewhere.
  4. Arduinos have little “power regulators” that take power up to 12v and bring it down to 5v so the Arduino can use it without getting crispy.
  5. You can tap into that 5v power line to use for the things that require more power than the output pins provide – but if the things you connect to the 5v power line draws too much power, it can make the power regulator get… crispy.  🙂

Okay – that should be enough to get us started!

Wiring the Tiny CNC to a Mintduino

The easiest “out of the box” solution for wiring the Tiny CNC is with a Mintduino.  The Tiny CNC has two (soon to be three) servos that have three wires – a positive wire, a ground wire, and a control wire.  Each of the servos will need to have power sent to the positive wire, the ground wire grounded, and the control wire connected to an output pin on the Mintduino.  The reason the Mintduino is the easiest solution is it has a breadboard which is a very simple way to connect all the servos’ wires without a lot of fuss.

Here’s how we do it:

This slideshow requires JavaScript.

  1. Build the Mintduino.
  2. Bring power from the programming pins to the board.  Use a piece of red wire to connect the red positive rail to “a28.”  Now when you connect the FTDI Friend to the Mintduino, it will be ble ot draw power from the USB cable.
  3. Add two 3-pin male headers to the breadboard – one on “i23, i24, i25” and one on “i26, i27, i28.”
  4. Using a red wire connect 5v power from the red positive rail to “i24” and “i27.”
  5. Using a black wire connect the ground rail to “i25” and “i28.”
  6. Connect the Arduino output pins of your choice (I used 12 and 13 here) to “i23” and “i26.”
  7. Connect one servo to “i23, i24, i25” with the brown ground wire connected to “i25,” center red positive wire connected to “i25,” and the orange control wire to “i24.”
  8. Connect the second servo to “i26, i27, i28” with the brown ground wire connected to “i28,” center red positive wire connected to “i27,” and the orange control wire to “i26.”
  9. Connect the FTDI Friend to the Mintduino with the USB port side facing the connectors for the servo.

Wiring the Tiny CNC to an Adafruit Trinket

The basic setup here will look pretty familiar to the breadboard from the Mintduino.  Heck, I’m even using the itty bitty Mintduino breadboard in this example.

This slideshow requires JavaScript.

  1. Add two 5-pin male headers and three 3-pin male headers to the breadboard.
  2. One 5-pin header should be placed from “d4” to “d8” and another from “g4” to “g8.”
  3. One 3-pin header should be placed from “i9” to “i11,” a second from “i13” to “i15,” and a third from “i17” to “i19.”
  4. Use a red wire to bring the power directly from the USB on “g4” to the red positive rail.  Do NOT bring the power from the pin marked “5v” at “g8” because that pin draws the 5v through the Trinket’s power regulator rather than directly from the USB line.
  5. Using red wires bring the 5v power from the red positive rail to the three servos at “i10,” “i14,” and “i18.”
  6. Use a black wire to bring the ground from the Trinket on “c4” over to the black ground rail.
  7. Using black wires to bring the ground from the ground rail to the three servos at “i11,” “i15,” and “i19.”
  8. The Trinket can operate up to three servos from pin 0, pin 1, and pin 2.  Connect pin 0 at “h5” to “j9,” pin 1 at “h6” to “j13,” and pin 2 at “h7” to “j17.”
  9. Now drop the Adafruit Trinket in place as shown and you’re good to go!

Wiring the Tiny CNC to an Arduino Uno

I’ll take the pictures and update this part soon, but wiring the Tiny CNC is pretty easy too – as long as you have a breadboard.  Just follow the steps for the Trinket above, but bring the power from the “Vin” pin to the red positive rail and the ground from one of the “GND” pins to the black ground rail.  This will provide the power and ground for the servos.  Now you need to do is connect three pins (say 11, 12, and 13) to the three control lines for the servo at “j9,” “j13,” and “j17.”

Okay!  That’s it for the wiring!

  1. Photo courtesy of Peter Kaminsky []

Tiny CNC – Going to 100

The Last Centurion by tsuzukicream

The Last Centurion by tsuzukicream

In my last post I considered the cost of producing and selling exactly one set of plastic parts for a Tiny CNC.  While a fun experiment, I would go mad trying to do that same process over and over 100 times.12 Fortunately, scaling production up to 100 units doesn’t require a descent into madness – just a bit of careful planning.  Here I’m choosing 100 as this seems to be the first point at which volume price breaks begin to appear.

Walking Before Running

I think producing 100 kits would be awesome.  I would love to see 100 tiny drawing robots drawing tiny drawings.  However, with several key aspects still left to finish (Z axis/pen lift and software being first on this list), it probably makes more sense to create just 10 kits of plastic parts to get to just 10 people for help testing and making.

Looking Ahead to 100

If my Replicator could crank out the parts with zero supervision that would be one thing, but to produce 100 sets, it would take 200 hours of uninterrupted printing.  On a given weekday I couldn’t make more than one set each evening evening and perhaps four or five a day on the weekend if I was at home the whole day.  At that rate it would take me a about 7 weeks of consistent regular printing to create 100 sets.  Given the time commitment required for 100 sets, I would probably have to outsource the production of plastic parts.  I haven’t ever done such a thing before, but I’ve already reached out to manufacturers of plastic parts to find out what this might cost.

What Makes A Kit A Kit?

First, an anecdote about sandwiches and why I won’t buy them from a certain national chain.  When I go to this particular shop and I select a sandwich the Sandwich Artist making it will pause at a certain point during the sandwich creation process and as, “Would you like to add cheese/extra meat for $X more?”  The answer that always springs to mind is, “No, why don’t you make it with the correct proportions of everything in the first place?” The point being – I hate it when corners are cut and I appreciate it when it’s clear time, effort, and care went into the creation of a thing in the first place.  This is the reason I loved my MakerBot Cupcake CNC kit and my EMSL produced Egg-Bot kit.  These guys lovingly produced, packed, and shipped their kits in a way that showed they cared deeply about their product and customers.

If I think of these kinds of kits as the “gold standard,” what then should I include in a Tiny CNC kit?  So far people have asked kits into what I’d break down into three broad categories – everything, Bring-Your-Own-Arduino, and just plastic parts.

  • A “deluxe” Tiny CNC kit should include absolutely everything you’d need except a computer.  It would need to have all the motors (3x micro servos), plastic parts, pen, and Arduino.  For a truly all-in-the-box solution, it would also need rubber bands, a USB cable, and maybe sandpaper, jumper wires, or a mini Philips head screwdriver.  Alternatively, I’m trying to work out a way to power the Tiny CNC from an Adafruit Trinket.
  • A “BYOA”3 kit would probably only be the plastic parts and servos, since anyone who had their own Arduino would probably already have everything else contemplated in a “deluxe” kit.
  • A “BYOP”4 kit would probably be just servos and an Arduino or similar.  Anyone who has a 3D printer or access to one would probably have everything else.
  • A “barebones” kit for a Tiny CNC wouldn’t be anything more than a bunch of plastic parts with a piece of paper suggesting several compatible servo motors.

Producing Plastic Parts

As mentioned above, producing 100 kits would basically require I outsource the production of plastic parts.  However, this brings a host of other considerations.  The last published version of the Tiny CNC includes a normal rack and pinion whereas the version I’m working on now incorporates a herringbone rack and herringbone pinion. These are great for reducing backlash – but not possible to produce via injection molding or most other mass production processes.  Thus, either the parts are 3D printed or they don’t have this extra little bit of awesome engineering.  I anticipate the next version of this robot will have 8 printed parts, 6 of which have herringbone components.  With 75% of the parts not able to be mas produced either this will be a 3D printable kit or I will have to include non-herringbone parts in the kits.

Now, there is a way, of sorts, around this problem.  I can think of a way to not use herringbone racks and pinions and still have a reduced backlash, but it would basically double the number of plastic parts, double the number of steps to assemble, and really complicate the design.  I like the idea of a low number of parts and easy assembly.  Given this isn’t ever going to be a hyper precision machine, losing the herringbone rack and pinions doesn’t seem like a horrible loss.

What Kind of Arduino?

I’ve wired up my Tiny CNC to two different kinds of Arduinos – an Arduino Uno and a Mintduino.  I’m also in the process of trying to get it to work with the Adafruit Trinket, which for reasons I’ll discuss below, is my board of choice.

  • Mintduino.  The Mintduino was definitely the easiest way to wire up my Tiny CNC since there were plenty of places to plug the power, ground, and control lines for the servos.  The “problem” is that the Mintduino5 requires a $15 FTDI Friend or similar.
  • Arduino Uno or Similar.  The great thing about the Arduino Uno and similar is they are ubiquitous and easy to program over USB, no need for an FTDI Friend.  The problem with using an Arduino is that it doesn’t have three separate places for 5v power and three separate lines for ground.  To bring out the power and ground lines would require lots of little wires or a separate breadboard.
  • Adafruit Trinket 5v.
    • The $8 Trinket 5v version is just enough to power three servos – if you’re careful and pull the 5v power from the USB line and not the 5v through the internal power regulator.  While you still have the same “needing three separate places for 5v power and three separate lines for ground” problem as the Arduino, this may be a lot easier to deal with for a Trinket.  There are two other small problems with the Trinket which are not at all insurmountable.  The Trinket doesn’t have an on-board clock, so it would have to use a kind of “hacky” servo timer solution.  Also, the Trinket doesn’t have a proper serial port, so the solution is a “fake” serial connection that is even more “hacky” than the servo timer solution.
    • Saturday, with the generous time and assistance of Matt Stultz, I created a Trinket shield circuit board design for a tiny circuit board which would bring the power, ground, and three necessary pins for the X, Y, and Z servo motors out to headers for easy connections to the micro servos.  If I could get a bunch of these produced, it would be easy for anyone to connect a Trinket to the shield, plug in three servos, and then fire up the Tiny CNC.  Assuming the boards with all the headers was only $3 or so, the total brain power for the Tiny CNC would only be about $11 total. I like this solution for a number of reasons.
      • Like ripples in a pond, the solution of a tiny custom board creates tiny problems in turn.  A custom board would need to be purchased through one vendor, the components for the board through a second vendor, all the parts sorted and packaged into each kit properly,6 and the end user would need to do the soldering of these tiny kits.  There should only be 19 solder joints – but requiring soldering means more work for the end user.
    • Besides being a super tiny7 form factor, I like the idea of a plug-and-play solution just for this tiny robot.

Can I Really Do This?

Doing some thought experiments in a spreadsheet tells me that the little tiny “hidden” costs start to add up to not only eat into profits, but quickly would put me in the red. ((My daughter just insists on eating and being clothed for some damn reason.  I mean, every day?  Really??)) I’ve tried to account for all of these things, but it’s hard to predict everything in advance.  I’ve never undertaken anything like this, so I have no way of knowing if this is really feasible for just one guy with a full time day job.

I would love to make money as a result of my Maker hobbies.  I’ve “made money” from my Maker hobbies before, but never really enough to actually do much more than cover the gross “unhidden” costs.  I generally figure the time I spend on such projects is similar to the time people spend on their hobbies which have no potential for income, so it doesn’t really bother me.

Long long ago I told a friend that I could think of no finer way to live my life than to dream up cool and clever things and then doing and making them.  Being paid8 to blog, write, think up nifty designs, testing, and building things is about as close to that utopia as I can imagine.  While I’ve had other projects that seem like they might lend themselves to a kit, this is the first time where I’ve had an inkling that it like might possibly pan out.

  1. I just can’t resist shoehorning a Doctor Who reference in now and then.  This post is about creating 100 units, the Latin word for 100 is “century,” which in turn made me think of The Last Centurion []
  2. Also, there’s apparently a blog devoted to listing more than 400 ways in which Rory Williams is awesome.  #IApprove []
  3. Bring your own Arduino []
  4. Bring your own plastic []
  5. $10 at Radio Shack and $25 at Maker Shed []
  6. Mo’ parts, mo’ problems []
  7. And cute!!! []
  8. Either directly by a publisher or indirectly through advertising/kit sales []