Большие роботы на arduino. Как сделать робота на Ардуино своими руками: самодельный robot Arduino в домашних условиях

Конструируем роботов на Arduino. Первые шаги - это практическое руководство для тех, кто делает первые шаги в робототехнике на платформе Arduino. С этой книгой вы разберетесь в основах электроники, научитесь программировать в среде Arduino IDE, работать с печатными платами Arduino, инструментами, соблюдать правила безопасности и многому другому.


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

Введение
О чем эта книга
Для кого эта книга
Как пользоваться книгой

Глава 1. Знакомство с Arduino
Arduino UNO: микроконтроллер для начинающих
Другие продукты Arduino
Электроника
Правила техники безопасности
В следующей главе

Глава 2. Макетирование
Сборка электрических схем с использованием макетных плат с гнездами, не требующих пайки
© Проект: мигающий светодиод на макетной плате
© Проект: лазерная сигнализация
© Проект: инфракрасный детектор
В следующей главе

Глава 3. Работа с паяльником
Паяльные принадлежности
Паяние
Распайка
Уборка
3 Проект: кофейный столик со светодиодной лентой
В следующей главе

Глава 4. Настройка беспроводного соединения
Радиомодули ХВее
Переходные платы для радиомодуля ХВее
Компоненты радиомодуля ХВее
Альтернативные беспроводные модули
© Проект: беспроводное включение светодиода
© Проект: беспроводной дверной звонок.
В следующей главе

Глава 5. Программирование Arduino
Сред а разработки Arduino
Скетч «Blink»
Учимся на примере кода
Функции и синтаксис
Отладка с помощью монитора последовательного интерфейса.
Все о библиотеках
Ресурсы для изучения программирования
В следующей главе

Глава 6. Восприятие мира
Урок: датчики (сенсоры)
Знакомство с датчиками
© Проект: «Лампа настроения»
© Проект: керфбэндинг
В следующей главе

Глава 7. Управление жидкостью
Урок: управление потоком жидкости
© Проект: емкость под давлением
© Проект: робот для полива растений
В следующей главе

Глава 8. Ящик для инструментов
Набор инструментов для начинающего мастера
Работа с деревом
Работа с пластиком
Работа с металлом
Программное обеспечение
Электронная техника и инструменты
В следующей главе

Глава 9. Ультразвуковая эхолокация
Урок: ультразвуковая диагностика
© Проект: ультразвуковой ночник
© Проект: игрушка для котики
Токарный станок
Техника безопасности при работе с токарным станком
В следующей главе

Глава 10. Генерация звука
Звуки электроники
© Проект: мелодичная кнопка
© Проект: звуковой генератор
В следующей главе

Глава 11. Отсчет времени
Сервер точного времени
Таймер Arduino
Модуль часов реального времени (RTC)
Проект: цифровые часы
© Проект: китайские колокольчики «Музыка ветра»
Станки с числовым программным управлением (ЧПУ)
В следующей главе

Глава 12. Безопасная работа с высоким напряжением
Урок: управление высоким напряжением
© Проект: контроллер для вентилятора
© Проект: лавовая лампа « Бадди»
В следующей главе

Глава 13. Управление электродвигателями
Как управлять двигателями
Включаем двигатель с помощью TIP-120
© Проект: шаговый поворотник
© Проект: «Баблбот».
Глоссарий

Издательство: М.: Лаборатория знаний
Год: 2016
Страниц: 323
Язык: Русский
Формат: PDF
Качество: отличное
Размер: 131 mb

Скачать Бейктал Дж. Конструируем роботов на Arduino. Первые шаги

Робот – машинка на Ардуино становятся одним из самым популярных инженерных проектов в школьной робототехнике. Именно с таких устройств, автономных или управляемых со смартфона и bluetooth, начинается путь в робототехнику “после Lego”. К счастью, сегодня можно без труда купить все необходимые компоненты и достаточно быстро создать своего первого робота для езды по линии или объезда препятствий. В этой статье вы найдете подробную видео инструкцию как сделать продвинутый автомобиль Arduino Car своими руками, с питанием, датчиками линии, расстояния и управлении через bluetooth.

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

Вот список ключевых компонентов, которые обязательно встретятся в проекте.

Контроллер Ардуино

Куда уж без него, если мы говорим о проектах на этой платформе. Как правило, роботы машины делают на базе плат Arduino Uno и Nano. Mega будут слишком большие, Pro Mini сложнее подключать к компьютеру и соединять с остальными компонентами, а Leonardo требуют дополнительных навыков в программировании, они дороже и их основное преимущество (тесная интеграция с компьютером в качестве периферийного устройства) в данном случае не слишком востребована.

Есть еще вариант использования плат ESP8266 или ESP32, тогда в проекте появляется возможность управления машиной через WiFi. Но и сами платы и их программирование требует определенных навыков, в этой статье мы будем говорить преимущественно об Uno или Nano.

Конструкция, шасси и двигатели робота на Ардуино

Для того, чтобы что-то поехало или стало перемещаться, надо снабдить “это” колесами, гусеницами или манипуляторами-ногами. Вот тут выбор совершенно не ограничен, можно использовать совершенно любые комбинации и сочетания платформ. Как правило, в качестве начального варианта берутся уже готовые наборы платформ с Алиэкспресс.


Двигатель, шасси и колеса машинки на ардуино

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

Драйвер двигателей


Ардуино – достаточно ранимое устройство, не терпящее больших нагрузок по току. Соединяя его с “брутальными” мощными двигателями, не избежать беды. Поэтому для нормальной совместной работы нам нужно будет включить в схему робота компонент, отвечающий за управление двигателями – подающий и отключающий ток на их обмотки. Речь идет о микросхеме или готовом модуле, которые называют драйвером двигателя. На нашем сайте есть статьи, посвященные . Если вы покупаете готовые шасси, то обязательно предусмотрите возможность размещения на них подходящего драйвера.

Красивый корпус

Как правило, вся конструкция автомобиля строится вокруг его шасси. Если посмотреть примеры готовых проектов, то они часто выглядят как “провода на колесиках” – внешний вид их изобилует пучками соединительных проводов, ведущих от восседающего на троне контроллера Ардуино к драйверам, моторам и датчикам. Между тем, красивый и функциональный корпус не только вызывает правильные эстетические чувства и помогает выделить вашу модель от остальных. Хороший корпус может превратить игрушку в реальное устройство, помогает привить навыки конструирования и промышленного дизайна, что важно для инженеров любого возраста.

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


