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

Как водится, все началось совершенно случайно – у сына скоро должно было случиться 13-летие, в результате чего остро возникла проблема поиска подарка. Всевозможные гаджеты уже имеются, книг – полный шкаф… Модели? Мы с сыном - моделисты со стажем и уже владеем целым авиапарком, где даже кордовая модель есть, о которой я здесь как-то рассказывал:
Кордовая учебная модель самолета.+125
30 июля 2015 года в 22:56 | Александр Шаргаев Химки
Статья http://www.parkflyer.ru/blogs/view_entry/12141/

Также имеется пара вот таких автозверей:
Turnigy Trooper SCT 4x4 1/10 Brushless Short Course Truck (ARR)
Товар http://www.parkflyer.ru/ru/product/449079/



Теперь, надеюсь, вы понимаете, насколько трудно мне было подобрать подарок...

Ну так что подарить-то? Естественно, хочется, чтобы было и интересно, и, главное, полезно. Давно присматривался здесь на сайте к вкладке «Электроника/роботы», где разглядывал картинки тележек на колесах с забавно торчащими во все стороны датчиками и проводами. Я по наивности думал, что это так, игрушка – собрал из деталек робота и запускаешь его по комнате. Ну да, продаются запчасти и дополнительные датчики. Ну и что? Ну, собрал робота, покатал, прикупил датчик, поставил, еще покатал, другой датчик, снова покатал… А дальше?
Но все-таки, на всякий случай, решил немного поинтересоваться темой. Чисто внешне понравился вот этот робот:
Arduino 4WD ультразвуковой робот (кит)
Товар http://www.parkflyer.ru/ru/product/1004763/

В комментариях задал наводящий (в смысле, чайницкий) вопрос: типа, эту штуковину нужно просто собрать и запустить? Или еще нужен какой-то процессор, который придется прошивать (вот чего совсем не хотелось бы, дело-то весьма специфическое, да ведь еще и программатор потребуется…). Мгновенно откликнулся Евгений Песенько из Минска (пользуясь случаем, хочу его еще раз поблагодарить) – для начала, говорит, почитай-ка ты матчасть, а именно сходи на сайт http://arduino.ru/. Начал я читать… И с первых же строк настроение мое полезло вверх – это же чертовски интересная штуковина, это именно то, что нужно!

Что же это за зверь такой – Ардуино? Оказывается, это семейство плат с уже установленным микроконтроллером. На платах имеются входы, к которым можно подключать огромное количество всевозможных датчиков, выходы, которые могут управлять светодиодами, электромоторами, сервами, жк-экранами, …, да почти, чем угодно! Есть даже выходы ШИМ! Не в курсе, что это? Если начнете изучать Ардуино, быстро узнаете! Также, что очень удобно, на платах имеется стабилизированное питание для подключаемых датчиков. Но, что самое главное, для программирования микроконтроллера, установленного на плате, не нужен программатор! Подключаете плату через USB-разъем к компьютеру и вперед!

Программы для Ардуино (которые, кстати, называются скетчами) пишутся в специальном текстовом редакторе, который можно свободно и бесплатно скачать с вышеуказанного сайта. В данном редакторе можно также проверить скетч на ошибки, открыть мониторинг последовательной шины (ой, я уже начал умничать, пардон… говоря по простому, в режиме реального времени посмотреть, что делается на входах/выходах). Язык программирования – несколько упрощенный С++. Для тех, кто хоть немного знаком с программированием, никаких проблем не будет. Ну да, есть свои особенности у языка, но не более того. К тому же в сети имеется некоторое количество литературы и огромное количество примеров, если что, можно изучить все с нуля. Также, что радует, в свободном доступе есть библиотеки для работы с сервами, экранами и много-много еще с чем. А вообще, на платах Ардуино народ собирает не только и не столько роботов. Там и умные дома, и хитрые системы полива, и автопилоты для коптеров, и ЧПУ, и всякие управления через WI-FI/GSM, и… Чего только не делают! Оказывается, это целая неизведанная мной интереснейшая область, где, мягко говоря, есть, чем заняться!

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

