32 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Собираем роботпылесос на Arduino Основные алгоритмы движения

Собираем робот-пылесос на Arduino


Шаг первый. Создаем поворотную платформу для робота
Для своей первой самоделки автор использовал танк из игры «Танковый бой», из игрушки были выброшены все лишние детали, остался только корпус, а также двигатели и колеса. После этого был установлен Arduino UNO, драйвер двигателей и ультразвуковой дальномер. В качестве источника питания использовались три литиевые батареи по 3.7 В.

Такая конструкция имела ряд минусов. К примеру, из-за того, что колеса находились сзади платформы, у робота возникали проблемы при повороте, робот часто буксовал.

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


Все проблемы были решены путем сборки новой платформы из картона. Для этого нужно вырезать 2 круга диаметром 30 см, а затем склеить их поперек волокон. В итоге получается довольно прочная конструкция на изгиб. Что касается моторчиков и редукторов, то они были взяты из предыдущей самоделки.

Шаг второй. Создаем сенсоры
Изначально робот ориентировался за счет дальномеров, но автору их работа не понравилась и в итоге было решено от их избавиться. На их смену пришли контактные бампера, при этом робот стал вести себя адекватнее, да и вложений при этом требуется меньше.




Контактные бампера изготавливаются очень просто. Нужно взять картон и на одну его сторону приклеить фольгу, это будет первым контактом. К этой фольге нужно подать напряжение +5 В. Напротив платформы нужно установить изогнутый проводок от витой пары, он подключается через резистор, благодаря этому ложных срабатываний будет меньше. Когда робот будет во что-то врезаться, то будут замыкаться контакты, и затем электроника будет разворачивать робота в другом случайном направлении.

Шаг третий. Делаем пылесос и пылесборник
Благодаря таким материалам как картон и скотч можно быстро собрать практически любой макет. Для работы турбины используется источник питания в 18 Вольт, напрямую от батареи. При такой нагрузке кулеры греются, но работают.









Для изготовления турбины берется кулер от компьютера и затем от него отламываются все лопасти. Далее на кулер крепится турбина от пылесоса, ее нужно приклеить суперклеем. Самое главное здесь — приклеить точно, не должно быть дисбаланса. Без нагрузки и питании 18 Вольт кулер выдает порядка 2600 RPM, что создает отличную тягу. В заключении вся конструкция собирается так, как можно увидеть на фото и после этого робота можно испытывать.

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

Как сделать робот-пылесос своими руками — 2 идеи сборки

В современном ритме жизни не всегда получается поддерживать в доме чистоту. В этом деле поможет современные технологии. Робот-пылесос появился более 15 лет назад. Его типовой внешний вид напоминает крупную шайбу, которая передвигается по комнате по заданному алгоритму или случайным образом (пока на что-нибудь не наткнется) и собирает мусор. Предлагаем вам изучить 2 пошаговые инструкции, позволяющие сделать робот-пылесос своими руками.

Материалы для сборки

Итак, для сборки робота-пылесоса нужно разобраться с его составными частями, пойдем по порядку. Он должен сам передвигаться по комнате, поэтому нужны двигатели, в зависимости от конечной конструкции их должно быть от 2-х до 4-х, а также возможность переключения направления вращения и скорость, значит, нужна плата для управления двигателями. Если вы используете двигатели постоянного тока, то нужна плата с 4-мя транзисторами (H-мост).

Самодельный робот-пылесос должен определять столкновения со стенами и мебелью. Для этого нужно предусмотреть датчики препятствия и концевые выключатели на «бампере». Также нужен сам рабочий орган – пылесос. При этом он должен быть рассчитан на работу от постоянного тока низкого напряжения (например, 12В).

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

Система, которая будет всем этим управлять. Простейший вариант на Arduino. Для такой задачи подойдет любая из плат, по размерам удобно разместить вариант Nano или Pro mini.

Идея №1: робот-пылесос из картона

