Колесный робот на ардуино. Готовые Arduino роботы

Магазин роботов и робототехники бытовые роботы квадрокоптеры гироскутеры конструкторы роботы игрушки новости

Я радуюсь, когда будущие инженеры создают свои устройства и расстраиваюсь, когда слышу, как кто-то говорит об использовании Arduino в них.

Это не первая моя статья на эту тему: у меня возникает желание написать такую сразу после прочтения фразы о безграничных возможностях платформы в DIY-топике на Хабре. У меня возникает желание написать об истинной цене деталей после прочтения статьи о покупке конструктора за $200 почти ничего не содержащего (уж простите, запамятовал где видел).

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

Благодаря Arduino увидело свет множество проектов, которые пылились в банках памяти мозга их авторов.

Честно признаюсь, я иногда и сам пользовался кодом, написанным для Ардуино (к примеру, фирма InvenSense производит модульMPU6050 , запустить нормально который получилось только у ).
Презираю я тех людей, которые, открыв для себя мир микроконтроллеров, не потрудились осмотреться в нём и тех, кто нагло наживается на подобных людях.

К нам в лабораторию заходил (и работал с нами) студент кафедры информационных технологий - поклонник Arduino. Человек тратил огромные деньги на покупку самих *дуин и модулей к ним. Я не без сожаления наблюдал, как будущий (я всё же надеюсь) создатель роботизированных систем не мог запустить ШИМ нужной частоты, хотя «лётных» часов работы с платформой он намотал немало.

Так вот, этот студент показал мне «измеритель уровня заряда батареи», или как-то так. Я специально нашёл его сейчас на ebay, где он называется «High Sensitivity Voltage Sensor Module -Arduino Compatible » и продаётся за $8.58 . Вот он, на рисунке:

Кстати, центральный провод, который «+» - он просто висит в воздухе – всё сделано для максимального удобного подключения простого делителя напряжения, красная цена которому 2 цента за резисторы и 20 центов за разьём – это если в розницу покупать.

Это не единственный случай обмана нашего брата, ниже я приведу ещё несколько. Сейчас же, для любителей структурирования, я напишу основные недостатки Arduino.


На Hobbyking, где любителей различных моделизмов обманывают так-же как и в других магазинах любителей ардуино, продавался как-то обычный конденсатор, под видом какого-то фильтра. Не смог его сейчас уже найти. С трёхпиновым разьёмом, естественно. Всего за 3 доллара.

Arduino Compatible Mini Motor Speed counter Sensor AVR PIC – заменяется светодиодом и фототранзистором, подключающимися к центральному контроллеру и двадцатью строчками кода. Он не стоит 7.98 .

2*4 Matrix Keyboard Push Buttons AVR ARM Arduino Compatible – это просто кнопки , которые можно купить по цене 10 штук за доллар.

Есть один девайс в мире, который я ненавижу больше чем Arduino – это mbed . Его разработчики взяли контроллер LPC1768 (есть ещё на LPC11U24), припаяли его на плату с двумя стабилизаторами (о качестве разводки платы я говорить не буду), вывели половину ног наружу (вторая половина никуда не подключена, что очень раздражает), написали онлайн недо-IDE (впрочем, чуть лучше, чем у Arduino, хоть и требует подключения к интернету) и продают его за $64. Простите, но это уже совсем.

Что делать, если вы, вдруг, решили перестать топтаться на месте, и начать изучать микроконтроллеры?

  1. На Хабре был цикл статей «STM32F1xx - лечимся от ардуинозависимости вместе » - статьи хорошие и достаточно понятные, жаль, что автор забросил написание новых статей.
  2. Всех новичков посылают на easyelectronics.ru, где товарищ DIHALT публиковал учебный курс по микроконтроллерам AVR .
  3. «Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С » С. Ф. Баррет, Д. Дж. Пак – супер книга, помогает понять основы программирования на C для микроконтроллеров. Единственная проблема – вы вряд ли достанете микроконтроллеры Freescale, поэтому примеры придётся самостоятельно портировать примеры на AVR, PIC, MSP430 или любой другой контроллер.
  4. Перед покупкой чего бы то не было для своих устройств, почитайте об этом хотя-бы в Википедии - возможно эту же деталь можно купить дешевле, если назвать её по-другому.

Вообще знаете, что странно? Среди пользователей Arduino есть даже те, кто презирают Apple за их «направленность на недалёкого занятого-для-таких-мелочей юзера».

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

Библиографическое описание: Страковский Д. А., Симаков Е. Е. Создание робота-гонщика на платформе Arduino // Юный ученый. — 2016. — №3. — С. 120-124..03.2019).





Ключевые слова:

Цель работы: изучить принципы построения роботов на основе платы ArduinoUno. Создать действующую модель робота-гонщика и разработать алгоритм его поведения.

Задачи работы:

  1. Изучить особенности построения роботов на базе плат Arduino и их модулей.
  2. Изучить особенности среды программирования роботов на базе платформы Arduino.
  3. Создать модель робота-гонщика. Разработать алгоритм движения робота на базе анализа входной информации.
  4. Проанализировать работу робота.

Введение. Основы робототехники на платформе Arduino

