Дети

Робот-автопилот с управлением и программированием с ИК пульта

f6afd0ddb2fb22db68520895d6bc0028

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

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

5dd34d604f57a3752a76c679041bae7c

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

35c6eb4d24f581dc6242d8fb38f97106

Электронной платформой для самоделки будет всем известная Arduino nano, точнее, её недорогой китайский аналог. Так же мне понадобились:
1. Arduino Nano
2. Мотор-редуктор с колесами для Ардуино 2шт. (ссылка на Алиэкспресс)
3. Драйвер мотора MX1508 1шт. (ссылка на Алиэкспресс)
4. Ультразвуковой датчик для измерения расстояния HC-SR04 1шт. (ссылка на Алиэкспресс)
5. Зарядный модуль для литий-ионных аккумуляторов TP4056 1шт. (ссылка на Алиэкспресс)
6. Повышающий преобразователь напряжения MT3608 1шт. (ссылка на Алиэкспресс)
7. Модуль инфракрасного приемника 1шт. (ссылка на Алиэкспресс)
8. Фоторезистор GL5528 (20кOм) 1шт. (ссылка на Алиэкспресс)
9. Светодиоды 2шт.
10. Пьезоизлучатель, зуммер 1шт. (ссылка на Алиэкспресс)
11. Выключатель 1шт.
12. Аккумулятор литий-ионный 18650 1шт. (ссылка на Алиэкспресс)
13. Провода.
14. Еще одно маленькое колесо.
15. ИК пульт дистанционного управления.

Инструментарий составили:

1. Паяльник.
2. Отвертка.
3. Нож.
4. Кусачки.
5. Пилка.
6. Клеевой пистолет.

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

41b37c535bcc923c792cc2348e7e1ad4

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

Например, сам контроллер я решил установить под сиденьем

51691890adb1aeb8b04949dbb477e4ef

 

a7d71ceab1d906d76ac38ff84cb82210

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

5acf8874772240165c5ed367b905533c

 

e2c4bf2cb3167ab1433f3cdc34379a79

Пьезоизлучатель будет находиться на том же месте, где стоял родной динамик машинки

1c2b1a74c664e6ca77d9ad0f0cea759a

Преобразователь напряжения и контроллер аккумулятора установятся внутри корпуса

de922f67155a2b1c17bd979d7f0d9dfd

Светодиоды, имитирующие фары — в передней части

6ae5fda6aa4de7c4b23bae67ee7d3966

 

e076e537e259421170cdee70af703a2e

Там же будет установлен фоторезистор

b545c9afee3324cbf83f4243bef79232

И сверху расположатся датчик расстояния и инфракрасный приемник

344345386ce30808a430552e7b655223

 

174a195eefd44fe604ff762042c57545

Собирать будем по следующей схеме:

af11f32668e59d35ee83128aa85d5adc

Здесь АКБ Li-ion 18650 – это аккумуляторная батарея питающая устройство. Для заряда батареи и защиты от переразряда, она подключается к схеме, через контроллер TP4056 на выводы B+ и B-. Далее с выходов контроллера TP4056 напряжение подается на повышающий преобразователь MT3608, где поднимется с 4.2 до 5 В, а также на драйвер моторов MX1508. И уже с выходов MT3608, питание подается на контроллер Ардуино nano и на подключенные к его пинам датчики.

Собственно, из датчиков мы имеем на борту только три: это ультразвуковой датчик расстояния, датчик освещенности в виде фоторезистора и инфракрасный приемник для управления роботом с ИК пульта. Фоторезистор подключен к аналоговому пину А6 на Ардуино, с подтягивающим резистором 10 кОм на массу. А датчик расстояния к цифровым пинам D10 и D12, на контакты trig и echo, соответственно. Инфракрасный датчик подсоединен к цифровому пину D8.

Помимо датчиков к Ардуино подключены также входящие контакты драйвера моторов IN1, IN2, IN3, IN4, на пины: D5, D4, D6, D7, соответственно. Пьезо пищалка для звукового сопровождения — пин D11. И два красных индикационных светодиода, для подсветки робота в темноте. Светодиоды подключаются анодами к цифровым пинам D2 и D3, и катодом к GND c ограничивающим резистором на 160 Ом.

dcd46c271a97fdee132b35c4b8a27c07

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

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

0c6666b7f0a10f32fb5b8a255133a409

После чего я приступил к распайке .

5b4a7faa7b978eb51cb3441032b2c1b2

 

018507e61a6b7499f8eada0077253d38

 

664a813325f640adb71be99bf3eee4c4

 

5ea19633c384916425189a211f8375f6

 

f5ce70219846e5d2a46d88b0272e4e01

И настройке повышающего преобразователя MT3608 с помощью подстроечного резистора так, чтобы на out контактах было 5V.

6e9c386d7dee7190c30c6f6134d1733f

 

60f585d832e80f0e0b717d9e3c214c66

Соединив все модули согласны схеме,

68c1b7de303793501e120c9989d89892

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

d44077f639dbf57998f689e84f99297d

 

2d207a4292701ac02f0c1168346c6afb