Основа робота делается из плотного картона. Его лучше склеить в пару слоев, а волокна разместить перпендикулярно. Для его технической начинки нужен такой набор деталей:

  1. Любая плата Arduino.
  2. Breadboard или простая макетная плата, в принципе можно и без неё, всё просто спаять.
  3. 2 ультразвуковых датчика расстояния (дальномер).
  4. Турбина от пылесоса.
  5. Небольшой двигатель или кулер от компьютера.
  6. Двигатели с редукторами и колеса.
  7. Контроллер для двигателя.
  8. Провода для соединений схемы.
  9. Аккумуляторы и контроллер заряда.

В качестве питания для робота нужно использовать 3 литиевых аккумулятора. Напряжение каждого из них 3,7 В. Для их заряда нужен контроллер. Например, такой как на фото:

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

Для регулировки скорости на пин ENA или ENB подаётся ШИМ сигнал, а для задания направления вращения подают разноименные сигналы на IN1 и IN2 для одного двигателя и IN3, IN4 для другого двигателя. При этом если на пине IN1 у нас логическая единица, а на пине IN2 – логический ноль, двигатель крутится в одну сторону, чтобы сменить направление нужно поменять местами 1 с 0. Его нужно собрать с ардуино по такой схеме (пины можно использовать любые, это вы укажете в скетче).

Схема на ардуино

Далее нужно делать основу из картона и закрепить на ней колеса, должно получиться что-то вроде этого:

Основа из картона

Вот вид с нижней стороны. Два ведущих колеса с угловым редуктором и поворотное колесо:

Теперь нужно собрать схему, которая монтируется на основание. Диаметр основания должен быть около 30 см, чтобы туда влезла и электроника и сам блок пылесоса.

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

Контактные бампера можно сделать и своими руками, для этого нужен тонкий, но жесткий провод, например от витой пары. Для этого формирует контактную площадку на внутренней стороне бампера из фольги, и закрепляем проводник как это показано ниже. При столкновениях робота-пылесоса с мебелью и стенами они будут соприкасаться. Вам остается отрегулировать расстояние от проволоки до фольги, чтобы добиться нужной чувствительности и исключить ложные срабатывания. На фольгу подается 5В, а провод идёт на вход Ардуино, подтянутый к минусу через резистор на несколько кОм.

Самодельный контактный бампер

Устройство питается от аккумуляторов, для питания системы управления можно применить линейные стабилизаторы типа l7805. Чтобы отрегулировать скорость вращения моторов подойдет понижающий преобразователь, например LM2596.

Самое сложное — это сконструировать и собрать пылесос. Вот его приблизительный чертеж:

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

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

Вид турбины изнутри

Вот и вся пошаговая инструкция по сборке робота-пылесоса, сделанного из подручных материалов. Алгоритм его работы такой: робот-пылесос едет вперед, пока не встретит препятствие. После столкновения (или приближения, если вы используете УЗ дальномеры) останавливается, отъезжает назад на заданное расстояние, разворачивается на произвольный угол и едет дальше.

Читать еще:  Электричество объяснение для детей

Идея №2: почти заводской робот

Предлагаем вашему вниманию не более сложный проект робота-пылесоса. Вот его внешний вид в собранном состоянии:

Самодельный роботизированный пылесос

Система навигации в нем собрана из комплекта 6-ти ИК-датчиков препятствия. На случай, если не сработал ни один из них, то предусмотрены два контактных датчика (концевых выключателя). Система управления двигателями на таком же драйвере с микросхемой L298N. Для его сборки вам понадобится:

  1. Плата Ардуино, в оригинале использовалась Pro-mini.
  2. USB-TTL переходник для прошивки этой модели ардуино. Если вы будете использовать Arduino Nano, то он не нужен, т.к. в ней есть возможность прошивки по USB.
  3. Драйвер для моторчиков L298N.
  4. Моторчики для колес с редуктором.
  5. 6 ИК-датчиков.
  6. Моторчики для турбины (по возможности помощнее).
  7. Крыльчатка турбины пылесоса.
  8. Моторчики для щеток могут быть любыми.
  9. 2 датчика столкновения.

Всё это собрать по такой схеме:

Схема сборки робота-пылесоса