Построение роботов с использованием любой технологии подразумевает изучение принципов работы специальных микросхем, которые называются микроконтроллерами. Они предназначены для управления электронными устройствами и представляют собой однокристальный компьютер, способный выполнять простые задачи. Контроллер, являясь «уменьшенной копией» компьютера, содержит все присущие ему основные модули: центральный процессор, оперативную память, flash-память, внешние устройства.

Рис. 1. Структура микроконтроллера

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

Самой популярной и наиболее универсальной платформой семейства является плата ArduinoUno. Она выполнена на базе процессора с тактовой частотой 16 МГц, обладает памятью 32кБ, два из которых выделено под загрузчик, позволяющий прошивать Arduino с обычного компьютера через USB. Также имеется 2 кБ SRAM-памяти, которые используются для хранения временных данных (это оперативная память платформы) и 1кБ EEPROM-памяти для долговременного хранения данных (аналог жёсткого диска).

На платформе расположены 14 контактов, которые могут быть использованы для цифрового ввода и вывода. Какую роль исполняет каждый контакт, зависит от программы. Некоторые контакты обладают дополнительными ролями. Например, Serial 0-й и 1-й - используются для приёма и передачи данных по USB; LED 13-й - к этому контакту подключен встроенный в плату светодиод. Также имеется 6 контактов аналогового ввода и входной контакт Reset для сброса.

Рис. 2. Плата ArduinoUno

Отличительной особенностью Arduino является наличие плат расширения, так называемых, «шилдов». Это дополнительные платы, которые ставятся подобно «слоям бутерброда» поверх Arduino, чтобы дать ему новые возможности. Shield подключаются к Arduino с помощью имеющихся на них штыревых разъемов. Рассмотрим подробнее Shield, которые использовались при проведении исследования:

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

‒ TroykaShield - помогает подключать большое количество периферии вроде сенсоров через стандартные 3-проводные шлейфы. Для принятия решения о направлении дальнейшего движения разрабатываемого робота использовались цифровые датчики линии, подключаемые к данному «шилду». Эти датчики позволяют определять цвет поверхности около него. Выходом является простой цифровой сигнал: логический 0 или 1 в зависимости от цвета, который он видит перед собой. Единица - чёрный или пустота, ноль - не чёрный.

Рис. 3. Motor Shield и Troyka Shield

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

Базовая структура программы для Arduino состоит из двух обязательных частей: функций setup() и loop(). Перед функцией setup() идет объявление переменных, подключение вспомогательных библиотек. Функция setup() запускается один раз после каждого включения питания или сброса платы. Она используется для инициализации переменных, установки режима работы портов и т. д. Функция loop() в бесконечном цикле последовательно исполняет описанные команды. Для взаимодействия с различными устройствами, для обеспечения ввода и вывода используются специализированные процедуры и функции.

Сборка робота-гонщика на платформе Arduino

Рассмотрим практическую часть проекта - создание робота гонщика. Для этого использовались плата ArduinoUno, «шилды», описанные выше, датчики линии, микромоторы с редуктором, колеса, балансировочные шары. Процесс построения модели робота можно разделить на несколько этапов.

Этап I . Сборка платформы. Вначале необходимо собрать основу робота - подвижную платформу. Колеса крепятся к моторам, а затем к установочной платформе. Для поддержания равновесия платформы используются балансировочные шары. Один устанавливается снизу с тыльной стороны платформы. Этот шар играет роль третьего колеса и опоры одновременно. Второй шар, при необходимости, может быть использован в качестве балласта. Датчики линии устанавливаются спереди платформы.

Этап II . Установка платы Arduino и подключение моторов. Плата ArduinoUno крепится с тыльной стороны. Такое расположение позволит обеспечить корректное расположение платформы при движении. Сверху на плату устанавливается MotorShield, к которому подключаются моторы.

Этап III . Установка Troyka Shield и подключение датчиков. Следующий «шилд» устанавливается поверх предыдущего, образуя своеобразный «бутерброд». Цифровые датчики линии подключается к 8 и 9 контактам «шилда»

Этап IV . Балансировка. На заключительном этапе сборки необходимо закрепить провода на платформе, чтобы они не мешали движению робота. Также можно установить дополнительные балансировочные шары, учитывая при этом вес всех плат и батареи.

Рис. 4. Робот гонщик в сборке

Разработка алгоритма поведения робота

Далее необходимо разработать алгоритм движения робота на основании показаний датчиков. Основная идея заключается в следующем. Пусть у нас есть белое поле и на нём чёрным нарисован «дорога» для робота (трек). Используемые датчики линии выдают логический ноль, когда «видят» чёрное и единицу, когда «видят» белое. На прямой робот должен пропускать трек между сенсоров, т. е. оба сенсора должны показывать «1». При повороте траектории направо правый сенсор наезжает на трек и начинает показывать логический ноль. При повороте налево ноль показывает левый сенсор.

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

Однако, роботу не обязательно останавливаться перед каждым поворотом - на маленькой скорости он прекрасно вписывается в поворот и без дополнительных действий. Кроме того, чтобы ускорить процесс поворота, «сдавать назад» можно не по прямой, а под некоторым углом. Также необходимо различать состояния робота - когда он движется по прямой, а когда входит в поворот. В первом случае можно увеличивать скорость робота для более динамичного прохождения трека, во втором - сбрасывать скорость до значения, достаточного для успешного прохождения поворота.

Рис. 5. Поиск зависимости пройденного расстояния при заднем ходе от времени

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