Питание робота на Ардуино

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

  • Обычные батарейки AA. Тут нужно понимать, что платы Arduino Uno, Nano и большинство двигателей, используемых в Ардуино-робототехнике, требуют напряжения в диапазоне 6-9 вольт. Поэтому придется собрать вместе последовательно не менее 4 батареек на 1,5 В, причем сами батарейки должны быть хорошего качества и обеспечивать работу с достаточно большим током. Например, большинство солевых батареек этим критериям не удовлетворяют. Батарейки AAA при создании ардуино-машинок практически не используются из-за своей пониженной емкости (хотя могут использоваться в миниатюрных моделях, где размер имеет первостепенное значение).
  • Аккумулятор AA. Здесь возникает еще большее ограничение по напряжению и току. Большинство аккумуляторов выдают напряжение 1,2 вольт, поэтому их требуется больше для “собирания” нужных нам 6-9 вольт. Несомненным плюсом является возможность перезарядки.
  • Литиевые аккумуляторы 18650. Это уже “серьезная артиллерия”, позволяющая получить большое время автономной работы, возможность подзарядки и приемлемые характеристики по току и напряжению. Рабочее напряжение для таких элементов питания – 3,7 В, что позволяет собирать готовую схему питания всего из двух элементов.
  • Другие источники питания. Сюда можно включить как более мощные и габаритные никель-металлгидридные, кадмиевые аккумуляторы, так и многочисленные литий-ионные “плоские” варианты, используемые в дронах, смартфонах или другой портативной цифровой технике.

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

Где купить платформу и запчасти

Все, о чем говорится в этой статье, можно без проблем купить на всем известном сайте. К сожалению, подавляющее большинство предложений основываются на стандартной платформе 4WD автомобиля с двумя несущими планками, не очень надежными двигателями и колесами, любящими ездить в “развалочку”. Но эти варианты относительно не дороги и вполне подойдут для начала работы.

Инструкция по сборке робота-автомобиля

В этой статье расскажем вам о том, как по шагам собрать универсального робота на колесной или гусеничной платформе. Управлять им будет микроконтроллер Ардуино нано. Если вам не нравится долго читать, посмотрите в конце статьи на видео, подготовленное нашими партнерами – каналом ArduMast Club.

Пример платформы робота-машины на Ардуино

Предлагаем инструкцию по созданию универсальной платформы, которая потом пригодится для создания самых разных проектов, независимо от выбранного контролера или типа шасси. Вы можете использовать стандартные варианты из Алиэкспресса, как на видео, можете снабдить машину гусеницами и создать вездеход, можете придумать вообще ни на что не похожий вариант. Главное, чтобы число двигателей не превышало 4 и сами ни не были слишком мощными (тогда придется менять тип управления моторами – другой драйвер двигателя).


Для реализации проекта нам понадобится:

  • Контроллер Ардуино (в нашем случае, Arduino Nano).
  • Двигатели с редукторами.
  • Корпус и шасси для крепления колес и оборудования
  • Корпус для аккумуляторов 18650 с выключателем.
  • Коммутационные провода.

Дополнительное оборудование, которое потребуется для создания полноценного проекта:

  • Датчик расстояния и серво-мотор, на который он установлен.
  • Инфракрасные датчики линии.
  • Светодиоды для индикации и “красоты”.
  • Пьезодинамик – пищалка.
  • Bluetooth модуль (если собираетесь управлять машинкой дистанционно).
  • Sensor shield (упрощает коммутацию).
  • Модуль контроля заряда и подзарядки аккумуляторов.
  • Сами аккумуляторы.

Общая схема машинки на Ардуино

Схема электропитания робота автомобиля

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

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


Схема питания и подключения двигателей в ардуино автомобиле

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


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


Схема питания с контролем разряда аккумулятора

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


Для зарядки можно использовать модуль повышения напряжения с 5v до необходимого уровня зарядки, который зависит от количества серий используемых аккумуляторов. Он имеет гнездо типа микро USB и при частом использовании оно может сломаться, поэтому мы рекомендуем установить дополнительное гнездо для последующей подзарядки пяти вольтовым блоком питания. Для зарядки двух литий-ионных аккумуляторов необходимо настроить выходное напряжение на 8,4 Вольта.


Схема питания с модулем зарядки для ардуино робота машинки

Подключаем двигатели и плату

С питанием платформы мы разобрались, теперь подключим остальные компоненты. Для начала припаиваем провода к моторам, затем обматываем их изолентой, чтобы случайно в дальнейшем не оторвать контакты. Можно сделать так, что в итоге на 2 двигателя будут идти всего два провода вместо 4х. Это немного упростит монтаж и сэкономит место на платформе.

Монтируем драйвер двигателей на платформу так, чтобы его радиатор был спереди. ЭТО ВАЖНО! В противном случае, вам придется переписывать программу для микроконтроллера.


Драйвер двигателя для Ардуино робота

Затем размещаем холдер и плату БМС. Не забываем оставлять место спереди для последующего монтажа каких-либо сенсоров. Ардуиио нужно разместить так, чтобы была в дальнейшем возможность подключить его к ПК для прошивки. Это же правило относится и к модулю для зарядки аккумуляторов.

Питание для ардуино и других электронных компонентов мы возьмем от драйвера двигателей.

Подключаем Bluetooth к машинке

Мы собираемся использовать модуль Bluetooth через SoftwareSerial (библиотеку SoftwareSerial.h), поэтому подключаем модуль блютуз к 3 и 4 цифровым пинам ардуино. RX к D3, TX к D4


Схема подключения Bluetooth к ардуино машинке
Схема подключения драйвера двигателя к роботу
Схема подключения компонентов к Arduino
Датчик расстояния машины

Программирование робота на Ардуино

Так как мы делаем инструкцию по сборке универсального робота, то неплохо бы предусмотреть все необходимое для разных вариантов ее использования. Весь код вы можете найти в архиве: https://yadi.sk/d/jIYZQDI-GuytMw

Для езды по черной линии мы задействовали 3 пина под датчики линии и три пина для подключения светодиодов, чтобы иметь возможность визуального контроля наличия линии. Другими словами, если под левым сенсором есть черная линия, то загорится левый светодиод и так далее. Кроме того, мы разработали и протестировали схему, в которой будут одновременно использоваться и управление скоростью моторов по ШИМ, и серводвигатель.

