PrintO-Bot
PrintO-Bot is an inkjet printer on wheels. This robot can print on almost any flat surface- no matter what material it is made of. And it is made from a regular desktop inkjet printer!
Why did I make this? 'Cause I like printing on different materials to decorate my room. I don't want to be restricted to printing on papers and I can't pay for the costly industrial services that're usually needed to make such prints.
Quick Intro to Inkjet Printer Mechanism
First, let's familiarize ourselves to the printer parts that we'll be hacking/ modifying. My PrintO-Bot is made from a Canon Pixma iP2702. Most inkjet printers have similar parts and mechanism so you *might* be able to use a different one but you'll have to analyze my steps and change them according to your printer while following the logic I've used.
Following the order in which the labelled parts are used/ engaged after sending a print to the printer:
..the paper feeder holds the papers and pushes a paper inside the printer when a print is received.
..the paper moving motor is responsible for pulling the paper into the print area as well as for moving the paper forward after each print swath (stripe of print across the page that the print head can create at one go)
..the paper sensor checks if the paper has entered the print area and signals the printer if it has or not; the printer either starts printing or gives us an error depending on this paper sensor signal
..print head/ ink head holds the ink cartridges and moves over the paper, ejecting tiny ink droplets onto paper.
Hacking Plan
Now that we've familiarized ourselves to the parts, here's the logical plan to convert the inkjet printer to PrintO-Bot:
1. Bring the ink head outside of the printer so that it now faces the material we want to print on
2. Put the printer on wheels so that it moves over the material while printing
Now we proceed to the actual hacks. You'll obviously need to open up the printer first. Take out the 2 outermost covers and then..
Hack 1: Print Head Re-positioning
Cut an ethernet cable and solder away the wires to connect the ink cartridge at one end and the cartridge housing on the other. It is easier to solder to the cartridge first and then to the housing.
Even better, instead of soldering the way I've done here (the cartridge & housing soldered on either ends), I'd recommend soldering different set of wires to both the cartridge and housing, and then soldering male/female connectors at the other ends of both so that the cartridge is easy to connect and disconnect. (Update: I re-soldered the wires this way. Last picture above shows how it looks now :) )
I've soldered only the black ink right now since it has lesser pins to solder than the color one.
Procedure:
1. Take the ink cartridge out. Make a sketch of the pads on it. Do the same for the pins inside the housing (they're obviously of same layout but just draw both of them).
2. Now use a digital multimeter to record the resistance between the first pad and any other pad which gives a finite resistance. Repeat so that you have a value of resistance between each pad with atleast one other. Do the same with the pins inside the housing. We're going to use these values to check if we have soldered all wires correctly.
3. Solder away! Use a lot of flux. Hot glue the wires after soldering every second/ third wire depending on how carefully you can solder. Once hot glued, verify if the resistance you had recorded for that pad/pin has stayed almost same (it will NOT be exactly same).
4. Be patient and take breaks in between. It takes a really long time the first time. Once all wires are properly soldered, secure the whole thing with more hot glue.
Check the New Printhead
Tape the cartridge onto a temporary holder/ thing and give the printer a one or two line thing to print on your favourite material! We still need to feed in a paper to make the printer print.
Also, make sure whatever you're printing is black and white (not grayscale).
Hack 2: Bypassing the Paper Sensor
The printer uses an optical sensor as a paper sensor. A lever is offset from its position when the paper goes in and that causes the optical path in the sensor to complete. Here's a good explanation of an optical sensor. The sensor in this printer is almost same but the circuit connections are pretty different. Above is the modified version of that circuit. Picture 3 shows the sensor board. It has 3 pins that I've soldered to different colored wires for debugging: White wire pin: Chip select/power
Black wire pin: Ground
Blue wire pin: Sensor output
So, in normal working conditions, there is a fixed time interval between the feeding of paper and detection of paper by the sensor. If the paper is not detected within that interval, an error is generated by the printer and it stops printing. To simulate this exact signal exchange abiding specific time intervals, I built a small mechanism to detect the start of printing process. Explanation in the video
Using an oscilloscope, I could determine that the printer expects paper around 268 millisecond after it tries to push the paper in. So, I coded an arduino to detect the switch close, wait for 268 msec and then send a fake 'paper detected' signal:
const int mySwitch = 7;<br>const int fakeOutput = 8; void setup(){ pinMode(mySwitch, INPUT); pinMode(fakeOutput, OUTPUT); digitalWrite(fakeOutput, HIGH); }
void loop(){ if(digitalRead(mySwitch) == HIGH){ delay(268); digitalWrite(fakeOutput, LOW); delay(2400); digitalWrite(fakeOutput, HIGH); } }
This fake signal is given to the printer instead of sending the sensor output. So, break the sensor output wire as shown in picture 4 and connect Arduino's fakeOutput pin to this wire such that the fake signal goes to the printer. Make sure to connect the grounds of your Arduino & the sensor together.
Hack 3: Making the Printer Move!
Take the signal going to the paper moving motor, step it down and give it to the wheels of the PrintO-Bot via an H-bridge: In the circuit diagram, the "PWM tapped.." is blue (or light colored) wire of the paper moving motor, while "Ground point.." is the black wire pin on the paper sensor (shown in previous step).
You'll have to experiment with the voltage given to the bot's motors- change the voltage to adjust the speed of PrintO-bot so that the print swaths align well enough to give an almost accurate print. (I'm making a more robust method to do this. I'll update it here)
I used high torque dc motors to drive my robot as it has to start and stop very precisely, while carrying itself. The motors, wheels and mounts were from Pololu sales. Since we've to mount all the wheels very accurately, it is a good idea to laser cut the base with the exact dimensions for all the components that'll be mounted on it.
Parts used:
http://www.pololu.com/product/1103
http://www.pololu.com/product/1084
http://www.pololu.com/product/1083
http://www.pololu.com/product/1437
http://www.mcmaster.com/#1272t36/=semdej
Once that's done, I 3D printed the parts required to assemble the 4 wheeled chassis
Build a New Sturdy Housing for the New Print Head
I made a 3D printed 'holder' for the now-outside-the-printer cartridge. I made it in 3 parts- starting from the bottom most one. That was made in Vectorworks and printed using the Makerbot Desktop
Make It Work!
Now I have tonnes of stuff that can be used to decorate my room!