Robotic Vacuum Cleaner
Trying to find its way around the room:
Perhaps this was triggered by my unvacuumed floor! A DIY variation of the Roomba or similar seemed like it would be quite interesting to build. The project started in 2010, and I’ve been working on-and-off on it since. The chassis is now complete, but there’s still some software work to go. Additionally, the vacuum unit needs some better baffles on the bottom to ensure it sucks dirt up.
Physical Design
The design is based around an Arduino microprocessor. Motors are MG995 servos (the predecessor to these) modified for direct drive. The suction unit is derived from a mini handheld vacuum cleaner very much like this one.
There was a lot of iteration required to get to the stage the design is at today. The first stage was built around a flat piece of wood with some blocks of wood screwed to it to act as mounting points. I built a suction nozzle out of pieces of an aluminium can soldered together. The circuit board interfacing all the components was constructed from simple prototyping strip board.
While this prototype did operate, I never successfully managed to build a good dust hopper. This meant that dirt sucked up was simply ejected in front of the hoover.
The second iteration was helped by access to a milling machine. The design is based around an old biscuit tin. A piece of plywood was cut to fit the bottom of the tin to act as a stiffener and a base chassis. I started by building a CAD model in Solidworks to get an understanding of how the pieces would fit together.
The vacuum device used was stripped down, leaving just the motor and centrifugal suction fan. A stack of three blocks of wood was used to hold the fan, and to provide a nozzle. The first was milled in a nozzle shape, narrowing towards a single hole in the centre. The second acted as a hole for the suction fan to act against, while the final block was cut to the diameter of the fan blade. A channel was cut to allow dirt and debris sucked up to escape. Finally, a divider was placed in tin to provide a dirt hopper for the sucked material.
The servo motors were mounted on small aluminium brackets screwed into the base.
Software and Electronics
For testing purposes (and because the chassis isn’t quite finalised), the software used has so far been relatively simple. The electronic configuration is as follows:
A high current voltage regulator is used to drop the 7.2V down to 5V to drive the suction fan. There was initially a problem with electrical noise from the motor causing issues in the microcontroller, but this was fixed through use of capacitors.
The stripboard circuit board provided a switch for the battery, and connected all the components together.
The robot’s electronics splayed out. From left to right: NiMH battery, arduino and custom circuit board, the suction unit, dirt collection area and finally the Sharp IR distance sensor.
An Infra Red distance sensor from Sharp was used for object detection. Currently the algorithm is relatively simple. When the distance measured by the sensor falls below a set value, the vacuum cleaner reverses for 2 seconds, and then turns left for a random length of time (calibrated with the wheel motors to cause it to face somewhere between 90 and 270 degrees from the object.) The vacuum cleaner then proceeds forward until another object is met.
The video shows wall following - but larger wheels mean the robot turns 1.5 turns when it wants to do 1.
This algorithm is likely to eventually completely cover a room, but would take significant time. Once the chassis is complete, the algorithm can be developed to provide more effective coverage. It’s possible that by rotating on the spot, the distance sensor could be used to build up a picture of obstacles in the room, and a route worked out accordingly.
Do More
This is really just the start. The chassis needs a little modification, but the software is in some ways the interesting part.