Видео инструкция по сборке робота на Ардуино

Предлагаем вашему вниманию подробную видео-инструкцию по сборке робота автомобиля на Ардуино от нашего партнера – канала ArduMast Club .

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

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

Давай с чего-нибудь начнем? Главный вопрос - выбор контроллера. Существует множество ревизий Arduino, а также сторонних клонов, построенных на основе этих версий. Вот, пожалуй, два самых интересных для нас класса:

  • Arduino Uno - лучший выбор новичка, самая простая, бюджетная и распространенная плата. В основе - чип ATmega328 с тактовой частотой в 16 МГц, 32 Кб флеш-памяти, 2 Кб ОЗУ и 1 Кб EEPROM. В Uno 14 цифровых входов/выходов, которые могут использоваться для управления сенсорами и сервоприводами и другими устройствами;
  • Arduino Mega / Mega 2560 - плата, которая подойдет в случае, когда ты заранее знаешь, что проект будет сложным. Главное отличие - большее количество входов/выходов (48 в Mega, 54 в Mega 2560). Также тут намного больше памяти: 8 Кб ОЗУ, 4 Кб EEPROM, а флеш-памяти 128 и 256 Кб (в Mega и Mega 2560 соответственно). Между собой платы также отличаются чипом, скоростью USB и некоторыми другими характеристиками.

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

Первый код

Для начала установим Arduino IDE (arduino.cc) - это кросс-платформенная бесплатная среда разработки. Теперь, если мы подключим наш Arduino, мы сможем попробовать написать первый код на самом простом примере: программе мигания светодиодом. На большинстве Arduino-контроллеров он есть и подключен к пину 13. Кстати, в мире Arduino программы принято называть скетчами. Вот текст скетча с комментариями:

// Дадим этому пину имя LED: const int LED = 13; void setup() { // Инициализация цифрового пина // для вывода: pinMode(LED, OUTPUT); } void loop() { // Подать уровень логической единицы // на пин 13 (зажечь светодиод): digitalWrite(LED, HIGH); // Приостановить выполнение скетча // на секунду: delay(1000); // Подать уровень логического нуля // на пин 13 (потушить светодиод): digitalWrite(LED, LOW); // Снова приостановить выполнение // скетча на секунду: delay(1000); }

Обрати внимание на функции setup и loop. Они должны присутствовать в любом Arduino-скетче. Setup вызывается единожды при включении или после перезапуска контроллера. Если хочешь, чтобы код выполнялся только один раз, его следует размещать именно здесь. Чаще всего это всевозможные процедуры инициализации чего-либо. Наш скетч не исключение: цифровые пины Arduino могут работать и как входы, и как выходы. В функции setup мы говорим, что пин 13 будет работать как цифровой выход контроллера.

После того как функция setup завершит свою работу, автоматически запускается замкнутый цикл, внутри которого будет вызываться функция loop. От нас требуется написать, что мы хотим там выполнять. А мы хотим подать на пин 13 уровень логической единицы (5 В), то есть зажечь светодиод, затем подождать одну секунду (1000 в миллисекундах), потом подать уровень логического нуля (0 В) и опять подождать одну секунду. Следующий вызов loop все повторит.

Теперь «заливаем» наш скетч в контроллер. Нет, нам не понадобится программатор. Контроллеры Arduino, кроме наших скетчей, содержат специальную программу - bootloader, которая, в частности, управляет загрузкой кода из компьютера. Так что для заливки скетча нам понадобится только USB-кабель и пункт меню File → Upload (Ctrl + U) в Arduino IDE.

Ключевой вопрос

А сколько, собственно, нам нужно ног? Определимся во множестве конфигураций шагающих роботов. По количеству ног:

  • biped - двуногий (прототип - человек);
  • quadruped - четвероногий (прототип - большинство млекопитающих животных);
  • hexapod - шестиногий (прототип - большинство насекомых);
  • octopod - восьминогий (прототип - пауки, скорпионы, крабы и другие членистоногие).

Кроме количества ног, важна и конфигурация каждой. Главной характеристикой ноги является количество степеней свободы, или dimensions of freedom (DOF). Степень свободы - это способность поворачиваться или изгибаться вокруг одной оси (реже - поступательно двигаться вдоль нее). Очевидно, что если степень свободы одна, то на такой ноге далеко не уйдешь. Ноги с двумя степенями свободы (2DOF) уже позволяют двигаться многоногим роботам, хотя 2DOF дает возможность свободно перемещать кончик ноги только в одной плоскости. А 3DOF-нога перемещает «стопу» в 3D-пространстве (если, конечно, не все три оси параллельны). Есть и 4DOF-ноги, которые просто увеличивают гибкость и диапазон перемещения ноги. У насекомых чаще всего 4DOF-лапы.

Что это значит для нас? В дешевых любительских роботах каждую степень свободы реализует один двигатель, точнее, сервопривод, или серв. Конфигурация ног однозначно определяет, сколько таких сервов нужно. Так, 3DOF-гексапод потребует 18 сервов, а 4DOF-паук - уже 32. Не пугайся количества, маленькие сервоприводы, используемые в любительских радиоуправляемых моделях, очень дешевы. В интернет-магазинах их можно найти по запросу micro servo.

Чтобы программировать сервоприводы, достаточно знать, что в них уже есть контроллер, который делает основную работу. И все, что нужно, - подавать питание и цифровой сигнал, сообщающий контроллеру, в какую позицию мы хотим повернуть вал привода. Об их конструкции легко найти информацию. Протокол у них самый простой из всех цифровых протоколов связи: широтно-импульсная модуляция - ШИМ (PWM на английском). У всех простых сервов есть разъем с тремя контактами: земля, +5 В (вольтаж может отличаться в зависимости от размера и мощности) и сигнальный вход. Arduino-контроллеры могут двумя различными способами генерировать такой сигнал. Первый - аппаратный PWM, который сам чип умеет выдавать на нескольких из своих цифровых I/O-пинов. Второй - программный. Программный позволяет получить одновременно больше различных PWM-сигналов, чем аппаратный. Для него под Arduino предоставляется удобная обертка - библиотека Servo. Она позволяет использовать одновременно 12 сервоприводов на большинстве малогабаритных контроллеров (Uno, Due, Nano) и 48 сервоприводов на Arduino Mega и ему подобных. Сигнальный контакт серва подключается к цифровому выводу Arduino. Земля и питание - очевидно, к земле и питанию, они могут быть общими для всех сервов. В трехпроводных шлейфах сервов черный или коричневый - это земля, посередине обычно красный +5 В и, наконец, белый или желтый - сигнальный. С программной точки зрения управление предельно простое:

