Doodlebot was an independent project with the goal of learning the basics of using microcontrollers, motors, and control systems. While there have since been some commercial products which seem to have applied the same core design to more useful applications (Goliath CNC, ZUtA portable printer, Shaper Router), my objective was much more fun/experience based. I wanted to create a simple robot which could draw on any flat surface using a pen. The project was completed start to finish during the summer of 2016 and took around 3 weeks of on/off work and 8 from-scratch code iterations for the slave Arduino alone (6 for the master and a couple for the computer controlling the master). I have lots of ideas for improvements which I'll explain at the end and which maybe I'll get around to doing someday.
I regret to announce that I hadn't fully documented the project when I worked on it so most intermediate progress has been lost to time including but not limited to code, schematics, previous mechanical designs, etc. Instead, this post will discuss the features of the bot, whatever resources I can scrounge up (I think I may have even deleted the code to run it), and my takeaways from the project. Enjoy :)
Overview of Features
The Doodlebot is capable of writing pretty much any text-based message hassle-free. It automatically computes font paths, line endings, and everything else based on default font size and width specifications. The font size and paper width are of course easily customizable.
The font, unfortunately, is not so easily customizable. I actually programmed in the bezier/spline curves by hand for every single letter (upper+lower) and some of the most common punctuation marks. It was painstaking and imperfect. One of the things I would really liked to have done if I was more serious about the project would be to be able to import font files (eg .ttf file) automatically, but that would have gotten into not only the computer-y "standards"-y world of file encoding, but also would bring up the additional problem of how to convert a solid, thick line into a single, infinitely thin vector line. The importation of font files is something which would have been really cool but ultimately would take more time that it'd be worth for me.
In addition to the text entry, the bot can also draw specified shapes. The shapes are drawn in a program I wrote in Processing (a Java variant) which then converts the drawing into the pseudo-g-code I invented/use for the robot's commands (which I, by the way, had done before ever learning that g-code was a thing). The program and the g-code generated can be seen in the screenshot to the right. Unfortunately, I have lost the actual robot so I can't show the robot drawing that actual picture, but I hope you can trust me that it actually can draw it.