Для сборки цепи питания робота-пылесоса нужны:

  1. 4 литиевых аккумулятора, подойдут типа 18650.
  2. 2 преобразователя постоянного напряжения (повышающий и понижающий).
  3. Контроллер для заряда и разряда 2-х аккумуляторов (искать в интернете по запросу 2s li-ion controller). В схеме используется последовательное включение двух параллельно включенных банок, в итоге их выходное напряжение получается больше 7,4В, а параллельная цепочка нужна для повышения ёмкости и автономности работы.

Вот схема питания этого робота:

Кроме этого нужен пластик (ПВХ) или любой другой материал для корпуса робота, можно его распечатать на 3D-принтере, если у вас есть такая возможность.

Для работы самоделки нужна прошивка, вот пример алгоритма хаотичной уборки, мы взяли его с сети. Ссылка для скачивания скетча: прошивка для робота-пылесоса.

В этой статье были рассмотрены 2 конструкции робота-пылесоса, которые можно повторить и собрать своими руками. Сделать автоматическое средство для уборки помещения можно, вложившись в бюджет от 30 до 100 долларов. Самыми дорогими деталями являются аккумуляторы, двигатели и платы ардуино. Если у вас получилось собрать самодельный робот-пылесос или вы придумали другую конструкцию, присылайте примеры в комментарии, будем рады открытому общению!

Напоследок рекомендуем просмотреть видео, на которых наглядно демонстрируется еще несколько идей, как сделать робот-пылесос в домашних условиях:

Робот-пылесос на ардуино

Несмотря на то, что на geektimes уже есть несколько статей про роботы-пылесосы на ардуино тут и тут, Думаю не будет лишним опубликовать еще один проект. Тем более он сделан чуть ближе к магазинным образцам и, поскольку проект постоянно продолжает развиваться, со временем превзойдет по функционалу некоторые из них. Данный пост я публикую с разрешения разработчика этого робота-пылесоса, поскольку у автора нет возможности публиковать статьи со своего аккаунта. Поэтому статья будет в форме небольшого интервью с создателем вперемешку со схемами, фото и кодом робота-пылесоса. Но начнем с видеодемонстрации уборки комнаты этим пылесосом.

Итак, начнем, пожалуй, с конструкции и принципа работы пылесоса.

Из схемы видно, что пылесос оборудован 6 инфракрасными датчиками. Они срабатывают при приближении пылесоса к препятствию, давая комманду остановиться и развернуться не врезаясь в него. Если же ни один из 6 датчиков не сработал и робот пылесос сталкивается с препятствием, то тогда срабатывает один из 2 выключателей, которые соединяют бампер (в котором находятся ИК датчики) и корпус робота.

Внимательные читатели заметили, что на схеме не показано питание робота. Тут решение вполне стандартное, использованы 4 аккумулятора формата 18650, подключенных последовательно две пары, через контроллер заряда-разряда АКБ. Далее с контроллера через выключатель подсоединены повышающий и понижающий DC-DC преобразователи. + 12 вольт питает моторы колес и моторы передних щеток. +5 вольт питает всю остальную электронику. Турбина питается от 7 — 8 вольт, так что для нее преобразователь не нужен. Выглядит это так:

В итоге список основных компонентов выглядит так:

ардуино про мини
L298N Motor Driver Module
колеса
повышающий конвертер
понижающий конвертер
ИК датчик 6 шт
контроллер заряда-разряда
крыльчатка для турбины (около 200 руб)
ПВХ для изготовления корпуса
АКБ 18650 4 шт.
2 моторчика для щеток (модель не сильно важна)
1 моторчик для турбины
2 выключателя столкновения.
Один из вариантов скетча для хаотичной уборки

#define mot_ena 9 //пин ШИМа левого мотора
#define mot_in1 8 //пин левого мотора
#define mot_in2 7 //пин левого мотора
#define mot_in3 6 //пин правого мотора
#define mot_in4 4 //пин правого мотора
#define mot_enb 10 //пин ШИМа правого мотора