Servo myservo; // Сервопривод на 9-м пине Arduino myservo.attach(9); // Повернуть в положение на 90º myservo.write(90);

Большинство сервов умеют вращать вал на 180°, и для них 90° - среднее положение. Для упрощения подключения сервов к плате Arduino существует ряд решений. Самое каноничное - это Sensors Shield. Установив его на Uno и подав на клеммы питание для сервов, можно их разъемы подключать прямо в него.

Батарея

Еще один важный вопрос - питание. Если у тебя продвинутая плата, которая позволяет снабжать всю систему по одной линии питания (и двигатели сервов не дадут помех в работу контроллера), то можно обойтись одним источником. Выбор огромен, лучше всего, конечно, Li-Ion/Li-Po брикеты для радиомоделек. Но им нужны и соответствующие зарядные устройства. Если у тебя контроллер попроще (Uno/Due/Nano), то можно питать его отдельно, например 9-вольтовой «Кроной», а сервоприводы подключить к основной мощной батарее. Так сервоприводам точно хватит питания. В случае литиевых аккумуляторов нужно еще тщательней, чем обычно, следить за напряжением, чтобы не было переразряда (допустимые напряжения стоит уточнить для конкретного типа батареи). Для этого на робота-Слейпнира, о котором дальше пойдет речь, также прикручен маленький цифровой вольтметр.

Робожук своими руками

Набор

  • Контроллер Arduino Uno: 1150 р.
  • Три серводвигателя. Я использовал HXT500, 200 р. за штуку
  • Батарейный отсек для «Кроны» с выключателем: 50 р.
  • Батарейка «Крона»: 145 р.
  • ИК-приемник: 90 р.
  • Стальная проволока диаметром примерно 1,5 мм. Я, к примеру, использовал сломанный венчик для взбивания яиц

Итого: 2035 р.

DmitryDzz: Я хочу предложить тебе сделать небольшого дистанционно управляемого шестиногого робожука на базе контроллера Arduino Uno. Лапки будут иметь одну степень свободы, управление будет происходить с помощью обычного ТВ-пульта.

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

Более простой способ - взять набор-конструктор, потому что на первых шагах одного контроллера будет мало. Сейчас много магазинов предлагают такие наборы. Например, есть замечательный интернет-магазин «Амперка» . Здесь тебе предложат несколько подобных конструкторов, отличающихся наполненностью и, конечно, ценой. Мне вполне хватило самого простого - «Матрешка X». В него входит контроллер Arduino Uno, USB-кабель для подключения к компьютеру, доска для прототипирования (незаменимая вещь!), набор перемычек, светодиоды, резисторы и прочая мелочь.

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

Что понадобится из инструментов:

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

Если все собрали, приступим!

Управление

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

На этом этапе понадобится еще ИК-приемник и хорошо бы иметь доску для прототипирования. Подавляющее большинство ИК-пультов работают на несущих частотах 36 кГц, 38 кГц или 40 кГц (Panasonic, Sony). Исключение составляют пульты Sharp (56 кГц), Bang & Olufsen (455 кГц) и, может, кто-то еще более экзотический. Поэтому нам вполне подойдет любой ИК-приемник на 36, 38 или 40 кГц. Частота может точно не совпадать с несущей частотой сигнала. В таком случае чувствительность приемника будет снижаться, но на практике я не заметил дискомфорта, используя ИК-приемник TSOP2136 (36 кГц - последние две цифры - частота) и пульт ДУ Sony (40 кГц).

Итак, для большинства пультов подойдут ИК-приемники TSOP21xx, TSOP22xx, TSOP312xx. Две последние цифры могут быть 36, 37, 38 или 40. Перед включением ИК-приемника уточни разводку его контактов - их всего три: +5V (питание), GND (земля), Vs (выход). Соберем схему, как на иллюстрации (разводка для TSOP2136).


Как видишь, к аналоговому входу контроллера A0 мы подключили выход ИК-приемника.

Вот как выглядит код скетча:

#include "IRremote.h" // Аналоговый вход контроллера, // к которому подключен ИК-приемник: const int IR_PIN = A0; // Создаем объект ИК-приемник: IRrecv irrecv(IR_PIN); void setup() { Serial.begin(9600); Serial.println("ready"); // Начинаем прослушивание ИК- // сигналов: irrecv.enableIRIn(); } void loop() { // Описываем структуру results, // в которую будут помещаться // принятые и декодированные // ИК-команды: decode_results results; // Если ИК-команда принята и успешно // декодирована, то выводим // полученный код в последовательный // порт контроллера: if (irrecv.decode(&results)) { Serial.println(results.value); irrecv.resume(); } }

В скетче используется специальная библиотека IRremote.h, декодирующая сигналы самых разных ИК-пультов. Эта библиотека - открытый проект, скачать ее ты можешь со страницыhttps://github.com/shirriff/Arduino-IRremote. А чтобы ее подключить к нашему проекту, надо выполнить три действия:

  • каталог библиотеки скопировать в каталог libraries, который, в свою очередь, находится в инсталляционном каталоге Arduino IDE;
  • перезапустить IDE;
  • добавить в начало нашего скетча строку #include "IRremote.h".

Теперь в скетче будут доступны функции декодирования ИК-сигналов. Но, чтобы увидеть полученные коды, мы еще будем использовать объект Serial. С его помощью по последовательному порту (все тот же USB-кабель) мы будем передавать коды на компьютер. В функции setup мы выполняем инициализацию объекта Serial. «9600» - это 9600 бод - скорость, которая будет использоваться для передачи данных. После инициализации мы можем производить запись в последовательный порт с помощью функции println. Для просмотра результата этого вывода на компьютере в Arduino IDE выбери пункт меню Tools → Serial Monitor (Ctrl + Shift + M). Только убедись, что в нем установлена скорость 9600 бод.

Итак, питание контроллер получает по USB-кабелю, данные передает по нему же. Загружаем скетч, запускаем Serial Monitor и начинаем жать кнопки пульта ДУ. В окне Serial Monitor должны появляться коды. Протоколы пультов отличаются, иногда это может быть один код, иногда несколько. В любом случае ты всегда можешь выделить коды, уникальные для каждой кнопки пульта.