Заключение

В данном исследовании были рассмотрены основы проектирования роботов на базе платформ семейства Arduino, а также построена действующая модель робота на основе платы ArduinoUno. В ходе тестирования были выявлены и устранены некоторые недостатки как технической части, так и алгоритма движения. Полученная модель способная корректно воспринимать поступающую информацию о местонахождении робота и, анализируя ситуацию, принимать решение о дальнейшем движении. Существует несколько направлений модификации данной модели:

‒ Можно поэкспериментировать с системой грузов и добиться идеального равновесия.

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

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

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

Литература:

  1. Блум Д. Изучаем Arduino. - СПб.: БХВ-Петербург, 2015.
  2. Петин В. А. Проекты с использованием контроллера Arduino. - СПб.: БХВ-Петербург, 2014.
  3. Соммер У. Программирование микроконтроллерных плат Arduino/Freeduino. - СПб.: БХВ-Петербург, 2012.
  4. Терехов С. А. Лекции по теории и приложениям искусственных нейронных сетей. - Снежинск: ВНИИТФ, 2003.
  5. Уоссермен Ф. Нейрокомпьютерная техника: Теория и практика. - М.: Мир, 1992.
  6. Амперка. Вики [Электронный ресурс].
  7. URL: http://wiki.amperka.ru/ (Дата обращения: 3.10.2015г.)
  8. Информационный портал RoboCraft [Электронный ресурс].
  9. URL:http://robocraft.ru/page/summary (Дата обращения: 12.11.2015г.)
  10. Информационный портал Arduino.ru [Электронный ресурс].
  11. URL:http://arduino.ru/ (Дата обращения: 14.11.2015г.)

Ключевые слова: робототехника, программирование, искусственный интеллект. .

Аннотация: Сегодня сложно представить мир без роботов. Робототехника является эффективным методом для изучения важных областей науки, технологии, конструирования, математики. На сегодняшний день невозможно говорить о роботах и не затрагивать такое понятие, как искусственный интеллект. Эти два направления тесно связаны. Автором ранее была проведена работа по изучению нейронных сетей, а также возможности «роботизирования» некоторых аспектов человеческой жизни. Данная статья посвящена рассмотрению вопросов робототехники.


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

Итак сейчас я постараюсь максимально наглядно описать процесс создания, сборки робота с электронной начинкой, а именно, на Ардуино! Поехали!

Что нам понадобится:
Трёхпроводной шлейф (3 штуки). Желательно взять подлиннее.


Обычные провода


Потенциометры


Резисторы (220 Ом)


Кнопка


Батарейный отсек с аккумуляторами


Макетная плата


Ну и, безусловно, сама ардуинка


А также плата расширения к ней - что то вроде MultiservoShield , для управления большим количеством сервоприводов


И еще любой конструктор , который будет основой нашего робота, поэтому желательно выбрать "крепкий"

Из инструментов понадобится:
Набор отверток, ключей и т.п.


А также паяльник, припой и флюс

Ну теперь начнем!
Шаг№1. Изготовление основного каркаса
Для начала соберем "две буквы Н" Выглядит это вот так:


Затем некоторую конструкцию, на которой наш робот будет стоять. Совсем необязательно как на рисунке - на ваше усмотрение.. У меня получилось так:


Устанавливаем нашу "Н" на опору


Снизу закручиваем болты


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



Получается что-то следующее:


Почти каркас готов! Осталось скрепить эти две конструкции металлическими пластинками и придать роботу высоты!




Шаг№2 Изготовление каркаса для будущих ушей робота
Для этого нам необходимо собрать две подобные конструкции и закрепить на них сервоприводы, как показано на рисунке:





Затем с помощью болтов и гаек соединим с основным каркасом. Получится следующее:







Вид сверху:




Ну что же, некий прообраз робота почти готов! Идем дальше..
Шаг№3. Изготовление глаз и вообще всей головы нашего робота!
Именно для этого я использовал старую трубку от домофона. Лично мне она напоминает лицо! Увидите дальше..


Проделываем два отверстия и прикручиваем качалку для сервопривода к трубке




Сразу же приклеим светодиоды по бокам и припаяем к ним проводки



Я использовал тоненькие:

Вот что получилось!


Шаг№4 Изготовление ушей
Будем использовать обычные крышечки от маленьких коробочек
Также прикрутим качалки для серв




Теперь смело фиксируем части тела робота на сервах
Вот так:


Вид сверху:



Сзади:


В принципе наслаждаться роботом можно и сейчас, но мы усложним задачу.. Будем поворачивать глаза и уши робота с помощью потенциометров и нашей ардуинки
Шаг№5 Электроника
Соединив ардуино с мультисервошилдом, вставляем трехпроводной шлейф от каждой сервы к пинам 9, 10, 11 (Левое ухо, Правое ухо, Цент, если поставить робота лицом к нам)
Затем на макетной плате устанавливаем потенциометр, кнопку, резисторы.. Выглядеть это будет так, некрасиво конечно, но главное работает)







Более подробно!
Как установить кнопку:


Где белый провод - питание, Красный - цифровой вход микроконтроллера №6, а резистор уходит на землю(желтый провод)

Как установить потенциометр:

Красный провод - питание, Желтый - земля, Белый - аналоговый вход микроконтроллера №0 (другой потенциометр присоединяем точно также, только аналоговый вход контроллера №1)