#define ir_1 A0 //пин 1 ИК-датчика
#define ir_2 A1 //пин 2 ИК-датчика
#define ir_3 A2 //пин 3 ИК-датчика
#define ir_4 A3 //пин 4 ИК-датчика
#define ir_5 A4 //пин 5 ИК-датчика
#define ir_6 A5 //пин 6 ИК-датчика

#define lev_vik 11 //пин левого выключателя
#define pra_vik 12 //пин правого выключателя

//для выравнивания скорости колес
byte max_skor_lev = 254;
byte max_skor_prav = 244;
//———————————

byte min_skor = 0;

randomSeed(analogRead(A7));
// пины энкодеров на вход
pinMode(3, INPUT); // пин левого энкодера на вход
pinMode(2, INPUT); // пин правого энкодера на вход
//————————-
// пины для левого и правого моторов на выход
pinMode(mot_ena, OUTPUT);
pinMode(mot_in1, OUTPUT);
pinMode(mot_in2, OUTPUT);
pinMode(mot_in3, OUTPUT);
pinMode(mot_in4, OUTPUT);
pinMode(mot_enb, OUTPUT);
//——————————————-
// пины ИК-датчиков на вход
pinMode(ir_1, INPUT);
pinMode(ir_2, INPUT);
pinMode(ir_3, INPUT);
pinMode(ir_4, INPUT);
pinMode(ir_5, INPUT);
pinMode(ir_6, INPUT);
//————————-
// пины левого и правого выключателей на вход
pinMode(lev_vik, INPUT);
pinMode(pra_vik, INPUT);
//—————————
delay(3000);

// если срабатывает левый выключатель на бампере
if (digitalRead(lev_vik) == LOW)
<
ROB_STOP();
delay(200);
ROB_NAZAD();
delay(150);
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(400, 1500));
ROB_STOP();
delay(200);
ROB_VPERED();
>
//————————————————
// если срабатывает правый выключатель на бампере
if (digitalRead(pra_vik) == LOW)
<
ROB_STOP();
delay(200);
ROB_NAZAD();
delay(150);
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(400, 1500));
ROB_STOP();
delay(200);
ROB_VPERED();
>
//————————————————
// если срабатывает 2 ИК-датчик
if (digitalRead(ir_2) == LOW)
<
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
>
//————————————————
// если срабатывает 3 ИК-датчик
if (digitalRead(ir_3) == LOW)
<
ROB_STOP();
delay(200);
ROB_PRAV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
>
//————————————————
// если срабатывает 4 ИК-датчик
if (digitalRead(ir_4) == LOW)
<
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
>
//————————————————
// если срабатывает 5 ИК-датчик
if (digitalRead(ir_5) == LOW)
<
ROB_STOP();
delay(200);
ROB_LEV();
delay(random(200, 1100));
ROB_STOP();
delay(200);
ROB_VPERED();
>
//————————————————
// если срабатывает 1 ИК-датчик
if (digitalRead(ir_1) == LOW)
<
ROB_PRAV();
delay(10);
ROB_VPERED();
>
//————————————————
// если срабатывает 6 ИК-датчик
if (digitalRead(ir_6) == LOW)
<
ROB_LEV();
delay(10);
ROB_VPERED();
>
//————————————————

// поворот направо на месте
void ROB_PRAV()
<
// левый мотор вперед
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, HIGH);
analogWrite(mot_ena, max_skor_lev);
// правый мотор назад
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, HIGH);
analogWrite(mot_enb, max_skor_prav);
>
//——————
// поворот налево на месте
void ROB_LEV()
<
// правый мотор вперед
digitalWrite(mot_in3, HIGH);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, max_skor_prav);
// левый мотор назад
digitalWrite(mot_in1, HIGH);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, max_skor_lev);
>
//———————
// езда вперед
void ROB_VPERED()
<
// левый мотор вперед
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, HIGH);
analogWrite(mot_ena, max_skor_lev);
// правый мотор вперед
digitalWrite(mot_in3, HIGH);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, max_skor_prav);
>
//————————————-
// езда назад
void ROB_NAZAD()
<
// левый мотор назад
digitalWrite(mot_in1, HIGH);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, max_skor_lev);
// правый мотор назад
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, HIGH);
analogWrite(mot_enb, max_skor_prav);
>
//————————————
// стоп
void ROB_STOP()
<
// левый мотор стоп
digitalWrite(mot_in1, LOW);
digitalWrite(mot_in2, LOW);
analogWrite(mot_ena, min_skor);
// правый мотор стоп
digitalWrite(mot_in3, LOW);
digitalWrite(mot_in4, LOW);
analogWrite(mot_enb, min_skor);
>
//———————————

