Main Content

Make Beautiful Big Labels Practically for Free

This is an appliance that plots labels on ordinary masking tape. It uses Hershey Fonts and GRBL and the stepper assembly from a DVD drive.
What makes it noteworthy (other that the fact that it is the first of its kind) is that the DVD drive assembly has not been used as a whole as in so many “tiny CNC machine” projects, but I designed a custom y-carriage with 3mm steel rods, bronze sinter bearings and a 3d-printed “nut”. I used both FreeCAD and Blender as both apps have their specific strengths.
Inspiration was drawn from Eggbot and Axidraw, one could even say that this machine is the synthesis of those two.

This hack was only possible because the awesome hf2gcode utility written by Andreas Weber (Andy1978 on github). He went out of his way to implement the missing support for Umlauts, which are very important for labelling things in German.

I built essentially a drum plotter, but one that uses masking tape rolls as the drum. The hardest part was to construct a z-axis that had almost no friction so the pen could fall down using just gravity alone. That part I had to heat up with a heat gun to re-melt the plastic (PETG) so the sinter bronze bearings could settle and re-align themselves. Any way, it was only after completion of the mechanics that I realized that I should have just pivoted the whole y-carriage, so that is for a later iteration of this design.

The y-axis is the only axis that gets homed by a limit switch, the x-axis goes through some funny motion where it’s first zeroed and then retracted for 295mm. This is wacky and needs to be done better in a further iteration too.

Most of the parts were designed using the realthunder branch of FreeCAD, i learned a lot by doing so. I used Blender for the bit that contacts the lead screw’s groove, as it was small and I had a concrete idea how to solve the problem of designing the helical ridges in that small block of plastic that gets pressed against the lead screw by a strip of brass sheet metal.

Oh yeah, the whole y-axis thing: I was intrigued by all those projects that used DVD drives to do CNC stuff, but all the wasted real estate by using the whole drive assembly as is was putting me off. So I studied how to replicate the DVD sled assembly, which meant buying sintered bronze bearings and integrating them into 3d-prints. In the end I had a very compact y-carriage whereas I would have had to support a humongous DVD-drive on top of that roll of masking tape.

The z-axis was originally just a printed tube in which a marker pen of a specific make could slide up and down without too much friction or wobble. But the PLA I used for the part soon contracted or some such and the pen was stuck. So I went to the effort of building a z-axis using two 3mm rods and bronze bearings being inspired by the axidraw plotter.

Doing so greatly increased the precision and enabled the machine to plot almost microscopically small letters (2mm height) using a very sharp pencil in the tool holder.

On the x-axis I am using a NEMA-17 stepper directly connected to the spool holder. As the 200 steps are nowhere close to the required angular resolution i simply went for the maximum amount microstepping (16x) and that worked out to be just about enough to not show visible artifacting.

I initially used the machine connected to a laptop running inkscape with the Hershey-Text plugin for the creation of the “artwork” and bCNC for turning it into gcode and for sending the gcode to GRBL. This proved to be impractical for the long run, because I tended to forget how to operate all the different bits and pieces that made up the working system. It also forced my to make notes at the place where I needed to have a label and then walk through the house to the computer and design the label and plot it out and then I had to walk back with the sticky label in my hand to apply it.

So I needed a self contained solution. I first found a bit of code that generated SVG from a string of text that I then could turn into gcode by another utitlity and then I used a self written gcode sender (IIRC). This worked with a laptop, but on the types of SOCs that I had lying around (RPis and Odroids of the first generations) this was way too resource intensive because hersheytextjs used nodejs, which took way too long to start up on those anemic machines.

So a bit later I found hf2gcode, which could directly produce gcode from a string of text. I also settled on an Odroid-C1 as I had some of those kicking around in a drawer together with matching 3.2inch LCD screens, so I only needed a keyboard and I was set. I chose a 2.4GHz wireless keyboard as I didn’t want to deal with the headache of getting bluetooth running on the Odroid.

I also wanted battery power for my machine, so I used 3 18650 cells in series with a 3s protection board, which gave the 12v needed by the CNC-shield and I then stepped this down using a Traco Power step-down module.

The last hurdle then became the missing Umlaut support in hf2gcode. Fortunately the owner of that project is German and familiar with the need for Umlauts and very generously offered to implement the missing feature, which he promptly did once i reminded him of his promise once i was finished with the rest of my project.

To actually interact with hf2gcode i wrote my first curses based script as a frontend to easily offer advanced functions like changing the tape width.

If anyone would like to make his/her own version, i would suggest to use whatever SOC is available to you and use a character LCD display instead of the one i used here as it was a pain to get it to play along nicely.

Unsolved Problems:

* Cutting the tape is still rather unsatisfying. If anyone has a better idea than the scissors on a stand please let me know. I thought about running a blade across the tape as it is still on the spool, but it proved too hard to just cut through a single layer of tape without damaging the underlying next layer.

* The spool has to be moved by hand to a predefined position (x-axis). I am thinking of using a time-of-flight or a simple infrared proximity sensor to detect the beginning of the tape (where I left a corner lifted up). Maybe not worth the hassle as the resolution of the sensor is very unlikely to be high enough to detect the dangling end of the tape. “

Link to article