На плате устанавливаем также резисторы для светодиодов :


ток будет подаваться с 3 и 5 пинов ардуино, а приходить по желтому и черному проводу и через резисторы уходить в землю (GND контроллера)


Ну в принципе все, с электроникой мы закончили! Осталось только вгрузить следующий скетч и поиграться с роботом!!

#include #include Multiservo myservo1; Multiservo myservo2; Multiservo myservo3; int b,k1,p1,p2; int A = 0; int i = 0; unsigned long m2=0; unsigned long m1=0; int r1=70; int r2=110; int r3=70; int h1=0; int h=0; void setup() { myservo1.attach(9); // левое ухо myservo2.attach(10); // правое ухо myservo3.attach(11); // глаза pinMode(6,INPUT); // кнопка pinMode(3,OUTPUT); //глаза огни PWM pinMode(5,OUTPUT); } void loop() { while(A==0) // цикл ручного управления роботом { b = digitalRead(6); if (!b) k1 = 1; if (b==1 && k1 == 1) { delay(10); b = digitalRead(6); if(b==1 && k1 == 1) { A=1; k1=0; } } p1=int(analogRead(A0)/6); p2=int(analogRead(A1)/6); myservo1.write(p1); myservo2.write(p1); myservo3.write(p2); analogWrite(3,i); analogWrite(5,i); if(millis() >= m1+70 && h1==0) { i=i+4; m1=millis(); if(i>250) h1=1; } if(millis() >= m1+70 && h1==1) { i=i-4; m1=millis(); if(i==0) h1=0; } } while(A==1) // цикл автономной работы робота { digitalWrite(13,0); b = digitalRead(6); if (!b) k1 = 1; if (b==1 && k1 == 1) { delay(10); b = digitalRead(6); if(b==1 && k1 == 1) { A=0; k1=0; } } analogWrite(3,i); analogWrite(5,i); if(millis() >= m1+70 && h1==0) { i=i+4; m1=millis(); if(i>250) h1=1; } if(millis() >= m1+70 && h1==1) { i=i-4; m1=millis(); if(i==0) h1=0; } if(millis() >= m2+15 && h==0) { myservo1.write(r1); myservo2.write(r2); myservo3.write(r3); r1=r1+1; r2=r2-1; r3=r3+1; if(r1==110) h=1; m2=millis(); } if(millis() >= m2+15 && h==1) { myservo1.write(r1); // 110 myservo2.write(r2); // 70 myservo3.write(r3); // 110 r1=r1-1; r2=r2+1; r3=r3-1; if(r1==70) h=0; m2=millis(); } } }

Код немаленький, но поверьте это того стоит!
Кратко, что выполняет данная программа:
У нас есть кнопка, которая отвечает за 2 состояния системы: либо мы управляем роботом вручную, либо он осуществляет уже прописанные заранее движения. При нажатии на кнопку для нас меняются состояния, а в коде - меняются 2 цикла между собой, в которых прописаны соответствующие команды. Глаза нашего робота постепенно загораются, становятся все ярче и ярче, а затем затухают. именно поэтому мы подкличили светодиоды к пинам, поддерживающим PWM - широтно-импульсную модуляцию.

Фотки робота:




Небольшая видеозапись , как и что в итоге крутится:


В заключении хочется сказать, что, конечно же, данного робота можно еще долго и долго доводить до ума, но это уже вкус каждого человека. Творите! Изобретайте! Развивайтесь! Всем Удачи!

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

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

Мы предлагаем небольшой обзор готовых роботов на плате Arduino.

Машинка на Arduino, управляемая через Bluetooth

Машинка, управляемая через Bluetooth , стоимостью чуть менее $100. Поставляется в разобранном виде. Помимо корпуса, мотора, колес, литиевой батарейки и зарядного устройства, получаем плату Arduino UNO328, контроллер мотора, Bluetooth адаптер, пульт дистанционного управления и прочее.

Видео с участием этого и еще одного робота:

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

Робот-черепаха Arduino

Комплект для сборки робота-черепахи стоимостью около $90. Не хватает только панциря, все остальное, необходимое для жизни этого героя, в комплекте: плата Arduino Uno, сервоприводы, датчики, модули слежения, ИК-приемник и пульт, батарея.

Черепаху можно купить на сайте DealExtreme , аналогичный более дешевый робот на Aliexpress .

Гусеничная машина на Arduino, управляемая с сотового телефона

Гусеничная машина, управляемая по Bluetooth с сотового телефона , стоимостью $94. Помимо гусеничной базы получаем плату Arduino Uno и плату расширения, Bluetooth плату, аккумулятор и зарядное устройство.

Гусеничную машину также можно купить на сайте DealExtreme , там же подробное описание. Может быть, более интересный железный Arduino-танк на Aliexpress .

Arduino-автомобиль, проезжающий лабиринты

Автомобиль, проезжающий лабиринты , стоимостью $83. Помимо моторов, платы Arduino Uno и прочего необходимого cодержит модули слежения и модули обхода препятствий.

Готовый робот или каркас для робота

Помимо рассмотренного в обзоре варианта использования готовых комплектов для создания роботов Arduino, можно купить отдельно каркас (корпус) робота — это может быть платформа на колесиках или гусенице, гуманоид, паук и другие модели. В этом случае начинку робота придется делать самостоятельно. Обзор таких корпусов приведен в нашей .

Где еще купить готовых роботов

В обзоре мы выбрали наиболее дешевых и интересных на наш взгляд готовых Arduino-роботов из китайских интернет-магазинов. Если нет времени ждать посылку из Китая — большой выбор готовых роботов в интернет-магазинах Амперка и DESSY . Низкие цены и быструю доставку предлагает интернет-магазин ROBstore . Список рекомендованных магазинов .

Возможно вас также заинтересуют наши обзоры проектов на Arduino:


Обучение Arduino

Не знаете, с чего начать изучение Arduino? Подумайте, что вам ближе — сборка собственных простых моделей и постепенное их усложнение или знакомство с более сложными, но готовыми решениями?

Вы понимаете, - втолковывал редактор, - это должно быть занимательно, свежо, полно интересных приключений… Так, чтобы читатель не мог оторваться.
И.Ильф, Е.Петров "Как создавался Робинзон" .


Начинать работу с Arduino, как и с любой другой платформой программной или аппаратной, всегда интереснее с какого-нибудь реального проекта. Программисты при этом пишут код выводящий «Hello, world», ардуинисты моргают светодиодом. И все радуются как дети.


Я же решил начать с продвинутого проекта, в том числе с тайной надеждой оторвать молодое поколение от Counter-Strike (не получилось).


Как можно догадаться из названия RoboCar4W, первым проектом стал робот-машина о четырех колесах. Начиная работу я уже имел опыт программирования, умел когда-то давно паять, но совершенно не знал даже распиновки Arduino и документацию совершенно не читал. Все премудрости изучал по ходу пьесы и Гугл в помощь.


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


Всё "железо" приобреталось на ebay, и по своему опыту хочу сказать, что проще приобрести сразу стартер кит (ищите по словам Arduino Starter Kit), а не собирать подетально. Да и приедет все сразу вместе. Решено было не мелочиться, купить нормальное шасси, нормальные колеса, нормальные моторы, чтоб было "дорохобохато".


Главный секрет успешных покупок на eBay - покупать у продавцов с высоким рейтингом и при этом внимательно читать описание товара. Об этом есть много статей в интернете.


Какую плату семейства Arduino выбрать?


Я взял Arduino UNO, под нее много проектов с описаниями. Но сейчас бы взял Arduino Mega 2560, у нее больше цифровых и аналогов выводов и полная совместимость по проектам с UNO.

Общее описание проекта

В мире разработки программного обеспечения это называют еще «требования к системе».


Задумка проекта была следующей. Первый вариант машины-робота под названием RoboCar4W должен выполнять незамысловатые действия:

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

Второй вариант машины должен управляться вручную по bluetooth с Android телефона.


Чтобы вам лучше работалось вот весь финальный проект RoboCar4W в сборе (тут без блютуза).



Вот видео ходовых испытаний.


На первом видео RoboCar4W ездит в автоматическом режиме с объездом препятствий на двух разных версиях «прошивки», т.е. скетча, поэтому, если кто самый зоркий и заметил, что поведение робота в разных эпизодах немного отличается.



На втором видео RoboCar4W передвигается при помощи команд, передаваемых «водителем» по Bluetooth с мобильного телефона под Android. На телефоне установлена программа «Bluetooth RC Car». Причем, если близко впереди оказывается препятствие, то робот останавливается, т.е. протаранить что-нибудь не получится (однако есть «секретная» кнопка, которая отключает безопасный режим).



На третьем видео RoboCar4W показывает заранее запрограммированную демо-программу движения с поворотами. Демо-программа активируется по команде с того же мобильного телефона под Android. Робот просто едет некоторое время и делает повороты.

Алгоритм управления движением

Ошибочно называть наш способ «алгоритм объезда препятствий» или «поиском пути». Это отдельные математические дисциплины, чистая математика. Если вам очень-очень сильно нравится математика, то погуглите указанные словосочетания, чтивом на полгода будете обеспечены.


Пока же нас интересуют вещи гораздо проще. Поэтому мы назовем это просто - алгоритм управления движением 4-х колёсного робота. Разумеется речь идет об автоматическом управлении без участия человека.


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

  1. Измеряем расстояние до препятствия впереди.
  2. Если это измеренное расстояние меньше значения DST_TRH_BACK (сокращение от distance threshold), то останавливаемся и едем задним ходом одновременно поворачивая. Направление поворота выбираем так: если ранее уже поворачивали влево, то поворачиваем вправо и наоборот.
  3. Если измеренное расстояние больше чем DST_TRH_BACK , но меньше чем DST_TRH_TURN , то просто поворачиваем. Направление поворота выбираем случайно.
  4. Если до препятствия далеко, то просто едем вперед.
  5. Повторяем все сначала.

Чем хорошо, что у нас 4 колеса и все ведущие? Мы можем выполнить (запрограммировать) несколько типов поворотов:

  • Плавный поворот. Все колеса вращаются, но колеса с одной стороны вращаются быстрее.
  • Резкий поворот. Колеса вращаются только с одной стороны.
  • Разворот на месте. Как трактор, колеса одной стороны вращаются назад, а другой - вперед.

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


и включен обратно однократным её нажатием.