Ну и небольшое интервью с автором этого проекта. Автора зовут Дмитрий Иванов, живет в г. Сочи.

— Дмитрий, как пришла идея сделать робот-пылесос?

— Увидел на ютубе видео, где робот-пылесос делал уборку, захотел себе купить такой, но когда посмотрел цену, то подумал и решил делать сам. Сначала сделал первую версию робота, у него были слабые моторы на колесах, несъемный контейнер для мусора и пыли, мало датчиков препятствия и я сделал вторую версию, лишенную этих недостатков.

Читать еще:  Составить инструкцию по пожарной безопасности

— Сколько в итоге денег и времени ушло на его изготовление?

«Примерно 5000 тыс. руб. плюс два месяца работы»

— Что было самым сложным в процессе постройки?

Самое сложное сделать корпус и турбину, подогнать все детали.

— Есть планы продолжать совершенствование робота?

В планах покрасить корпус, сделать несколько режимов уборки, подключить блютус модуль и написать программу для телефона на андроиде (управление режимами, ручное управление, отображение заряда АКБ). Ну и сделать под пылесосом синюю подсветку для красоты.

Сборник из более 100 обучающих материалов по ардуино для начинающих и профи можно найти тут.
P.S. Онлайн курс по ардуино на гиктаймс здесь.На этом оптимистичном моменте, думаю, закончим рассказ про эту версию робота-пылесоса, хотя осталось много неосвещенных интересных моментов. И поэтому завершаем вопросом:

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

Arduino.ru

Самодельный робот-пылесос.

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

Отличный проект! А поиск станции зарядки планируется? Я сейчас делаю этот «модуль» для своего робота. Пока не очень успешно.

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

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

а моя зарядка для ли ион заряжает их до 4,55 — 4,6 как то так.

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

Отличный проект! А поиск станции зарядки планируется? Я сейчас делаю этот «модуль» для своего робота. Пока не очень успешно.

Скорее всего нет. Реализация трудная, да и ненужная и вот почему:

1. Допустим 2х комнатная квартира без порогов, тогда придется ставить три станции, в одной комнате, в другой и на кухне, иначе он просто одну не найдет.

2. Допустим квартира с порогами, тогда тем более надо ставить станции везде. Не будешь же таскать станцию из комнаты в комнату.

Поэтому от этой идеи я отказался, проще воткнуть штекер от зарядки.

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

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

а моя зарядка для ли ион заряжает их до 4,55 — 4,6 как то так.

Может это не литий ион, или тестер врет?

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

Заряжайте в режиме полимера, реально ионы заряжают до 4.2в. Почему в аймаксе сделали для иона 4.1 мне не понятно, возможно раньше такая химия была. Я полимеры заряжаю в режиме ион, так они долше живут, заряд получается в районе около 90%.

Зарядил в режиме литий полимер, влил на 100 мА больше и зарядил как положено до 8,4 вольта, но процесс зарядки идет по другому.

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

В Сочи 1метр на 1,5 метра купил за 850 рублей, толщина 4мм.

Хорошая цена. В Севастополе в местном сторительном нашел лист 1х2 метра 2тыс. с копейками.

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

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

здравствуйте, подскажите какие пины на ардуино отвечают за ик датчики

//пины ик датчиков на вход
041pinMode(14, INPUT);
042pinMode(15, INPUT);
043pinMode(16, INPUT);
044pinMode(17, INPUT);
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Подключены к аналоговым пинам.

14, 15, 16, 17 они же A0, A1, A2, A3

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

Подключены к аналоговым пинам.

14, 15, 16, 17 они же A0, A1, A2, A3

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

Еще раз здравствуйте. Тоже решил собрать такой пылесос на базе ардуино. Но задача была попроще Вашей, так как мне достался йробот роомба с выгоревшей платой, а вся механника осталась целой. подскажите пожалуйста как Вы подключали кнопки на прямую или через резистор на землю или плюс. Зарание спасибо.

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

Подключал по такой схеме.

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

Добрый всем вечер!

Почти доделал версию 2.0, но возникли трудности в составлении алгоритма прямолинейного движения.

Имеются два мотор редуктора со встроенными энкодерами. Энкодеры повесил на прерывания, за один оборот колеса каждый дает примерно 1000 тиков+- 150 тиков. Моторы подключил через L298N, я понимаю , что надо сравнивать количество тиков от энкодеров и в зависимости от разницы, выравнивать скорость моторов ШИМом, но не могу составить алгоритм этих действий.

Если кто знает, как организовать такой алгоритм, помогите пожалуйста.

Поиск по интернету ничего не дал, там какие-то уж очень замудренные алгоритмы, которые на Ардуино не получится организовать.

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

Энкодеры повесил на прерывания, за один оборот колеса каждый дает примерно 1000 тиков+- 150 тиков.

А вас не смущает, откуда берутся эти дополнительные +- 150 тиков, если принцип работы энекодера вроде бы не подразумевает появления блуждающих сигналов из ниоткуда? Каждый оборот колеса должен давать одинаковое и всегда точное количество тиков, без всяких +-.

Если с одного колеса приходит больше тиков, то уменьшайте коэффициент заполнения в ШИМ-сигнале управления мотором этого колеса. Так до тех пор, пока количество тиков с обоих колес не выравняется. Чтобы скорость не падала, можно, наоборот, добавить мощи противоположному колесу.

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

Я имел ввиду одно колесо крутится быстрее другого примерно на 150 тиков. Если левый энкодер выдает 950 тиков в секунду, то правый 1100. поставил на пол, пылесос уходит в сторону. Уменьшил ШИМ на правом моторе до 230, стали крутится примерно одинаково. А вот как это реализовать в программе, чтобы автоматически выравнивал скорость, пока думаю. Ведь надо еще как-то обрабатывать сигналы с шести инфракрасных датчиков препятствий и двух датчиков столкновения, да еще управление с пульта. Мне кажется одна ардуина не потянет.

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

Задача не самая сложная, если проявить смекалку. Так как смекалки у меня нет, а на ум приходят только дубовые решения, то я бы задействал режим захвата таймера, если бы у атмеги328 было два канала на захват. Идея заключается в том, чтобы не считать импульсы, а измерять время между ними. Причем, МК позволяет делать это с высокой точностью. В этом случае скорость колес можно было бы выровнять еще задолго до того, как каждое из них сделает полный оборот.

Словесное описание алгоритма таково: вешаем выход с энкодера кадого колеса на свой канал захвата. Канал захвата — это такая подсистема таймера, которая тупо фиксирует состояние счетчика и сохраняет его в отдельном регистре МК при назначенном событие. Событием в нашем случае будет приход «тика» с энкодера. Пришел тик с одного колеса, мы прочитали значение счетчика, пришел тик с другого колеса, прочитали второе и сравнили эти значения. У какого счетчика значение меньше, то колесо крутится быстрее. Если ШИМ-сигнал имеет достаточную разрядность, то тут же можно убавлять ему длительность импульса на единицу (ну или прибавлять единицу на другом колесе). В таком случае весь алгоритм выравнивания скоростей описывается одним сравнением. Не знаю, как кому, а мне это не кажется такой уж сложной задачей, которая была бы не по плечу ардуине.

Читать еще:  Сайдинг своими руками пошаговая инструкция

