📜 ⬆️ ⬇️

DIY Robot Vacuum Cleaner

I will share the experience of creating a cheap robot vacuum cleaner from available tools and an all-powerful Chinese store. Originally planned to simply study the Arduino environment, but this study has grown into a vacuum cleaner.

Required details:
- A lot of thick cardboard (for free);
- analogue of arduino (210 p);
- a small layout (80 p);
- 2 knots range finder (300 r);
- motor controller - H-bridge (80 r);
- 2 gearmotor with a wheel (600 r) ;
- + 18v battery pack and charge controller;
- a pair of meters of twisted pair;
- turbine from a vacuum cleaner;
- computer cooler.

At first I used one of the tanks of the game “Tank Battle”. Anyway, no one played them because of the “leftovering” of shots - sometimes the bullets fired right behind the wall sometimes “hit” the enemy.

First of all, all unnecessary details were thrown away, only the motor block and the case itself remained. Installed clone Arduino UNO, motor driver, ultrasonic rangefinder. Power supply - 3 lithium cells at 3.7v.
Photos, unfortunately, did not.
')
The algorithm is simple - go forward, if the distance to the obstacle is less than 5 cm, stop, turn in the random direction at a random angle, go further. I picked up small wheels for a long time, because with big ones this hellish trolley was worn like crazy all over the office and periodically did not have time to react to the readings of the range finder.

The design had a bunch of minuses. The main ones are that the wheels are behind and with insufficient adhesion of the wheels to the floor the platform does not turn. Slips, but shifts the front part very slightly.

The next stage is an attempt to make a turntable. From a cardboard I cut out 2 circles with a diameter of 18 cm. I glued them together with fibers across - I got good bending strength. Block motors used from the same tank.

As a power source, I took a slightly upgraded battery pack from the long-broken Bork vacuum cleaner. There is already a built-in charging controller, charger, indicators, and other crap. The output voltage is 18 volts. The logic is powered by the LM7805, the motors are from the down converter. In this connection, it is possible to adjust the speed of the platform "hardware".

image

image

The resulting prototype moved much slower and more adequate. But still the work of range finders did not like.

The next stage - I decided to do it on the same basis, but to collect a large platform so that the vacuum cleaner that was not yet assembled got into it. Diameter - 30 cm. In the same way, glued 2 circles.

image

image

The main problem was to get rid of rangefinders. As a result, very simple in design contact bumpers are used.

image

image

image

From the inside of the bumpers we glue the foil, we bring +5 to them, on the platform in front of them we fix the curved wiring from the twisted pair, pulling it to the minus through the resistor, since without a resistor there will be a lot of false positives.

image

All this economy successfully moved around the office and behaved much more adequately than with rangefinders.

image

Now the most fun thing is to build the dust collector and the vacuum cleaner itself. I tried a lot of options, since cardboard and scotch are good for designing layouts very quickly, albeit with large tolerances. As a power turbine using clean + 18v with power supply. Coolers, however, are heated, but nothing works.

In the photo the very first version of the vacuum cleaner, without filters and other rubbish:

image

We take the cooler from the processor, break off all the blades. On superglue we fix the turbine. The difficulty lies in balancing, so you need to accurately and immediately glue to check for imbalance. Difficult, but possible. With 18V input and turbine cooler produces about 2600 RPM without load. Pulls the air well, in general.



image

image

image

image

Sketch
//   int L2motor = 4; int L1motor = 5; //  int R1motor = 6; //  int R2motor = 7; //  int Rsensor = 10; //  int Lsensor = 11; void setup() { pinMode(13, OUTPUT); //  pinMode(L1motor, OUTPUT); pinMode(L2motor, OUTPUT); pinMode(R1motor, OUTPUT); pinMode(R2motor, OUTPUT); pinMode(Rsensor, INPUT); pinMode(Lsensor, INPUT); //   digitalWrite(L1motor, LOW); digitalWrite(R1motor, LOW); digitalWrite(L2motor, LOW); digitalWrite(R2motor, LOW); digitalWrite(13, LOW); delay(2000); } void loop() { //      if ( (digitalRead(Rsensor) == HIGH) & (digitalRead(Lsensor) == HIGH)) { stop(); delay(50); stepBack(10); delay(500); stepLeft(rnd()); stop(); delay(500); } else if (digitalRead(Rsensor) == HIGH) { stop(); delay(50); stepBack(2); delay(100); stepLeft(rnd()); stop(); delay(100); } else if (digitalRead(Lsensor) == HIGH) { stop(); delay(50); stepBack(2); delay(100); stepRight(rnd()); stop(); delay(100); } else { stepForward(1); } } int rnd() { int x = random(10) + 5; return x; } void stepForward(int steps) { for (int i = 0; i < steps; i++) { digitalWrite(L1motor, HIGH); digitalWrite(R1motor, HIGH); digitalWrite(13, HIGH); delay(100); } digitalWrite(13, LOW); } void stepBack(int steps) { for (int i = 0; i < steps; i++) { digitalWrite(L2motor, HIGH); digitalWrite(R2motor, HIGH); digitalWrite(13, HIGH); delay(100); } stop(); digitalWrite(13, LOW); } void stepLeft(int steps) { for (int i = 0; i < steps; i++) { digitalWrite(L2motor, HIGH); digitalWrite(R1motor, HIGH); digitalWrite(13, HIGH); delay(100); } digitalWrite(13, LOW); } void stepRight(int steps) { for (int i = 0; i < steps; i++) { digitalWrite(R2motor, HIGH); digitalWrite(L1motor, HIGH); digitalWrite(13, HIGH); delay(100); } digitalWrite(13, LOW); } void stop() { digitalWrite(L1motor, LOW); digitalWrite(R1motor, LOW); digitalWrite(L2motor, LOW); digitalWrite(R2motor, LOW); digitalWrite(13, LOW); } 


Future plans


Source: https://habr.com/ru/post/257867/


All Articles