Нам потребуется 13 кнопок пульта. Я использовал следующие:

  • 1 - плавный поворот налево;
  • 2 - движение вперед;
  • 3 - плавный поворот направо;
  • 4 - поворот налево на месте;
  • 5 - стоп;
  • 6 - поворот направо на месте;
  • 7 - движение назад с поворотом направо;
  • 8 - движение назад;
  • 9 - движение назад с поворотом налево;
  • синяя кнопка - очень медленно;
  • желтая - медленно;
  • зеленая - быстро;
  • красная - очень быстро.

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

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

Скетч управления роботом доступен на странице нашего проекта (bit.ly/1dEwNDC). Не забудь изменить значения констант кодов нажатых кнопок пульта на коды своего пульта (константы IR_COMMAND_XXX_CODES в файле ir_command_codes.h).

Скетч подробно мы разбирать не будем, думаю, достаточно комментариев в коде, но один вопрос все же стоит рассмотреть.

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

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

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


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

Итак, как это реализовано? Мы помним, что контроллер постоянно вызывает функцию loop. Значит, в эту функцию мы должны поместить код, который определяет текущее положение серводвигателей и устанавливает их в это положение. Каждый серводвигатель должен совершать колебательные движения. Рассчитать положение серводвигателя в момент времени t мы сможем по следующей формуле:

X = A sin(2πt/T),

где X - искомое положение серводвигателя, A - амплитуда колебаний, T - период колебаний.

Так, в зависимости от момента времени t мы получим изменение величины X в интервале от –A до +A. Серводвигатели могут принимать положение в диапазоне от 0 до 180°. Поэтому колебания нам лучше производить вокруг «нулевого» положения в 90°. И если мы хотим обеспечить колебания с периодом 1 с вокруг положения 90° с амплитудой 30°, то формула преобразуется в следующий вид:

X = 90 + 30 sin(2πt/1000),

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

А теперь еще раз вернемся к нашей схеме, потому что формула, написанная выше, еще не завершена. Как обеспечить то синхронное, то встречное движение левого и правого серводвигателя? Как менять фазу центрального серводвигателя? Мы должны добавить в нашу формулу фазу колебаний. Сдвиг аргумента синуса на величину π для, например, правого двигателя заставит его работать в противофазу левому, то есть так, как нам надо для поворота на месте. Вот как теперь будет выглядеть наша формула:

X = 90 + 30 sin(2πt/1000 + Φ),

где Φ - фаза колебаний, значение от 0 до 2π.

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

Сборка

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

Это очень важный этап перед сборкой. Попробуй отключить USB-кабель и запитай макет от батарейки «Крона». Проверь все фазы движения и убедись, что все работает. После сборки робота что-либо менять (например, заменить неработающий серводвигатель) будет уже сложнее.


Теперь перейдем к самой сборке. Основной несущий элемент - это батарейный отсек. Я советую использовать отсек закрытого типа и обязательно с выключателем.

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

Контроллер проще всего приклеить к отсеку, но мне этот вариант не очень нравится, так как придется навсегда отдать Arduino Uno жуку. Поэтому можно усложнить себе жизнь и использовать разъемы Arduino для крепления батарейного отсека. На нижней части отсека приклей штырьковый разъем с шагом между штырьками 2,54 мм. Он должен располагаться так, чтобы входить в гнездо контроллера в районе цифровых выводов 8–11. Они пока все равно нам не понадобятся. Если разъема под рукой не оказалось, подойдет П-образно изогнутая канцелярская скрепка.

Провода, идущие от батарейного отсека, надо соединить с выводами Vin и соседним с ним GND. Не перепутай полярность! Плюс «Кроны» на Vin, минус на GND. Чтобы обеспечить надежный контакт проводов с Arduino-разъемами, можно просто облудить кончик провода потолще, я же как штекер использовал короткий отрезок скрепки. А место пайки закрыл термоусадочной трубкой.


Разъемы со шлейфов сервоприводов следует срезать, провода питания (+5 В - обычно красный и GND - черный или коричневый) надо объединить и вывести к гнездам 5V и соседнему с ним GND на контроллере. Подключать будем чуть позже. Провода управляющего сигнала (обычно желтый) выводим на цифровые выводы контроллера: левый серводвигатель на пин 2, центральный на пин 4, правый на пин 7.

«+» и «–» ИК-приемника можно просто вставить в разъем Arduino (5V и соседний GND). Правда, согнув пополам, удвоив их толщину. К этим же ножкам питания ИК-приемника припаиваем ранее подведенные провода питания серводвигателей. Выход сигнала ИК-приемника до аналогового входа контроллера А0 уже вряд ли дотянется, и тебе придется наращивать его проводом.

Несколько советов по изготовлению ног. Сначала подготовь левую и правую «передне-задние» ноги. Убедись в их симметричности (обрати внимание и на длины, и на углы изгибов). Начинай клеить ноги, только убедившись, что серводвигатели установлены в «нулевое» положение (90°).

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

Что дальше?

Робожук - это готовая мобильная платформа на базе одного из самых популярных и доступных контроллеров. Проект открытый: https://github.com/beetle-ringo/arduino . Делай в GitHub форк (ответвление) и добавляй свою функциональность. Дай волю фантазии - добавь ИК-светодиод, и робот готов для робобитвы. Подключи дальномеры, тактильные сенсоры, гироскоп… Научи робота обходить препятствия или ходить по линии, попробуй установить на него веб-камеру. Идей может быть миллион, и ты всегда можешь выбирать самую интересную.

Робот-Слейпнир

Набор

  • Контроллер Arduino Uno Dagu Spider Robot: 2530 р.
  • Сервоприводы SG90 9g (16 штук) 1150 р.
  • Аккумулятор LiPo battery pack, 7,4 В, 1800 мА ч 490 р.
  • Радиомодуль 4 Pin Bluetooth RF Transceiver 270 р.
  • Индикатор напряжения (опционален) DC 3,3–30 В Red LED Panel Meter 100 р.
  • Уголок алюминиевый. В ближайшем строймаркете 135 р.
  • Болтики и гайки. На ближайшей барахолке 35 р.

Итого: 4710 р.

*Компоненты покупались в разное время, и многие позиции можно оптимизировать

poconoco: Попробуем собрать нестандартную конфигурацию - восьминогого 2DOF-робота. 2DOF-ноги намного проще программировать, к тому же у меня есть в запасе куча неиспользованных сервоприводов. А главное, можно будет назвать его в честь восьминогого коня бога Одина Слейпниром (всегда мечтал!).

У нашего Слейпнира с каждой стороны будет по четыре ноги с двумя шарнирами. Каждый шарнир - сервопривод, значит, восемь сервоприводов на сторону. Для простоты все восемь шарниров одной стороны коня будут вращаться в одной плоскости. Хотя это вовсе не обязательно. Более того, если ноги с одной стороны пустить немного «шахматкой», чтобы две соседние ноги не могли задеть друг друга, это будет даже лучше, позволит делать шире шаг и скакать галопом.


Аккуратное и функциональное, но далеко не самое дешевое решение - использовать нестандартную плату контроллера, оптимизированную для подключения сервоприводов в большом количестве. Мне подвернулась Dagu Spider Robot Controller - это тот же самый Arduino Mega, но на плате с заранее распаянными 3-пиновыми штырьковыми разъемами, куда сразу, без всяких шилдов, можно подключить те самые 48 сервоприводов. Идеальна для многоногих роботов на Arduino.

Управление

Управление у нас будет происходить по Bluetooth. Для этого есть различные аппаратные решения. Это и шилды, и отдельные платки с UART последовательным интерфейсом (как обычный ком-порт, только с уровнями сигналов 5 В). Мне самой практичной показалась именно маленькая платка с UART-интерфейсом. Подключается к соответствующим контактам UART/Serial порта Arduino. Отметим два нюанса: на Uno/Due/Nano и подобных всего один такой порт, и он же используется для прошивки через USB. Поэтому, возможно, потребуется отключать Bluetooth-модуль на время прошивки. А второй нюанс - не забывай, что RX-контакт модуля подключается к TX-контакту Arduino, а TX - к RX. Такие дела в UART.

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

Char cmd; Serial.begin(9600); if (Serial.available()) cmd = Serial.read();

Если используется Arduino Mega и Bluetooth подключен ко второму порту, то вместо Serial пишется Serial1. Примечательно, что можно и не использовать Bluetooth, а управлять роботом прямо по USB. И в коде выше не изменится ничего! Это просто работа с последовательным портом, а висит ли там BT-передатчик или преобразователь USB Serial - нам неважно.


Другая сторона Bluetooth

Самый удобный способ подключения - это стандартные утилиты Linux. Для работы нам понадобятся утилиты sdptool, rfcomm (входят в состав пакета bluez в репозиториях Ubuntu), а также minicom (пакет так и называется). Инструкции по работе с этими утилитами можно найти в Сети.

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


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

Итак, что нам нужно делать для работы с 16 сервоприводами и выбранной походкой? Правильный ответ - читать про инверсную кинематику (ИК). Объем статьи не позволяет развернуть тему широко, но материалов в интернете предостаточно. Вкратце, ИК решает задачу нахождения необходимых управляющих сигналов для того, чтобы система в пространстве заняла нужное положение. Для ноги это значит, что по координатам точки, куда должна попасть стопа, следует определить углы сервоприводов, которые для этого нужно выставить. А управляя координатами стоп, можно управлять положением тела. У нас 2DOF-ноги, оси параллельны, поэтому стопа перемещается всегда в одной плоскости. Задача ИК в данном случае сводится к 2D-пространству, что сильно ее упрощает.

Пускай для каждой ноги локальным началом координат O будет вал верхнего серва, то есть бедра. И у нас есть координаты точки A, куда нужно попасть стопе. Тогда легко увидеть, что нужно решить задачу нахождения точек пересечения двух окружностей (см. схему ног одной стороны, там на самой правой ноге это проиллюстрировано). Найдя точку B пересечения окружностей (выбрав любую из них), несложно посчитать искомые углы, используя перевод из декартовых координат в полярные. В коде решение этой задачи выглядит так:

Float A = -2 * x; float B = -2 * y; float C = sqr(x) + sqr(y) + sqr(hipLength) - sqr(shinLength); float X0 = -A * C / (sqr(A) + sqr(B)); float Y0 = -B * C / (sqr(A) + sqr(B)); float D = sqrt(sqr(hipLength) - (sqr(C) / (sqr(A) + sqr(B)))); float mult = sqrt(sqr(D) / (sqr(A) + sqr(B))); float ax, ay, bx, by; ax = X0 + B * mult; bx = X0 - B * mult; ay = Y0 - A * mult; by = Y0 + A * mult; // или bx для другой точки пересечения float jointLocalX = ax; // или by для другой точки пересечения float jointLocalY = ay; float hipPrimaryAngle = polarAngle(jointLocalX, jointLocalY); float hipAngle = hipPrimaryAngle - hipStartAngle; float shinPrimaryAngle = polarAngle (x - jointLocalX, y - jointLocalY); float shinAngle = (shinPrimaryAngle - hipAngle) - shinStartAngle;

где x и y - координаты точки, куда нужно дотянуться стопой; hipStartAngle - угол, на который повернуто «бедро» изначально (при среднем положении серва), аналогично - shinStartAngle. Кстати, в этих расчетах углы, очевидно, в радианах, а в объекты Servo их передавать нужно уже в градусах. Полный работоспособный код прошивки, включающий этот кусочек, выложен на GitHub, см. ссылку в конце статьи. Это кусок ИК, но кроме него нужно еще немного довольно простого кода, чтобы использовать эту ИК на всех ногах (см. функции legsReachTo(), legWrite()). Также необходим будет код, который собственно реализует походку - движение одной группы ног «назад» (чтобы робот двигался вперед), в то время как другая группа ног приподнимается и переставляется вперед для следующего шага, см. функцию stepForward(). Она делает один шаг с заданными параметрами. Этими параметрами, кстати, можно сделать и шаг назад, несмотря на название функции. Если эту функцию вызывать в цикле, то робот будет шагать вперед.

Теперь получение команд и их интерпретация. Добавим в программу состояние:

Enum State { STOP, FORWARD, BACKWARD, FORWARD_RIGHT, FORWARD_LEFT };

И в главном цикле исполнения loop() будем смотреть на текущее состояние (переменная state) и дергать stepForward(), если движемся вперед (с поворотом или без), и опять же stepForward(), но с отрицательным аргументом xamp, если надо двигаться назад. Повороты при этом будут обрабатываться в legWrite(), и для поворота направо ноги с правой стороны будут стоять на месте (пока левые гребут). Вот такой вот конь-танк. Брутально, зато очень просто и работает. Плавный поворот можно сделать только с 3DOF-ногами, пример этого можно увидеть в репозитории buggybug.

