Introduction: Floor Vacuum Cleaner Robot. Version #13

This robot has vertical container which collects dust using 12 volts cooler turbine. 

Most parts were bought on eBay.

It is controlled by Arduino board with very simple algorithm.

3 to 6 volts motors are used for moving. H-Bridge motor driver on HG7881 - a board controlling motors.

Base was made from plastic kitchen board - soft enough to be drilled, sawn and cut without much efforts.

Lithium battery (with solar cell) gives 5 volts and allows to work the robot about one hour.

Step-up circuit provides 12 volts to a turbine which collects dust. This circuit is made using standard design of MC34063 and induction.

Too tall - more than 12 centimeters (should be 11 cm maximum to go under a sofa).
Too slow - gear mounted on motors has too high ratio.

Other cons can be fixed:
thin bumper, simple algorithm for moving, no sensor on getting stuck.


achal16 (author)2014-02-05

can u share the complete details regarding this project.

the info you provided isn't sufficient to build this robot.

please help.

arif93 (author)2014-01-04

hii i'm new user ..i want to build this projet.can i get the detail for this project?

revrekad (author)arif932014-01-05

Which details you'd like to know?

arif93 (author)revrekad2014-01-06

i need to know about the schematic for this program and the component to build this project,really need your help

revrekad (author)arif932014-01-06

I restored schema by pictures (but it might have mistakes).

arif93 (author)revrekad2014-01-06

tq for your schema picture,it very help me..what do mean by a mistake?

revrekad (author)arif932014-01-06

When bumpers are not pressed and a motor is rotated wrong direction - swap wires for this motor in a green connector of the motor driver.
If motors run in correct direction but when one of bumpers is hit (pressed) and the robot is turned wrong direction (an opposite to what was expected) - swap wires connected to Arduino connectors 7 and 8.

crevs1 (author)2013-12-24

can i use 'arduino uno' instead of 'arduino leonardo'? should need to made any change in programming for it?(not asking for pin confugiration,..terms of void loops etc) if any,please explain

can i use more than one computer cooler fan for cleanning large area? or can you suggest anything else that is working on 12v or 5v?

what kind of vacuum are used in romba?

revrekad (author)crevs12013-12-25

I did not work with different type if Arduino but if they are compatible - they should work without modifications of this program (not sure).
Two coolers is a good option to increase performance even though this will increase power consuming as well.
Roomba has relatively small vacuum turbine because it uses rotating brush as a major cleaning tool. I used such approach on one of previouse prototypes and it worked well - a rotating brush throw dust to a dustbin and vacuum did not allow dust go away. But this is mire noisy approach.

derwn (author)2013-12-16

i asked robotics parts manufacture.they told me that i can work with 2 ultrasonic sensor with arduino leonardo that give complate wall and object detection performance.
they also suggest me i can use two ultra sensor with some other pins given on board(except 2,3,4,5,7,8 that we used for bumpers and other purposes)

is it right and possible to use two ultra sensor with pins expcept 2,3,4,5,7,8 (means there are availability of pins for two ultra sensors? if yes then which are they?)

coz i haven't purchase arduino because of this confusion.

revrekad (author)derwn2013-12-16

I have only one sensor. I tried to use pins A1,Digital 10 for it and than I tried to use pins A2, Digital 13. In both cases it works similar. But I did not try two sensors at once - I do not know if they interfere each other.

derwn (author)revrekad2013-12-22