Но прежде, чем заказывать данный набор, сначала попробовал разобраться, из чего он состоит, и что для чего там нужно. В этом мне очень помог Дмитрий Растеряев из Невиномысска (ему еще раз огромное спасибо!). Кое что из этого набора мне пока не требовалось, всевозможные сервы у меня уже и так есть, к тому же мне, как авиамоделисту, не понравилось крепление ультразвукового датчика – вся нагрузка идет на ось сервы. Задел, и ось отломил… Вдобавок, у нас подразумевалась самостоятельная работа руками – изготовление всевозможных кронштейнов. Поэтому принял решение приобретать компоненты по отдельности.

В итоге, были заказаны:

Шасси:
4WD Smart Car Chassis 4 Wheel Drive Double Level K-002 For Arduino
Товар http://www.parkflyer.ru/ru/product/1567183/


Плата ARDUINO Uno, имеющая на борту 6 аналоговых входов и 14 цифровых входов/выходов (6 из которых могут использоваться как выходы ШИМ):
Arduino-Compatible R3 UNO ATmega16U2 AVR USB Board
Товар http://www.parkflyer.ru/ru/product/1563276/


Плата расширения, с помощью которой удобно подключать датчики, сервы и прочие интересные штуковины. Она просто вставляется сверху в плату Ардуино. Кстати, всякие такие доп.платы называют шилдами:
Sensor Shield V4.0 Sensor Expansion Board For Arduino Robot
Товар http://www.parkflyer.ru/ru/product/1687383/


Еще один шилд – плата управления электромоторами:
Motor Driver Shield Expansion Board For Arduino
Товар http://www.parkflyer.ru/ru/product/1719373/

Ультразвуковой датчик измерения дистанции:
Ultrasonic Module HC-SR04 Distance Measuring Ranging Transducer Sensor
Товар http://www.parkflyer.ru/ru/product/1567123/

Рекомендуемое напряжение питания платы ARDUINO Uno 7-12В, поэтому был выбран вот такой контейнер для батареек:
DIY 12V 8-Slot / 8 x AA Battery Double Deck / Back To Back Holder Case Box With Leads
Товар http://www.parkflyer.ru/ru/product/1971593/


Пока шла посылка (примерно месяц), плотно изучал тему, ведь мне впоследствии это все нужно будет доходчиво объяснять сыну. Еще раз убедился в правильности выбора подарка – интересно просто невозможно! Мне, во всяком случае…

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

Начали потихоньку осваивать. Сначала помигали светодиодом (кстати, максимальный ток выхода Ардуино 40мА, поэтому нужны токоограничительные резисторы). Помигали двойными вспышками поочередно двумя светодиодами, якобы полицейская мигалка. Ага, вижу, появился интерес… На макетной плате установили восемь светодиодов и сын с азартом начал программировать всякие-разные бегущие огни. Очень удобно: в программе сделал изменение, нажал мышкой на стрелку, залил скетч и сразу все работает! И никаких тебе блоков питания - для подобных вещей достаточно подключения по USB.

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

Из обнаруженного в закромах пластика сделали ложемент для контейнера питания. Выпиливали детали, грели феном, гнули, склеивали – как и предполагалось, работа руками присутствовала в полной мере. К платформе ложемент приклеили на двухсторонний скоч. В качестве источника тока использовали вот такие аккумуляторы:
Аккумулятор с низким саморазрядом Turnigy AA LSD 2400mAh NiMH, готов к использованию
Товар http://www.parkflyer.ru/ru/product/1530502/


Чтобы было все «по взрослому», на «первом этаже» посредством уголка все из того же пластика установили гнездо для подключения аккумуляторов, тумблер включения питания и винтовую колодку. Как оказалось – очень удобно:

На «втором этаже» с помощью выпиленных из ДВП деталек закрепили плату Ардуино и надели на нее шилды - плату управления моторами и плату расширения. На мотор-шилде имеется кнопка включения, разъемы питания и моторов. Направление вращения моторов изменяется подачей сигнала высокого/низкого уровней на входы 4 и 7 шилда, а скорость вращения регулируется скважностью ШИМ-сигнала на входах 5 и 6. К плате расширения удобно подключать всякие штуковины. Т.к. шилды «одеваются» сверху на Ардуино-плату, никакие провода между ними не нужны, что очень удобно. Получился вот такой бутерброд:


