Introduction: CatGenie: Resetting a SaniSolution Cartridge

Some Background:
I have two CatGenies, both of which take a proprietary cartridge that are good for sixty cycles. The CatGenie will not run without a non-empty cartridge installed. In my home, each unit runs four times a day (I have six cats), so a cartridge lasts only fifteen days. Each cartridge is about fifteen bucks. For those of you following along without benefit of a calculator, that totals sixty bucks a month in cartridges.

Environmentally, four cartridges per month equals a lot of foil, plastic and little circuit boards in the landfill - and I really don't see how CatGenie could sell refills without totally redesigning the cartridge.

Proposed Solution:
Adding new solution to an empty cartridge is not that complicated (see my other instructable), but it isn't really helpful because the cartridge has a microchip on it that acts as a counter. When the counter reaches zero, the cartridge is trash. This instructable will demonstrate how to reset the counter on the cartridge to "full" - allowing you to drop it back into the unit and rock on.

NOTE:
This instructable does cover resetting but does not cover refilling the solution in the cartridge; it assumes you have done so already. If you need help with the refilling process, please see my other instructable.

Step 1: Disclaimers, Warnings, Materials and Safety

Disclaimer:
It should be noted that I am in no way affiliated with CatGenie or PetNovations LTD. This instructable is (obviously) not approved or endorsed by PetNovations LTD. CatGenie is a registered trademark of PetNovations LTD.

Should you break or damage your CatGenie, your CatGenie SaniSolution cartridge, an Arduino, your computer, sprain your thumb get divorced or whatever - you follow these instructions at your own risk and I assume no liability for what you do or what happens to you. You're a big person. Caveat Emptor.

Warning:
By following this instructable you may in some way void your CatGenie warranty... but as long as you don't send back the cartridge with non-CatGenie cleanser in it, I don't see how they would know.

Safety:
There really aren't any safety concerns I can think of beyond common sense. If common sense is an uncommon virtue for you, maybe you should find someone to help you. :-) If not, then rock on!

Materials:
  • an Arduino microprocessor (or clone thereof)**
  • some breadboarding wires and an LED (any color)
  • a computer with which to program said Arduino
  • a "dead" SaniSolution cartridge
  • a CatGenie you're willing to disassemble and put back together.***

**actually, any microprocessor that communicates via I2C (aka "Two Wire) protocol will suffice, but the Arduino is what I have available and one with which I am familiar. Programming a PIC controller or whatever is on you.

***unless you're willing to fabricate your own cartridge holder. You're on your own there.

Step 2: Get Everything Ready: the Arduino Software

The Arduino
Get your Arduino (I will be using a Diecimila so if you're at all intimidated by the Arduino, get that one), then download and install the software onto your computer. I know I'm being pretty vague here, but this is covered much better on the Arduino web site than I could ever do.

Verily thou must venture there, learn much, and return unto me enlightened. :-)

The Software Side

Once you've got everything bought / built / installed and working, you'll need to load this "sketch" (Arduino-ese for "program") into your Arduino (copy & paste it into your development environment, then upload it to your Arduino):
#include <Wire.h>#define CG (B1010000)boolean resetSuccess = false;int isReset = 13;int byteArray []= {01, 01, 01, 60, 60, 60, 60, 60, 60, 8, 8, 8, 33, 33, 33, 255};void setup(){   pinMode(isReset, OUTPUT);  digitalWrite(isReset, LOW);  Wire.begin();        // join i2c bus (address optional for master)}void loop(){  if (resetSuccess)   {    delay (2000);      // our work is done - pause for a while     resetSuccess = false;  } else {    resetCartridge();    resetSuccess = verifyCartridge();    digitalWrite(isReset, resetSuccess);  }}void resetCartridge(){  for (int i=3; i < sizeof(byteArray)/2; i++)  {    Wire.beginTransmission(CG);    Wire.send(i);    Wire.send(byteArray[i]);    Wire.endTransmission();    delay(4);  }}void movePointerTo(int deviceAddr, int memoryAddr){  Wire.beginTransmission(deviceAddr);  Wire.send(memoryAddr);  Wire.endTransmission();}boolean verifyCartridge(){  boolean success = true;  movePointerTo(CG, 3);  Wire.requestFrom(CG, 3);  while (Wire.available())  {    if (Wire.receive() == 60 && success == true)    {       // looking good so far    } else {      success = false;    }  }  return success;}
Those of you who are Arduino programmer gurus please feel free to optimize this code - just send me the improved version so I can post it here.

You needn't trouble yourself with the details of what is actually happening lest you feel so inclined; basically, you connect your cartridge to the Arduino and it turns on an LED when the reset is successful. When you disconnect the cartridge, the light goes out. Lather, rinse, repeat.

on to the hardware...

Step 3: Get Everything Ready: the Arduino Hardware

Okay... if you're going to hook your Arduino up to your cartridge, you're going to have to wire it up. Take a deep breath, find your center and relax. Its easy as can be... and we have pictures. Everyone loves pictures. :-)

