Sean Harkin, Chris Luginbuhl, Max Lander
Blue foam, button, servomotor, furry
Everyone loves a clean cat. Everyone loves a carwash. Our project combines these two great things for something even greater.
Remember the first time you were in a carwash? Those soapy rollers like an undersea spectacle, magic fingers washing away the traces of your dusty travels? Now cats can experience the magic of a carwash with Kitty Catwash!
We did some brainstorming and came up with a few ideas:
-Using the servomotor and an attached arm to press the button (referencing Useless Box)
-Hacking the button to use it as a spring-powered fur launcher, which would glue blue foam “fur” to a blue foam model of Chris’s bald head.
-Taking the spring out of the button, compressing it with the servo and making a furry creature hop or fly (pics below)
-Modifying two buttons to have a longer spring-loaded travel, and put them in the legs of a blue foam sasquatch. Use the servo to compress and release the buttons in alternate legs to create a walking motion.
-Making a machine to draw fur patterns with a stylus.
-Using two servomotors to power large brushes/rollers like a miniature carwash….for cats. This is the concept we developed further
We tried making blue foam furry in a variety of ways
-Drawing fur on it in pen
-Cutting triangles onto it
-Using different sizes of cheese graters
-Using a woodworking rasp
-Using a lathe with a dull toolbit
Building the circuit with servomotors and making them run helped give us the idea of a carwash because of the washing machine-like back and forth motion.
Step 1: Initial Sketches
Once the final design had been chosen, the first step were some rudimentary sketches to get an idea of how the product would go together. The sketches, although basic, were the preliminary basis for the rest of build. This process allowed us to establish rough sizes for our components; however we failed to account for the fully assembled height of the button. Thankfully, we were able to correct for this in the digital modeling stage.
Step 2: Digital Modeling
The components were then digitally modeled using Autodesk Inventor. The aim was to create and assemble the components digitally to try and predict any issues which may arise in the build. Initially they build went well, until the button component was added. As can be seen below, the casing did not accommodate the full length of the button. The solution was to increase the size of the handle’s lid. By increasing the depth of the lid instead of the base, the button itself would be better supported in the prototype.
Step 3: Build
Building the components was fairly straight-forward since we had both sketches and a digital model to work from. As the brief for the project outlined our material as blue foam, we tried to minimise any additional materials. For the handle and the lid, the blue foam was cut to size using a bandsaw, and any supplementary subtraction was made using a free-hand cutting blade. The only additional material used – outside of our Creatron Kits – was the hot-glue which was used as an adhesive. For the handle, the material was cut to the correct size and then cut in half. This allowed the excess material to be cut out with ease. The pieces were then glued back together to form the handle. The lid was also cut to size, only requiring a bored hole from a pillar drill for the button.
Step 4: Assemble
Again, due to our thorough design process and simple design, we were able to assemble the product without much hassle. First we moved our electronics from the breadboard to the protoboard; this was always the plan as the breadboard was thought to be too cumbersome to be included in the final product. We assembled the components on the protoboard and were able to cut it down to size for the handle (Note: Max’s button died at this point making us think the soldering/code was not correct, after a short while we realized it was the button and replaced it).The protoboard was inserted into the handle using a tight-fit. Similarly, the servos used a tight-fit joint into the handle, with the rollers were attached to the base of the servos by a hot-glued washer. The button supplied came with a washer to secure in place inside the lid. The group discussed using more permanent joints, however settles on the idea that this was a prototype of the final product. Although functional, if we were proceed with the product more permanent adhesives and joints would be used.
CIRCUIT DIAGRAM & LAYOUT
The most recent code can be found on our GitHub.
The v1 code can also be found there if you dig. An easier way is to find it in our other repository:
Getting the button connected to the servo was easy. That being said, the button itself is quite finicky/sensitive. It’s very tricky to get a single press out of it and more often than not it reads multiple click (AKA many 1’s). Looking into it further provided us with a number of avenues to compensate for this, but after talking it out we decided to with holding down the button, and avoid the press down noise altogether.
Using the “buttonservo” code (which is a mashup of the default Button and default Servo codes in Arduino), we tried to play with the angles and time between updates to see if we could get a constant increase, but again was confronted with the finicky button. Most of the time, regardless of the settings, the button would interrupt itself and the servo would stop and start again from it’s updated spot, which would have been great if it could process it fast enough to give a constant loop, but we weren’’t able to get that happening.
So, we moved on to the internet to try and find a solution, which led us to this ask for help – https://arduino.stackexchange.com/questions/17536/controlling-servo-motors-with-push-button-problem-though, which moves the servo from one end of it’s range to the other on a button click. The problem with this for our purposes was, again, the single click. We tried multiple ways to adapt this to to be constant press friendly – namely trying to make one click result in one degree of movement, mostly to no avail. What this process did make us realize was that the range of movement needed to be much shorter than both of these options were currently operating on, somewhere in the range of 60 degrees. And also back and forth, the back and forth is important (this was forgotten many times and resulted in half successes of it going in one direction and then breaking when trying to add reversal). All this lead to “ButIncr” (see GitHub repository revision with this name).
Unsurprisingly, the code did not work. As we was trying to troubleshoot this and not having much success, we returned to an earlier version that had been close and adjusted the degrees to 60, thinking that worst case scenario it could be multiple fast clicks if not a constant press. Plugged it in and held it down, and it did exactly what we wanted – it moved quickly between two points. Which is great, except that’s not what it’s supposed to do. It works because it is constantly cutting itself off after only a small amount of movement. But also, it functions exactly how we wanted to, so we decided to keep it and move on to putting it altogether.
With this first version working, we created a branch of this code on github a fresh developer was brought in to pick up the torch.
One issue with servomotors that we wanted to address is their tendency to “lurch” at full power to a new position when first connected. In our development branch, we made a change to the algorithm: in the arduino’s loop() method, had the arduino read the button state, and if pressed, move from 1 degree to 60 degrees and back to 1, then check the button again and repeat.
Returning to 1 degree ensures the servo is always “parked” in the same position and avoids lurching. We used 1 degree as the start/end point rather than 0 because one of our test servos was straining against the hard stop when set to zero.
As a general rule, animal owners will buy anything for their pets. In the context of the internet and a constant need for entertainment, this is twofold applied when talking about things that make their pets entertaining . Further to that, cleaning cats is often the worst part of having cats, besides finding their fur in everything (An example DIY solution to all of these consideration can be found here, in this video of people vacuuming their cats – https://www.youtube.com/watch?v=v_qYwJ94Ja8).
As physical computing technologies because more and more accessible to more and more people (and kids!) we get to see the creation of more and robots, many of which exist primarily as entertainment devices (most notable of these is Simone Giertz’s Shitty Robots). One of the question sometimes being asked by these experimental and DIY robot makers is “Will a robot solve this single unique problem better than a human?”
Kitty Catwash sits firmly in between all these ideas & processes. With the Kitty Catwash, we tried to combine a solution for a real life problem, via the functional reference of the traditional carwash, with a strong sense of whimsy and entertainment value, with the ultimate goal of answering a single and super niche question – Can a robot brush my cat better than a brush?
Simone Giertz’s Shitty Robots – https://www.youtube.com/channel/UC3KEoMzNz8eYnwBC34RaKCQ
Weird pet products – http://twentytwowords.com/ridiculous-pet-products/
The many reasons why we love useless robots – https://www.newscientist.com/article/2082014-the-many-reasons-why-we-love-useless-robots/