Важное примечание . Вся логика находится под управлением Arduino. Android здесь выступает просто как игровой пульт (без мозгов) от консоли, его задача - тупо передавать нажатия кнопок (т.е. команды) посредством Bluetooth в Arduino RoboCar4W.

Компоненты

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


Нет худа без добра, зато скетч стал немного проще.


На будущее, сервопривод покупайте самый простой и дешевый, особая мощность, скорость и точность поворота на заданный угол не нужны, а вывести серво из строя довольно легко, как оказалось. Вполне подойдет SG90 стоимостью $2.


Итак составные части проекта RoboCar4W, описание на английском дается для облегчения поиска на ebay и ему подобных:

  • Arduino UNO R3
  • Готовое шасси 4 Wheel Drive Mobile Robot Platform Smart Car Chassis Arduino Compatible
  • Моторы постоянного тока (DC) с вращением в обе стороны - 4 шт.
  • Колеса - 4 шт.
  • Плата для управления 4-мя DC моторами Motor Drive Shield L293D
  • Ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module Distance Measuring Sensor
  • Аккумуляторы Ni-MH 1.2 В - 8 шт.
  • Пластиковый бокс держатель для батареек, Battery Box holder 4 AA Batteries - 2 шт.
  • Аккумулятор типа «Крона» 8.4 В - 1 шт.
  • Опционально тумблер - выключатель питания

Шасси, DC моторы и колеса приобретались сразу в комплекте и даже с инструкцией по сборке.


Аналоговые входы могут использоваться как цифровые выводы портов ввода/вывода. Выводы Arduino, соответствующие аналоговым входам, имеют номера от 14 до 19. Это относится только к выводам Arduino, а не к физическим номерам выводов микроконтроллера Atmega.


Рисовать не обязательно, можно просто свести все в таблицу. У меня получилось так.



Пины D4, D7, D8, D12 будут заняты, если используются любые DC моторы или шаговые.