NOTE:
My directions are for an Arduino Diecimila, so if you got a different version you may see some slight variations, but its probably nothing you can't figure out by your lonesome. If it is, just drop me a line and I'll help you out.

Picture #1 has us installing an LED. You can use any color you like. You'll jam the legs of the LED into Digital Pin 13 and GND (fortuitously situated next to each other) but first check the polarity! The bottom of your LED will have a flat edge. The pin on that edge needs to go into GND.

If you get it backwards, it will never light up. NEVER! Mwuhahaha...... Of course, you could always just turn it around. That might work.

I'm okay now. As I was saying....

We've got our indicator hooked up (cake, wasn't it?), now we just need to connect to the cartridge.

The chip on the cartridge has four contacts. I know, I know - it looks like there are eleven, but trust me... there are only four. Eleven little gold contacts connected to four wires: power, ground, clock and data, so four contacts. These equate to pins 3V3, Gnd, A4 & A5 on the Arduino. These are all on the oppsite edge of the board from the LED - if you want to make it easier on yourself you can use black, white, blue and green wires as I have done here in picture 2.

Step 4: Get Everything Ready: Disassemble Your CatGenie

I know.

You have a love/hate relationship with your CatGenie - but that doesn't mean you're ready to tear it apart. It was hard for me too, at first - but I persevered. I was able to move past my initial shock and horror, and embrace my inner hacker.

You can too. Be strong.

Or, you can build some sort of cartridge adapter. Up to you (I've done both) but this way is VERY reliable, and if you reset all your empty cartridges at once you'll only have to do this every couple of months or so.

We're going to try something different on this step: all the instructions are on the photos.

You will need a longer than normal phillips head screwdriver - I'd say six inch shaft [snort!] to be safe.

Step 5: Let There Be a Joining...

Okay. We've got an Arduino with an LED and four wires sticking out of it, our sketch (aka "program") loaded into the Arduino memory, and our CatGenie cartridge holding unit successfully extracted from the processor. We must connect them.

See the four silver contacts on the side of the holder? Those contacts are how the processor connects to the cartridge. We're hijacking them. Those silver contacts have wires going out of them to a small connector... If you used colored wires and set it up like I did in the photograph, it's easy as 3.14159. Just stick the blue wire into the connector where the blue wire is, etc.

If you didn't use colored wire:

  • Connect the Arduino 3V3 to the connector's red wire
  • Connect the Arduino GND to the connector's black wire
  • Connect the Arduino Analog In 4 to the connector's white wire.
  • Connect the Arduino Analog In 5 to the connector's blue wire.

Just like that, you're ready to go.

Step 6: Let's Reset the Damn Cartridge, Already! Sheesh!

The hard part is over.

Resetting cartridges is best done in bulk - use up all but one, setting the empties aside, then you can knock them all out in a few minutes on a Saturday and be done for a few months. Resetting a cartridge literally takes five seconds once you've done all the prep work.

Hook up your battery (or USB - remember the jumper) to the Arduino and give it about ten seconds to load the program and get it running. There will really be no indication that it's ready - I suppose I could add software for that later.

Slide the cartridge into the holder. The LED will illuminate almost immediately - reset was successful. Slide the cartridge out, and in a couple of seconds the light will go out - its ready to reset another one.

Lather, rinse, repeat.

Putting your CatGenie back together consists of reversing the disassembly.

Unplug your Arduino and set it aside until next time.