Mug-O-Matic: A Modular Tiny CNC

Open Source Reconfigurable Robot Arm for Learning STEM. Build It Your Way!

Public Chat
Similar projects worth following
The Mug-O-Matic is a tiny CNC robot capable of doing real work: Customizing coffee mugs!

It is one possible configuration from a collection of modules designed to be low cost and have lots of replay value through customization. This robot offers kids an opportunity to learn Arduino, the most common language for physical computing. No soldering or bread-boarding required, controls are all plug and play.

All 60 unique 3D printed components are designed for replication, modularity, and to provide maximum performance given their low cost. To that end parts do not require build supports or post processing, and assemblies can accommodate printing variance.

The intent of the project is to produce a unique and accessible educational tool. One that encourages children to engage in tinkering and making things because those activities are powerful ways to learn and inspire people to pursue STEM careers.

License = CC BY-SA 4.0



Video Link:


 This project started when my imagination was set to wander by a sentence from the book Invent To Learn.

 "Erector Set, Tinker Toys, Meccano, Lincoln Logs, LEGO ... All of these toys could be used to construct fanciful models of things, but not the things themselves. The game-changing 'toys' available to today's girls and boys are capable of making real things."

 Of course that quote refers to things like 3d printers, laser engravers, and the like, but I saw it as an interesting challenge. A toy that can make things...

Then one day I came across a 3d printed plotter bot design by MakerBlock. He and others developed arduino code that allowed a robot to read g-code and plot with a marker using hobby servos, a task typically done with stepper motors. Great idea and perfect for making an ultra low cost robot that still had lots of functionality. 

 My idea was to build off of his code and create my own set of robot hardware to draw on coffee mugs. The thought being to emulate the famous Egg-bot, except with even lower barriers to entry and to produce objects with more everyday appeal. 

Application Development and the Explosion of Ideas:

The key module in this set is the linear actuator assembly. I hadn't found anything available online so I designed one from scratch. During this process I realized that I could greatly enhance the usefulness of the actuator by giving it a standard hole mounting pattern to make it modular and use the same actuator twice.

 Then I realized that modularity allowed me to rearrange the robot components to make completely unrelated bots as well!  From there I just had fun designing different modules and at this point the collection can be used to make customized versions of any of the common industrial robot configurations, a walking robot (Pic Pending), or any other Voltron style monstrosity a kid can imagine with up to 9 servos.

Why a Rack & Pinion Actuator?

I choose a rack & pinion type actuator to keep the vitamins low and the movement speed fast. (As opposed to a slow leadscrew or pulley driven actuator with belts & bearings).  Well for those reasons and the fact that hobby servos only have 180 degs of usable motion severely limits your options. 

I had to do some math up front to size the gear to get the 80mm of motion I needed to draw on an entire 11 oz coffee mug. The effective diameter is the only variable that affects motion, tooth size did not, so I picked a large (easily printable) tooth size that maintained contact ratio around 2. The tooth mesh benefits from some of the assembly compliance to keep it tight enough to prevent backlash, but squishy to prevent sticking points.

 Keeping it Tight: 

  For a drawing robot to be worth anything it needs to be rigid so you can draw straight lines. The challenge of designing a tight moving assembly without bearings is that to reduce slop you end up making it harder to drive, and hobby servos don't have much torque to waste. 

 Indeed, my research for an existing rack & pinion to start from yielded lots of wiggly/loose gear rack assemblies that are purpose built. Most of the machines I saw were hacked together, designed by folks gifted with software skills much greater than their mechanical design skills. I consider those projects to be fantastic works of art, rather than repeatable mechanically sound works of engineering. There is a limit to how much slop you can tune out of a machine. 

 So I had to design these models from scratch and during the iteration process I found it necessary to include some special compliance/adjustability features to facilitate reliably smooth motion. For those interested I wrote an article on...

Read more »

