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
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.***
***unless you're willing to fabricate your own cartridge holder. You're on your own there.
Step 2: Get Everything Ready: the Arduino Software
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...
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.
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.
2 People Made This Project!
- michail1 made it!
- jagular1785 made it!
171 Comments
Question 1 year ago
Will this work on the Cat Genie A.I.?
Also, do I have to remove the cartidge holder or can I just build something for the wires so they are in the correct order and spacing?
1 year ago
This mod didn't work for my newer Catgenie 120, but I found another one that did and I used the same Arduino Uno I tried with this mod. Here's the link:
https://github.com/davidhampgonsalves/CR14-emulato...
I did exactly as David said, used the same wire colors and used his code. It doesn't reset the cartridge count, it emulates the the DRM/RFID and tells the computer the count is still good. I'm using all my dead cartridges now that have liquid still in them. I must have 30 of them, I just couldn't get myself to throw still usable cartridges out.
Anyways, there are just a couple steps that could be more clear like wiring. The colors are correct, but it could say that the blue wire should go to ground for the power, and it helps to tin the wire ends with a bit of solder so they're stiffer and stay in the connections on the arduino better. The Arduino will get its power from the Catgenie. I velcroed the Arduino onto the top of the Catgenie with the wires coming out of the inside hole in the Cartridge holder. I unplugged the wires from the RFID and cut the connector off. Using the same wires from the Catgenie and stripped the ends of the wires, tinned them, and plugged them into the Arduino. I installed an LED too but I don't think it's necessary. It blinked when I plugged it in but that's it. The Arduino has a couple small LEDs to let you know things are happening.
Cheers!
5 years ago
So was anyone ever able to get this to work for the 120?
Trying this code with the UNO and the LED just stays lit. Does seem to recognize the cartridge at all either.
Reply 3 years ago
I actually got through all these instructions (fixing the OG code myself) before I realized they weren’t going to work for my 120. What did work was to install this on an arduino and leave it inside the CatGenie. https://github.com/davidhampgonsalves/CR14-emulator-for-CatGenie-120
Reply 2 years ago
Hello Kalistibot,
Trying to reset my cartridges. Saw you published something but not sure if you could show me where the code is. my email is gabegomez@latin-beat.com
Thanks in advance,
Nolta
Reply 4 years ago
The 120 uses RFID from what I believe and cannot be reprogrammed. There is a chip if you google cartridge genius that works fine. I'm still running my CG60 with the arduino and a 120 with his chips. Almost 2 years, no solution, water only.
3 years ago on Step 3
Dude.... I don't really care if it works. You are funny and that made my day. Thank you for the humor. I do really want it to work so going to try!
4 years ago
I followed the instructions to the T with the new code in the comments. Everything works perfectly! Thank you!
5 years ago
I'm not ready to hack my cat genie yet but its thowing an out solution error code even though its a brand new cartridge. So I want to find the source of the beeping and cut it out. I have completely disassembled the unit but can't seem to locate the speaker, or source of the beeps so I can bypass it. any help would be appreciated. Thank you.
Reply 5 years ago
TYLERG78, you may want to double check and see if it is throwing an error due to the water sensor. I had mine do that a couple weeks ago. All you do is lift the Motor Box, computer, whatever its called off the Catgenie base. Where it sits there is a round pin that you pull out, clean off, and put right back in. Game on. Hope this helps.
5 years ago
here is ann updated code with allproblems worked out. not tested yet but uploads to an arduinoo mega 2560
[code]
#include
#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 resetCartridge()
{ for (int i = 3; i < sizeof(byteArray) / 2; i++)
{ Wire.beginTransmission(CG);
Wire.write(i);
Wire.write(byteArray[i]);
Wire.endTransmission();
delay(4);
}
}
void movePointerTo(int deviceAddr, int memoryAddr)
{ Wire.beginTransmission(deviceAddr);
Wire.write(memoryAddr);
Wire.endTransmission();
}
boolean verifyCartridge()
{ boolean success = true;
movePointerTo(CG, 3);
Wire.requestFrom(CG, 3);
while (Wire.available())
{ if (Wire.read() == 60 && success == true)
{ digitalWrite(isReset, HIGH); // sets the LED on
delay(50); // waits for a second
digitalWrite(isReset, LOW); // sets the LED off
delay(50); // waits for a second
digitalWrite(isReset, HIGH); // sets the LED on
delay(50); // waits for a second
digitalWrite(isReset, LOW); // sets the LED off
delay(50); // waits for a second
digitalWrite(isReset, HIGH); // sets the LED on
delay(50); // waits for a second
digitalWrite(isReset, LOW); // sets the LED off
delay(50); // waits for a second
digitalWrite(isReset, HIGH); // sets the LED on
delay(50); // waits for a second
digitalWrite(isReset, LOW); // sets the LED off
delay(50); // waits for a second
// looking good so far
}
else success = false;
}
return success;
}
void setup()
{ pinMode(isReset, OUTPUT);
digitalWrite(isReset, LOW);
if (isReset == HIGH) 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);
}
}
[/code]
5 years ago
Thank you for this post. I have several cartridges that are half full and the Catgenie 120 says that they are empty. Now I'm sitting here with no usable cartridges that are half full and have to wait for a new one to be shipped. I'm going to try this and see if I can get it to work.
6 years ago
If anyone cares...I found a temporary solution...
1. Take empty/full cartridge (shouldn't matter) and pull it out of the machine.
2. Insert cartridge and wait for lights to register and immediately press start until you hear the beep and genie starts up.
3. Pull out cartridge right after the genie starts.
You will have lights indicating no cartridge, but it will do the whole cycle anyway...The sanisolution is only added in the drying cycle so it's just for scent (it does help improve the smell a lot!!!)
I saw a post somewhere where someone was doing this...I ordered an Arduino chip and figured out after that it only works on the cg60 NOT 120 :(
I have been doing this with an "empty" cartridge for a while and it continues to work...possibly due to the CG not having time to recognize the cartridge level, but still enables the start function because it "sees" a cartridge in place for that 1 second.
I have yet to get a new cartridge to see if this process actually uses up the cycles stored in the cartridge...Try it out and let me know how it goes...You can't lose because it should work with spent cartridges as well
Reply 6 years ago
This is an interesting idea.. as long as it doesn't reduce the counter on a good cartridge. Perhaps you could set up a method by using a relay to temporarily disconnect the RFID reader in the control unit, or a servo to remove/position a good tag at the right time using an Arduino or other method. Maybe the relay could be triggered when the bowl motor runs, or a trigger line from the control board that is active when a cycle is running.
Reply 6 years ago
I tried this with an empty cartridge and didn't work for me. could it be that your cartridge wasn't quite empty when you started this process?
Reply 6 years ago
I think you're right. The cartridge I used must have 1 or 2 washes left...I just tried an empty one and it didn't work.
...So I guess you need a cartridge with at least a cycle left in it for this to work
6 years ago
has anyone come up with a solution for the 120 model yet?
Reply 6 years ago
I am still looking a year later.. Had I know that the darn thing would not run without the cartridge in it I would have never bought it!
Reply 6 years ago
cartridge genius.com - Keep checking back for stock on his item or send him an email. I don't think Arduino can do what the CartridgeGenius does...But I'd LOVE someone to prove everyone wrong!!!
7 years ago
Hello I would love one of these for my CG120 please email me if you can help me out Jesse2Caldwell@gmail.com