Switch (state) { case FORWARD: case FORWARD_RIGHT: case FORWARD_LEFT: stepForward(h, dh, xamp, xshift); break; case BACKWARD: stepForward(h, dh, - xamp, xshift); break; }

Char command; while (Serial1.available()) command = Serial1.read(); switch (command) { case "w": state = FORWARD; break; case "s": state = BACKWARD; break; case "d": state = FORWARD_RIGHT; break; case "a": state = FORWARD_LEFT; break; default: state = STOP; }

На этом основные моменты прошивки закончились, остальное - всякая мелочевка. Хотя есть еще один, пожалуй, важный момент - возможность точной подстройки сервов. Даже при самой аккуратной сборке, если всем сервам подать команду повернуться на 90°, все равно некоторые из них получатся чуть со сбитым углом. Потому нужна возможность его подстраивать. Как у меня это сделано, можно посмотреть в методах hipsWrite() и shinsWrite() и собственно в массивах тонких настроек hipsTune и shinsTune.

Сборка

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

Основой будет прямоугольная рама. Конечности - 4-сантиметровые полосочки. Стоит также запастись множеством маленьких болтиков, гаечек. Режем уголок на нужные кусочки, вырезаем пазы для сервов, сверлим дырочки для крепежных болтов и шурупов. Конструкцию лучше раз показать, чем описывать. Размеры могут быть любые, роботы должны быть разнообразны. Но помни: чем длиннее ноги, тем больший рычаг придется толкать сервоприводу и тем больше будет на него нагрузка. Вплоть до невозможности провернуться и даже поломки. Но 4–5 см - без проблем.

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

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

Что дальше?

Весь проект доступен на странице https://github.com/poconoco/sleipnir . Я описал одну из самых непрактичных конфигураций - много 2DOF-ног, высокий, узкий, легко валится на бок. Попробуй сделать лучше, робота с 3DOF-ногами. С 4DOF-ногами. С клешнями или челюстями. В качестве примера 3DOF инверсной кинематики можешь обращаться к репозиторию buggybug - там прошивка гексапода. Также можно делать не управляемых, а интеллектуальных роботов, ставя вместо Bluetooth датчики расстояния, научить робота обходить стены и препятствия. Если такой сенсор поставить на сервопривод и вращать им, то можно сканировать местность, практически сонаром.

В итоге получился довольно забавный робот , который может видеть перед собой препятствия, анализировать ситуацию и затем, только выбрав лучший маршрут, едет дальше. Робот получился очень маневренным. Он способен разворачиваться на 180 градусов, а угол поворота составляет 45 и 90 градусов. В качестве основного контроллера автор использовал Iteaduino, который является аналогом Arduino.

Материалы и инструменты для изготовления робота:
- микроконтроллер (Arduino или ему подобный Iteaduino);
- ультразвуковой датчик;
- держатель для батареек;
- китайские игрушки для создания колесной базы (можно купить готовую);
- кусачки;
- клей;
- провода;
- моторчики;
- ДВП;
- лобзик;
- транзисторы (D882 P).

Процесс изготовления робота:

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

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

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


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


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








К контроллеру моторчики подключаются при помощи транзисторов типа D882 P. Они были вытащены из старого пульта управления машинкой. Лучше всего конечно использовать силовые транзисторы типа TIP120Б, но автор выбирал просто по подходящим характеристикам. Вся электронная часть подключается по указанной схеме.

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

Что касается датчиков, то ультразвуковой нужно подключить к 7-му цифровому выходу микроконтроллера. Серводвигатель подключается к 3-му цифровому входу, база транзистора левого мотора подключается к 11 контакту, а база правого к 10-му.

Если в качестве питания будет использоваться Крона, то минус подключается к GND, а плюс к VIN. Еще к GND нужно подключить эмиттер транзистора и отрицательный контакт от источника питания шасси робота.

После того, как стали популярными самобалансирующие скутеры Segway, я
всегда хотел создать нечто подобное. Вдохновившись ими, я решил построить Self Balancing Robot ,
используя Arduino. Таким образом, я захотел понять основный принцип работы всех этих скутеров,
а также узнать, как работает алгоритм ПИД-регулирования.

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

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

Выбор електроники для вашего бота

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

  • Arduino UNO
  • Двигатели постоянного тока с редуктором – 2Nos
  • L298N Motor Driver Module
  • MPU6050
  • Пара колес
  • 7.4V Li-ion Battery
  • Купа проводов
  • Каркас напечатанный на 3D принтере

Контроллер: Контроллер, который я использовал здесь, это Arduino UNO, почему, потому что он просто прост в использовании. Вы также можете использовать Arduino Nano или Arduino mini, но я бы рекомендовал вам придерживаться UNO, так как мы можем запрограммировать его напрямую без какого-либо внешнего оборудования.

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

Драйвер двигателя: если вы выбрали двигатели постоянного тока, такие как мои, тогда вы можете использовать модуль драйвера L298N, как я, или даже L293D должен работать нормально.

Колеса: не недооценивайте этих парней; Мне было трудно понять, что проблема была в моих колесах. Поэтому убедитесь, что ваши колеса хорошо сцеплены с полом, который вы используете.

Акселерометр и гироскоп: лучшим выбором акселерометра и гироскопа для вашего робота будет MPU6050 . Поэтому не пытайтесь построить его с обычным акселерометром, например ADXL345 , или что-то в этом роде, он просто не сработает. Вы узнаете, почему в конце этой статьи. Вы также можете использовать эту статью для изучения MPU6050 и его подключения к Arduino.

Battery: Нам нужна батарея как можно более легкая, а рабочее напряжение должно быть больше 5 В, чтобы мы могли напрямую управлять нашим Arduino без модуля повышения. Таким образом, идеальным выбором будет литий-полимерный аккумулятор 7.4V. Поскольку у меня была литий-ионная аккумуляторная батарея 7,4 В, я ее использовал. Но помните, что Li-po лучше, чем Li-ion.