Optional accessories for this module that have the same mounting pattern: Includes assembly tool, arduino case, 90 deg bracket, a flexible bracket, an ultrasonic holder, a pen holder, a gripper, an actuator handle, and a pan-tilt servo mount

x-zip-compressed - 1.05 MB - 06/02/2018 at 06:56



a STEP file of the assembly for those wishing to modify the CAD model

stp - 7.15 MB - 06/02/2018 at 06:54



1x gear per assy. Print 3 perimeters all sides, 10%infill, Print with largest flat face touching buildplate, 0.2mm thick layers max.

Standard Tesselated Geometry - 3.33 MB - 05/26/2018 at 09:21



1x per assy. Print 3 perimeters all sides, 10%infill, Print with largest flat face touching buildplate, 0.2mm thick layers max

Standard Tesselated Geometry - 1.30 MB - 05/06/2018 at 21:53



1x per assy. Print 3 perimeters all sides, 10%infill. Print with teeth touching buildplate, 0.2mm thick layers max

Standard Tesselated Geometry - 1.86 MB - 05/06/2018 at 21:53


View all 9 files

View all 7 components

  • 2 steps back...1 leap forward!

    Michael Graham5 days ago 0 comments

    This weekend has been quite the journey. With my wife & kid out of town for a few days and left to my own devices, I ended up working myself sick. Literally. :/ 

      Saturday was spent drudging through failure, frustration, & a nasty flu. But only a couple days later I have finally accomplished enormous success!

     The Mug-O-Matic (MoM) can now successfully draw with G-code using a simple replicatable toolpath!  Leveraging a processing program & gcode reader based on work by Makerblock,  Heindal, & Oliv4945, I had to modify their work significantly to suit my specific needs. In the end the path is:  Use Repetier Host + Slic3r to slice a flat 3d model & export gcode to desktop, Use Processing to send data over serial (usb tethered), have the arduino interpret said data line by line to print. Video to follow. On the downside more tuning is clearly required, the drawings resulting from gcode are much sloppier than I had hoped and the act of drawing is slow. Too soon to say how clean I will be able to get it. Im still happy though!

      Almost as good is that I successfully completed the line segmentation algorithm. Now when you tell the device to draw a long line from one side to the other, (at any angle/direction) it will segment that line into the minimum draw-able resolution of 1mm and move the specified distance in the maximum number of increments.  The result is a slower motion that negates the effects of rotating mass and prevents target overshoot!

     The backlash compensation code is also up and going successfully. The effect is subtle because the backlash was subtle, but it works and I am satisfied.

    Other learnings & updates in bullet form:

    *Unfortunately, this device can never do stall detection as I had originally hoped. While hobby servos do use potentiometers, they are not physically wired to provide feedback to the arduino. The feedback is simply unavailable. (Arduino command just tells you the last position you wrote to the servo, not the actual angle it is which may differ if the device as been stalled.)

    *I am designing a new Tiny_CNC_PCB specific for this project based on the MePed board by Scott P. Though his work is great for this, there are some minor variations for cost & fit & function that I want to implement.   To be honest I have never designed or ordered a PCB in my life, but have wanted to learn the skills. This has been a great opportunity to learn KiCad and pcb design via remixing rather than starting from scratch.  So I thought I had it finished and I even have a prototype supplier lined up, only then I decided that I need to update the design a bit more...This perfectionism is a trend with me that is great for getting a job done well, though timeliness can suffer. This is what has made the 3D models take so long to complete. 

    *My 3d modelling has also been slowed by the fact that designing all 60 components to be modular and function with each other as a set means that I have to be aware of every possible mechanical configuration for interferences and such. Physical testing with all parts in hand of the latest rev is very important. Often I find problems caused by very subltle issues like two seemingly perpendicular surfaces actually being 179.5 degrees apart, thereby stalling a hinge.  The devil is in the details!

    *The software is really powerful stuff for easily making a custom robot controller GUI and I am definitely going to spend more time learning the intricacies at some point. For now knowing the basics is adequate. 

    *I have been releasing 3dmodels to thingiverse as I get the time to photograph the assembly process and watermark the images. (Yes this project IS still 100% open source, and if people want to make their own from scratch you are welcome to do so, but the attribution aspect is important to me.)  Here is that growing 3d model collection:

    Read more »

  • Video Demo Project Update

    Michael Graham07/29/2018 at 18:25 0 comments

  • Updates to project vision & plan

    Michael Graham07/20/2018 at 05:19 0 comments

    This is the first update since I was awarded the $1000 for the first round of the HaD Prize, so thanks for that!  I took some time to look through the winners so far in this years Prize (and prior years) and I have to say that was a humbling experience. 

     People on HaD make some of the most amazing DIY projects I've seen on the internet, and so part of me feels like bringing my little toy to the party is a bit like a knife to a gunfight lol!

     Except, I do think this little toy is exactly the type of thing that this challenge is for. 

     The purpose of the Prize is to show the good that technology can do and to build hope for a better future, and where better to find that inspiration than the next generation of scientists and engineers?

    Tell you something, I love meeting smart kids! I go to as many Makerfaires as easily possible and I recently decided to sponsor a local public middle school robotics club because I see them as a valuable asset to the community. Its encouraging to see young people with technical interests who are clearly destined to grow up and make useful contributions to society. Not that non-techies don't contribute, but it's the scientists who solve life's big problems and the inventors who create technology to raise the tide that floats all boats. Constructive technology makes life better for everyone and society only stands to benefit from an increased interest in science and the key scientific virtues of honesty & curiosity. 

    That's also why I love to see how making things is becoming more culturally popular with time. As seen in the growth of MakerFaire's celebration of invention/creativity/resourcefulness, and kids movies featuring techno-optimist themes and tech-savvy hero's, like Big Hero 6, Meet the Robinson's, Cloudy with a chance of meatballs, and similar. 

     Open source educational toys also have their own role to play in sparking the interest of young minds. Things like the EggBot, MePed, & the MeArm are clever inventions that attract and provide an excuse for a newbie to get their toes wet and develop new skills.  And now alongside them will be the Mug-O-Matic and its various configurations!

    (Fyi I think up until this update I've made the mistake engineers commonly do when selling an idea. That is, sell features instead of benefits & ROI. This project is not ABOUT the 3d printed linear actuator. Rather, that was a stepping stone, a cool component of a larger work with a more important purpose.)

     For this project I chose to accentuate 3 features to solve key problems with currently available edu toys:

     *Usefulness: The finished robot should do useful meaningful work as real robots do, rather than exist solely to be cool. Also, as per the contest the robot modules themselves should have a usefulness such that they facilitate others to build incredible robot projects. 

     *Tinker-with-Ability: As I learned from Invent to Learn, kids learn by doing and are most engaged when they are able to independently experiment rather than just being told what to do. 

     *Accessibility: Be as easy and affordable to replicate as possible. Replay value is a must. Schools aren't known for being flush with spare resources.

    I think the current design is on target for these goals. Here is the current project status:

    While I have not been promoting this work much recently, I have basically been spending all my free time developing it. Keeping my head down pulling the cart. I've spent a significant portion of the prize money already gathering hardware to make a few of everything and then some. R&D isn't cheap.

    In a nutshell, Ill soon have the essential hardware models in a shareable state. I have a whole construction set of proven easy to print parts that can be rearranged to build all the common industrial robot configurations, or a walking bot, or any other Voltron style complexity a kid would desire. 

    The Mug-o-Matic...

    Read more »

  • Video Update #2: Measuring & improving the output precision.

    Michael Graham06/11/2018 at 06:53 0 comments

    While controlling the linear actuator can be done without hacking, I've found that doing so has its limitations. 

    Specifically with my setup the arduino nano has voltage and current limits that prevent the servos from reaching their full potential. Especially when I'm controlling 3 servos simultaneously in a stressful application!  This problem manifests in a locked up actuator when trying to make small movements, because the actuator cannot overcome the static friction with a proportioned control designed to only move a small distance.

     So I did some experimenting to find a way to power my servos directly from two 18650 batteries while isolating that 7V from getting to my computer's usb port. 

     In the end the hack was simple, which is the way I like it! This successful experiment will enable my drawing robots to operate with move torque and a greater degree of precision in small movements! 

    One step closer, yay!

  • Uploaded Accessories & STEP files

    Michael Graham06/02/2018 at 07:25 0 comments

    Continuing from last weeks log I have thought about how to best share the 3d models for this work. 

     I think since there are many applications of these modular components, each with their own instructions, that they are best shared as their own separate projects on HackaDay. (See end of this post for more new application pics!)

    Along that same line of thinking I believe that the small sub assemblies should each have their own project identity as well. This will make following & reproducing the body of work the easiest.

     But for now my time is limited so I simply uploaded a compressed folder containing some of the accessories that go with the linear actuator module, as well as a STEP file (universally importable 3d model) of the actuator assembly itself.

    Seen below top left are special mounts that clip onto an arduino nano without the need or screws and they hold bluetooth & sd card modules.  going CCw is a gripper, an ultrasonic sensor mount, a flexible joint, a hard 90 deg joint, and an assembly tool for pressing the servo horn on.

    I'll leave off with a neat picture of a laser turret I just finished up. It does not contain the linear actuator, but the components of this turret are compatible with the actuator mounting pattern so all the pieces could be used together to make something else! 

    The hinged joints in the turret shown below are also designed to be robust, rigid, and easy to 3D print like the actuator. 

  • Models complete! Testing in progress, Challenges encountered.

    Michael Graham05/22/2018 at 02:22 0 comments

    I am finally confident enough in my hardware to release all of the 3D models associated with this body of work! Every single model has been printed and tested to my liking. 

     However, I am dealing with 3 challenges at the moment.

    1.  Sharing too much makes the work hard to follow. I need to figure out a way to share these models without making it confusing as to which part goes where in which application...

    You see, sometimes (ok frequently) I get creatively carried away and at this point there are 39 different parts in this set! (And the arduino cases are compatible with the SimpleSumo robot set to boot). 

    The site does not allow you to sort your uploads into folders so I will have to upload everything into one long flat list and that will be hard to follow.  Hard to follow = hard to replicate = failure of a primary project goal...

    For now my plan is to be very careful with my naming conventions, and to provide separate build lists for the assemblies, & screenshots with callouts to identify which part goes where. 

    2. My drive system is underpowered. Through research & testing I realized that the arduino nano & breakout board that I love so much are actually limiting factors in the functionality of the drawing robot applications. 

     As it turns out, the breakout board does not have its own 5V voltage regulator and instead relies on the nano's built-in regulator to power all the 5V rails. I believe it is 1 amp maximum divided among the 3 servos and the nano itself. 

     The result is that the post-it-plotter application has a hard time completing small movements without stalling.  The mug-o-matic coffee cup application works OK though because it doesn't require as much torque to operate. Clearly, I am operating at the edge of the capabilities of my equipment.

     Ive tried to get cute & write the code to shut off the Z axis servo when it is not in use. This has helped to a limited extent. I can do that because these drawing robots are 2.5 axis CNC's in practice because the pen axis is only used in one of two extreme positions. Draw or no draw.

    Indeed, when I plug the servos into a stand alone servo driver with two 18650 batteries as I did in my demo video, they are exploding with torque.  

     One way I can get around this issue is to program the robot to draw via dot matrix. That is, drawing by making lots of dots instead of dragging the pen to make lines (which requires more torque.)

    3. Coding is hard. While I am strong at mechanical design & documentation, my coding skills are comparatively soft and flabby. Making the robot do the cool things it will physically be capable of is a challenge. 

      For now the robot can draw simple shapes via a mathematical algorithm written on the arduino. Fairly simple stuff. But my vision for the project includes drawing the EngineerDog logo on the side of my coffee mug which will require a more complicated solution.

     To draw via dot matrix I can convert images to a 2D array of 0s & 1s via a free website here;   However, getting the arduino to read that data is the issue. I can literally paste the array directly into the arduino code but I'd have to manually add text delimiters to make it work so thats a no go.

      To read the dot matrix or G-code I could send the data over serial using "Processing" or an SD card, but it is easier said than done. For that capability I will have to lean heavily on the code written by MakerBlock, whose work inspired this project.

     Im thinking the easiest cool thing I can accomplish within the time frame of this contest may be the addition of bluetooth control. Adding a common HC-05 bluetooth module is easy and I can use a nifty freemium program called Robo-Remo to drive from my phone.

     More time/sweat is...

    Read more »

  • Details of actuator module conveyed

    Michael Graham05/08/2018 at 05:13 0 comments

    Video Posted. Project Instructions & details updated. 3D Printing files are up!

  • State of the project, Work in Progress

    Michael Graham05/06/2018 at 06:20 0 comments

    May 5 2018:  Hardware designs mostly complete but I always find tiny things to update & always getting new ideas for modules to attach. The devil is in the details.

    Primary work remaining = writing & testing code for the intended applications of this module. That is, two different drawing robots that actually use the same code to draw on two different mediums.  I need to decide where to focus my time developing: Dot matrix drawing, gcode drawing, or bluetooth manual control.  Eventually I want to do them all :) 

    Still working on support documentation which is key for a project to be fully replicable. In any case, most of my work as of late has been created with an educational focus (see 'SimpleSumo Robots'), so excellent documentation is a major boon for teachers looking to integrate my work into their curriculum.  I love the thought that the things I create will be used to inspire & teach the next generation of scientists!

    Names & exact details of future robots are fun & will be revealed in the near future when a video of a fully functioning application is available.  :)

     Eventually I'd like to package the two applications into kits and sell them on my site but managing the business side of things is a project all of its own. There are only so many hours in the day, plus my strength is mechanical engineering so everything thats not that takes extra time. 

