This year I decided to revisit the dot-matrix Lego printer that I first built and programmed in 2017. The original design was the result of a lot of iterating, but it still had some significant problems. I wanted to try again, with a focus on eliminating errors and printing very consistent images.
You can download .LXF and .IO models of v3.0 of my LEGO printer, plus Python code for the printer, from the Viper Bots’ GitHub repo.
Over the past few years, I have coached both First Lego League and First Lego League Jr. teams at Vogt Elementary. The older FLL team has always been called the Viper Bots. The younger team has changed its name over time: First they were the Sci Girls, then the LadyBots. This year they became the Unicorn Girls.
Well, we ended up having so many interested 1st-3rd grade girls that we had to add a second Jr. FLL team: the Unimermaids. It was quite an experience coaching these two teams, along with co-coaches Yoli and Heather Roberts, and our middle school helper, Ludi.
In June and July, I borrowed the girls’ robotics team Lego pieces and EV3 brain in order to build my own dot-matrix printer.
At various FIRST events, I have seen a kid or two who built a printer. I’ve also seen some on YouTube. As a fan of retrocomputing and Legos, I thought it would be a lot of fun to make my own printer.
The basic idea is simple and requires three motors. One feeds the paper forward or backward. One slides a print head back and forth horizontally across the page. The last one moves a marker or a pen up and down to draw a dot.
I made a lot of iterations of this printer, trying to solve various problems. It wasn’t perfect, and I was particularly limited by the number and kinds of pieces I had available. But it DID work! I was able to print out some portraits that were recognizable, as well as a Print Shop-style banner.
The main challenges (for me, anyway), were how to move the marker up and down, and how to code the printer so that it had good resolution. Early on, I attached the motors directly to the axles, then measured how far to move things using tacho counts. But that led to very sloppy, inconsistent results. After a while, I realized I needed to use a technique called “gearing down”: The motor drives a small gear, which then turns a much larger gear on the axle. This decreases speed, requiring me to use many more tacho units to move the print head the same amount (it also increases torque). This might sound bad, but in fact it greatly reduces errors and inconsistency. I used “gearing down” to improve both the paper feeder, and the horizontal print head movement.
I wrote the code for the printer in Python, and controlled the EV3 using the ev3dev Linux system. Later versions of the code were capable of reading in a PNG file and converting it to a low-res black and white image to print.
At the end of the summer, I created a 3D model of the printer using Lego Digital Designer. Download the viper-printer.lxf file and try it yourself in either LDD or Stud.io. The model isn’t perfect (There are two blank slots in the tread where I couldn’t get things to connect, for example), but is a nearly exact replica.
Inexplicably, I failed to take photos of the final version of the printer. So, here instead are some renderings of the printer, made using Stud.io:
UPDATE (2021-05-12): I uploaded the Python scripts I wrote for the Viper Printer to the team’s GitHub repo: https://github.com/Viper-Bots/viper-printer. Check them out, and please let me know if you build a printer based on my idea!