Chassis: Еще одно место, где вы не должны идти на компромисс, — это шасси вашего робота. Вы можете использовать картон, дерево, пластик, с которым вы хорошо справляетесь. Но только убедитесь, что шасси прочное и оно не должно люфтить, когда робот пытается балансировать. Я разработал собственное шасси в программе Solidworks . Если у вас есть принтер, вы также можете распечатать проект, его файлы будут прикреплены внизу статьи.

3D-печать и сборка робота

Если вы решили напечатать то же самое шасси, которое я использую, чтобы построить моего робота, тогда скачайте STL-файлы. Я также добавил файлы проетка вместе с ним, чтобы вы также могли изменить его в соответствии с вашими предпочтениями.

Детали не имеют нависающих частей, поэтому вы можете легко распечатать их без каких-либо опор, а заполнение на 25% будет вполне достаточно. Конструкция довольно простая, и любой базовый принтер должен легко справиться с ее частями. Я использовал программное обеспечение Cura , чтобы подготовить модель и напечатать ее с помощью Tevo Tarantula , настройка показана ниже.

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



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

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

Принципиальная электрическая схема

Соединение частей этого робота между собой задача не сложная. Нам просто нужно подключить MPU6050 к Arduino и подключить двигатели, через модуль драйвера двигателя. Вся конструкция рассчитана на питание от литиево-ионного аккумулятора 7.4V. Схема показана ниже….

Модуль управления двигателем Arduino и L298N напрямую питается через вывод Vin и 12-вольтовый вход соответственно. Встроенный регулятор на плате Arduino преобразует входное напряжение 7.4V в 5V, и ATmega IC и MPU6050 будут питаться от него.

MPU6050 взаимодействует с интерфейсом Arduino через интерфейс I2C, поэтому мы используем штыри SPI A4 и A5 от Arduino. Двигатели постоянного тока подключаются к штырям PWM D6, D9 D10 и D11 соответственно. Нам нужно подключить их к контактам PWM, потому что мы будем контролировать скорость двигателя постоянного тока, изменяя рабочий цикл сигналов ШИМ. Если вы не знакомы с этими двумя компонентами, рекомендуется прочитать руководство по интерфейсу MPU6050 Interfacing и L298N Motor.

Программирование самобалансирующегося робота

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

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

Чтобы узнать текущее положение бота, мы используем MPU6050, который представляет собой 6-осевой акселерометр и датчик гироскопа. Чтобы получить достоверное значение положения от датчика, нам нужно использовать значение как акселерометра, так и гироскопа, поскольку значения от акселерометра имеют проблемы с шумом, а значения из гироскопа со временем дрейфуют. Таким образом, мы должны объединить оба и получить значение шага рыскания и крена нашего робота, из которого мы будем использовать только значение рыскания.

Теперь у нас есть библиотеки, добавленные в нашу среду разработки Arduino. Давайте начнем программирование для нашего Self-балансирующего робота. Как и всегда, полный код для проекта приведен в конце этой страницы, здесь я просто объясняю наиболее важные фрагменты кода. Ранее сообщалось, что код построен поверх примера кода MPU6050, мы просто собираемся оптимизировать код для нашей цели и добавить PID и технологию управления для нашего самобалансирующегося робота.

Сначала мы включаем библиотеки, которые необходимы для работы этой программы. Они включают встроенную библиотеку I2C, библиотеку PID и библиотеку MPU6050, которые мы только что загрузили.

Затем мы объявляем переменные, которые необходимы для получения данных от датчика MPU6050. Мы читаем как значения гравитационного вектора, так и значения кватерниона, а затем вычисляем значение угла и угла поворота бота. Конечный результат будет иметь массив float ypr .

Далее идет очень важный сегмент кода, и именно здесь вы будете тратить много времени на настройку нужного набора значений. Если ваш робот построен с очень хорошим центром тяжести, а компоненты симметрично расположены (что в большинстве случаев нет), тогда значение вашего уставки будет равно 180. Просто подключите ваш бот к серийному монитору Arduino и наклоните его до положения балансировки, прочитайте значение, отображаемое на последовательном мониторе, и это ваше заданное значение. Значение Kp, Kd и Ki должно быть настроено в соответствии с вашим ботом. Никакие два одинаковых бота не будут иметь одинаковых значений Kp, Kd и Ki, поэтому от него не уйти.

В следующей строке мы инициализируем алгоритм PID, передавая входные переменные input, output, set point, Kp, Ki и Kd. Из них мы уже установили значения заданного значения Kp, Ki и Kd в приведенном выше фрагменте кода. Значение входа будет текущим значением рыскания, которое считывается с датчика MPU6050, а значением выхода будет значение, которое рассчитывается по алгоритму PID. Таким образом, в основном алгоритм PID даст нам выходное значение, которое должно использоваться для коррекции значения Input, чтобы оно было близко к заданной точке.

Внутри функции void setup мы инициализируем MPU6050, настроив DMP (Digital Motion Processor). Это поможет нам объединить данные акселерометра с данными гироскопа и обеспечить надежное значение Yaw, Pitch and Roll. Мы не будем углубляться в это, так как это будет далеко за пределами темы. Во всяком случае, один сегмент кода, который вы должны искать в функции настройки, представляет собой значения смещения гироскопа. Каждый датчик MPU6050 имеет собственные значения смещений, вы можете использовать этот эскиз Arduino для расчета значения смещения вашего датчика и соответственно обновить следующие строки в вашей программе.

Мы также должны инициализировать контакты PWM Digital, которые мы используем для подключения наших двигателей. В нашем случае это D6, D9, D10 и D11. Таким образом, мы инициализируем эти контакты, поскольку выходные выводы делают их LOW по умолчанию.

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

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

Выходная переменная PID также определяет, как быстро двигатель должен вращаться. Если бот вот-вот упадет, мы сделаем небольшую коррекцию, медленно вращая колесо. Если эти незначительные корректировки работают, и все еще, если бот падает, мы увеличиваем скорость двигателя. Значение того, как быстро вращаются колеса, будет определяться алгоритмом PI. Заметим, что для функции Reverse мы умножили значение вывода с -1, чтобы мы могли преобразовать отрицательное значение в положительное.

Работа робота Self Balancing Arduino

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

Здесь мы видим входные и выходные значения ПИД-алгоритма в формате input => output. Если бот отлично сбалансирован, значение выхода будет равно 0. Входное значение — это текущее значение от датчика MPU6050. Символ «F» означает, что бот движется вперед, а «R» означает, что бот обратно.

Надеюсь, это поможет создать собственный робот-балансировщик =).

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то