View all 8 project logs

  • 1
    Attach servo to gearbox_Lid

    **Note that the video in the details section has a timelapse of this process.**

    Use the screws that come with the servo to attach it to the top of the gearbox

  • 2
    Attach gear to servo & Clock

    Position servo @ center. 

    Use tool to press servo horn into gear. Then attach to servo assembly with the horn pointing upward to help you keep track of the position. 

    CLOCKING PROCESS: Rotate gear all the way to one side, say ClockWise then rotate CCW by 1 tooth spacing. (This enables the servo actually reach the end position. The servo actually has a little more than 180 degrees of physical rotation but only 180 degress of it are usable by the program. To keep from having a dead space at the end of your rack motion, we back off the max servo end position when we are at the max rack end position.) 

  • 3
    Apply Grease

    Apply grease to gearbox_Base @ 4 grease pockets & inner ID. Just a dab helps extract all the torque from your servo motor. (You can grease the teeth too if you want) 

View all 5 instructions

Enjoy this project?



Michael Graham wrote 06/30/2018 at 19:00 point

HI Mike, thanks!  My picture is a bit bleached but it is actually drawing on a coffee mug so you can have a different design every morning. (Sharpie washers off in the dishwasher) A clock is an interesting idea, Ill add it to my already enormous to do pile :)

  Are you sure? yes | no

Mike Szczys wrote 06/29/2018 at 19:55 point

Check out the demo setup for this where it's drawing on the white PVC using a green sharpie. It's like a graffiti robot that draws on itself. I'd like to see four of these turned into a clock that writes and erases the digits as needed. Very cool way to show off your mechanism!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates