The grayscale idea

A project log for IoT thermal grayscale printer shield

Arduino shield (will work standalone also) which would print on a thermal paper. Serial, USB and Ethernet communication, open source.

lukasz.iwaszkiewiczlukasz.iwaszkiewicz 08/18/2014 at 10:140 Comments

As I stated in a comment down below, the most tricky part of the whole gizmo is the thermal element of the head. Depending on the model it has typically from something around 300 to 832 thermal elements which are responsible for printing each dot in a row. So theoretically you can print a black line spanning the whole paper width at once, but this would involve heating up all 832 heat elements at once too (i refer to my original head which is 4 inches wide and has 832 pixels in row). This in turn require lots of current, because each pixel is lit by applying some quantity of heat, and heat requires power. Thus heads are divided into pages which can be turned on and off independently, which gives you an option to divide printing a row into smaller and less power hungry tasks. Every page is activated by its own signal called DST (I'm using SEIKO terminology). Basically driving a DST-n line high applies heat to all heat elements residing in n-th page whose corresponding bits in the latch register were set to 1 (see my comment somewhere below). Manuals of the heads include quite extensive and complex mathematical formulas for calculating the duration of the DST pulse. It depends on many factors including the paper type, number of pixels simultaneously lit, voltage you are using, temperature of the head and more. At the end you always have a duration which would provide you a clean deep black printout. But I thought that between black and white you could try to print shades of gray simply by dividing the DST duration by some factor. After a little bit of experimentation it turned out that 2 intermediate shades are the best that can be done on my head with paper I had. The most limiting factor here, I think, is the paper which is covered with dye chemicals not evenly enough, which gives you visible artifacts and grain on a solid black printout. Those papers I own are simply not designed for such tasks, but I believe there are better options (take the USG printouts on some glossy thick paper for example). So as you can see, there is no point of increasing the number of intermediate shades of gray due to inaccuracy of the result. In the next post I'll try to explain the basics of the printing algorithm.