I designed this project for a 10-hour workshop for ChickTech.org whose goal is to introduce teenage women to STEM topics. The goals for this project were:

  • Easy to build.
  • Easy to program.
  • Did something interesting.
  • Low-cost so participants could take it home and continue to learn.

With those goals in mind, here were a couple of the design choices:

  • Arduino compatible for ease of programming.
  • AA battery power for cost and availability.
  • Stepper motors for accurate motion.
  • 3D Printed for ease of customization.
  • Pen plotting with Turtle graphics for interesting output.
  • Open Source so you could make one of your own!

Here is the robot that came closest to what I wanted to do: http://mirobot.io. I don't have a laser cutter and shipping from England was prohibitive. I do have a 3D printer, so I guess you can see where this is going . . .

Don't let the lack of a 3D printer deter you. You can locate local hobbyists willing to help you out at www.3dhubs.com

It took a lot of work, but I'm please with how it turned out. And, I learned quite a bit in the process. Let me know what you think!

Step 1: Parts

There are a number of ways to power, drive, and control robots. You may have different parts on hand that will work, but these are the ones I've tried and found to work well:



Printed Parts (check out www.3dhubs.com if you don't have access to a printer):

  • http://www.thingiverse.com/thing:1091401
    • 1 x Ball bearing caster
    • 1 x Chassis
    • 2 x Wheels
    • 2 x Stepper bracket
    • 1 x Pen Holder / servo bracket
    • 1 x Pen Collar
  • I use low-resolution, 100% fill, and no support. This is about 4 hours worth of printing.


  • Phillips screw driver
  • Hot glue gun
  • Digital multi-meter
  • Sharp knife
  • Crayola colored markers
<p>Finally I made my little DrawBot.<br>3D printing was not available at my location,so I used bottle caps as pen holders.</p><p>Just some changes in the code and now I can make the DrawBot draw anything from patterns to complex drawings!!</p><p>P.S.- I'll add more images.</p><p>P.P.S - A video of my bot drawing squares: https://drive.google.com/open?id=0B55UIJdLlC-UaUJYX0MtR0xtbkU</p><p>I'll be happy to help you too. Just shoot me a mail at : samarsrivastava44@gmail.com</p>
<p>My students want to build this. Would you be able to provide assistance? We have no access to a 3d Printer.</p>
i have left-over parts I would be willing to donate. Can you message me from my profile?
Yes. I'll be happy to help. <br>Mail me any problems that you encounter at samarsrivastava44@gmail.com
<p>Love it! Thanks for posting pictures.</p>
<p>My students want to build this. Would you be able to provide assistance? We have no access to a 3d Printer.</p>
<p>Why not just put Makeblock's mDraw software on it? The design appears identical to theirs... :P</p>
<p>I've fixed it..Thank the author for sharing, i like it.My english is bad ,sorry if i write wrong grammar.</p>
<p>why do my right stepper not run reverse? it only run forward. Can you help me? Thank you!</p>
<p>Thanks, MakersBox. I recently made one, but used a NodeMCU for the controller. In addition to the operations in your test code, the robot provides a WiFi access point and web server for sending it Logo commands. I had enough program memory to implement the FORWARD, BACKWARD, RIGHT, LEFT, and REPEAT commands along with defining functions (TO-END) with variable arguments. I still need to implement an expression parser and a way to store and retrieve functions in its internal SPIFFS file system similar to the way volab seems to be storing his alphabet on external SD card.</p>
<p>Hello, I made this robot as my first arduino project, it really is cool, I've even made some improvements (well, I think these are improvements). </p><p>The robot really isn't precise sometimes, especially at rotating (after some rotation precision is lost). Code changes I've made seem to improve precision for a little bit. </p><p>I added this function to the code:</p><p>float getNearestAngle(float angle_){</p><p> float angle = 0;</p><p> int step = 0;</p><p> float previousAngle = 0;</p><p> float step_length = 3.1412 * wheel_dia / steps_rev;</p><p> while(!(previousAngle &lt;= angle_ &amp;&amp; angle_ &lt;= angle)){</p><p> step += 1;</p><p> previousAngle = angle;</p><p> angle = step * step_length * 360 / (wheel_base * 3.1412) + 0.01;</p><p> }</p><p> float dif1 = angle_- angle;</p><p> float dif2 = angle_- previousAngle;</p><p> if(abs(dif1) &lt; abs(dif2)){</p><p> return angle;</p><p> }else{</p><p> return previousAngle;</p><p> }</p><p>}</p><p>and in functions left(float degrees), right(float degrees) I wrote:</p><p>float rotation = getNearestAngle(degrees) / 360.0;</p><p>instead of:</p><p>float rotation = degrees / 360.0;</p><p>Here is the short explanation on an example:</p><p>Lets rotate by 58 degrees.</p><p>According to my calculations, original code will rotate only by 57.631138392857146 degrees(that is the value that is the closest to the desired one _and_ is lesser than it). That means you are doing a certain amount of motor steps. But if you do one more step during rotation you will rotate by 58.0078125 degrees, which is much more precise(but it is greater than desired value, thats why in original code it is not picked). The thing is that original code always decides to rotate by value that is lesser than desired value while it is sometimes worse than choosing the value that is bigger. My code chooses from both variants, minimizing the error.</p><p>I really hope that it works correctly. It would be great to receive some feedback from people. Here is the comparison of both algorithms. </p><p>Cheers!</p>
Totally awesome. Thanks for sharing your improvements!
<p>Thanks for sharing MakersBox.</p><p>I made one and i made some changes. I add an sd card to store alphabet.</p><p>The next step, i'll add bluetooth.</p><p>I share files on VoLAB wiki @ </p><p>http://www.vorobotics.com/wiki/index.php?title=VOR-013</p>
<p>Hi, i've done this little robot, but i've a question about the batteries and how them was connected. <br>They are in a serial configuration, so basically we do a count for establishing the V (1.5 x 6 = 9V)<br>If we put a 9V in our arduino, this will reduce the V to 5, due to a in-built regulator in the pin input VIN of arduino. But how we &quot;feed&quot; all the other stuff?<br>In the picture created with fritizing seems like the stepper are &quot;feed&quot; with 9V which is weird because they need 5V.. can anyone help me?</p>
I've got the batteries connected straight to the steppers because I don't want to pull the current through the regulator. The beauty of the darrlington array is that it can control voltages other than 5V using the Arduino's 5V signal.<br><br>
<p>why my device is not giving perfect angle??</p>
<p>Hi.. I would like to know the structure of the robot where to find it</p>
<p>I'm having an issue where the bot won't move the full 90 degree angle.. it keeps making shapes like the picture. Any suggestions? </p>
<p>The blue one or the orange? Check to make sure your batteries are not dragging and then double-check the parameters for wheel size and wheel base.</p>
What is the length of each segment? I'm wondering if you have a different number of steps per rotation:<br><br>int steps_rev=128; // # 512 for 64x gearbox, 128 for 16x gearbox
<p>The batteries aren't dragging and the wheel size and wheel diameter is correct and so is the wheel base. Any other suggestions? Could I have wired something wrong?</p>
The blue one. If I 3d printed using the same files you posted shouldn't the sizes be the same?
Hello can someone show me the electric circuit of this project
<p>Here is the reference I used when designing the project: http://www.tigoe.net/pcomp/code/circuits/motors/stepper-motors/</p>
Thank you
<p>i have made this but my wheel is not thin alike u, thats why its giving not accurate left right angels..... can u give me solution how can i edit my wheel_base.plz its urgent </p>
<p>Hello, thank MakerBox for the sharing of this design.</p><p>I want to know why this parameter steps_rev need to be 512 with a 28BYJ-48 motor.</p><p>His datasheet says 64x gear and a &quot;stride angle&quot; of 5.25&deg; (/64). Should this paramter be 4096 ?</p><p>@<a href="https://www.instructables.com/member/PhilippeG1">PhilippeG1</a></p><p> Les moteurs risque d'&ecirc;tre un peu poussif pour embarqu&eacute; un laser de d&eacute;coupe aussi petit soit-il. Mais pourquoi pas en revoyant certaines pi&egrave;ces.</p><p>Philippe want to transform your design in a cutting robot. He propose to replace the pen by a small laser to cut some light materials as paper or foam.</p><p>I made one and when it works i post some pictures here.</p>
<p>Super fun!</p>
Great great design! I made some edits to the chassis file to hold the half boards we have and to use ball casters I found in Harbor Freight. Thanks to a DIY arduino and an awesome 3D print hub partner I am able to create kits for a robotics club I coach for a very good price. Thank you!
Hi,<br>We made a drawing robot with my kids as you can see in the pictures and it works fine. We used parts from my stock and printed the body with the 3d printer I builded up. <br><br>Now our next job will be to design and print a fancy cover on top :) Additionally I'll add a small spring to push down the pen while drawing, in order to have straight lines. <br><br>Many thanks from my family for the very helpful instructable.<br><br>Aslan Family<br>Turkey
I love the white color! Thanks for posting pictures!<br><br>I just posted an Instructables about how to learn how to make patterns with it: https://www.instructables.com/id/Using-an-Arduino-Drawing-Robot-with-Hour-of-Code-T/
Great! I'll check it out soon.
<p>can t download 3d files . please upload the file in other place or give me direct link</p><p>and can i make this with out 3d print and if i 3d print what is the cost of printing</p>
<p>can u send a video of how to assemble the parts</p><p>please its urgent before thursday</p>
<p>Sorry. Too much going on. Are you having trouble with anything specific?</p>
<p><font><font>je ne suis pas un sp&eacute;cialiste mais sur cette base ne peut-on pas faire de la d&eacute;coupe laser de foam, balsa ou carton l&eacute;ger.</font></font></p>
I don't speak (French?), but sounds like you are asking if you can create the chassis out of some other material instead of 3D printing it. <br><br>Yes! My initial prototypes were on corrugated sign board. Anything stiff enough would work. If it is too thick, you will need to increase the wheel size.
<p>Had most of the parts. Used a marble in place of the ball bearing. Found a kit at the hardware store with 400+ O-rings that had the size needed. :-) My steppers came with a driver board, s&aring; I used that directly, no breadboard needed.</p><p>Fun project, hope to teach my daughter some programming.</p>
<p>Really spectacular job! You nailed all of your goals in spades.</p><ul><br><li>Easy to build.<li>Easy to program.<li>Did something interesting.<li>Low-cost so participants could take it home and continue to learn.</ul>
Thanks.<br><br>We'll be putting it to the test in a couple of weeks. Can't wait to see what they come up with!
What is the purpose of the capacitor? i see it is connected to both sets of batteries, but I'm not sure I understand why exactly
The purpose of the capacitor is to smooth out the voltage dips when the stepper and servo motors are operating. It is optional, but will keep your microcontroller running a little long when the battery voltages start to drop.<br><br>My typical experience with low voltage is that the Arduino will reset when the servo goes to move the pen.
<p>I love that the marker goes through the middle of the robot it self between the servos. That makes the coding infinately easier! </p>
<p>It does really make calculations easy. You also don't have to pull the pen up when you turn.</p>
Very nice project! I really like your detailed explanations and easy to follow instructions. This robot can be a good substitute for my art class :P :D<br><br>You could have waited for the arduino contest coming up in a few days :)
<p>Looking forward to some robot-art!</p>

About This Instructable




More by MakersBox:Easy Joule Thief Soldering Project Using an Arduino Drawing Robot with Hour of Code Tutorials Arduino Drawing Robot 
Add instructable to: