With this hack, you can reset your Canon printer's maintenance cartridge.
The high operational expenses of printers are well-known. Typically, these take the shape of pricey ink cartridges that need to be replaced even if they still have some ink in them. However, certain printers, such as Canon Pixma G models, go a step further by integrating a maintenance cartridge. A new MC-G02 maintenance cartridge costs roughly $10, but if you need to change yours frequently, the expense adds up quickly. Yancey Wang devised a workaround that simply takes an Arduino Uno and some wire to erase that expense.
The MC-G02 maintenance cartridge is used by Canon printers to retain waste ink after certain procedures, such as print head cleaning. Canon anticipates that the cartridge will soon run out and that you will need to replace it. The printer will cease operating if you don't. However, users may empty and reuse the maintenance cartridge, eliminating the need for a new one. The issue is that the cartridge contains a built-in "counter" chip that will inform the printer that it is full even if the user has emptied it.
You'll need the following items to complete this project:
Understand the fundamentals of Arduino, such as how to upload and run programmes on the board, and how to view output from the Serial Monitor.
Connect the chip to Arduino after removing it from the cartridge.
Using an arduino, connect the chip to the computer.
Remove the chip from the cartridge and reconnect the wires after removing the cartridge from the printer.
These two 10k ohm resistors are used as "pull-up" resistors.
Dump the rom (if you can't get one elsewhere)
With the Arduino IDE, open the programme inside sketch_hack_read, upload it to Arduino, and execute it.
If everything goes as planned, Serial Monitor will show the following output (using baud rate 9600):
Start Dumping...
Below is your rom:
const unsigned char my_rom1[] PROGMEM=
{
0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,...,
...
...
}
The rom you dumped is the {0xXX,0xXX,0xXX,0xXX,...}, Each 0xXX represents a byte, and there should be 2048 of them. Because the chip is a 16Kbit eeprom. Save this for later use, preferably with the const unsigned char my_rom1[] PROGMEM= so that it may be copied as a whole.
If you get something different, such as Wire Not Ready!!!, something is amiss. (For example, your cable is not connected properly or securely).
Note: If you obtain a corrupted dump, it's recommended that you dump it again and make sure the two dumps are similar.
Write the rom dump to the chip.
Open the sketch_hack_write programme in Arduino IDE and copy the whole const unsigned char my_rom1[] PROGMEM={0xXX,0xXX,0xXX,0xXX,...} (there is an indicator to help you locate the place).
Run it after uploading it to Arduino. If everything goes as planned, Serial Monitor will display the following output (baud rate 9600):
Start Writing Rom...
current writing page:0
current writing page:16
......
current writing page:112
Write Done!
Start Dumping for Verification...
Check if this dump matches with before by yourself:
const unsigned char my_rom1[] PROGMEM=
{
0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,...,
...
...
}
The application starts a verification dump after writing the dumped rom onto the chip. At the very least, make a quick visual inspection of the value: the verification dump should match the rom you used for writing. To be extra cautious, use various diff tools to make sure those numbers are same (e.g. vimdiff).
The chip in your cartridge has now been "resetted." Reattach the chip to the cartridge before inserting it into the printer. (You may wish to clean/dry the wasted inks within the cartridge before reusing it.)