Знаний у нас пока немного, поэтому сначала составили простейшую программу: столько-то секунд проехать прямо, затем повернуть направо, снова прямо, развернуться и т.д. Активируем в программе выходы, какие моторы когда, в какую сторону и с какой скоростью включать/выключать, заливаем скетч, ставим робота на пол, включаем тумблер питания… Ура!!! Все нормально, едет, поворачивает, все как в программе. Посмотрели, что и как, подобрали скорости движения, разворота. Пора переходить к следующему этапу – научить робота «видеть» дорогу перед собой.

Здесь пригодился заказанный датчик дистанции HC-SR04, похожий на два глаза и который подключается по четырем проводам: два – питание, а также вход Trig и выход Echo. При подаче напряжения датчик не начинает безудержно измерять все вокруг, он ждет импульса 10мс на свой вход Trig. Получив таким образом команду на определение дистанции, датчик одним «глазом» отправляет перед собой пачку из 8 импульсов частотой 40кГц. Импульсы, дойдя до препятствия, отражаются и возвращаются обратно, где их улавливает второй «глаз». Исходя из времени задержки отраженного сигнала, датчик выдает импульс определенной длительности на выход Echo. Диапазон измеряемых расстояний - от 2 до 450 см. Для крепления датчика сделали кронштейн, чтобы сервой можно было поворачивать его в разные стороны. Но об этом поподробнее в следующий раз…

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

Все получилось, приближаем книгу – светодиод загорается, удаляем – гаснет. Поиграли в скетче с дистанцией – все хорошо, момент переключения светодиода изменяется. Теперь этот коротенький скетч вставляем в текст основной программы и вносим другие необходимые изменения. Ставим робота на пол, включаем, поехал и… Врезался в стену! Что такое? Добавляем в скетч возможность подключения контрольного светодиода, включаем: при приближении робота к препятствию светодиод не загорается – датчик не видит! Где-то накосячили и его спалили? Да не должны, вроде… Снова заливаем скетч только для зажигания светодиода, все нормально, работает. Заливаем, где с моторами - никак. Ага, это уже определенный результат! В основном скетче отключаем моторы – все в порядке! Значит, кусок программы для работы дальномера написан правильно, кусок для моторов – тоже, а вместе – никак. Тут же напрашивается вывод – работающие моторы кидают в цепи питания сильные помехи и, либо датчик, либо основная плата начинают «газовать».

Вставляем в колодку, которая на нижней «палубе», электролитический конденсатор на 2200мФ, включаем… Очередное ура! Едет, видит, поворачивает. Отсюда сделали для себя важный вывод: торопиться не нужно, любое новое устройство, подключаемое к роботу, нужно сначала отладить в отдельной программе, а затем уже вживлять ее в основной скетч. Если бы мы подключали дальномер сразу, неизвестно, сколько времени бы потратили, пока разобрались, что к чему…

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

Вот что у нас получилось на данный момент:




Ну, пока все. Ближайшими этапами развития робота мы наметили следующие мероприятия:
1. Измерение освещенности фотодатчиком и автоматическое включение «наружного света».
2. При приближении к препятствию робот должен остановиться, покрутить «головой» и выбрать наиболее свободный путь.
3. Вообще, мы уже столько всего напридумывали, что теперь нам надолго будет, чем заняться…

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

В общем, тема Ардуино оказалось весьма интересной и познавательной. Это целая область, где можно без особых усилий создавать весьма сложные устройства. Также Ардуино может сильно помочь, например, авиамоделистам – какую-нибудь навороченную систему уборки/выпуска шасси со всякими открывающимися и закрывающимися створками, сложный алгоритм работы БАНО или механизации тут реализовать достаточно просто. Тем более в семействе Ардуино есть достаточно миниатюрная платка Nano, не сильно уступающая по своим возможностям старшим братьям. Так что, все в ваших руках! И мозгах…

Я не выкладывал здесь скетчи по двум причинам: во-первых, хотел просто рассказать, что такое Ардуино, без подробностей. Во-вторых, примеров в Интернете навалом, поэтому загружать текст ни к чему. Но, если вдруг кому понадобится, выложу без проблем. Видео тоже не стал выкладывать – не интересно, робот ведет себя пока еще достаточно «тупо». Вот когда научится «вертеть башкой» и искать дорогу, не натыкаться на диван и кота, вот тогда… В общем, если интересно, расскажу что и как. Вот только новогодние праздники закончились и времени стало сильно поменьше…

Удачи!