Аккумулятор будет располагаться сзади, над моторами. Я подпаял провода прямо к батарее, хоть это делать и нежелательно, но так всё будет немного компактнее.

12c196c5c25a7c900fc05ad17a26c43c

 

b7e0442aad29953205dddb64ed297406

 

75fb618698c34aa9e80d8b25be7dedaa

В задней части сиденья я проделал отверстие для подключения mini USB кабеля к разъему на Ардуино, чтобы иметь возможность программировать контроллер ничего не раскручивая.

e4c3c82a1feababf4d1d1fc6bb8acc32

 

e946c3134c2e1cba62053a7d3a63cdc7

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

de9391f71445075d72bf0585137b4fbb

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

51e6e5808033cabdfb61b87ced5cdc5a

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

13ca90ec5302c406fc8773ee693ee87c

 

53fe3e7d3b88049fcf33ab0915eb37ee

Получился вот такой робот, и он уже почти готов к работе.

fac4d837e22209d793a4e0cd77ac831c

Осталось составить скетч в Arduino IDE и залить его в контроллер.

В процессе написания программы, я, хоть и не использовал никаких экзотических библиотек, только стандартные и проверенные временем, столкнулся с необычной проблемой: после обновления до последней версии, библиотека IRremote, ответственная за обработку сигналов получаемых с инфракрасного приемника, перестала работать. Но после отката на версию 2.8.0, все снова заработало, как надо. Так что, если кто будет использовать аналогичный моему код, имейте ввиду, что версия указанной библиотеки должна быть не выше 2.8.0. Так же, возможно, вам придется изменить в этой библиотеке таймер по умолчанию в файле:
Users###DocumentsArduinolibrariesIRremotesrcprivateIRremoteBoardDefs.h
(Более подробно об этом сказано в самом скетче)
И еще по поводу ИК управления. Поскольку ваш пульт ДУ почти наверняка будет отличаться от моего,

3e89b5a3590ef241c127fbaac02199ff

то и коды клавиш у вас будут другими. Определить их можно раскомментировав строчку:

//Serial.println(irrecv.results.value);

Находящуюся внутри функции

void changeMode()

и открыв «монитор порта».
При нажатии кнопок на ИК пульте в мониторе появятся соответствующие цифры. Их нужно будет вставить после команд:

switch (irrecv.results.value) {
case ******** :

на место «********», которые ответственны за обработку сигналов от нужных кнопок.

Будьте внимательны, операторы

switch (irrecv.results.value)

в программе встречаются аж целых 4 раза.
Скачать скетч можно здесь.

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

04f7a172f77eedb0a94f07cd7e53801f

Поэтому я заменил их на одинарное.

e67e42153732bf00c128c26be6a61b43

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

void drive(byte d).

Вкратце программа работает следующим образом:

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

1.Ручное управление. Полный контроль передвижений робота пультом. Куда жмем, туда и едет.

2.Простой автопилот. В этом режиме робот сам определяет направление своего движения, избегая при этом столкновений с близкими препятствиями с помощью метода «отъезд назад, разворот» и т.д..

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

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

И еще 2 режима для программирования действий в режимах 3 и 4.

И функция ожидания.

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

Из доступных действий в него заложены:

1.Движение вперед.
2.Назад.
3.Вперед и направо, налево.
4.Развороты на месте.
5.Движение назад с поворотом направо или налево.
6.Остановка.

Выполнение роботом команд задаваемых с ИК пульта:

Управление роботом с пульта:

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

Робот на автопилоте:

Желтая кнопка — включает автопилот в котором изначально отсутствуют заданные действия, кроме движения веред. Их нужно прописывать вручную с помощью пульта. Делается это в специальном режиме, войдя в который нужно установить робота на определенном расстоянии до препятствия и последовательно нажимая на нужные кнопки, прописать в память те действия, которые робот должен выполнить наткнувшись на стены впереди. Причем, если прописать несколько вариантов действий (до 20 вариантов от 1 до 20 действий в каждом), то выбран будет тот, в котором записана наиболее подходящая дистанция до преграды.

Программирование с пульта:

Робот катается сам, реагируя на препятствия серией из 20 команд, введенных с ИК пульта:

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

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

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

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

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

Считывая данные с датчика света, робот автоматически включает фары, если попадает в затененную область, благодаря чему, его всегда будет видно в темноте или «под диваном», при этом издавая серию рандомных звуков.

e38f98874241afd0686727bc8108c5c5

Радиус действия пульта ограничен несколькими метрами, но для квартиры этого достаточно.

Если говорить о затратах, то на покупку всех необходимых модулей у меня ушло меньше 1Круб. Аккумулятор, пульт, светодиоды и ИК приемник были добыты из разного хлама.

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

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

1867dc33fec39d2dbe7e250e9d761640

Источник

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Проверьте также

Закрыть
Кнопка «Наверх»

Мы cохраняем файлы cookie: это помогает сайту работать лучше. Если Вы продолжите использовать сайт, мы будем считать, что это Вас устраивает.

Закрыть
Закрыть