Dotter - Huge Arduino Based Dot Matrix Printer




About: Hi, my name is Nikodem Bartnik. I'm 19 years old. I am into designing, making, programming and electronics. In the future, I want to start a company and make my own products. As for now, you can find my work...

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):


Let's start!

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

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:

  1. They are cheaper
  2. 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
  3. 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).
  4. Happiness is much bigger when you create a stepper driver yourself with transistors than simply buying it.
  5. 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:

  1. 3D printed parts (links to models in the next step)
  2. Arduino GearBest | BangGood
  3. 28BYJ48 stepper motors (3 of them) GearBest | BangGood
  4. Micro servo motor GearBest | BangGood
  5. GT2 Belt (about 1.5 meter) GearBest | BangGood
  6. Cables GearBest | BangGood
  7. Bearing GearBest | BangGood
  8. Two aluminum rods about 60cm long each
  9. To make a PCB:
    1. PCB obviously (you can order, make them yourself or buy it from me, I have some boards laying around you can buy them here:
    2. Transistors BC639 or similar (8 of them) GearBest | BangGood
    3. Rectifier diode (8 of them) GearBest | BangGood
    4. LED green and red GearBest | BangGood
    5. Some break away headers GearBest | BangGood
    6. Arduino Stackable Header kit GearBest | BangGood
    7. Some resistors GearBest | BangGood

Probably the hardest thing to get for you are 3D printed parts, ask your friends, at school or in a library, they may have a 3D printer. If you want to buy one, I can recommend to you the CR10 (link to buy), CR10 mini (link to buy) or Anet A8 (link to buy).

Step 3: As Big As I Can, As Simple As I Can (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):

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

I have some spare boards so if you want to buy them from me you can buy them on tindie:

I sell 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!

Happy making!


If you really like my project please vote for it in the contests :D

Epilog Challenge 9

Runner Up in the
Epilog Challenge 9

Arduino Contest 2017

Second Prize in the
Arduino Contest 2017

2 People Made This Project!


  • Assistive Tech Contest

    Assistive Tech Contest
  • Reuse Contest

    Reuse Contest
  • Made with Math Contest

    Made with Math Contest

67 Discussions


2 months ago

Hi Again
In running the processing code there is an error with serial port. Fortunately I found it:
Line "portName = Serial.list()[1];" causes the error!
I fixed it by changing 1 to 0: portName = Serial.list()[0];


Question 4 months ago

Hi. You have done a great job. I thank you for sharing it with us. By the way I tried to run your processing code in processing 3.0. But it was not successful. Which version of processing did you use when you working on the project?


Question 7 months ago

what are the values for the transistors and resistors and the led(s)
thank you :)

1 answer

7 months ago

Oh man..that could SO be a drag knife cutter!

Antzy Carmasaic

10 months ago

Beautiful project. An easy upgrade but very useful upgrade I could immediately think of is controlling the depth the pen goes down. That will change the size of the dot. I can see that has happened already in parts of some prints (by mistake?). Then you can make even more beautiful images by using a technique called 'halftone' which will allow you to have gradients.


Question 10 months ago

What's the total cost of the printer?


Question 1 year ago


great project, i surely will build one,just ordered the parts and now starting 3D printing.

One thing i haven't read anywhere: what is the diameter of the alumium rods?

Thanks and all the best,



1 year ago

Great project, nice work! Maybe you can add different colored markers to it in the future?

1 reply

Reply 1 year ago

Thanks, yes I was thinking about it :) Maybe in Doter 2.0!


1 year ago

Good job! :D

I'l try to build one for my hacker club! :D

1 reply

Reply 1 year ago

Thanks! Awesome, don't forget to post some images of it :)


1 year ago

First and foremost a big congratulations for the design of the dotter printer
I myself have made a mini version of it because I still had 10 rolls of paper of 75 mm width
Have 2 questions; i have uln2003 drivers, also work with the same software and what is an equvalent for the BC639 possibly
How do I adapt the software to my mini version
The parts are printed with a Prusa i3
I hope I can start my mini version, fingers crossed

Kind regards

2 replies

Reply 1 year ago

Thank you so much! You project looks awesome, like a baby of Dotter :D it is very well designed also, I really like paper holder. Just change the pins in the Arduino code to yours. You can use exactly the same software, just images that you prepare to draw must be smaller or you can make more dots on each line by reducing number of motor steps between each dot. You can also use my PCB design (so that you will have the same connection) or even buy PCB from me. You don't have to modify processing code, it should work without any problems


Reply 1 year ago

I have enlarged the diameter of the X axis by 2mm and now I have a nice circle

I have 2 questions:

Where can I reduce the number of steps between the dots

Instead of dots it is possible to get a line instead of the dots, and how do you change this in the software

Kind Regards


1 year ago

The first attempt is made, and I think it is EXCELLENT thanks to NIKUS, the original photo is a jpeg of 100x100 pixels, 4.4 Kb, but there are some edges, firstly the drawing is oval, secondly it took 1 / 2 hours before it was signed, I could adjust this in the software
Positive is that it is a fine drawing, just look at the dots in a row, also silently, a project that works immediately with the given instruction, both hardware and software
Could you give me more explanation about the processing please use, open image function works, but the other apparently not, such as open serial, load paper (I find very intresant) and stop (also very necessary)
Unfortunately I am not a good programmer, I am rather a user of the fantastiese arduino and projects like this I like to build, so a new or adapt to the software would be very difficult for me, so to you want help me Please
200% for NIKUS

Kind Regards

Avatar 100x100.jpgDSC01652.JPGDSC01653.JPGDSC01654.JPG
1 reply

Reply 1 year ago

AWESOME! It is so nice to see someone make my project :) and it is working very good! It takes some time because those motors are slow, to make it better experiment with amount of steps for each turn on X and Y axis, you have different wheel sizes and thats why those values have to be different. I didn't implement all of the functions in the processing code yet, so as for now it can only print, you can't load a paper and stop. The only way too stop is close the program. Thank you very much, if you need any more help, feel free to ask! I am so happy that someone made my project!


1 year ago

I get an error message when il Processing I3 starts up " portName = Serial.list()[1];"
What can I do about it