Только беда не в том, что вычислительной мощи не хвататет, а в том, что нет достаточных ресурсов у периферии. Вот у STM8S, даже у младших моделей, на таймере по четыре канала, которые могут работать на захват или генерацию ШИМ независимо друг от друга. Если бы этот пылесос ездил на STM8S, то там бы все управление движением можно было организовать средствами одного таймера. Но в нашем случае это нереализуемые хотелки, т.ч. надо смотреть в другую сторону.

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

Захват можно делать не только аппаратно, но и программно. Это даст небольшую потерю в точности, но позволит отказаться от внешней схемы коммутации. Механизм такого захвата может выглядеть следующим образом: ловим на пине приход тика, запускаем таймер. Дожидаемся прихода следующего тика, программно вызываем захват. Время между импульсами берем из регистра захвата. Повторяем операцию для другого колеса. Далее осталось, как и в случае с двумя каналами, сравнить значения и выдать управляющую команду на корректировку шим-сигнала спешащему или отстающему колесу.

Создание прототипа робота пылесоса на базе Arduino Uno

  • Цена: $5.80
  • Перейти в магазин

Arduino — это открытая платформа, которая позволяет собирать всевозможные электронные устройства. Arduino будет интересен креативщикам, дизайнерам, программистам …., и желающим собрать собственный гэджет. Устройства могут работать как автономно, так и в связке с компьютером. Всё зависит от идеи.
Платформа состоит из аппаратной и программной частей. Для программирования используется упрощённая версия C++. Разработку можно вести как с использованием бесплатной среды Arduino IDE, так и с помощью произвольного C/C++ инструментария.
Для программирования и общения с компьютером понадобится USB-кабель.

Для постройки прототипа робота — пылесоса заказал плату Arduino Uno. Вместе c Uno заказал: Драйвер двигателей, для управления двигателями, Ик датчики «органы чувств» робота пылесоса, Ну и проводочки, куда без них? Преобразователь DC-DC и аккумуляторы заказывал в других онлайн магазинах.

Составляющие моего устройства:

— Arduino -центральный контроллер
— Драйвер двигателей — устройство, которое преобразовывает управляющие сигналы малой мощности в токи, достаточные для управления моторами
— ИК датчики — датчики препятствий расстояние обнаружения препятствия 3-80см
— ИК датчики — датчики препятствий расстояние обнаружения препятствия 2-20см
— Электродвигатель турбины
— Электродвигатель боковых щеток
— Электродвигатель центральной щетки
— Электродвигатель перемещения
— Аккумуляторы литиевые

Вот, что получилось.
Фотки не все, загружаю, какие остались.

Компоненты устройства:

Вид снизу:

Вид сверху:

Вид сбоку:

Перед первым пуском:





Первый пуск)) без корпуса


#define DriveVector1 2
#define DriveSpeed1 3
#define DriveVector2 4
#define DriveSpeed2 5
#define InSensor1 12
#define InSensor2 11
#define LedLamp 13

int sensorStatus1, sensorStatus2;
int HIGHValue, LOWValue;

void setup()
<
// put your setup code here, to run once:
pinMode(DriveVector1, OUTPUT);
pinMode(DriveVector2, OUTPUT);
pinMode(DriveSpeed1, OUTPUT);
pinMode(DriveSpeed2, OUTPUT);
pinMode(LedLamp, OUTPUT);
pinMode(InSensor1, INPUT);
pinMode(InSensor2, INPUT);
HIGHValue = HIGH div 2;
LOWValue = LOW;
>

sensorStatus1 = digitalRead (InSensor1);
sensorStatus2 = digitalRead (InSensor2);

void BodyForward()
<
digitalWrite(DriveVector1, LOWValue);
digitalWrite(DriveSpeed1, HIGHValue);
digitalWrite(DriveVector2, LOWValue);
digitalWrite(DriveSpeed2, HIGHValue);
>

void BodyBackward()
<
digitalWrite(DriveVector1, HIGHValue);
digitalWrite(DriveSpeed1, LOWValue);
digitalWrite(DriveVector2, HIGHValue);
digitalWrite(DriveSpeed2, LOWValue);
>