ok i will try it using two sensors, and you'hv also mentioned in previous comments that we can also use optical sensor for this, photo transistor and ir-led( i'hv already made it for my previous project) but if i wanted to use it in this project with arduino ,should i need to add some clarification in program?(as you done before for ultrasonic sensor)or just manualy connect it to arduino(no changes in program!).
(actualy i'hv made transistor and led circuit for line follower robot(2 led and 2 trasistor) it will ok to use with this circuit

revrekad (author)derwn2013-12-25

If circuit with ir-sensor you made gives as output logical 1 or 0 - just check if program flow reacts on it as expected in verify* methods. Possibly you will need to invert returning value of checkBumper* method:
return !readDigital(

giliyance (author)2013-12-01




sir,i'hv studied your both vacuum cleaner project,i need to discuss with u for some better modification in this robot than i wanted to apply in my'hv used jumper and connected it to arduino to avoid obstacles like chair and wrote con. that 'no sensor on getting stuck' i want to fix this bugs. and moreover it also can replace sensitive and much error occuring jumper.... we can use 'ultrasonic distance measuring sensor' to avoid obstacle and outcooming problem of getting stuck. i'hv put here one link of this practicle..1) photo of this sensor 2) ready complate successful practice on arduino with programming 3) video of vaccum robot using this sensor.check this,it's realy amazing! now the problem comes,we r going to replace bumper with this 4 pin ultrasonic sensor,so what are the changes we should need to make in arduino leonardo programming.(pin confugiration and logic) in link no 2) it's programme nd practicle given and as i knw your programme is also there on git hub. so are u geting any idea how can we merge this two programme with modifiction? please write down or attech file. i'hv tried soo many times but i haven't done vacuum project practicaly so m getting confused. please help.thank you. flag[delete]

revrekad (author)giliyance2013-12-04
I would not replace bumpers with other sensors because these sensors may have blind zones and miss obstacles. Seems ultrasonic sonar works well for detecting and ranging distance to round and flat objects but works weak for corners - it is good idea to have this sensor in addition to bumpers
giliyance (author)revrekad2013-12-05

yes,exactly.. well said.!!.i'm too thinking of doing same.if sensor will not work in some case than that work is done by bumpers.
but what i was asking..what type of changes we need to make in programming.,if u'hv seen the link i'hv posted in last comment..their is already a programme given for this ultra sonic sensor,but how can we merge this two program(in case of using sensor & bumper both) programme u have given this type of pin connection.ok..
onst int pinLED = 13;
//right side
const int pinRightMotorDirection = 2;
const int pinRightMotorSpeed = 3;
const int pinRightBumper = 7;
//left side
const int pinLeftMotorDirection = 4;
const int pinLeftMotorSpeed = 5;
const int pinLeftBumper = 8;
so now..which pin number we should give to ultrasonic sensor?
and what are the changes we need to make in 'main loop'
u'hv already done practicle and made that programme,so u can only know how to do this change.
if possible than right down.
i'll also try.
coz i wanted to use both sensors.

revrekad (author)giliyance2013-12-10

It need to be decided what should robot do when an object is detected in some distance. If the robot should turn like it hit the bumper than one more methof can be added and called in the method loop():
void verifyAndSetSonar(){
//put the code you referred by abow link calculating distance from sonar data - without "delay(500)"
if(distance > 20)//checks if there is no objects close than 20 (put your number here)
if(checkCounterIsNotSet(countDownWhileMovingToRight))//if the counter is not yet counting down
runRightMotorBackward();//run the right motor backward
countDownWhileMovingToRight = turnTimeout;//set the counter to maximum value to start it counting down

It is not necessary to use LED connected to pin 13 - this was just for presentation.

derwn (author)revrekad2013-12-12

ohk i got this one...two more doubts..1. where should i write this 'void verifyandsetsonar() loop ....? in vacuum cleaner programme's 'main loop' ?
and one more thing want to ask..2. i wanted to use 3 ultrasonic sensor for more accurate result left,right,and back.
so there should be 6 more pins i need to use so which connection i can give to this 3 ultra sensor?
2,3,4,5,7,8 already alocatted as per your program,so in which order i should give pin connection?any random pin available in arduino?(it's ok about trig and echo pin..but in this case theres 3 ground and 3 vcc pin for 3 ultra sensor. so how to give them power supply?

3.what's meanning of this ..why i should right distance without 'delay(500)?

revrekad (author)derwn2013-12-12

1. verifyandsetsonar() is not a loop - it is a method beside others, but it can be called as other verify* methods in the main loop(). I did not check this - this is suggestion to try.
2. I did not try to connect more than one ultrasonic sensor - I cannot suggest anything. May be search "multiple ultrasonic sensors arduino" or "several ultrasonic sensors arduino" give a hint how to connect it. At start - bumpers can be disconnected and pins for it reused for sensors.
I had to join two wires with one pin connector to provide power from one Arduino board. Power can be also provided from external plug as I did for step-up. Ensure connect correct with polarity - sometimes I break my circuits with wrong +/-!
3. When I mentioned "no need for delay(500)" I forgot to tell I used for testing exist program taken from Internet which has delay(500) at the loop in the method where distance was calculated - delay already exists in main loop(), so no need to add one more delay in verify method.

derwn (author)revrekad2013-12-13

i got this,thanks a lot.
can you please provide the link of that program of sonic sensor you have tested?
and if i use 'several ultrasonic sensor arduino' i just need to change pin configuration? main loop program for vacuum cleaner will remain same in both the board?

revrekad (author)2013-12-10

I do not know details of your models so it is easy to give wrong suggesstions.
When I build these robots I tried to spend less money making units by myself but this also affects quality and durability. For prototypes it was very OK - nit for months of work.
For axeses I used metal rod for 8 mm nuts and bearings for rollerskates (inner diameter fits well for that rod). So motor only rotated wheels and was not loaded with weught - less friction on it's shaft. It is not easy to build such construction but this is more reliable for heavier weight when you do not have durable more expensive motor-gear unit with good bearings.
Motor driver can be connected to Arduino by signal lines and GND, but it's good practice to have separate power line to feed the driver - PCB electric wires has limited capacity for current - they can be burned out.

revrekad (author)2013-12-09

There is also an option to use IR (Infrared) Proximity Sensor Sharp. There are different models - analog and digital output and different distance ranges.

revrekad (author)2013-12-09

Great idea.
Motor has such specifications:
free-run current (Amperes) - how much it is current when the shaft is free
stall current (Amperes) - how much it is current when the shaft completely blocked
torque (oz/inch or kg/cm) - how much it can pool with specific leg
I just measured my motors I used on the robot in current instruction:
free-run current: 0,015 A;
stall current 0,15 A;
The robot managed to carry 2.2 kg load with current 0,09A (on each motor) - it is heavy and has ~30% till stall current but I'd wish more reserve in current.
This how I'd measure.
Another point is bearing of the shaft, which is at same time axes for wheel. For heavy load I prefer to use separate axes with ball bearing (e.g. from roller skates) - in images below - motor I used in this robot and the motor with gear I made from an actuator for car electric lock and roller skate wheel. Last motor-gear I used on pretty heavy robot-cleaner with Pb accumulator and car vacuum cleaner (in total more than 1,5 kg). Two of these motor-gears managed to carry 6 kg.

creasty (author)2013-12-04

can we use toy motor instead of gear motor? i think it'll give better speed than gear motor.
in video you used bread board and some registors,what is the purpose of using it?and where we have to connect it to arduino..i mean which pin.
now final conections are like 1. arduino to motor driver & motor driver to motors
2. arduino to step up & step up to cooler fan 3. bettery to arduino ok? is it right path ? or any conection is missing? please mention it.
thank you

revrekad (author)creasty2013-12-04

Motors on toys also have gears. These motors (with gears) can be used but usually I select slow moving toys.
Resistors are used to provide pull-up signal to +5V when bumpers are not pressed and to set 0V when the bumpers are pressed.
As I mentioned recently I found it's possible to find on eBay turbine funs with 5V power - no need for step-up circuit.

creasty (author)revrekad2013-12-04

ohk,i got this. thank you so much. (Y) (Y)
ya 5v fan are avialable but fan using 12 v are more efficient than 5v. means it will clean floor more efficiently than 5v. am i right?

revrekad (author)creasty2013-12-05

I think airflow (CFM - cubic feet per minute) make sense and consuming power:
P = U*I , where P - power (W-watts), U - voltage (V-volts), I - current (A-amperes). So fan 12V, 0.18A consumes ~2W and fan 5V, 0,3A consumes ~1.5W
I see on eBay different parameters:
fans 7530s - both 5V and 12V - have either 20 CFM or 36 CFM

DannaFebielou (author)2013-11-30

helo mi doing my project and i doenst work and im searching a home made vaccum clear robotics and its hard for me to start with.. can you stated me where i should buy that one and i will pay it ... nort a liceanse one i want that hardware for my research...
help me ... thank you

revrekad (author)DannaFebielou2013-12-01

Possible solutions:

- two DC motors with gearbox - search on Ebay, Pololu, Sparkfun, etc
(e.g. 3 Volts, ~80 RPM - 80 revolutions per minute);

- two wheels on these motors - can be found in same shops;

- Controller and motor driver:
* Option 1:
Arduino Motor Shield;

* Option 2
H-bridge motor driver;

* Option 3
Robotics controller with motor drivers (e.g. Pololu Orangutan);

- Vacuum unit:
* Option 1:
Mini Vacuum USB Cooler - search on Ebay (it needs only 5 V but not powerful);

* Option 2:
Brushless Cooling Blower Fan 5V - search on Ebay (Before I searched today I did not know there are 5V

turbines of such capacity);

* Option 3:
Brushless Cooling Blower Fan 12V;
Step-up board 5V to 12V - to feed this fan from lower voltage power supply;

- Power supply:
* Option 1:
Battery pack on four 1.5V batteries (e.g. AA) wich can be connected to motor shield or to

motor driver and to fan;
Battery pack on two or three 1.5V batteries (e.g. AA) wich can be connected to Arduino board or

Robotics controller;

* Option 2:
Accumulator with 5V output;

- Cardboard and melting glue, plastic or other materials to build chassis and vacuum unit;

- Connectors
Breadboard Jumper Cable Wires (~10cm length).

derwn (author)DannaFebielou2013-11-30

u can purchase it from e-bay online shopping website,all componants are availabe there.
if u r working on this project, u need 1) arduino leonardo 2) H-Bridge motor driver on HG7881 to drive motor 3) 5v to 12v step up circuit...this are main companants available on ebay
other accessories shown in vedio like motors,betteries,cooler fan,wheels, etc.

