Пользователь
0,0
рейтинг
13 мая 2015 в 18:48

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

Поделюсь опытом создания дешевого робота-пылесоса из подручных средств и всемогущего китайского магазина. Изначально планировал просто изучить среду 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 без нагрузки. Тянет воздух хорошо, в общем.



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
@roversochi
карма
24,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (53)

  • +38
    Картонный. Робот. Пылесос. Это. ЭПИЧНО!
    Я бы добавил тег «из спичек и желудей».

    Кстати, могу предложить идею. Подберите подходящий по размеру маленький тазик или пластиковый контейнер. Они достаточно жесткие, если что, можно дополнительные ребра влепить. В гиперах а-ля «Ашан» обычно бывает много пластиковых штук полезных и дешевых.
    • +3
      и оптический датчик ступенек
      и уф лампу
      и тряпочку
      • +5
        Парогенератор еще.
        • +1
          Неонку забыли! И всенепременно внутрь!
  • +7
    Шутки шутками, но в отличии от большинства роботов-пылесосов, это тру робот-пылесос. Ибо в практически везде на самом деле не более чем электровеники.
    • 0
      Смотрю все шутят, а ведь и вправду везде электровеники. А парогенератор, тоже хорошая идея. Автор постарался побырому состряпать робот пылесос, хоть и не красивый зато работает.
      • +4
        Парогенератор со спиртовкой! Как в Перельмане:
        image
    • +4
      Насколько я знаю, и в Roomba, и в Neato, кроме вращающейся щетки, турбина тоже есть.
      • +1
        Она только в Neato имеет значимую мощность. В остальных турбина в основном затем, чтобы мелкую пыль, поднятую щёткой, подхватывать и не давать обратно вылетать, а укладывать в пылесборник. Без щётки эти пылесосы ничего не соберут.
        • +2
          Ну так ведь это неспроста. Если будет мощная турбина — то аккумулятора надолго не хватит. А если принцип электровеника позволяет убирать грязь — то почему нет?
          • +1
            Если поставить такой импеллер например EDF55 то для пылесоса он 5А максимум наверное будет есть, но при этом сосать будет не хуже Саши Грей, в итоге нормальной батареи на 10А*ч хватит на долго, правда ресурс у него наверняка небольшой плюс шумит как хороший мощный пылесос, надо что то с бОльшим диаметром чтоб работало с меньшими оборотами что определенно и ресурс продлит и, возможно, шум снизит.
            • +1
              Я аж задумался, сколько атмосфер она выдаёт))
              • +2
                Саша, или турбина?
                • +1
                  Wolfram|Alpha про мощность Саши не в курсе, к сожалению.
    • НЛО прилетело и опубликовало эту надпись здесь
      • +1
        Вот чел разбирает Neato по винтикам с объяснениями
        • НЛО прилетело и опубликовало эту надпись здесь
          • +4
            … а тут как раз отличный картонный вариант появился
    • 0
      Neato Botvac засасывает довольно ощутимо.
  • +15
    Картонный робот-пылесос может стать ещё и уничтожителем мусора! Если он, пока никого нет дома, загребёт в себя слишком много пыли, начнёт перегреваться, загорится от перегрева, тихонечко отъедет в уголок и там сгорит полностью, вместе с собранным мусором…
    • +4
      >> и там сгорит полностью, вместе с собранным хозяевами мусором…
      • +3
        >> и там сгорит полностью, вместе с собранным мусором, хозяевами…
        • +3
          … и квартирой
          • 0
            … и соседями
  • +6
    Красиво, я бы корпус из прозрачного оргстекла резал, начинку будет видно — полный хайтек.
    • +1
      Тоже об этом думал, Скорее всего следующего сделаю как раз таким и задарю кому-нибудь.
      Этому же роботу уже делаю корпус из фанеры — попрочнее будет. Двое детей, как никак :)
  • +5
    Прекрасно)) Картон и скотч восхитительны. Можно попробовать 3D-печать
    • +4
      3D печать картоном или скотчем?
      • 0
        3d печать картоном… пора патентовать
        • 0
          Уже )
          www.gamer.ru/system/attached_images/images/000/041/596/original/dog_1.jpg
          • +1
            Не-не, нужно как осы, жевально-смачивающее сопло и подача материала сразу из шредера. Вот так не навязчиво можно делать из компроментирующих документов эйфелевы башенки.
            • 0
              Вот так, приходишь домой, а у тебя посередь комнаты эйфелева башня… или… image
      • 0
  • 0
    Круто! Безусловно полезная вещь, если действительно хорошо пыль засасывает. Тут есть вот какая штука:
    roboforum.ru/forum10/topic12095.html
    Возможно вам в вашем роботе пригодится. Там человек сканирующий лазерный дальномер собирает и ставит на робота пылесоса. С помощью дальномера он строит карту помещения. Это конечно сложно, но может вы все же сможете сделать объезд помещения по этой карте. Тогда вообще цены не будет пылесосу (вернее цена будет большая, а себестоимость маленькая) :)
    P.S.
    Кстати Дайсон свои пылесосы сначала тоже из картона делал. Что у него вышло все знают. Так что удачи!
    • +1
      если бы он бы 3Д карты выгружал, то был бы ценен как сканер.
    • +1
      Идея про сканирование пространства — интересная, спасибо за наводку и за пожелания. Я и сам подумывал, как оптимизировать перемещения платформы по помещениям, но пока простого и одновременно бюджетного решения не нашел. Хотя и искал не сильно — основная задача была заставить платформу кататься и собирать мусор. Вот на этой базе уже можно и экспериментировать с позиционированием.
      • 0
        Я читал статью, в которой показывается, что роботы-пылесосы со случайным перемещением («эргодические») подчас действуют эффективнее тех, которые пытаются объезжать помещение по плану. Дело в том, что при объезде помещения по плану неизбежно появляются зоны, в которых очистка будет хуже, и эти зоны находятся в одних и тех же местах при каждой уборке. В результате в помещении образуются стабильные зоны с повышенным загрязнением, тогда как в «эргодических» пылесосах эти зоны меняются от уборки к уборке, поэтому в среднем по помещению уровень чистоты равномерен.
        • +1
          Вывод напрашивается сам собой: обход помещения по плану со случайными вкраплениями. Например, «тут прямо, потом змейкой, а этот квадрат по спирали».

          Или второй вариант — помечать на карте плохо пропылесошенные места, чтобы робот к ним отнесся в следующий раз с повышенным энтузиазмом.
          • 0
            Это конгениально!

            Без шуток, попробуйте получить патент. Идея простая в реализации, но потенциально может принести большую пользу.
            • 0
              Идея у меня эта давно, и если когда буду делать свой пылесос, обязательно буду копать в этом направлении. С другой стороны, это просто идея. А программная реализация будет довольно зубодробительна, я до этого пока не дорос. Но в принципе, алгоритм можно попробовать смоделировать.
              • 0
                Нужно просто «пьяный режим» включать, а на карте помечать посещённые места. В конце анализировать и двигаться уже к наименее посещённым точкам.
  • +8
    Все хорошо, тру гик пылесос, скотч и картон это правда круто! Не хватает самой главной вещи — синей изоленты :)

    Поддержу оратора выше на счет оргстекла.
  • +1
    На робофоруме уже упоминался робот-пылесос из картона, еще проще: roboforum.ru/forum88/topic5733.html
  • 0
    Плохо соображаю в робототехнике и программировании, но купив топовый робот-пылесос понял, что пока его не сделают опенсорсным и бесплатным для доступа — нормально квартиру я не пропылесошу. Причем стартуя из одной точки он умудряется застрять в разных, хотя условия критично не меняются :)

    Готов пожертвовать на краудсорсинг туда, где возьмутся сделать его идеальным в рамках одного этажа, используя данные со всех остальных пылесосов в сети, причем с тем условием, что каждый сможет скачать и распечатать на принтере подобное устройство и собрать себе, с покупкой минимальных комплектующих.

    Чистоту в каждый дом!
  • +1
    Чудесно!
    Ещё есть такая штука — широтно-импульсная модуляция (ШИМ, PWM). Она позволит управлять скоростью двигателей программно. Даже колёса по размеру подбирать не придётся.
    Но за картон отдельный респект!
    • 0
      Поддерживаю, на такую мощность можно поставить DCDC, например MC34063, с цифровым потенциометром обратной связи.
    • 0
      Ещё есть такая штука — широтно-импульсная модуляция (ШИМ, PWM).

      Я пытался заюзать ардуиновский ШИМ, подключал моторы через Н-мост, подавая туда ШИМ сигнал. Изначально так и подключал. Все равно у меня не получилось добиться хорошего крутящего момента на небольшой скорости. На ковер платформа с трудом заезжала. ИМХО тут нужны редукторы с другим передаточным.
      Пока что моторы подключены через DC-DC понижающий конвертер. Чем больше напругу на нем накручу, тем быстрее и мощнее моторы :)
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Часть потока будет отражаться в противоположном направлении.
      • +1
        Теоретически если направить под хорошим углом, близким к касательной например то воздух отражаться не будет и даже наоборот, получится использовать эффект Коанда и воздух от турбины будет увлекать за собой еще и воздух с границ пылесоса что еще больше повысит эффективность.
  • 0
    Класс! Я в детстве, когда только постигал электронику и не знал ничего о существовании микроконтроллеров, горел идеей сделать R2D2 управляемый вращающимся непроводящим диском с отверстиями (как перфокарта, только круглая). Ну это я так, ностальгнул )
    Вообще хотел предложить приписать алгоритм возврата в определенную точку для подзарядки, когда батарея садится до определенного уровня. Точку можно как-то пометить, ИК маяком например.
    А еще не понял почему фанера — она куда тяжелее пластика, а значит энергии роботу будет вхатать на меньшее время.
    • 0
      Вообще хотел предложить приписать алгоритм возврата в определенную точку для подзарядки, когда батарея садится до определенного уровня. Точку можно как-то пометить, ИК маяком например.

      Я об этом тоже думал. В дальнейшем, если не отложу эту поделку в долгий ящик, обязательно попробую сделать сделаю док-станцию с подзарядкой.

      А еще не понял почему фанера

      Все просто — у меня в наличии есть электролобзик и фанера :)
      А пластика пока нет.
  • 0
    На ГикТаймсе уже был подобный — geektimes.ru/post/244209

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.