Introduction: Dotter - Huge Arduino Based Dot Matrix Printer
Hi, welcome in this instructable :) I am Nikodem Bartnik 18 years old maker. I made a lot of things, robots, devices through my 4 years of making. But this project is probably the biggest when it comes to size. It is also very well designed I think, of course there are still things that can be improved but for me it's awesome. I really like this project, because of how it works, and what can it produce (I like this pixel/dot like graphics), but there is much more in this project than just the Dotter. There is story of how I made it, how I came up with an idea for it and why failure was a big part of this project. Are you ready? Warning there might be a lot to read in this instructables, but don't worry here is the video about it (you can also find it above):
LINK TO THE VIDEO
Step 1: The Story of Fail :( and How I Actually Came Up With an Idea for This!
You might ask why the story of fail if my project is working? Because at the beginning there wasn't a Dotter. I wanted to make maybe a little bit similar thing but much more sophisticated - a 3D printer. The biggest difference between 3D printer that I wanted to make and almost any other 3D printer was that instead of standard nema17 stepper motors it will use a cheap 28BYJ-48 motors that you can buy for about $1 (yes one dollar for a stepper motor). Of course I knew that it will be weaker and less accurate than standard stepper motors (when it comes to the accuracy it is not that simple, because most of the motors in 3D printers has 200 steps per revolution, and 28BYJ48 has about 2048 steps per revolution or even more depends on how you use them, but those motors are more likely to lose steps and gears inside them are not the best, so it's hard to say if they are more or less accurate). But I believed that they would do it. And at that point you may say wait there is already 3D printer that uses those motors, yes I know there are even few of them actually. The first one is well known that's Micro by M3D, small and really beautiful 3D printer (I just love this simple design). There is also ToyRep, Cherry and probably much more that I don't know about. So printer with those motors already exist but what I wanted to make different and more like my own way was code. Most of the people use some open source firmwares for 3D printers but as you may know if you saw my Arduino based Ludwik drone project I like doing things from scratch and learning by that so I wanted to make my own code for this printer. I already developed reading and interpreting Gcode from SD card, rotating the motors according to Gcode and Bresenham's line algorithm. Quite big part of code for this project was ready. But while testing it I noticed that those motors are overheating a lot, and they are soooooo slow. But I still wanted to make it so I designed a frame for it in Fusion360 (you can find image of it above). Another assumption in this project was to use transistors instead of stepper motor driver. I found few advantages of transistors over stepper drivers:
- They are cheaper
- It's harder to break them, I already broke few stepper drivers while building DIY Arduino Controlled Egg-Bot because when you disconnect a motor from driver while running it will probably break
- Drivers are simple to control, you can use less pins for that, but I wanted to use Atmega32, it has enough pins to use transistors so it wasn't important for me. (I wanted to use atmega32 in a 3D printer project, finally in the dotter there is no need to use it so I use just Arduino Uno).
- Happiness is much bigger when you create a stepper driver yourself with transistors than simply buying it.
- Learning how they works by experimenting, I used some transistors in my previous projects, but practice make perfect and the best way to learn is to experiment. BTW isn't that odd that we don't know how the biggest invention of the world works? We use transistors every day, every one has millions of them in a pocket, and most of the people don't know how a single transistor works :)
During this time I got 2 new 3D printers and while printing on them I just turned up printing speed all of the time to make prints as fast as I can. I started to realize that 3D printer with 28BYJ-48 motors will be to slow and probably is not the best idea. Maybe I should realize that earlier, but I was so focused on the code for this project and learning how exactly 3D printers work, that I was not able to see that somehow. Thanks to things that I learned by building this thing I do not regret time invested in this project.
Giving up is not an option for me, and I have 5 steppers laying around so I started thinking of what can I do with those parts. While burying in old things in my wardrobe I found my drawing from primary school made using dot drawing technique also called Pointillism (you can see my drawing above). It's not work of art, it's not even good :) But I liked this idea of creating an image out of dots. And here I thought about something that I heard about before, a dot matrix printer, in Poland you can find this type of printer in every clinic they are making odd loud sound :D. It was kind of obvious for me that there must be somebody that has made something like this, and I was right Robson Couto already made an Arduino dot matrix printer, but to make it you have to find perfect components which can be hard, but we have a 2018 and 3D printing is becoming more and more popular so why not to make an easy to replicate 3D printed version, but it still would be similar. So I decided to make it big, or even HUGE! To make it able to print on a big paper that everyone can buy - roll of paper from Ikea :) its dimensions: 45cm x 30m. Perfect!
Few hours of designing and my project was ready for printing, it is 60 cm long so too big to print on a standard printer, so I divide it in to smaller pieces that thanks to special connectors will be easy to connect. Additionally we have a carriage for a marker pen, some pulleys for GT2 belt, rubber wheels to hold the paper (also 3D printed with TPU filament). But because we not always may want to print on such a big paper I made one of the Y axis motors movable so you can easily adjust it to the size of the paper. There are two motors on the Y axis and one on the X axis, to move pen up and down I use micro servo. You can find links to the models and everything in the next steps.
Then I designed a PCB as always, but this time instead of making it at home I decided to order it in a professional manufacturer, to make it perfect, easier to solder and just to save some time, I heard a lot of good opinions about PCBway so I decided to go with that. I found that they have a scholarship program thanks to which you can make your boards for free, I upload my project to their website and their accept it! Thank you so much PCBway for making this project possible :) Boards were perfect, but instead of putting microcontroller on this board I decided to make an Arduino shield so that I am able to simply use it, it is also simpler to solder because of that.
Code of the dotter is written in Arduino, and for sending the commands from the computer to the Dotter I used Processing.
That's probably whole story of how this project evolve, and how it looks now, congrats if you got there :)
Don't worry now it will be easier, just build instructions!
I hope you enjoy this story of The Dotter project, if so don't forget to heart it.
*on the renders above you can see X carriage with 2 pens, the was my first design, but I decided to switch to smaller version with one pen to make it lighter. But version with 2 pens can be interesting because you would be able to make dots in different colors, there is even place for second servo on the PCB so thats something to consider for dotter V2 :)
Step 2: What We Will Need?
What we will need for this project, that is great question! Here is list of everything with links if possible:
- 3D printed parts (links to models in the next step)
- 28BYJ48 stepper motor (x3)
- Micro servo motor
- GT2 Belt (about 1.5 meter)
- 608 Bearing
- Two aluminum rods about 60cm long each
- To make a PCB:
If you don't have a 3D printer ask your friends, at school or at a library, they may have a 3D printer. If you want to buy one, I can recommend an Ender3 as it is quite inexpensive and prints really well!
Step 3: As Big As I Can, As Simple As Possible (3D Models)
As I said big part of this project was size, I wanted to make it big and kept simple at the same time. To make it this way I spend a lot of time in Fusion360, fortunately this program is amazingly user friendly and I love using it so it wasn't big deal for me. To fit on most of the 3D printers I divided the main frame to 4 parts that can be easily connected thanks to special connectors.
Pulleys for GT2 belts were designed with this tool (it's cool, check it out): https://avtehnik.github.io/gt2-gear-genaretor/
I added the DXF files of those 2 pulleys just for your reference you don't need them to make this project.
None of this models need supports, pulleys has supports build in, because it would be impossible to remove supports from the inside of the pulley. Those models are rather easy to print, but it takes some time, because they are quite big.
Wheels that will move the paper should be printed with flex filament to do it better. I made a rim for this wheel that should be printed with PLA and on this wheel you can put a rubber wheel.
Step 4: Assembling
That's easy but also very pleasant step. All you need to do is to connect all of the 3D printed parts all together, put motors and servo in place. At the end you have to put aluminum rods in the 3D printed frame with carriage on it.
I printed a screw on the back of the Y motor holder that is movable to hold it in place but it turns out that bottom of the frame is too soft and it bends when you tighten the screw. So instead of this screw I am using a rubber band to hold this part in place. That's not the most professional way to make this but at least it work :)
You can see size of pen that I used for this project (or maybe it's more like a marker). You should use the same size or as close as you can, to make it work perfectly with X carriage. You also have to mount a collar on the pen to let the servo move it up and down, you can fix it by tightening a screw on the side.
There is not a lot to explain, so just take a look at photos above and if you need to know anything more leave a comment below!
Step 5: Electronic Schematic
Above you can find electronic schematic for this project if you want to buy a PCB or make it you don't need to worry about the schematic, if you want to connect it on the breadboard you can use this schematic to do so. I worn you that it will be quite messy on this breadboard, there are lot of connections and small components so if you are able to, using a PCB is much better option. If you have any problems with PCB, or your project is not working you can troubleshot it with this schematic. You can find .SCH file in the next step.
Step 6: PCB As a Pro
That's probably the best part of this project for me. I made a lot of PCBs at home, but never tried to order it in a professional manufacturer. It was great decision, it saves a lot of time, and those boards are just much better, they have solder mask, they are easier to solder, look better and if you wan to make something that you want to sell there is no way you will make PCB at home so I am one step closer to creating something that I will be able to produce in the future, at least I know how to make and order PCBs. You can enjoy beautiful photos of those boards above, and here is link to PCBWay.com
I have some spare boards so if you want to buy them from me you can buy them on tindie:
Step 7: Soldering, Connecting...
We have a great PCB but to get it working we have to solder components on it. Don't worry that's very easy! I used only THT components so there is no any super precisely soldering. Components are big and easy to solder. They are also easy to buy in any electronic shop. Because this PCB is just a shield you don't have to solder a microcontroller, we will just connect the shield to the Arduino board.
In case you don't want to make a PCB, you can find a schematic above with all connections. I don't recommend connecting this on the breadboard, it will look really messy, there are a lot of cables. PCB is much more professional and safer way to do this. But if you have no other option, connecting on breadboard is better than not connecting at all.
When all of the components are soldered on the PCB we can connect motors and servo to it. And let's jump to the next step! But before that, stop for a second and take a look at this beautiful PCB with all of the components on it, I just love how those electronic circuits look! Ok, Let's move on :)
Step 8: Arduino Code
When shield is ready, everything is connected and assembled we can upload code to the Arduino. You don't have to connect shield to the Arduino at this step. You can find program in the attachment bellow. Here is quick explanation of how it works:
It gets the data from the serial monitor (processing code) and whenever there is 1 it makes a dot when there is 0 it don't. After each data received it moves for some steps. When new line signal is received it goes back to it's start position, move the paper in the Y axis and make a new line. That's a very simple program, if you don't get how it works, don't worry just upload it to your Arduino and it will works!
Step 9: Processing Code
Processing code reads the image and sends the data to the Arduino. Image has to been the certain size to make it on the paper. For me max size for the A4 paper is about 80 dots x 50 dots If you change the steps per revolution you will get more dots per line but also much bigger printing time. There are not a lot of buttons in this program, I didn't want to make it beautiful, it is just working. If you want to improve it, feel free to do it!
Step 10: At the Beginning There Was a Dot
Final test of the Dotter!
Dot, Dot, Dot.....
Dozens of dots later something went wrong! What exactly? It looks like Arduino reset itself and forgot it's number of steps.It started very well but at some point we have a problem. What can be wrong? Two days of debugging later I found a solution for that. It was kind of simple and obvious but I didn't thought about it at the beginning. What is it? We will know in next step.
Step 11: Failure Is Not an Option, It's Part of a Process
I hate to give up, so I never do that. I started to searching for a solution to my problem. While disconnecting a cable from my Arduino lately at night I felt that it is really hot. Then I realized what is a problem. Because I leave the Y axis motors turned on (on of the coil of those motors) linear stabilizer on my Arduino gets really hot because of quite big constant current. What is the solution for that? Just turn off those coils while we don't need them. Super simple solution for this problem, that's great and I am back on track to finish this project!
Step 12: Victory
Is it the victory? My project is working, finally! It took me a lot of time but finally my project is ready, it's working just as I wanted it to work. Now I feel pure happiness because of finishing this project! You can see some of the images that I printed on it! There is much more to print so stay tuned to see some updates of that.
Step 13: The End, or the Beginning?
That's the end of build instruction but not the end of this project! It is open source, everything I shared right here you can use to build this thing, if you will add any upgrades feel free to share them but remember to put a link to this instructable also let me know that you improved my project :) That will be cool if someone will do that. Maybe someday if I will find time for that I will improve it and post a Dotter V2 but right now I am not sure.
Don't forget to follow me on instructables if you want to be up to date with my projects, you can also subscribe to my YouTube channel because I am posting here some cool videos about making and not only:
and here are my social media accounts:
Thank you very much for reading, I hope you have a great day!
If you really like my project please vote for it in the contests :D