P008 → CNC Etch A Sketch



Computer Controlled Mechanical Drawing Toy


This page was last updated June 2020;
I stopped working on this project unfortunately because of COVID, and fortunately because I got a job at Milwaukee which scratches the hands-on mechatronic prototyping itch.

The point of tackling this project was to explore, gain experience, and sharpen my existing skills on an electromechanical hobbyist project that interested me. I find manufacturing and automation incredibly interesting, so an accessible CNC is fascinating to me.

Right now it is pretty crude as I focused most of my attention on controlling it accurately and adding functionality. 

The current plan is to get it working well, then design a sleek case that the Etch A Sketch can pop in and out of. This will also include custom firmware and PCB that makes the whole experience more “product-like”.

Right now it is centered around an Arduino, which I already owned from previous projects. I bought additional small stepper motors and their accompanying drivers, focusing on size and price over accuracy. I plan on using these parts to create other computer-controlled automated projects in the future.



I started by controlling the Etch A Sketch through a joystick as a proof of concept. This worked well, but the Etch A Sketch itself is not perfect and that revealed itself almost instantly. There is an inherent slippage in the Etch A Sketch's internal drawing mechanism which makes repeatable patterns a challenge - yeilding disastrous results for a CNC. I took this inconsistency into account by calculating a vertical and horizontal error that could then be used to correct the values as it draws. It takes into account the direction it is currently drawing, the direction it was drawing, and where on the canvas it currently is. I found that single pass outlined text is the most unforgiving thing to draw accurately so I used that to test - shown below.

Before
calibration 
and 
including error
into the code
After
calibration 
and 
including error
into the code

There are many examples of similar Etch A Sketch projects online, and I was inspired by some of them. In the end, I elected to write my own code from scratch and create my own mechanical design for this project. A common feature I am choosing not to include is an erase function. I have seen other projects use a tilting or vibrating mechanism, but as anyone who’s used an Etch A Sketch knows - it requires a serious shake to properly erase. For that reason, I am holding off on a lackluster automated erase feature for now.

I also learned quickly that design for manufacturing applies to this project as well - design for sketching. Tailoring the drawing to the constraints and limitations of the Etch A Sketch creates a better overall looking outcome and the tolerance for lowered accuracy. The drawing, number and order of paths, and other inputs, similar to an actual CNC milling machine, matter greatly. This is shown in the picture to the left compared to those above.
The next step is getting it to run full G-CODE. I plan on using GRBL, an open-source software for controlling machines like this. It will require me to modify the stepper motors to be bipolar motor, rather than unipolar, which should also increase their efficiency (I think). It may also mean that I must abandon my custom error mitigation that I detailed above, but gain the ability to program longer operations.

Below is the C++ code that I have written so far. It has many limitations but can currently run modified G-CODE. Making it very easy to program complex drawings.