revrekad (author)2013-12-01
I tested L298N driver. With 5V power it gives 2,5-3V on motors with the same program.
High logic level on Enable input can be set over 1k resistor or use one of Arduino pins with setting high logical level as output.

crevs1 (author)2013-11-30

hey,it's fab..,great job! i'm on intial stage of robotics,can u please explain in simply this lines of programme of github..
1st void loop(40 to 48),
2nd 70,71 so 74.
3rd 88,89,90
4th 126,127
5th 139,140
i got trapped in this steps!!
6th what is the use of function 'bool' & what is the difference between 'void process' & 'void varify&set' it looks similar!!
rest of the things i understand by self learnning.
again great work..!!!
thank you

revrekad (author)crevs12013-12-01

1. method loop() is called in a cycle code in it is ran infinite times. In other languages you would use such approach:
//your code here
void processRightSide(){
if(countDownWhileMovingToRight <= 0)//checks if counter was NOT ran when bumper had been pressed
//otherwise - counter is counting downd (as a delay) while the right motor is moving backward
countDownWhileMovingToRight--;//decrease the counter if it WAS ran when bumper had been pressed
if(countDownWhileMovingToRight <= 0)//if the running counter got down to zero
runRightMotorForward();//run the right motor forward
void verifyAndSetRightSide(){
if(checkBumperIsNotPressed(pinRightBumper))//checks if right bumper has NOT been pressed
if(checkCounterIsNotSet(countDownWhileMovingToRight))//if the counter is not yet counting down
runRightMotorBackward();//run the right motor backward
countDownWhileMovingToRight = turnTimeout;//set the counter to maximum value to start it counting down
4.this method has comments: one pin is responsible for direction where motor is running, another defines PWM period to control how fast the motor is running
void runMotorForward(int pinMotorDirection, int pinMotorSpeed){
digitalWrite(pinMotorDirection, true); //set direction forward
analogWrite(pinMotorSpeed, 0); //set max speed forward (127 is for stop)
5. if one of counters is counting down it shows one of motors is running backward - LED is turned on

revrekad (author)2013-12-01

As I did not use MCU from my old board I cut out step-up and use it separately

creasty (author)2013-11-23

revrekad,can u please tell me which arduino board u used?(mention it's microcontrollor too)soo many avilable on websites.and we have to make step up circuit separately?isn't any kind of arduino or avr board avialable that provide 5volt & step up 12volt both?so it will become more reliable.and in vedio on 2.40 minutues u have used register and breadboard?what's purpose of it?

revrekad (author)creasty2013-11-24

in video on 2.40 minute cardboard is used to shape the nozzle of the cleaner.

revrekad (author)creasty2013-11-24

I used Arduino Lenardo with Mega32U4. I do not know if there is boards with ready to use step-ups. But there are ready to buy 12v step up regulator or convertor boards - make sure it allowed current enough for turbine. E.g. step-up board should allow at least 600mA input current for 5V if you need output current 200mA for 12V

derwn (author)2013-11-23

friend,u have published 3 programmes on GITHUB..1)stayle nd structure 2) line feed chars 3)intial commit..which number of programme is final one?means which programme we should load in programmer..? so i can work on it,it's much confusing pls replay

revrekad (author)derwn2013-11-23

Thanks for pointing this out. I deleted wrong copies of files - there is only one now.

carlos66ba (author)2013-09-13

Very nice! Maybe I should build this instead of buying the Roomba! Now seriously, can you post the arduino program, and schematics? Then people might work on improving the algorithm. Well done!!

revrekad (author)carlos66ba2013-09-14

I published the program on GitHub (added a comment above).
Any "H-Bridge motor driver" can be used to control motors (I used a board with HG7881).
Step-up is made on standard circuit of MC34063.

Roomba has good quality, durable components and better performance. It also has great rotating brush (especially good to cleans carpets).
But even such robot as in this instruction surprises collecting sadly much dust on visually clean floor.

revrekad (author)2013-09-14

Program for Arduino is published on GitHub