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.

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.

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.

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!

  • 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.
<p>Just a note to say that the sketch code above and the updated sketch in the comments doesn't work with the current Arduino v1.6.5, but you can download older versions that do work. I used v1.0.5 and it verified fine with no errors.</p>
<p>Hi mamalang. I know your post was 4 years ago, but I wanted to share with you the code I dressed up to current Arduino standard.</p><p>#include &lt;Wire.h&gt;</p><p>#define CG (B1010000)</p><p>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();} </p><p>// join i2c bus (address optional for master)</p><p>void loop(){ if (resetSuccess) { delay (2000);resetSuccess = false; } </p><p>// our work is done - pause for a while</p><p> else { resetCartridge(); resetSuccess = verifyCartridge(); digitalWrite(isReset, resetSuccess); }}void resetCartridge(){ for (int i=3; i &lt; 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 &amp;&amp; success == true) { </p><p>// looking good so far</p><p>} else { success = false; } } return success;}</p>
<p>PaulF1- Would you mind telling me if your code or the original arduino code posted works on the 120 cartridge. Id like to try and build my own but i have the 120 model.</p>
<p>Help please! Really need one of these for my 120 sani solution cartridges but am not able to do this.Will someone make one for me? I have a Macbook pro and an old PC running windows 98. Glad to pay through Paypal. Thanks</p><p>maeyer@earthlink.net</p>
<p>There are new units for the catgenie 120 at www.cartridgegenius.com</p>
Updated code for Arduino 1.0.1 and above. Power up and LED will light, attach contacts (insert cartridge) and when it is complete LED will flash several times.<br> <br> #include &lt;Wire.h&gt;<br> #define CG (B1010000)<br> boolean resetSuccess = false;<br> int isReset = 13;<br> int byteArray []= {01, 01, 01, 60, 60, 60, 60, 60, 60, 8, 8, 8, 33, 33, 33, 255};<br> void setup()<br> {<br> pinMode(isReset, OUTPUT);<br> digitalWrite(isReset, LOW);<br> if (isReset == HIGH)<br> isReset = LOW;<br> Wire.begin(); // join i2c bus (address optional for master)<br> }<br> void loop()<br> {<br> if (resetSuccess)<br> {<br> delay (2000); // our work is done - pause for a while<br> resetSuccess = false;<br> } else {<br> resetCartridge();<br> resetSuccess = verifyCartridge();<br> digitalWrite(isReset, resetSuccess);<br> }<br> }<br> void resetCartridge()<br> {<br> for (int i=3; i &lt; sizeof(byteArray)/2; i++)<br> {<br> Wire.beginTransmission(CG);<br> Wire.write(i);<br> Wire.write(byteArray[i]);<br> Wire.endTransmission();<br> delay(4);<br> }<br> }<br> void movePointerTo(int deviceAddr, int memoryAddr)<br> {<br> Wire.beginTransmission(deviceAddr);<br> Wire.write(memoryAddr);<br> Wire.endTransmission();<br> }<br> boolean verifyCartridge()<br> {<br> boolean success = true;<br> movePointerTo(CG, 3);<br> Wire.requestFrom(CG, 3);<br> while (Wire.available())<br> {<br> if (Wire.read() == 60 &amp;&amp; success == true)<br> {<br> digitalWrite(isReset, HIGH); // sets the LED on<br> delay(50); // waits for a second<br> digitalWrite(isReset, LOW); // sets the LED off<br> delay(50); // waits for a second<br> digitalWrite(isReset, HIGH); // sets the LED on<br> delay(50); // waits for a second<br> digitalWrite(isReset, LOW); // sets the LED off<br> delay(50); // waits for a second<br> digitalWrite(isReset, HIGH); // sets the LED on<br> delay(50); // waits for a second<br> digitalWrite(isReset, LOW); // sets the LED off<br> delay(50); // waits for a second<br> digitalWrite(isReset, HIGH); // sets the LED on<br> delay(50); // waits for a second<br> digitalWrite(isReset, LOW); // sets the LED off<br> delay(50); // waits for a second<br> <br> // looking good so far<br> } else {<br> success = false;<br> }<br> }<br> return success;<br> }
And no need to tear your cat genie apart. Here is the resetter I made from wire, electrical tape and a little piece of cardboard. I just hold it on the cartridge when I want to reset.
<p>Hi.</p><p>You have them marked 1-4, and don't show what they connect to.</p><p>Im assuming one is a 9volt battery..Ground and Power.. and maybe the other 2 are ground and input leads? Question is... what do each of these numbers go to?</p><p>Thanks! </p><p>jemtec@roadrunner.com</p>
<p>what size of wires did you use and what kind</p>
Can you make one for me? I will pay you! I have the CG60, please reply! I need this bad!
The 120 Cartridge (clear) do not work within the original <a href="/catbox120.wordpress.com/2010/09/11/catbox/">CatGenie</a>, which only uses the 60 Cartridge (green) The 60 Cartridge do not work within the <a href="/catbox120.wordpress.com/2010/09/11/catbox/">CatGenie</a> 120.
I was wondering if <em><strong>this instructable</strong></em> worked on the cat-genie 120 cartridges, NOT if the cartridges are interchangeable!!! Still waiting on a answer...
Hi <br>I am British (don't hold that against me). I have the Cat Genie 120. Only had it since April 2013, yes I have a love hate relationship with it already. We have 8 cats so it is proving to be expensive. Has anyone managed to refil and re use a 120 cartridge. And if so could you walk me through the steps. Would be grateful. In desperate need of some help <br>Graham
I am also wondering if this will work with the 120, have you gotten a response yet Graham? <br> <br>TIA! <br>~G~
geezus. i am so tech impaired and I managed to do this on the first try. I had a broken cat genie I bought from CL for 10 bucks for the spare parts so I used the cartridge part and now have a separate cartridge holder yay! I cannot believe how amazing this is i'm still shocked how easy it was. The only thing that was weird was that I had to turn the LED around so the flat side had to be the opposite of the directions. But, in the end, I found the LED wasn't necessary at all with the Duemilanove because the board has another blinking light that blinks the same cadence(?) as the LED once it works. GREAT DARN INSTRUCTABLE!
Hi, <br>Does this works with the new 120 sani solution cartridges? <br>Thanks
does anyone know what i have to do with my cat genie, on first cartridge only...it is full of water and wont finish the cycle. i cannot TOLERATE calling them, having serial number found, and waiting for a call back, help!
i have switched to wood pellets, and 20 cent aluminum trays from warehouse club....they are wonderful and i make many ahead of time like they do at shelters! but thank you for when i tackle emptying my genie that has been brown for many weeks now........full of water!!
Great work!<br/><br/>I've made a few mods to the code which :<br/> - Flash the LED on for 5 seconds at startup, to show the program is working<br/> - Correctly lights and blanks the LED on a successful cartridge reset. Previously it was always on.<br/><br/>You should remove the cartridge during the time that the &quot;reset OK&quot; light is on (2 seconds).<br/><br/>This worked well on my Duemilanove.<br/><br/>For some reason they don't allow code to be pasted into comments - new code is available at <a rel="nofollow" href="http://www.poptart.org/catgenie.pde">http://www.poptart.org/catgenie.pde</a><br/>
is there any way to make this unit set for 255 cycles? if so what do i need to change on the program<br /> thanks
It is byteArray[3] that holds the number of uses to be written to the cartridge, so that's the 4th number in the array.<br /> <br /> You can try changing that to a higher number, though beware that the CatGenie might not like it (haven't tried myself as I like to be reminded when the carts are getting empty).<br /> <br /> If it doesn't work, just change it back to 60 and re-flash.<br /> <br /> <br /> J&gt;<br /> <br />
omg that sounds like way to much info for im not that smart is theire any way ican get one all ready made please me im laid off and icat keep buying them they cost way to much and ihave 5 cats the needy cat lady heidi
sorry forgot email see heide1963@aol.com
Every time I do this, the light continually blinks after I put the cartridge in the holder.
Maybe I'm doing this wrong- When I use your program on my Duemilanove, it loads fine and when I reset the board it turns the light on for 5 seconds, then shuts it off. That's it until I reset it again. If I connect the cartridge after the light goes out, still nothing. I don't get the "reset OK" light, at all. And none of this seems to reset the cartridges, regardless of the LED lighting or not. Is the proper sequence turn on board, wait for light to go out, connect cartridge, wait for "reset OK" light, remove cartridge while light is on? How important is it that this all be done exactly right? I have successfully reset all 5 of my cartridges twice before, with the older version of the resetting program. However, I have had some weird issues lately with my cartridges not wanting to work after resetting, or working sporadically. The CG was complaining that the cartridge was empty (it was full), so I reset it and the CG ran a cycle, then started complaining again... Is it possible that I have damaged the chips on the cartridges? I'm just having a really hard time knowing what is going wrong, and I'd like to be sure I'm doing as many things right as possible. Thanks!
UPDATE- I bought new cartridges, and they fixed it. I think I definitely managed to "pop" my chips somehow... I'm still interested in the proper sequence, etc, though. Please, help me not pop my cartridges again!
That link to the program appears to be broken (for me at least). Can you re-post a new one please?
Hi... think there was a network problem at the time. Can you try again now? Seems OK for me.
Yes, it must have been a network problem because it is working fine now. Thanks a lot for the work on the updated code!
WORKS FINE...! thanks!
Does it work with CatGenie 120 cartridges?
Its called the &quot;Cartridge Genius&quot;
There is a device on the market that works with the 120 now. Here is a link to the forum that its posted on. <a href="http://www.litterbox-central.com/litter-box/catgenie/topic3601.html#p20848">http://www.litterbox-central.com/litter-box/catgenie/topic3601.html#p20848</a>
In one of the previous strings someone mentioned that you could get the cartridge 're-setter' already made but the people selling them had to go underground due to law suit threats by Cat Genie. How does a person find someone selling these? I read the string about how to do it yourself and it is waaaaaaay beyond me. If someone has information I can provide my email. thank you.
Nice ible! Your humour in your writing kept me reading all the way to the end :D A cute picture of cats prowling around the CatGenie (after cleaning not before!) would probably make this front page worthy! It's very well written and probably something a lot of people would thank you for!
Idid it! I did it! I am not a computer geek at all but I can follow instructions. Bought the board, hooked up as described and it worked. Thank you all!! Especially the author of this thread.
Hi I've just uploaded a new Instructable that builds on this one. Take a look at <a href="http://www.instructables.com/id/CatGenie-A-smart-resettable-SaniSolution-cartrid/">http://www.instructables.com/id/CatGenie-A-smart-resettable-SaniSolution-cartrid/</a>. There's a new version of the code and some other enhancements.
Use the below code when programming your Arduino. Upon powering up, the LED will remain lit. When you apply your board to the contacts on the cartridge, it will flash on and off several times, and you know it will have worked.<br><br>#include <br>#define CG (B1010000)<br>boolean resetSuccess = false;<br>int isReset = 13;<br>int byteArray []= {01, 01, 01, 60, 60, 60, 60, 60, 60, 8, 8, 8, 33, 33, 33, 255};<br>void setup()<br>{<br>pinMode(isReset, OUTPUT);<br>digitalWrite(isReset, LOW);<br> if (isReset == HIGH)<br> isReset = LOW;<br>Wire.begin(); // join i2c bus (address optional for master)<br>}<br>void loop()<br>{<br>if (resetSuccess)<br>{<br>delay (2000); // our work is done - pause for a while<br>resetSuccess = false;<br>} else {<br>resetCartridge();<br>resetSuccess = verifyCartridge();<br>digitalWrite(isReset, resetSuccess);<br>}<br>}<br>void resetCartridge()<br>{<br>for (int i=3; i &lt; sizeof(byteArray)/2; i++)<br>{<br>Wire.beginTransmission(CG);<br>Wire.send(i);<br>Wire.send(byteArray[i]);<br>Wire.endTransmission();<br>delay(4);<br>}<br>}<br>void movePointerTo(int deviceAddr, int memoryAddr)<br>{<br>Wire.beginTransmission(deviceAddr);<br>Wire.send(memoryAddr);<br>Wire.endTransmission();<br>}<br>boolean verifyCartridge()<br>{<br>boolean success = true;<br>movePointerTo(CG, 3);<br>Wire.requestFrom(CG, 3);<br>while (Wire.available())<br>{<br>if (Wire.receive() == 60 &amp;&amp; success == true)<br>{<br> digitalWrite(isReset, HIGH); // sets the LED on<br> delay(50); // waits for a second<br> digitalWrite(isReset, LOW); // sets the LED off<br> delay(50); // waits for a second<br> digitalWrite(isReset, HIGH); // sets the LED on<br> delay(50); // waits for a second<br> digitalWrite(isReset, LOW); // sets the LED off<br> delay(50); // waits for a second<br> digitalWrite(isReset, HIGH); // sets the LED on<br> delay(50); // waits for a second<br> digitalWrite(isReset, LOW); // sets the LED off<br> delay(50); // waits for a second<br> digitalWrite(isReset, HIGH); // sets the LED on<br> delay(50); // waits for a second<br> digitalWrite(isReset, LOW); // sets the LED off<br> delay(50); // waits for a second<br><br>// looking good so far<br>} else {<br>success = false;<br>}<br>}<br>return success;<br>}<br>
I keep getting this when i try uploading the sketch:<br>undefined reference to setup.<br><br>Anyone have any ideas??
Okay, I'm about to put my head through a wall with this one. :(<br><br>I'm using the modified code posted in the first comment, and everything LOOKS like it's going to go through fine, but when I put a catridge in... nothing. No light, nada. I know other people have mentioned the same result but the reset worked... however, when I go and plop the cartridge into my catgenie, the reset never went through. Tried it with 3 carts, all to the same result.<br><br>I'm using a Mega2560, but the code looks pretty standard, and all the pins are right where they belong. This is just baffling to me, but I will be damned if I have to shell out money for more of those damned cartridges. :) Any idea what my issue may be?
I would pay for one of these as I have no hacker smarts. Please email candyann@telus.net <br>Thanks.
After reading through allot of the blogs it sounds like to me that the cartridge is using a RC charge timer to disable the cartridge. They do this in the auto industry to tell the computer the engine is still in its break time. After so many hours of charging the cap through a resistor the computer triggers on a set voltage setting a bit in the computer and then computer allows the engine to run at full power and acceleration limits. I read in one of the blogs that a gentleman shorted the two center contacts on the cat genie and he could constantly refill the cartridges. While another Gentleman tried this after the cartridge had been disabled and it would not work. I think what happened is the gentleman it worked for did this while the cartridge was new, shorting the blue contact to ground never gives the capacitor a chance to charge. But if you do it after the cartridge reaches 60 cycles you have to reset the EEprom which gets set when the cat genie reaches 60 cycles. So what I am saying is if you short the two contact pins (4 pins) in the center before the cartridge is disabled the cat genie never triggers on the RC time constant voltage and the EEprom never gets set. What keyed me in on this is you are using the analog voltage pins, why the analog voltage pins. If the cat genie is also using analog voltage I/O pins which are different from Digital I/O pins then there has to be a reason. Let me know what you think. I have a cat genie with about 8 wash cycles on it and a new cartridge. I am going to measure the voltage on those pins with a DMM to see if there is a difference between the two cartridges. If there is I will get back to you and let you know.
Hello. Who is gentleman. Write address of bloog where he said that he had made changes to reset. Thanks.
Hey doc, hope you get back soon. Since there are 11 pins on the cartridge and four on the unit is it easier to short the unit pins or the cartridge? If on the cartridge which of the 11 should be shorted together? Do not want to cause harm to the unit by shorting all of the wrong pins as my GF would NOT be happy with me and of course I would end up paying for a new board!!! Thanks, Steve
Steve, The pins maybe reversed from right to left rather than the way I stated left to right. Just follow Scotts instructions and you will be OK.
Hi, well the contacts are as follows from left to right 11,10(Skip 9) 8,7 (Skip 6) 5,4 (Skip 3) 2,1. The two pin line up like (1,2) are the same signal, why they used an 8 pin format for a two wire communications set up is anyones guess? (4 wire actually including +3.3v and Gnd) Probably did it to try and confuse everyone and make it look harder to mod than it really is. I don't suggest Shorting them on the cartridge as it may interfere with the mechanical fit or damage the contacts. Actually I'm pretty sure the pins on the cartridge are already shorted internally so all you really need to do is make contact with one of the contacts in each of the paired up sets. I used contacts from a AA wall type battery charger (Non spring type), the contacts on it were just the right width to contact both pins and long enough to glue to my home made sleeve. The skipped pins (9,6 and 3)are not connected to anything so if one of your contacts touches it and the adjacent pin does not your in the clear. At worst you ruin the cartridge or burn out the analog ports on the arduino processor board. Thats half the fun of it though, then you get to try again. Just follow Scotts instruction to the letter and you will be ok. Also the program does need a mod, that "While wire available" statement needs to be taken out. If the cartridge is removed the while sequence can't run and the light can never be turned off. The program is ok the way it is now, it will work just turn it on and press the reset button while connected to the cartridge. Have fun?
Hey doc, any luck with shorting the cap?
No it did not work. Theb arduino does the job well though. I don't know what the guy who did this had but he claimed it worked. Definitely was not configured like the current cat genie what ever he had or even if it ever really worked? No capacitor.
Has anyone found the hack for the new 120? or a way to by pass or send new firmware to unit ?<br /> <br /> or better yet is there a way to make the old 60 do what the new 120 does?<br /> <br /> thanks

About This Instructable


29 favorites


More by ScottSEA: Put Your CatGenie in &quot;Tech Mode&quot; CatGenie:  Resetting a SaniSolution Cartridge CatGenie:  Repairing (And Preventing) An Arm Rotation Pin Failure
Add instructable to: