Introduction: CatGenie: a Smart, Resettable SaniSolution Cartridge
The project
This project follows on from the excellent work by ScotSEA and his Arduino reset program (see https://www.instructables.com/id/CatGenie-Resetting-a-SaniSolution-Cartridge/ ). I had never taken my Catgenie apart as Scott did, but had built a small contact board instead. I had previous updated Scott's program to so that it output some debugging output to the computer during the reset, as the process had never been very smooth.
Today I got round to testing some more permanent solutions. I tried :
- Making the Arduino pretend to be a cartridge . This didn't work for some reason - the controller never seems to receive any I2C commands from the Catgenie.
- Replacing the cartridge with a 24LC00 EEPROM . While I could read from and write to the chip using the Arduino, the Catgenie didn't like it.
The solution I ended up with is a modified SaniSolution cartridge that contains an Arduino, some indicator LEDs and a button to reset the cartridge. It is powered by the Catgenie and so is fully self contained.
Required materials
You will need :
- An Arduino board. I am using the Duemilanove, but the newer Uno or one of the smaller cheaper boards should be fine
- 2 x LEDs (eg. one red, one green)
- 1 x press switch/button
- 1 x 10k resistor
- A small piece of stripboard to wire up the LEDs and button
- Some terminal pins
- A soldering iron and solder
- Some thin wire (I used some un-twisted Cat-5)
- A very small drill bit (I used 1.0mm), and a drill
Step 1: Preparing the Cartridge
Overview
The Catgenie communicates with the chip on the cartridge through the exposed contacts. For the more technical minded, the Catgenie acts as an I2C bus master (providing a clock signal), and the cartridge acts as a slave. We will add our Arduino as a second slave on that same bus.
To facilitate this, we will solder some wires to the contacts, and feed these inside the cartridge to be connected to our circuit.
Drilling holes
It may help to remove the cartridge label as shown in the picture above. There are four I/O connections on the cartridge, each exposed through two of the connector terminals. Counting from the top :
Terminal Usage
1 and 2 +5V
3 No connection
4 and 5 Ground
6 No connection
7 and 8 SCL (the I2C Clock line)
9 No connection
10 and 11 SDA (the I2C Data line)
Drill 4 holes in the plastic part of the cartridge (be careful not to drill the circuit board), between terminals 1/2, 4/5, 7/8 and 10/11.
Connecting the wires
Find two piece of twisted-pair cable and strip a few millimetres of insulator from the ends.
Push the stripped conductors of one pair through the top two holes, from the inside side of the cartridge. Do the same with the second pair and the bottom two holes. Lay the conductors flat on the terminals, and then solder them to the terminals, as shown in the pictures.
Hopefully you can do better than my child-like attempt at soldering!
Make a note
Write down the colours of the wires that you soldered to each connector - you'll need this later in the process.
Step 2: Fit the LEDs and Button
Now we can take the cartridge apart. Use a small screw driver to loosen the catches on the side of the cartridge, and prise it apart carefully.
Before we install any electronics into the cartridge, we will drill some holes and fit the indicator LEDs and button. This will depend on the size of your LEDs and button. Make the holes in the top of the cartridge so that they are visible and accessible when the cartridge is inserted into the Catgenie.
Solder a length of twisted pair wire to each LED and to the button before fitting them. I used a glue gun to fix the LEDs and button in place.
The photo above shows the inside of a cartridge with 2 LEDs fitted, and also shows the wires that connect to the chip on the front of the cartridge. Note that I used a glue gun to secure those wires as well to prevent their movement causing fatigue of my terrible soldering joints.
Step 3: Prepare the Arduino
We need to upload some code to the Arduino that will instruct it how to re-program the counter on the chip and control the indicator LEDs. The process of doing this is straight forward, but is better explained by a more general guide. If you are unfamiliar with the Arduino, I suggest reading the Getting Started guide, at http://arduino.cc/en/Guide/HomePage .
You need to run the Arduino Development environment, after connecting the board to your PC using a USB interface. The USB connector will power the board during this process.
Download the sketch, from http://www.poptart.org/catgenie2.pde . It can run either in 'master' or 'slave' modes. You need to use the master mode when testing connected to the PC's USB, and slave mode when its running through the Catgenie.
Locate the 'Wire.begin()' lines in the setup() function. To start with, use the standalone option, and upload it to your Arduino using the development environment.
Step 4: Build the Strip Board
A small strip board needs to be created to connect up the LEDs, switch and cartridge chip. The photo above shows how to do this. There are three strips:
- +5v line, to connect the power from the Catgenie up to the Arduino and switch
- 0v line, to sink voltage from the LEDs and provide a common to the Arduino
- Switch line, which pulls the Arduino's input line down low when the switch is not depressed
Just cut a small piece of strip board and solder in some terminal pins. Connect the ground strip to the strip below it by soldering a 10K resister between the strips.
The +5V and Ground lines from the cartridge chip can then be soldered to 2 of the terminal pins. The other terminal pins should then be connected to new wires that connect to components or to the Arduino connectors
Step 5: Putting It Together
Now the only step left is to connect the Arduino's two I2C pins to the cartridge chip. Connect the SDA wire to Analogue pin 4, and the SCL wire to pin 5.
Before gluing the Arduino and strip board into the cartridge, connect the Arduino to the PC using the USB connector. Run the Arduino development environment, and click the 'Serial monitor' icon. Select a Baud rate of 115200 and press the Arduino's reset button.
You should see a message from the Arduino on the serial monitor. If not, check that you uploaded the sketch correctly. The two LEDs should flash several times. If they don't then check your wiring.
When the serial monitor says 'Waiting for button press', press the button. Both LEDs should light, and the serial monitor should display some debug information. The LEDs should then go out. If successful, the LED connected to Arduino digial line 12 should flash. If it failed, the LED connected to digital line 11 should flash. I used a red LED for pin 11 and and green LED for pin 12.
If all went well, then you need to switch the sketch into slave mode (see the comments in the setup() function). Do that, and upload again to the Arduino. Note that it will no longer work via the PC - you need to have it connected to the Catgenie now.
You can glue the Arduino and strip board into the cartridge using a glue gun.
Step 6:
Using the cartridge
Put the cartridge back together and insert it into the Catgenie.
The Arduino should get power from the Catgenie and boot the program we uploaded to it earlier. It will flash its LEDs several times, and respond to the button press as it did when we were testing it using USB earlier.
Enhancements
The obvious fault with this design is that the Catgenie no longer dispenses any cleaning solution. I will work through the options for this over the next few weeks and will update this Instructable when I've found something that works.
Feedback
It would be great to see how other people get on with this. If anything needs to be explained in more detail or if I've made any stoopid errors please let me know.
It would also be good to hear from anyone who can get the Catgenie working with plain EEPROM chips, or can get the Arduino to behave as the cartridge. Its a mystery to me why those approaches didn't work out.
23 Comments
10 years ago on Introduction
I spent a few hours troubleshooting my cartridge using this tutorial. No matter what I did, as soon as I pressed the button, both LEDs would light up and stay solid. No debugging info in the console. I verified that it was failing on the Wire.endTransmission(); line. After banging my head against the wall, I finally noticed that the contacts on the cartridge chip are labeled differently in the very first picture of the tutorial and the "soldered" picture. In the soldered picture, the contacts are labeled with +5 volt at the top, then GND, then SCL, and SDA at the bottom. In the first picture, the labels are reversed, with +5 volt at the bottom, then GND, then SCL, and SDA at the top. When I rewired the insides according to the labels in the first picture, the cartridge worked like a charm. The correct debugging info showed up in the console and the LEDs worked correctly. So if anyone is having the same problems I had, change the wiring according to the labels in the first picture.
Reply 5 years ago
Thanks! This fixed my problem.
6 years ago
If anyone cares...I found a temporary solution... for CatGenie 120..haven't tried on CG60
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
7 years ago
If there is any chance of me buying one of these units from you please contact me at tammymnephin@gmail.com :)
7 years ago
Any possibility of buying one of these from you?
7 years ago
Any interest in building one and selling it to me? At the moment, $ are more available than time.
7 years ago
Does anyone have a link to the code? The above link doesn't have a sketch in it.
Reply 7 years ago
Fixed... should be there now.
Reply 7 years ago
Did you set up your cartridge to use external solution? If so, any tricks or just plumb directly to the nipple and have the bottle of solution about level with the cartridge? Thanks.
Reply 7 years ago
Thank you! I had to change some syntax, but it's uploaded fine now.
8 years ago on Introduction
Just a simple but fundamental question: does this project work with the CatGenie 120 or its only for the old CG60?
Thanx for the answer.
Reply 7 years ago
For the 60 only I'm afraid.
I owned a 120 after the 60, and didn't persue a cartridge hack for that as the cost point for the 120 cartridges is much less, especially using some of the extra cleaning modes that model supports.
Reply 7 years ago
I would bet by know you have gotten your answer, but in case you haven't this only works for the CG60. CG corporate got wise to this and changed to a RFID chip. Spoiled everyone's fun.
7 years ago
Contact me, I'd be willing to pay for this device as CatGenie has basically stopped selling the 60 cartridge. My email is hedst028@umn.edu. Thanks.
7 years ago
I am looking for some one who can make me one of these things. i have 2 extra cartridges. the instructions are great its just me....i dont get this sort of thing at all. can i please buy one of these devices? gene32@comcast.net
8 years ago on Introduction
I am just overwhelmed reading this! Could someone just make one for my cat genie 120 and I can pay through paypal?
Reply 7 years ago
I would bet by now you have your answer, but in case you haven't this only works for the CG60. CG corporate got wise to this and changed to an RFID chip. Spoiled everyone's fun.
8 years ago on Introduction
I NEED HELP, PLEASE! Lol, man oh man, Ive been trying code after code in my Arduino, and trying different setups. Can I exchange emails with someone and get some help finishing this project?
Thank you!
AdventureJohnson at gmail.com
11 years ago on Introduction
Great stuff man. I was already a user of the previous resetting system. I adapted your proposal to my previous settings. Now, Ã have an arduino on the side of my catgenie. It is directly linked to the cartridge holder connectors. I also modified your script in order for the arduino to reset automatically the cartridge frequently (no more button). Indeed, it is easy to notice when your cartridge is empty ... it smells lot more and no bubble during washing process :) Thus, solution is (as far as the cartridge is not really empty) dispensed and no more beeps ... love it !
Thx again for this great tuto
Reply 11 years ago on Introduction
I was thinking of the same thing. I was going to change the program to emmulate a button push when it got down to 1. Can you post your sketch that you used?