void BodyRight()
<
digitalWrite(DriveVector1, HIGHValue);
digitalWrite(DriveSpeed1, LOWValue);
digitalWrite(DriveVector2, LOWValue);
digitalWrite(DriveSpeed2, HIGHValue);
>

void BodyStop()
<
digitalWrite(DriveVector1, 0);
digitalWrite(DriveSpeed1, 0);
digitalWrite(DriveVector2, 0);
digitalWrite(DriveSpeed2, 0);
>

Робот пылесос своими руками. Часть 2

Выдался выходной и пришли некоторые посылочки (прям как совпало). Распаковками мучать не народ нет желания, поэтому к делу. Решил все почти полностью разобрать чтобы удобней было внедрять новые «плюшки» ,а заодно и поведать о более детальном устройстве монстра)))

Снимаем самое сердце — электронику.

Крепится все на уголок для удобства разборки.

Снимаем «подметалки» . Шайбы компенсируют неровности самого мотор-редуктора.

Скидываем АКБ и DC-DC переобразователи. Кстати АКБ закреплял их стяжками к раме. Снизу все банки изолированы.

Вот кстати модель движка виднеется. Ссылки почти на все кину в конце поста.

Вот попутно еще фото реализации крепления колес.

Выемку сделал специально чтоб колесо на оси не проворачивалось.

Теперь снимаем сам пылесос.

Попутно еще фотки самого устройства пылесоса.

Чертеж крыльчатки есть в прошлом посте.

Ну теперь продолжим с самим монстром. Делаем новую площадку под ардуино мега и драйвер двигателей.

И примеряем чтоб не задевало крышку пылесборника.

Крепим «Мегу» к площадке через латунные стоечки. А драйвер просто на болтики чтоб по высоте не мешал будущему второму этажу.

Прикидываем второй этаж для экрана и датчиков (которые кстати все еще не пришли)

Теперь по деталюхам :

Аллюминиевый уголок — стоительный магаз.

Критика (по делу) и идеи по улучшению приветствуются. Надеюсь пост будет полезен кому нибудь. ВСЕМ ДОБРА.

Дубликаты не найдены

Жаль что датчики не пришли. можно было бы уже обкатывать.

Продолжение постройки будет по мере появления всего необходимого

Ты я смотрю тоже минусы людям не ставишь)))))

В каждом ардуинщике помирает электронщик 🙂 травление не практикуешь?

не правда электронщик не умирает))) порой даже наоборот))) травлю платки по настроению. Благо опыт в это большой. Начинал еще в школьные годы с рисования дорожек нитролаком и травлением медным купоросом.

Тогда мне вас (в смысле ардуинщиков) не понять: плата стоит в 10 раз дороже чипа — это раз. Обвязку атмеге почти делать не надо — два. Каждый контакт который пин — 100% источник глюка в будущем, особенно на подвижной модели — три. Запилить себе платку, впаять несколько транзюков для управления двигателями, сделать выводы под программатор, экран, датчики и что там у тебя еще. хм. так похоже будет на вещь, а не на детскую поделку. (я прошу прощения, я ни в коем случае не учу и не навязываю своего мнения, просто в толк не возьму)

Что мне нравится в ардуинах так это модульность. Захотел что то изменить, заменил только часть конструкции а не всю конструкцию в целом. Так же ремонтопригодность отличная, а чтоб небыло глюков , я слегка приклеиваю пин (точнее их пластиковые части) к разьему горячим клеем, капли достаточно и шлейфы для готовой конструкции спаиваю всегда сам и креплю все провода стяжками. А по ценам китай радует клонами на любой вкус и малую цену: нано примерно 120 рублей с програматором на той же плате. Атмега 8 стоит примерно 55 рублей без платы и обвязки. Получается не сильно и дороже))). Можно самому паять всю конструкцию на одной плате когда сильно ограничено пространство корпуса. А глюки будут 100 процентов если собрать все на бредборде и так оставить в готовой подвижной модели.( Оскорбить чем либо никого не пытался. Все написанное мое чисто субьективное мнение)

Ссылка на основную публикацию
Adblock
detector