Сайт LMR был одним из первых мест, которые познакомили меня с увлечением робототехникой. Занимаюсь строительством роботов каждое лето в течение последних нескольких лет, и этот робот является уже моим 4-тым или 5-тым. Я начал строить его в конце июня 2012 года и завершил около 80% работ к концу лета. Остальное доделывал с августа по ноябрь, в основном по выходным.
Я построил этого робота, как личный проект, просто для удовольствия. Хотя на самом деле начал планировать его в течение зимы 2011 года, когда наткнуться на акселерометры, которые я никогда раньше не использовал в своих проектах. Так что идея создать робота, который управляется наклоном пульта, стала мне довольно интересной.
Видео:
Для постройки мне понадобилось много труда, а также опыт в работе с акселерометром, беспроводной связью (XBee), Arduino, I2C, мультиплексированием, C + +, изготовлением печатных плат, использование ЖК-интерфейса, и так далее… Таким образом, всё было довольно весело.
Этот проект претерпел многие изменения, прежде чем я начал его строить, а также в процессе создания. Честно говоря, я очень удивлен, что все получилось так хорошо.
Робот управляется с помощью беспроводного пульта управления, в котором установлен акселерометр. Контроллер определяет наклон и передает информацию роботу о том, как нужно управлять двигателями. Контроллер управления также имеет круглый светодиодный дисплей, который отображает наклон пульта и направление, в котором должен следовать робот.
Робот запрограммирован таким образом, что чем сильнее вы наклоните пульт вперёд /назад – тем быстрее он будет двигаться.
Я приложил свой программный код прошивки в архиве. Но его необходимо оптимизировать под вашу вариацию схемы.
Спроектировал и построил все сам, но также реализовал некоторые идеи других людей. И именно поэтому я делюсь всем, что сделал, если кто-то захочет повторить мой проект или что-то вроде его.
Схема пульта управления и робота
Схема довольно проста и не нуждается в пояснениях. Двигатели робота рассчитаны на питание от аккумуляторов 3В, а вся схема робота на питание от 9В батареи. ATmega328P выступает в качестве мультиплексора для светодиодного дисплея. В роботе имеется два выключателя, первый нужен для отключения питания схемы, второй для отключения питания двигателей.
В контроллере содержится Arduino Pro Mini, которая вводит данные из акселерометра ADXL335. ADXL335 выводит на контроллер различные напряжения в зависимости от наклона осей X, Y, Z. Pro Mini вычисляет угол наклона и сохраняет данные. После обработки Pro Mini отправляет данные к модулю передатчику XBee и на ATmega328P через I2C. ATmega328P дальнейшем обрабатывает некоторые данные и определяет, какие светодиоды на индикаторе должны гореть.
Как уже было сказано робот и пульт общаются через радио модуль XBee.
Arduino Pro Mini обрабатывает большое количество данных, и может выводить данные последовательно к компьютеру. Этот скриншот показывает данные, отправленные Pro Mini на компьютер, данные используются при отладке.
В роботе использовано дифференцированное рулевое управление. Для поворота необходимо отключить один из двигателей или замедлить его скорость.
Код управления двигателями несколько раз переделывался. Приводные двигатели, управляются с помощью трёх сигналов: PWM(ШИМ), A и B. Сигналы А и B определяют в какую сторону должен вращаться вал двигателя, ШИМ-управляет скоростью вращения. Программа работает следующим образом: во-первых, Arduino определяет, в какую сторону наклонён контроллер в вперед или назад, а двигатели направляют робота в этом направлении. Далее определяется, наклонен ли контроллер влево или вправо. Вся эта информация хранится в 2-х переменных, Xang и yAng, в них содержатся данные расчёта наклона, в диапазоне от -90 до 90градусов. В Xang записываются данные по ‘оси х’, в то время как в yAng по ‘оси у’. Информация левого / правого наклона также используется для присвоения значений. Далее значения Xang и yAng перемножаются, и произведение становится скоростью вращения двигателя.
Сборка
В качестве привода я использовал сдвоенный мотор – редуктор Tamiya. Привод работает довольно хорошо, хотя не дает достаточно крутящего момента, что, вероятно, связано с низкопробными двигателями, идущими в комплекте.
Пайку электроники я начал с акселерометра ADXL335 3. Я в первый раз использовал в своём устройстве акселерометр. SparkFun для ADXL335 уже имеет необходимые конденсаторы, поэтому акселерометр не требует никакой внешней обвязки.
Я придумал свой оригинальный дизайн платформы, но после тестирования стало очевидно, что такие длинные треки создавали слишком много трения, и роботу было чрезвычайно сложно повернуть. Кроме того, не было достаточного натяжения гусениц, так что эта конструкция была очень неэффективной.
Вид сбоку- схема робота.
Два гнезда по краям платы предназначены для подключения двигателей.
На плате есть разъемы для радио модуля XBee, драйвера двигателя, а также ЖК-дисплея, хотя окончательно робот не содержит LCD из-за ограничений по размеру. Небольшая плата, крепится к основной через ленточный кабель, и имеет 2 ползунковых переключателя — один для полного отключения питания, другой для отключения приводных двигателей.
Первый прототип контроллера, на макетке. Справа Arduino Pro Mini, середина с акселерометром и XBee, все работает от 4.5V батареи. Перед окончательным монтажом я все схемы отлаживал на макетной плате.
Для программирования ATmega328 у меня не оказалось ISP программатора, поэтому для загрузки прошивки я использовал ARDUINO. Если честно я не помню, как я это сделал, поэтому почитайте материалы вот по этим ссылкам:
http://petervanhoyweghen.wordpress.com/2012/09/16/arduinoisp-on-the-leonardo/
http://arduino.cc/forum/index.php?topic=108270
Первый «рабочий» прототип робота. Я сделал его просто для проверки кода, но платформа снова вышла не очень удачно т.к. треки были слабо натянуты, и хотя о он выполняет свою работу, но не может хорошо развернуться.
Печатные платы я приобрёл в магазине SparkFun. Они имеют очень интересный дизайн, каждая площадка на самом деле имеет по 3 отверстия – одно большое и два поменьше – что значительно мне пригодилось.
Это почти законченный контроллер, в центре платы находится акселерометр ADXL335. В левой части платы расположен ATmega328P, который общается с Pro Mini по I2C и работает как драйвер для светодиодного индикатора наклона. Вдоль нижнего края установлены разъёмы для программирования микроконтроллера.
У светодиодного индикатора было не типичное расположение выводов, поэтому его не получилось припаять на макетку, мне пришлось сделать свою печатную плату, ЛУТ методом.
Для травления печатной платы я использовал смесь соляной кислоты и воды, поэтому процесс занял всего 10минут.
Сверление печатной платы
Процесс изготовления печатной платы, был самым сложным в этом проекте, так-как я никогда раньше этим не занимался.
Светодиодный дисплей
Это первое испытание светодиодного дисплея установленного на плате контроллера. Дисплей содержит 16 красных светодиодов, каждый светодиод освещает по 2 сегмента. Дисплеем управляет ATmega328P, который общается с Arduino Pro Mini через I2C.
Платформа робота выполнена из бальзы. Так — как это довольно крепкий и лёгкий в обработке материал.
Распорки осей крепятся на резьбовые шпильки к платформе.
Я потратил довольно долгое время на то чтобы найти правильную длину гусениц, кроме того, их натяжение — должно быть не слишком свободным, но и не слишком тугим. Чтобы уменьшить трение гусениц, при развороте, я добавил 3 комплекта колес посередине.
Шляпки винтов, на которые был прикручен мор-редуктор, мешали установке электроники и прочего оборудования. Потому было решено сделать промежуточную крышку.
Промежуточная крышка вырезана из старого коврика для мышки.
Готовая робо-платформа
Обратите внимание, что чёрное покрытие немного уже чем сама платформа. Это необходимо для установки бортиков, из всё той же бальзы.
Бортики приклеены с помощью обычного школьного клея.
Профиль верхней части переднего бортика слегка скошен, для того чтобы продолжить кривую боковых бортов. Задняя панель имеет небольшой, узкий слот для переключателей и побольше для подключения USB.
На этом фото робот уже почти собран, нахватает лишь верхней крышки.
Батарея идеально вписывается в передней части робота, сверху устанавливаются платы электроники.
Крыша робота вырезана из куска пластика от старого ноутбука. Я согнул пластик и продержал его в таком положении несколько дней, чтобы придать ему надлежащую форму. Спереди на маленьких петлях установлен капот, для облегчения замены батареек. Крыша крепится к роботу с помощью горячего клея.
Готовый робот
Готовый контроллер
Лишние отверстия в центре индикатора, могут понадобиться, если будет нужно установить дополнительные элементы управления
Вероятно это лучшая вещь которую я когда либо сделал.
Небольшой переключатель в левой части платы, управляет подачей напряжения на схему. Второй — позволяет выбирать между программированием Pro Mini и WTH XBee.
Как вы можете видеть, контроллер получился очень эргономичным.
Возможные улучшения:
— Корпус для контроллера управления.
— Установка мотор – редукторов с большим крутящим моментом.
— Оптимизация кода, улучшить программу управления.
— Можно использовать круговые индикаторы других цветов.
— Заменить блок питания с 9V батареи на что-нибудь более надёжное.
— Заменить гусеницы на колёса, чтобы улучшить управление.
Создание этого робота было очень интересным и увлекательным, я планирую сделать ещё одного робота с подобным управлением.
Прикрепленные файлы:
- Robot_Code.zip (7 Кб)