In my last post, I described the beginnings of the first module for OpenADR, the vacuum. With the Automation round of the Hackaday Prize contest ending this weekend, though, I decided to start working on a second module, a mop, before perfecting the vacuum module. The market for robotic vacuum cleaners is looking pretty crowded these days, and most of the design kinks have been worked out by the major manufacturers. Robotic mops, on the other hand, are far less common with the only major ones being the Scooba and Braava series by iRobot. Both of these robots seem to have little market penetration at this point, so the jury’s still out on what consumers want in a robotic mop.
I’ve been thinking through the design of this module for a while now. The design for the vacuum module was simple enough; all it required was a roller to disturb dirt and a fan to suck it in. Comparatively, the mop module will be much more complex. I don’t plan on having any strict design goals yet for the mop like I did with the vacuum given that the market is still so new. Instead, I’ll be laying out some basic design ideas for my first implementation.
The basic design I envision is as follows: water/cleaning solution gets pumped from a tank onto the floor, where it mixes with dirt and grime. This dirty liquid is then scrubbed and mopped up with an absorbent cloth. I know that probably sounds fairly cryptic now, but I’ll describe my plans for each stage of this process below.
Both the Scooba 450 and Braava Jet have tanks (750mL and 150mL, respectively) that they use to store cleaning solution or water for wetting the floor. The simplest way to add a tank to the mop module would be to just integrate a tank into the module’s 3D printed design that I described in an earlier post. This is a little risky, however, as 3D printed parts can be difficult to make water tight (as evidenced by my struggles with sustainable sculptures). Placing the robot’s electronics and batteries near a reservoir of water has to potential to be disastrous. A much safer bet would be to use a pre-made container or even a cut plastic bottle.
Being an optimist, however, I’d rather take the risk on the 3D printed tank to take advantage of the customizability and integration that it would provide. In the case of the sculptures, I wanted to keep the walls thin and transparent. I won’t have such strict constraints in this case and can use a much more effective sealant to waterproof the tank. And just to be on the safe side, I can include small holes in the bottom of the chassis (i.e., around the tank) near any possible leaks so the water drips out of the robot before it can reach any of the electronics.
Dispensing of Water
The next design decision is determining how to actually get the water from the tank to the floor. While I looked for an easily sourceable water pump, I couldn’t find a cheap one that was small enough to fit well in the chassis. Luckily there are some absolutely amazing, customizeable, 3D printed pumps on Thingiverse that I can use instead!
The biggest complaint when it comes to robot mops seem to be a lack of effectiveness when it comes to scrubbing dirt, especially with dirt trapped in the grout between tiles. The Braava uses a vibrating cloth pad to perform its scrubbing while the Scooba seems to use one of the brushed rollers from a Roomba. Both of these options seem to be lacking based on users’ reviews; the best option would be to use scrubbing brushes designed especially for use with water (rather than the Roomba’s, which are designed to disturb carpet fibers during vacuuming). As with the vacuum module, however, I had a hard time finding bristles or brushes to integrate into my design. Unfortunately using a roller made of flexible filament (i.e., my solution for the vacuum module) isn’t an option in this case, since it’s not capable of the same kind of scrubbing efficacy as a regular mop.
For my first version, I’m just going to use a microfiber cleaning cloth. This has the benefit of being washable and reusable, unlike the cleaning pads on the Braava, and yet I can still achieve some scrubbing functionality by mounting the cleaning cloth to a rotary motor.
A mop that leaves dirty water on the floor isn’t a very effective mop, so some sort of water and dirt recovery is required. The Scooba uses a vacuum and squeegee to suck the water off of the floor back into a wastewater tank. The Braava’s cleaning pad, on the other hand, serves double duty and acts as both a scrubber and sponge to soak up the dirty water. Both of these options seem perfectly valid, but the Braava’s method seems like an easier implementation for a first revision. It’s also the method that conventional mops use. The microfiber cloth I decided to use for scrubbing can also serve to absorb the water and dirt from the floor.
It’s important to note, however, that using the absorption method for water recovery limits the robot’s water capacity and the amount of floor it can clean. The mop could have a 10L water reservoir, but if the cloth can only absorb 100mL of there will still be 9.9L of water left on the floor. The Braava only has a 150mL tank and 150sqft. of range because its cleaning pad can only hold 150mL of water. I’ll have to do some testing on the microfiber cloths I use to determine the maximum capacity of the mop module.
Designing and printing out the mop module!
One thought on “OpenADR: Mop Design Decisions”
[…] I stated in my post on mop design decisions, the maximum water capacity (and by extension the area that can be mopped by the robot) is heavily […]