Etch-A-Snap is (probably) the worlds first Etch-A-Sketch Camera. Powered by a Raspberry Pi Zero (or Zero W) it snaps photos just like any other camera, but outputs them by drawing to an Pocket Etch-A-Sketch screen. Quite slowly.
Photos are processed down to 240x144 pixel 1-bit (black & white) line drawings using Pillow
and OpenCV
and then translated into plotter commands by building a network graph representation with networkx
. The Etch-A-Sketch wheels are driven by two 5V stepper motors mounted into a custom 3D printed frame. The Etch-A-Snap is entirely portable and powered by 4xAA batteries & 3x18650 LiPo cells.
The developing time for a photo is approximately 15 minutes to 1 hour depending on complexity1. The video below shows the Etch-A-Snap in action taking a photo.
Keep scrolling for some more examples.
Camera Examples
These shots were taken live using the Etch-A-Snap — a single shot was taken and immediately drawn to the screen. The drawing process was captured using a timelapse camera.
Selfie taken indoors against a plain background.
Outdoor street view, showing the Etch-A-Snap struggling a bit on building details.
Doraemon and a Deer shows a real-time recording of a snap. The image taken with the camera can be seen here for reference. In realtime you can see the initial print speed is slow as the graph is still being calculated, but then quickly increases. Print time is 6 minutes.
In early tests the Etch-A-Snap ran at 2 pixels per second, but now achieves a lightning fast 20 pixels per second.
Image examples
The Etch-A-Snap can also draw a picture from any image type supported by Pillow
using the draw.py
utility. Using this script the Etch-A-Snap crops, resizes and processes the images the exact same way as from the camera, but you can be a bit more selective with the image and increase the chances of getting something half decent out.
Andre Hazes generated from a stock photo with plain white background. This is probably the best photographic result produced, producing a pretty recognisable result.
Python logo generated from a colour PNG. The logo is on a plain white background, leaving it completely disconnected from the frame network. Linkers are added automatically.
Etch-A-Sketch logo generated from a monochrome PNG at 120x122.
The Queen. There is no route-optimisation (travelling salesman) at work when drawing, aside from adding weight to previously draw areas to encourage avoiding them in future. This picture of the Queen shows some serious back-tracking over the hair/top right corner. This picture was generated at 120x122.
To support developers in [[ countryRegion ]] I give a [[ localizedDiscount[couponCode] ]]% discount on all books and courses.
[[ activeDiscount.description ]] I'm giving a [[ activeDiscount.discount ]]% discount on all books and courses.
How does it work?
If you're interested in how the Etch-A-Snap works, or want to build one yourself, take a look at the separate parts of the write-up — Build, Processing, Drawing and Plotter.
The following files and resources are also available —
- The full code is available on Github along with a Jupyter notebook which details (and allows you to) experiment with the image processing and graph generation.
- You can download the STL files for 3D printing, or edit the model on TinkerCad directly.
- The circuit Fritzing file is also available.
-
It's quicker than film! ↩
Continue reading the Etch-a-Snap series with Build, Etch-A-Snap