Пины D9 (Servo #1 control), D10 (Servo #2 control) будут заняты, только если используются сервомоторы.


Сама по себе плата для управления моторами Motor Drive Shield L293D пины Arduino не занимает.


Пины питания 3.3 В, 5 В и «земля» дублируются на Motor Drive Shield в достаточном количестве. Поэтому об их нехватке не стоит беспокоиться.


Если все-таки хотите красиво нарисовать, то бесплатная программа Fritzing вам в помощь.


Это второй очень важный момент. От питания зависит очень многое. Например, серво-мотор при повороте вала на заданный угол начинает потреблять большой ток. При этом если серво подключен по питанию на 5 В Arduino, то происходит «просадка» по напряжению и вся остальная схема начинает глючить, а Arduino даже может перезагружаться при этом.


В любом случае, если в поделке используете моторы, то Motor Drive Shield необходим (или подобная ему схема).


Итак, имеем 4 мотора постоянного тока (DC), сервопривод, саму плату Arduino и несколько датчиков. Моторы самые прожорливые, а вот датчики могут успешно запитываться с разъемов самой платы Arduino, поэтому с ними все просто. Для удобства я свел всё хозяйство в одну таблицу.


Напряжение рекомендованное или типовое. Потребляемый ток Максимальное напряжение Чем планируется питать Примечания
Плата Arduino UNO R3 7 - 12V, 200mA (среднее) 6 - 20 «Крона 9V» Li-ion 650mAh, 8.4V Разъем с плюсом в центре
Сервомотор MG-995 5-6 V, 0.1 - 0.3A (пиковое) 4.8 - 7.2 Аккумуляторы (5) шт. Ni-Mh 1.2V = 6V Питание только от отдельного источника. Если запитать вместе с Arduino, то будет глючить всё. Напряжения Ni-Mh аккумуляторов 4шт. * 1.2В = 4.8V не хватает. Некоторые утверждают, что данную серву не стоит использовать на 6 вольтах только 4,8
DC двигатели (4 шт.) 6 - 8V, ток от 70mA до 250mA 3 - 12 аккумуляторы (5+3) шт. Ni-Mh 1.2V = 9.6V Вы не сможете нормально запустить двигатели от 9В батареи, так что даже не тратьте время (и батареи)!
Motor Drive Shield L293D не требуется 4.5 - 36 не требуется
Модуль Bluetooth HC-0506 3.3 V, 50 mA 1.8-3.6 С пина 3.3V платы Arduino
Ультразвуковой измеритель расстояния HC-SR04 5 V, 2 mA 5 С пина 5V платы Arduino

DC/DC преобразователя напряжения у меня не было в наличии. Крона 9V оказался не очень хорошим источником питания, просто у меня он уже был.


А вот от использования Li-ion аккумуляторов большой емкости я отказался. Во-первых, из-за высокой стоимости, во-вторых в китайских интернет-шопах легко нарваться на подделку. Точнее не «легко», а «всегда». Кроме этого Li-ion требует особого обращения, и он не безопасен.


Итак, как видим из таблицы, нам требуется 3 независимых источника питания:

  • Для платы Arduino и датчиков.
  • Для сервомотора.
  • Для 4-х DC моторов.

Где ж столько набрать? Саму плату Arduino в любом случае надо питать от отдельного источника, т.к. при «проседании» напряжения, например от включения моторов, плата может перезагружаться или просто глючить. Здесь применяем аккумулятор форм-фактора «Крона 9В», причем разъем который будет подключаться к Arduino должен быть с «плюсом в центре».


Для сервомотора и 4-х DC моторов можно обойтись одним источником питания. Проблема только в том, что сервомотор рассчитан на напряжение 5-6В (максимум 7.2В) и ток 100 - 300мA (пиковое), а DC моторам требуется 6 - 8В (максимум 12В) и ток 250мА.


Для решения проблемы существуют DC-DC преобразователи, но у меня таких не оказалось. В итоге я применил свою "фирменную" схему соединения (безо всяких понижающих электронных схем, только экологически чистые напряжение и ток!): подключил 8 шт. аккумуляторов на 1.2V последовательно и сделал отводы в нужных местах, как показано на схеме.



6В пошло на сервомотор, а 9.6 на DC моторы. Понятно, что аккумуляторы 1--5 будут испытывать повышенную нагрузку.


Для управления серво и DC моторами использовал 4-х канальный Motor Drive Shield на базе микросхемы L293D.


Собрать готовое шасси небольшая проблема. Но не думайте, что без допиливания у вас всё сразу соберется. Поэтому приготовьте надфили.




Подключить нормально несколько моторов, сервомотор или шаговый напрямую к Arduino не удастся. Так как пины (выводы) Arduino являются слаботочными. Для решения проблемы существует дополнительный модуль управления приводами - Motor Drive Shield на базе микросхемы L293D, которая является одной из самых распространенных микросхем, предназначенных для этой цели. Чип L293D известен также как H-мост (H-Bridge).


Я использовал плату, которая обеспечивает 4 канала для подключения на двух микросхемах L293D и сдвиговом регистре. Приобретается на eBay за $5.


Данная плата модуля управления приводами имеет следующие характеристики.

  • L293D Motor Drive Shield совместим с Arduino Mega 1280 и 2560, UNO, Duemilanove, Diecimila
  • 4-х канальное управление
  • питание моторов от 4.5В до 36В
  • допустимый ток нагрузки 600мА на канал, пиковый ток - 1.2A
  • защита от перегрева
  • 2 интерфейса с точным таймером Arduino (не будет «дрожания») для подключения сервомоторов на напряжение 5В, если напряжение питания нужно повыше, то подключение по питанию нужно переделать как описано ниже
  • можно одновременно управлять 4 двунаправленными DC коллекторными моторами или 2 шаговыми, и 2 сервомоторами
  • 4 двунаправленные DC моторы подключены каждый к 8-битной шине для выбора индивидуальной скорости
  • подключение до 2 шаговых приводов (однополярных или биполярных), с одной катушкой, двойной катушкой или с чередованием шага
  • разъем для подключения внешнего источника для раздельного питания управляющей логики и моторов
  • Кнопка RESET Arduino
  • для управления используется библиотека Adafruit AFMotor.

Motor Drive Shield требует небольшой доработки, чтобы можно было после него хоть что-нибудь подключить. Я подпаял сверху необходимые разъемы, получилось вот что.



Моторы могут быть подключены к дополнительному по отношению к плате Arduino источнику питания. Я рекомендую именно такой способ подключения. Для этого нужно снять, разомкнуть перемычку, как показано на картинке.



В этом случае питание Arduino и питание моторов производится независимо друг от друга.


Светодиод на мотор-шилде светится при наличии питания для моторов, если он не горит, то моторы работать не будут.


Новая проблема.


Сервомоторов положение джампера питания не касается, они по прежнему будут запитаны от 5V Arduino. Так как сервомоторы обычно потребляют большой ток и если питания недостаточно, то всё устройство начинает глючить, в «лучшем» случае будет глючить только сервопривод - не будет поворачиваться на заданный угол, либо все время перед каждым поворотом поворачивать сначала в 0 градусов, а уже потом на заданный угол (и если будет успевать). Поэтому я рекомендую питать сервопривод также от дополнительного источника питания. Для этого придется немного переделать схему подключения: откусить плюсовой провод (обычно красный) от стандартного разъема и соединить его с плюсом источника питания напрямую.



При подключении Motor Drive Shield аналоговые пины не используются. Цифровые пины 2, 13 не используются.


Указанные ниже пины используются, только если подключены и используются соответствующие DC двигатели или шаговые двигатели (Stepper):

  • D11: DC Motor #1 / Stepper #1 (активация и контроль скорости)
  • D3: DC Motor #2 / Stepper #1 (активация и контроль скорости)
  • D5: DC Motor #3 / Stepper #2 (активация и контроль скорости)
  • D6: DC Motor #4 / Stepper #2 (активация и контроль скорости)

Эти пины будут заняты, если используются любые DC/steppers: D4, D7, D8, D12.


Указанные ниже пины будут заняты, только если используются соответствующие сервомоторы:

  • D9: Servo #1 управление
  • D10: Servo #2 управление


Для начала работы с Motor Drive Shield необходимо скачать и установить библиотеку Adafruit AFMotor .


Пример кода для управления моторами:


#include // подключить библиотеку Adafruit #include // подключить библиотеку для сервомотора AF_DCMotor motor(1); // создать объект мотор, указав номер разъема DC мотора на плате Motor Shiled и, опционально, частоту frequency Servo servo; // создать объект сервомотор servo.attach(10); // присоединить серво на пин 9 или 10 (крайний разъем на плате Motor Shiled) motor.setSpeed(speed); // установить скорость DC мотора от 0 (останов) до 255 (полный газ) motor.run(RELEASE); // DC мотор стоп motor.run(FORWARD); // DC мотор вперед motor.run(BACKWARD); // DC мотор назад servo.write(90); // повернуть серво на 90 град.

DC мотор у меня начал крутиться только при указании скорости больше 100, если меньше - просто жужжит. Минимальную скорость вашего мотора вам придется определить экспериментально.


Для моторов, подключенных к M1 и M2 можно задать частоту: MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ, MOTOR12_1KHZ. Наибольшая скорость вращения достигается при 64KHz эта частота будет слышна, меньшая частота и скорость на 1KHz но и использует меньше энергии. Моторы 3 и 4 всегда работают на 1KHz другие значения игнорируются. По умолчанию везде 1KHz.


После этого необходимо прогнать тест моторов. . В начале скетча измените номер мотора в строке (или в строках) типа:


AF_DCMotor motor(…);

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


Подключаем ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module. Распиновка выводов:

  • Trig (T)
  • Echo (R)

Время затрачиваемое ультразвуковым дальномером на измерения (определено опытным путем):

  • максимум 240 мсек, если расстояние слишком велико (out of range)
  • минимум 1 мсек, если расстояние слишком мало
  • расстояние в 1.5 м определяется примерно за 10 мсек


Ультразвуковой датчик дальномер, в силу своей физической природы, а не потому что Китай, в некоторых случаях плохо определяет расстояние до препятствия:

  • если препятствие сложной формы, то ультразвук отражается под разными углами и датчик ошибается,
  • ультразвук отлично поглощается (т.е. не отражается) мягкой мебелью или игрушками, и датчик считает что перед ним ничего нет.

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


Некоторые проблемы можно решить с помощью инфракрасного датчика расстояния. Но он тоже не идеален:

  • небольшая максимальная дальность по сравнению с ультразвуковым: 0,3-0,8 м против 4 м
  • большое минимальное расстояние по сравнению с ультразвуковым: 10 см против 2 см
  • зависимость чувствительности датчика от общей освещенности.

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

Подключаем Bluetooth HC-05

Как видим из даташита основные пины «голого» HC-05:

  • TX (pin 1) передача
  • RX (pin 2) прием
  • 3,3V (pin 12) питание 3.3В
  • GND (pin 13) земля
  • PIO8 (pin 31) индикатор режима
  • PIO9 (pin 32) статус соединения, если соединение установлено, то на выходе будет высокий уровень
  • PIO11 (pin 34) для включения режима AT-команд

Наш модуль припаян к плате Breakout/Base Board, где уже есть делитель напряжения, поэтому диапазон рабочих напряжений у него от 3.3В до 6В.


Подключаем наш Bluetooth модуль в сборе:

  • Arduino (TX) - (RX) HC-05
  • Arduino (RX) - (TX) HC-05
  • Arduino (+5В) - (VCC) Bluetooth
  • Arduino (GND) - (GND) Bluetooth
  • пины LED, KEY не используются

После подачи питания на модуль Bluetooth HС-05 на нем должен заморгать светодиод, что означает работоспособность блютуза.


Включаем bluetooth на мобиле, находим устройство с именем HC-05 и подключаемся, пароль 1234.


Для тестирования заливаем в Arduino простой скетч:


int count = 0; void setup() { Serial.begin(9600); Serial.println("Test Arduino + Bluetooth. http://localhost"); } void loop() { count++; Serial.print("Count = "); Serial.println(count); delay(1000); }

На Android телефон устанавливаем Bluetooth Terminal. Подключаемся к устройству HC-05 и наблюдаем на экране телефона бегущие строки с увеличивающимся счетчиком.


Чтобы модуль мог принимать AT-команды, нужно его перевести в соответствующий режим - для этого нужно установить вывод KEY (PIO11) в логическую 1. На некоторых Breakout/Base Board вместо вывода KEY есть вывод EN (ENABLE), который может или не может быть припаян к выводу на самом чипе. Это касается только чипов HC05. Вот как раз у меня вывод EN платы никуда не припаян. Поэтому его можно припаять отдельным проводом к выводу KEY(PIO11) чипа. Либо во время работы, чтобы перевести HC05 в режим AT-команд на пару секунд закоротить вывод чипа KEY(PIO11) на вывод питания Vcc. Для HC06 вывод KEY не нужен.

Программное обеспечение

Примечание. Каждый раз перед загрузкой программы в Arduino, убедитесь, что модуль Bluetooth не подключен к Arduino. Это вызовет проблемы заливки скетча. Просто отсоедините питание от Bluetooth модуля или провода, соединяющие Arduino и RX, TX контакты модуля.


В начале скетча измените номера моторов в строках типа:


AF_DCMotor motor(…);

Если заменить строку


byte debug = 0;

byte debug = 10;

то включится режим отладки.


В режиме отладки робот RoboCar4W реально ездить или крутить колесами не будет. Вместо этого активируйте монитор последовательного порта и там увидите как он «ездит» виртуально. Вместо реальной езды вперед в монитор последовательного порта будет писаться строка «Forward», вместо заднего хода с поворотом влево - «Turn Back L(eft)» и т.д. Датчик ультразвукового измерения расстояния тоже ничего не делает, вместо этого расстояния до препятствий генерируются программно и случайно.

Добавить метки


Top