[Из песочницы] Робот-пылесос своими руками

Поделюсь опытом создания дешевого робота-пылесоса из подручных средств и всемогущего китайского магазина. Изначально планировал просто изучить среду Arduino, но это изучение переросло в пылесос.Необходимые детали: — много плотного картона (бесплатно); — аналог arduino (210 р); — маленькая макетка (80 р); — 2 уз-дальномера (300 р); — контроллер моторов — H-мост (80 р); — 2 мотор-редуктора с колесом (600 р); — блок аккумуляторов на +18v и контроллер заряда; — пара метров витой пары; — турбина от пылесоса; — компьютерный кулер.Сначала я использовал один из танков игры «Танковый бой». Все равно ими никто не играл из-за «лепешечности» выстрелов — в противника иногда «долетали» пули, выпущенные аж за стенкой.

Первым делом были выброшены все лишние детали, остался только блок моторов и сам корпус. Установлен клон Arduino UNO, драйвер моторов, УЗ-дальномер. Питание — 3 литиевых элемента по 3,7v.Фотографии, к сожалению, не делал.

Алгоритм простой — ехать вперед, если расстояние до препятствия менее 5 см, стоп, поворот в рандомную сторону на рандомный угол, поехали дальше. Долго подбирал маленькие колеса, так как с большими эта аццкая тележка носилась как сумасшедшая по всему офису и периодически не успевала реагировать на показания дальномера.

Конструкция имела кучу минусов. Основные — колеса находятся позади и при недостаточном сцеплении колес с полом платформа не поворачивается. Буксует, но сдвигает переднюю часть очень незначительно.

Следующий этап — попытка сделать поворотную платформу. Из картона вырезал 2 круга диаметром 18 см. Склеил их волокнами поперек — получил неплохую прочность на изгиб. Блок моторов использовал от того же танка.

В качестве источника питания взял немного модернизированный блок аккумуляторов от уже давно поломанного ручного пылесоса Bork. Там уже встроенный контроллер зарядки, зарядное устройство, индикаторы и прочая лабуда. Выходное напряжение 18 вольт. Логика запитана от LM7805, моторы от понижающего преобразователя. В таком подключении есть возможность регулировать скорость платформы «аппаратно».

image

image

Полученный прототип передвигался намного медленнее и адекватнее. Но все равно работа дальномеров не нравилась.

Следующий этап — решил делать на той же основе, но платформу собрать бОльшую, чтоб в нее влез еще пока не собранный пылесос. Диаметр — 30 см. Таким же образом склеил 2 круга.

image

image

Основной проблемой было избавиться от дальномеров. В итоге используются очень простые по конструкции контактные бампера.

image

image

image

С внутренней стороны бамперов клеим фольгу, подводим к ним +5, на платформе напротив них закрепляем изогнутый проводок от витой пары, подтянув ее к минусу через резистор, так как без резистора будет очень много ложных срабатываний.

image

Все это хозяйство удачно передвигалось по офису и вело себя намного адекватнее, чем с дальномерами.

image

Теперь самое веселое — соорудить непосредственно сам пылесборник и пылесос. Я испробовал кучу вариантов, благо картон и скотч позволяют конструировать макеты очень быстро, хоть и с большими допусками. В качестве питания турбины использую чистые +18v с БП. Кулеры, правда, греются, но ничего, работают.

На фото самый первый вариант пылесоса, без фильтров и прочей ерунды:

image

Берем кулер от процессора, отламываем все лопасти. На суперклей закрепляем турбину. Сложность заключается в балансировке, поэтому клеить надо точно и сразу проверять на дисбаланс. Сложно, но можно. При 18V входных и с турбиной кулер выдает около 2600 RPM без нагрузки. Тянет воздух хорошо, в общем.

c44e24b9a9cf49d5aee905734b8e4a5b.jpg

image

image

image

image

Скетч // Настраиваем моторы 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);

}

Планы на будущее Собрать платформу из фанеры; Перекомпоновать все модули и разводку проводов; Перекомпоновать блок с аккумуляторами и контроллером заряда; Прикупить-таки нормальные мотор-редукторы с оборотами в районе 40–80rpm; Установить 2 вращающиеся щетки спереди; Направить выдуваемый воздух под платформу (чтобы воздух циркулировал и сдувал пыль в приемное отверстие); Поменять Arduino UNO на маленький аналог — Arduino mini

© Habrahabr.ru