Reviving My Kodak Portrait 3D Printer with Raspberry Pi Solutions

Years ago I bought a Kodak Portrait 3D printer. It is a great printer, very solid, mechanically excellent, with two nozzles, and it can print ABS. The problem is, very shortly after I bought the printer it became orphaned by the company that built it. The whole system was mainly cloud based. You used a custom version of Cura that uploaded G-code files to the cloud, then you logged into their website to initiate printing and could watch the job using its built-in webcam. That worked for a while until it didn’t. Their version of Cura is now hopelessly out of date.

So step number one was to figure out how to get a modern Cura to slice for the machine. It wasn’t easy, but I eventually wrote a script that Cura applies after slicing to patch up the G-code.

The next problem was that the only way to print a job was to put it onto a USB stick and print from the stick. That is very inconvenient. You have to walk over to the printer, grab the stick, go back to your computer, put the stick in, write the file, eject the stick, pull it out, and walk over to the printer again.

I wanted something that acted like a USB drive but could take files over Wi-Fi. I couldn’t find one, so I made one using a Raspberry Pi Zero 2 W. Several Raspberry Pi models have what is called Gadget Mode. Instead of acting as a general-purpose computer with USB host ports, you can flip it around so the USB port behaves like a device when plugged into some other computer’s host port. There are several device types it can emulate: a network adapter, a USB MIDI device, a keyboard or mouse, a game controller, and a USB drive.

By putting a Zero into gadget mode as a USB drive, I created a small volume on the Zero’s system SD card to hold the contents of this virtual USB stick. Any files placed on that volume show up on the host computer as if they were on an inserted USB drive. There is some trickiness involved, because the host computer (in this case the 3D printer’s internal Raspberry Pi controller) only scans the directory on insertion. So I wrote a script that detaches the gadget mode drive, mounts the volume on the Zero, writes a file to it, unmounts, and reattaches the gadget mode drive. From the 3D printer’s point of view, the USB stick was removed and reinserted, so it sees the new file.

Next, I used Samba and a directory-watcher Python script that calls the file-transfer script whenever a file is dropped into an inbox directory.

Now, from Cura, I can use “Save to File”, select the Pi’s network share, drop the file in, and as if by magic, the file shows up on my printer’s UI when I walk over to start the print.

Note: I had help from AI to write the code and to suggest edits to this blog post.

Leave a comment