Text
                    Робототехника
ARDUINO

ОЛИМПИАДНЫЙ КУРС

с пошаговыми инструкциями и QR-кодами для перехода к необходимым ресурсам

nit.coTn.ru

Создание Д rduino-робота своими руками, пошаговые инструкции
Электронные компоненты, выдаваемые участнику олимпиады
Разработка и создание базовой колесной платформы робота
Тестирование оборудования, выданного для создания робота
Написание программ для flrduino-po6oToa и алгоритмы их работы
Требования ЕСКЛ, практические примеры схемотехники роботов
350 QR-кодов для перехода к Интернет-ресурсам и 220 иллюстраций

Мельников С.А. РОБОТОТЕХНИКА HAARDUINO ОЛИМПИАДНЫЙ КУРС С ПОШАГОВЫМИ ИНСТРУКЦИЯМИ И QR-КОДАМИ ДЛЯ ПЕРЕХОДА К НЕОБХОДИМЫМ РЕСУРСАМ Издательство Наука и Техника Санкт-Петербург
УДК 621.314:621.311.6 ББК 32.816 Мельников С.А РОБОТОТЕХНИКА НА ARDUINO Олимпиадный курс с пошаговыми инструкциями и QR-кодами для перехода к необходимым ресурсам - СПб.: Издательство Наука и Техника, 2026. - 400 с., илл. Серия «Создаем практические устройство» ISBN 978-5-907592-99-5 Книга написана для начинающих конструкторов и радиолюбителей, желающих научиться кон- струировать и строить роботы. Она поможет быстро пройти путь от первой сборки робота до уверенного выступления, например, на школьной олимпиаде Приводится ускоренный курс для начинающего разработчика роботов с пошаговыми инструк- циями и видеоуроками, десятками проверенных приемов и упражнений Подробно разобраны платы Arduino и наиболее востребованные модули: датчики линии и расстояния, драйверы моторов, знкодеры, сервоприводы, элементы питания, стабилизаторы и расширители I/O. Даны рекомендации по выбору и сборке базовой колесной платформы. Отдельные разделы посвящены тестированию оборудования и типичным отказам, алгоритмам быстрой диагностики Программная часть ведет от элементарных операций к сложным сцена- риям: чтение датчиков, управление приводами, «умные» задержки, калибровка, движение по линии с регулятором, работа с перекрестками и манипуляцией объектов. Схематическая часть книги объясняет требования ЕС КД и показывает корректные схемы. Отдельный модуль книги - образовательная программа для педагогов В нужных местах книги стоятQR-коды, которые перенесут вас в онлайн-мир: откроют видео или справочную информацию. В ходе чтения книги, отсканировав QR-код, можно смотреть видео или читать материалы соответствующей тематики. Кроме того QR-код стоит возле каждого рисунка, что позволяет посмотреть на смартфоне или планшете этот рисунок в цвете. Книга адресована, в первую очередь, педагогам и командам, которым нужна компактная, надежная программа подготовки сооевнованиям- от теории к победе на практике. Она будет интересна и для кружков технического творчества, домашних умельцев и широкого круга читателей 9 785907 592995 Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме и любыми средствами без письменного разрешения владельцев авторских прав. Издательство не несет ответственности за доступность материалов, ссылки на которые вы можете найти в этой книге. На момент подготовки книги к изданию все ссылки на интернет-ресурсы были действующими. Контактный телефон издательства 1812) 412-70-26 Официальный сайт: wwwnit.com.ru © Мельников С.А., 2026 © Издательстве Наука и Техника (оригинал-макет), 2026 ООО ''Издательство Наука и Техника». 192029 г. Санкт-Петербург пр. Обуховской обороны, д. 107, лит. Б, пом. 1-Н Подписак . печать 01.12.2025. Формат 70*100 1/16. Бумага газетная. Печать офсетная. Объем 25 п л. Тираж 1500 экз Заказ № 16236.
СОДЕРЖАНИЕ QR-коды - как их использовать в книге.............................. 8 От автора.......................................................... 9 Раздел 1. ЭЛЕКТРОННЫЕ КОМПОНЕНТЫ, ‘ВЫДАВАЕМЫЕ УЧАСТНИКУ ОЛИМПИАДЫ.................................. 11 Глава 1. Краткая история появления олимпиад по ARDUINO........... 12 Цели и задачи олимпиады..................................... 12 Всероссийские Олимпиады школьников пи технологии ... . .........13 Зарождение современной олимпиады по Arduinc.................... 15 Глава 2. Существующие разновидности плат Arduino.................. 18 Обзор популярных моделей Arduinc.......................... ... 18 Характеристики Arduini UNO R3................................ 19 Глава 3. Модули датчиков линии и светоотражения................... 23 Характеристики датчиков линии на базе оптической пары «TCRT 5000» .. 23 Подключение датчика линии на базе оптопары TCRT 5000 к плате Arduino . 27 Примеры тестирования датчиков линии..... ...................... 27 Глава 4. Модули датчиков расстояния............................... 30 Разновидности и принцип действия . . ........ 30 Подключение оптического датчика расстояния SHARP 2Y0A21 к плате Arduino.................. ... 33 Подключение акустическою датчика расстояния HC-SR04 к плате Arduiro............................... .. . 35 Подключение лазерною датчика расстояния VL53LOX к плате Arduino .. 38 Установка библиотеки для работы с лазерным дальномером...... . 39 Примеры программного кода для тестирования лазерного дальномера VL53LOX.................. 41 Глава 5. Модули управления двигателями - драйвер двигателей.... 45 Платы драйверов двигателей.................................. 45 Прямое назначение плат драйвер-а двигаюлей................ . 4S Драйзер двигателей L298N..................................... 48 Подключение L298N к плате Arduinc .......................... 52 Управление мотор-шилдом: перемычки и пины...................... 55 Питание Motor Shield: общее или раздельное?.. ........ 57 Подробно о Motor Shield........................................ 59 Управление моторами постоянного юка.......................... 59 Управление шаговым двигателем......... .. . ............ 69
Глава 6. Модули расширения портов ввода-вывода .................. 63 Глава 7. Модули стабилизатора питания............................ 66 Глава 8. Моторы, сервомоторы..................................... 69 Микросервоприводы............................................ 69 Виды сервоприводов ........................................... 71 Типы моторов сервоприводов- 71 Как работает сервопривод ................................... 72 Подключение сервопривода к плате Arduino:.................... 73 Коллекторные моторы . ..................... .. ____.... ... 75 Использование моторов с встроенным редуктором .... 76 Подключение коллекторного мотора к плате Arduino.............. 78 Программа для драйвера мотора L298N.................. ... 79 Подключение больших коллекторных моторов с энкодереми 80 Советы по надежности.......................................... 82 Программа управления моторами и считывающая показания энкодера 82 Глава 9. Модули измерителей скорости вращения, энкодеры........... 86 Пример программы с использованием оптического энкодера...... 89 Использование энкодеров в Arduino.. 91 Подключение механического модуля энкодера к Arduino............92 Пример программы обработки механического энкодера............. 93 Глава 10. Элементы питания....................................... 95 Батарейки и батареи.. ...................................... 95 Выбор варианта питания для олимпиадных работ. ............ 97 Глава 11. Провода для прототипирования...........................100 Алгоритм использования проводсь для прототипирования в Arduino 100 Виды проводов для прототипирования.............................101 Раздел 2. КОНСТРУКТОРСКАЯ ЧАСТЬ: СОЗДАНИЕ БАЗОВОЙ КОЛЕСНОЙ ПЛАТФОРМЫ С ЛЕГКОСТЬЮ..................103 Глава 12. Видео-урок по сборке олимпиадной платформы..............104 Глава 13. Пошаговая сборка и настройка малой олимпиадной платформы.....................................105 Основные элементы корпуса малой платформы 105 Основные особенности платформы................................ 106 Монтаж нижней платформы................................... .107 Установка боковой стенки.................. ................. . 112 Установка управляющей электроники............................. ИЗ Подключение моторов . . ... 118 Особенности современных драйверов моторов удобно и компактно . . .119 Укладка проводки........................................... 120 Частые ошибки и хитрости ................. ............ . 120
Установка питания . .......... .. 120 Установка средней платформы . ... ...... .. 122 Установка верхнего этажа . .. 125 Подключение основного питания.................................. 126 Подключение дополнительного оборудования.... ...................129 Глава 14. Пошаговая сборка и настройка большой олимпиадной платформы......................................133 Основные этапыеборки............................................133 Особенности платформы...........................................134 Монтаж нижней платформы . 135 Монтаж верхней платформы........................................ 147 Раздел 3. СХЕМОТЕХНИКА РОБОТОВ И СЕКРЕТЫ ИХ СОЗДАНИЯ .. 169 Глава 15. Тестирование выданного оборудования: надежность на первых этапах олимпиады..............................170 Мелочи, которые могут пригодиться тестировщику . ...............170 Что делать, если оборудование неисправно?.......................172 Какие узлы Arduino UNO «любят» ломаться.........................174 Технически о проблеме металлических винтов у разъема питания ... 174 Решения и профилактика...................................... 175 Появление технической проблемы . . .........— 176 «Слабые» места по питанию на типовой плате-расширении драйвера моторов....................179 Проблемы соединения и распайки на типовой плате-расширении драйвера моторов . ............181 Проблемы модулей драйвера на типовой плате-расширении драйвера моторов. ....... .................................182 Проблемы логики и сигналы управления на типовой плате-расширении драйвера моюров.................... 182 Проблемы компонентов фильтрации и сглаживания на типовой плате- расширении драйвера мсторов ...............182 Как действовать при обнаружении проблемы . ................185 Обращение к техническому специалисту......................... . 184 Основные механические проблемы при работе с платой-расширением портов ввода-вывода..................... 185 Основные электрические проблемы при работе с платой-расширением портов ввода-вывода. ......................185 Как действовать при проблеме................................... 185 Механические неисправностей стандартных «хобби»-серво ..... . 186 Электрические неисправностей стандартных «хобби»-серво . ....... 187 Неисправности электроники управления стандартных «хобби»-сервч .187 Сбой сигнального интерфейса стандартных «хобби»-ссрво .... 188 Эксплуатационные и внешние факторы стандартных «хобби»-серво .. .. 188 Как выявить и диагностировать проблему стандартных «хобби»-серво . 188
Глава 16. Программная часть; от элементарных действий до сложных сценариев...............................................190 Элементарные действия - основа icero...........................19С Какие кубики нам нужны................................ 191 Как мы пишем программу.........................................191 Пишем программу для управления моторами........................193 Пишем программу для управления светодиодами.................. 197 Пишем программу для управления сервоприводами.................. 198 Пишем программу для включения пищалки .... ....................199 Как размещать датчики освещенности. ........................ 202 Как считывать значения с датчиков с свещенности .. .......... 204 Учимся измерять расстояние с ИК дальномером (Sharp)............205 Учимся измерять расстояние с УЗ дальномером (HC SR04)........ 206 Учимся работать с кнопкой.................. . .............208 Знакомимся с умной задержкой...................................210 Считаем перекрестки................................... ... 212 Используем регулятор для движения по линии.....................214 Программируем элементарные поведения .. ... . . .. . 216 Используем функцию ожидания нажатия кнопки.... ........... .... 217 Пишем автоматическую калибровку............................ 218 Программируем движение по линии в течение заданного времени 222 Движение по линии до заданного количества перекрестков.........224 Учимся разворачиваться на линии в обратном направлении ........225 Выполняем манипуляции с обьектами..............................228 Разбираем пример программы для выполнения действий на полигоне (олимпиадное задание)....................................... 229 Глава 17. Схематическая часть: требования, примеры и понимание ключевых аспектов.............................247 Что такое ЕСКД и зачем он нужен .. . . . ................. 247 Основные требоьания.......... ... .........248 Понимание различий в схемах......... ..... . . ...........250 Принципы проектирования схем............................... 252 Примеры правильного составления схем в sPLan...................253 Глава 18. Популярные олимпиадные задания по Arduino................260 Введение в олимпиадные задания ..... . ........ . 260 Поимеры реальных олимпиадных конструкций ..................... 267
Приложение. ИНТЕРАКТИВНЫЙ СПРАВОЧНИК ДЛЯ РОБОТОТЕХНИКОВ ПО ARDUINO..........................273 Приложение 1 Семейстчо плат Arduino: сравнительная таблица ... .274 Приложение 2. Ранние варианты плат Arduino.............280 Приложение 3. Arduino Uno..............................284 Приложение 4. Arduino Leonardo.........................294 Приложение 5. Arduino Due..............................303 Приложение 6 Arduino YUN...............................313 Приложение 7. Arduino TRE..............................317 Приложение 8 Arduino Micro........................... 320 Приложение 9. Arduino Robot............................327 Приложение 10. Arduino Esplora.........................337 Приложение 11. Arduino ADK.............................343 Приложение 12. Arduino Ethernet........................353 Приложение 13. Arduino Mini............................361 Приложение 14. Lily Раб Arduino USB....................366 Приложение 15. Arduino Nano............................372 Приложение 16. Arduino Pro Mini........................378 Приложение 17. Arduino Pro.............................384 Приложение 18. Arduino Fio.............................389 Приложение 19. Плата USB Serial Light адаптер..........394 Приложение 20. Плата расширения Arduino Wi-Fi..........395 Приложение 21. Плата расширения Arduino Motor..........397 Заключение. НАСТАВЛЕНИЯ ОТ АВТОРА КНИГИ................399
QR-КОДЫ - КАК ИХ ИСПОЛЬЗОВАТЬ В КНИГЕ Для работы с интерактивным материалом в книге широко исполь- зуется технология OR-кодов, которая превращает эту книгу в удобный ИНТЕРАКТИВНЫЙ ПРОДУКТ. QR-код (quick response code) — это двухмерный матричный штрих-код (или бар-код), предоставляющий информацию для ее быстрого распознавания с помощью камеры на мобильном устройстве. Аббревиатура QR происходит от английской фразы QUICK RESPONSE, что можно перевести как БЫСТРЫЙ ОТКЛИК. Стандартные программы-сканеры, входящие в исходный набор ПО смартфона, часто не очень удобны в работе по следующим причинам: работают недостаточно быстро, могут не распознать код при низком качестве изображения, обычно автоматически не переходят на изобра- жение в интернете, требуя дополнительного нажатия ссылки на экране. Для работы с QR -кодами Издательство рекомендует установить на смартфон (планшет) СПЕЦИАЛЬНОЕ более КАЧЕСТВЕННОЕ ПРИЛОЖЕНИЕ: «Сканер QR и штрих кодов (русский)» TeaCapps, отсканировав мо- бильным устройством под управлением ANDROID 6 О и выше этот QR -код. Вы тоже можете установить это Приложение на смартфон и вруч- ную, найдя это приложение в GooglePlay или AppStore. Приложение «Сканер QR и штрих-кодов (русский)» представ- ляет собой современный сканер QR- и штрих-кодов со всеми необходи- мыми пользователю функциями. Поддерживается чтение всех распро- страненных форматов штрих-кодов: QR-код, примененный в данной книге, а также Data Matrix, Aztec, UPC, F.AN, Code 39 и многие другие, которые могут пригодиться в дальнейшем. После установки на смартфон, запустите Приложение и настройте его, перейдя в раздел «НАСТРОЙКИ» (иконка в верхнем правом углу экрана). Поставьте «птичку» напротив пункта «ОТКРЫВАТЬ ВЕБ-САЙТЫ АВТОМАТИЧЕСКИ». При такой настройке сайты при сканировании OR-кодов в книге будут открываться немедленно после сканирования.
ОТ АВТОРА Дорогие читатели! Погрузитесь в мир технологии с увлекательной книгой, которая ста- нет вашим проводником к победе на школьной олимпиаде по техноло гии! «Виражи успеха на Олимпиаде» представляет собой непрерывное руководство по созданию и программированию Arduino-роботов для выполнения олимпиадных заданий. Шаг за шагом вы освоите искусство сборки и настройки роботов, а также изучите эффективные программ- ные стратегии для набора максимальных баллов. Эта книга предлагает: ♦ основы программирования на языке Arduino, понятные даже на- чинающим; ♦ детальные инструкции по сборке Arduino-робота с необходимыми датчиками и актуаторами; ♦ практические примеры проектов, соответствующих уровню 9-11 классов; ♦ советы по оптимизации кода для повышения производительности робота; ♦ стратегии подготовки к олимпиаде, помогающие эффективно ис- пользовать ограниченное время; ♦ подробный анализ успешных проектов и секреты их создания. Эта книга призвана стать вашим надежным спутником в мире соз- дания роботов с использованием платформы Arduino. Она не только предоставит вам все необходимые знания и навыки, но и поможет избе- жать распространенных ошибок, которые могут помешать вам достичь высоких результатов на школьной олимпиаде по технологии. Важным аспектом этой книги является то, что она охватывает широкий спектр тем и концепций, начиная с базовых принципов работы с Arduino и заканчивая созданием сложных риботов и автомати- зированных систем. Вы узнаете, как правильно выбирать и подключать компоненты, как писать эффективный и структурированный код, и как тестировать и отлаживать ваши проекты. Особое внимание уделяется популярным примерам программ и проектов, которые помогут вам лучше понять принципы работы Arduino. Вы сможете использовать эти знания для решения олимпиад- ных задач и создания собственных уникальных проектов.
Кроме того, мы обращаемся к часто встречающимся ошибкам и сложностям, с которыми сталкиваются новички в мире Arduino Предоставляем подробные объяснения и решения, чтобы вы могли избежать этих проблем и продолжить свой путь к успешному участию в олимпиаде. Эта книга не только предназначена для учащихся, но также будет полезна педагогам и наставникам, которые готовят школьников к олим- пиадам. Она представляет собой ценный ресурс для педагогической работы и поможет эффективно подготовить учеников к соревнованиям. Мы уверены, что данная книга поможет вам освоить мир робото- техники на Arduino, подготовиться к школьной олимпиаде и достичь выдающихся результатов. Приготовьтесь к увлекательному путеше- ствию в мир технологий и робототехники, где только ваша фантазия будет ограничивать в озможности создания. Удачи вам на этом захва- тывающем пути к знаниям и навыкам! С уважением, Сергей Мельников, изобретатель, Препода- ватель робототехники «Президентского физико-матема- тического лицея №239», организатор практических туров олимпиад по технологии в направлении Arduino «Виражи успеха на олимпиаде' Технологические подвиги с Arduino- роботами»
РАЗДЕЛ ЭЛЕКТРОННЫЕ КОМПОНЕНТЫ, ВЫДАВАЕМЫЕ УЧАСТНИКУ ОЛИМПИАДЫ Откройте дверь в захватывающий мир олимпиады по технологии с первым разделом книги. Он посвящен базовому оборудованию. Здесь мы детально рассмотрим популярные модули Arduino, предоставляемые организаторами олимпиады, чтобы вы понимали их устройство и функ- циональность. В этом разделе вы найдете максимально простые и под- робные описания всего необходимого оборудования, которое выдается участникам для выполнения олимпиадных заданий Ст плат Arduino до разнообразных датчиков и актуаторов. Каждый элемент будет разъ- яснен, чтобы вы были готовы к творческому воплощению своих идей в проекте для олимпиады. Готовьтесь к увлекательному путешествию в мир технологии и создания собственных робототехнических решений!
ГЛАВА 1 КРАТКАЯ ИСТОРИЯ ПОЯВЛЕНИЯ ОЛИМПИАД ПО ARDUINO История возникновения олимпиад по Arduino началась с раз- вития популярности этой открытой платформы в области электроники и программирования. Arduino, предоставляя про стой интерфейс для создания интерактивных проектов, стал популярным среди энтузиастов и профессионалов. Цели и задачи олимпиады Всероссийская олимпиада школьников по технологии проводится ежегодно с 2000 г. Основными целями Всероссийской олимпиады школьников по технологии являются- ♦ повышение уровня и престижности технологического образования школьников, развитие творческих способностей учащихся; ♦ содержательное и методическое сближение материальных и ин- формационных технологий в образовании; ♦ повышение роли метода проектов в обучении как основного сред- ства раскрытия творческого потенциала детей; ♦ выявление и поощрение наиболее способных и талантливых уча- щихся; ♦ выявление и поощрение наиболее творческих учи гелей технологии; ♦ привлечение школьников к выполнению конкретных и практиче ски важных социально значимых проектов, направленных на раз- витие технического и художественного творчества.
Задачами Всероссийской олимпиады по технологии являются: ♦ выявление и оценка теоретических знаний талантливых учащих- ся по различным разделам содержания образовательной области «Технология»; ♦ оценка практических умений учащихся и выполненных ими твор- ческих проектов. Всероссийская олимпиада школьников по технологии включает тестирование учащихся, выполнение ими практических работ и защиту творческих проектов. Олимпиада проводится по двум номинациям «Техника и техническое творчество», «Культура дома и декоративно- прикладное искусство». Олимпиадное движение по техноло] ии, в отличие от предметов естественнонаучного профиля, имеет относительно недавнюю исто- рию. Жизненная необходимость знания азов электрорадиотехноло- гии, обработки конструкционных материалов (металл, древесина), обработки ткани, побудила Министерство образования Российской Федерации сделать первые шаги на пути к организации Всероссийской олимпиады школьников по технологии. Всероссийские Олимпиады школьников по технологии 17-21 апреля 2000 года в Брянске была проведена I Всероссийская Олимпиада школьников по технологии, и это событие ознаменовало следующий этап внедрения образовательной области «Технология» в нашей стране. Основными целями и задачами Олимпиады являлись: ♦ повышение престижности и качества технологической подготовки школьников; ♦ выявление и поощрение наиболее способных учащихся и творче- ски работающих учителей технологии (трудового обучения); ♦ привлечение школьников к выполнению общезначимых и практи- чески важных проектных заданий. Олимпиада проводилась в виде конкурса проектов и очного заключительного тура с выполнением практических заданий по основным разделам минимального содержания основного общею среднего образования и программы «Технология», изучаемых в 5-9-х и 10-11-х классах. Для выполнения практического заданий каждый участник должен был привезти собственное изделие (не проект), выполненное до 50% и на месте в отведенное время должен был завершить работу.
От каждого региона было возможно участие четырех проектов: технология обработки конструкционных материалов, художествен- ная обработка материалов, культура дома, технология обработки ткани и пищевых продуктов, художественная обработка материалов 9-11 классы. На конкурс принимались коллективные работы с числами участников не более 3 человек. II Всероссийская олимпиада школьников по технологии про- водилась также в Брянске в период с 23 по 27 апреля 2001 года. По своей организации и целям проведения она немногим отличалась от своей пред- шественницы. Успех первых двух олимпиад во многом определил судьбу дальнейшего технологического образования в стране. Преподаватели были заинтересованы в подготовке своих учеников для участия в олим- пиаде и, тем самым, определяли желание ребят сделать лучший проект и одержать абсолютную победу, из чего естественным образом следовало совершенствование технологических знаний и навыков учащихся. III олимпиада была проведена при активной поддержке Департамента образования Администрации Тульской обла- сти и Тульского государственного педагогического университета им. Л.Н. Толстого (ТГПУ) с 22-26 апреля 2002 года в одном из старейших промышленных центров страны г. Тула. С 22 по 26 апреля 2003 года в Брянске состоялся заключительный этап IV Всероссийской Олимпиады школьников по технологии Она стала третьей Всероссийской Олимпиадой, которая была под- готовлена и проведена Департаментом -бразования Брянской обла - сти при активном участии Брянского Государственного университета им. И.Г. Петровского. Заключительный этап V Всероссийской олимпиады школьников по технологии проходил 19-24 апреля 2004 года в г Курске, в Курском Государственном университете. Олимпиада была подготовлена и про- ведена Комитетом образования Правительства Курской области при активном участии Курского государственного университета. Заключительный этап XII Всероссийской олимпиады школьни- ков ио технологии 2011 года проводился 11-17 апреля в г. Тамбове. Заключительный этап XIII Всероссийской олимпиады школьни- ков по технологии 2012 года проводился 16-22 апреля в г. Армавире Краснодарского края. Заключительный этап XIV Всероссийской олимпиады школь- ников по технологии 2013 года проводился 15-21 апреля в г. Липецке Липецкой области. Заключительный этап XV Всероссийской олимпиады школь- ников по технологии 2018 года проводился 9-14 апреля в г. Санкт- Петербург.
Заключительный этап XVI Всероссийской олимпиады школь- ников по технологии 2019 года проводился 8-14 апреля в г. Санкт- Петербург. По итогам проведения Всероссийской олимпиады школьников по технологии можно сделать вывод о возрастающем уровне подготовки учащихся в этой образовательной области, что одновременно говорит и о растущем мастерстве учителей, внимании органов управления обра- зованием и школ к подготовке молодого поколения к труду и выбору профессии. Участие в олимпиаде позволяет школьникам и их наставни- кам обменяться опытом, зарядиться творческой энергией. ЦИТАТЫ. «Если технология не освобождает людей от рутины, чтобы они могли преследовать более высокие цели чело- вечества, тогда весь технический прогресс бессмысленен» Жак Фреско. «То, что сегодня наука, — завтра техника» Теллер Эдвард. Зарождение современной олимпиады по Arduino Рассмотрим историю нового этапа технологического соревнования. Современная эпоха прогрессивных технологий несет в себе не только новаторские изобретения и улучшения, но и создает плодородную почву для различных мероприятий и соревнований. В этом контексте, олимпиада по Arduino является одним из выдающихся примеров инновационных идей, объединивших молодежь и энтузиастов, стремя- щихся к погружению в мир робототехники и программирования. Олимпиада по Arduino стала ярким следствием растущего интереса к микроконтроллерам и электронике в целом. Плата Arduino, появив- шаяся в начале 2000-х, представила собой простую и доступную плат- форму для создания интерактивных проектов. С развитием сообщества энтузиастов, собравшихся вокруг Arduino, возникла идея проведения школьной олимпиады. Она стала бы тем плацдармом, где талантливые молодые умы могли бы продемонстрировать свои навыки. Полученные баллы в ходе выполнения олимпиадных заданий помогли бы им при
дальнейшем поступлении в высшие учебные заведения на кафедры «робототехники и мехатроники» и многие другие подобные инженер- ные направления. Также автором данной книги, с учетом полученного практического опыта проведения олимпиад данного направления, была разработана универсальная робототехническая платформа (робот), которая подхо- дит под технические требования всех основных этапов школьных олим - пиад по технологии в направлении «Arduino». ПРИМЕЧАНИЕ. Разработчики олимпиадных заданий оставляют за собой право по изменению требуемого оборудования, конструк- ции робота, по все же разработанная платформа и ис- пользуемый набор электроники можно считать универ- сальным и используемым как основа в любой олимпиаде. Такая разработка позволяет школьникам проходить обучение на оборудовании, максимально таком же, как то оборудование, которое выдают организаторы олимпиад непосредственно на самой олимпи- аде. Как основной плюс — образовательные учреждения могут произ- вести закупку проверенного и готового к работе оборудования для про- ведения в стенах своих школ одного из этапов школьной олимпиады по Aiduino. Поскольку автор книги знает, что такое закупка оборудования для нужд школы — госзакупки по 44ФЗ, было принято решение организовать и сделать доступным для всех организаций продажу данных комплектов в неограниченном количестве, в том числе через сервисы государствен- ных закупок, аукционы. Такие закупки позволяют школам не тратить время на поиски магазинов и выбор среди бесконечного количество раз- личных устройств именно того оборудования, которое должно соответ- ствовать требованиям, прописанным в олимпиадных заданиях. Закупив данные комплекты, вы сможете быть уверены, что оборудование прове- рено, нротестировано и полностью работоспособно. Олимпиада быстро привлекла внимание студентов и педагогов, активизировавших свою работу над подготовкой к соревнованиям. Соревнования проводились по различным номинациям, таким как «Техника и техническое творчество» и «Культура дома и декоративно- прикладное искусство». Это позволило участникам выбирать направле- ние согласно своим интересам и талантам. Основываясь на успехах первых лет проведения олимпиады, она стала ежегодным событием, завоевавшим популярность не только
среди учащихся, но и среди преподавателей и технологического сооб- щества в целом. По мере ее распространения, олимпиада стала охва- тывать новые регионы и привлекать внимание медиа, что лишний раз подчеркнуло важность развития технологического образования. За прошедшие годы Олимпиада по Arduino стала не только площад- кой для демонстрации технических умений, но и местом, где молодые таланты могут обмениваться идеями и опытом. Этот форум стимули- рует инновации и раскрывает творческий потенциал молодежи, что способствует общественному прогрессу в области робототехники и про- граммирования в России в целом! Таким образом, мероприятия связанные с олимпиадой по Arduino теперь проводятся не только в школах но и на крупных робототехниче- ских соревнованиях, таких как международный фестиваль робототех- ники «РОБОФИНИСТ», который ежегодно собирает тысячи участников по всей России и соседним странам. В заключение, олимпиада по Arduino представляет собой не только технологическое соревнование, но и движение, объединяющее людей с общим интересом к новаторским технологиям. Ее история служит вдох- новением для новых поколений, подталкивая их к освоению науки и техники для формирования будущего, где технологии становятся дви- гателем прогресса.
ГЛАВА 2 СУЩЕСТВУЮЩИЕ РАЗНОВИДНОСТИ ПЛАТ ARDUINO На текущий момент написания книги существовали различ- ные разновидности плат Arauino, предоставляющих розные характеристики и функциональность Узнайте больше. Обзор популярных моделей Arduino Arduino — это открытая платформа для создания прототипов электронных устройств. Существует множество разновидностей плат Arduino, каждая из которых предназначена для определенных задач и имеет свои характеристики. В табл. 2.1 представлен обзор некоторых из самых популярных моделей Arduino. Обзор популярных моделей Arduino Таблица 21 Модель Краткое описание Arduino Uno Эю одна из самь.х распространенных и началочых моделей Arduino. Имеет микооконтреллер ATmega328,14 цифровых входов/выходов 6 аналоговых входов, 16 МГц кварцевый резонатор Arduino Mega Модель предназначена для проектов,требующих большого количества входов/выходов. Имеег микроконтроллер ATmegaz56O 54 цифсовых вхсда/выхода, 16 аналоговых входов Ardumo Nano Компактная и удобная версия для использования е ограниченных пространствах Имеет микроконтроллер ATmega528,14 цифоовых входов/выходов, 8 аналоговых входов
Таблица 21 (окончание) Модель Краткое описание Arduino Due Имеет 32-битный ARM микроконтроллер SAM3X8E. 54 цифровых входа/ выхода. 12 аналоговых входов Arduino Leonardo Имеет микроконтроллер АТтеда32и4 с поддержкой US3 HID 20 цифровых входа/выхода, 12 аналоговых входов Arduino Pro Mini компактная и экономичная версия дтя встраиваемых систем Имеет микроконтроллер ATmega328,1* цифровых входа/ва1хода. 8 аналоговых входов Эго всего лишь небольшой обзор доступных моделей Arduino. Каждая из них имеет свои уникальные особенности, предназначенные для различных задач и потребностей пользователей. В данной книге мы рассмотрим оборудование, которое с большей вероятностью выдадут вам в качестве штатного оборудования для выполнения олимпиадного задания. Приступим к детальному изучению самой популярной платы и ее копии — Arduino UNO версии R3. Характеристики Arduino UNO R3 Это одна из наиболее распространенных и популярных плат в семействе Arduino. Вот основные характеристики и устройство Arduino UNO R3. Микроконтроллер. Arduino UNO R3 использует микроконтроллер ATMega328P. Тактовая частота: 16 МГц. Флеш-память: 32 Кб (2 Кб зани- мает загрузчик). Входы/выходы. 14 цифровых входов/выходов (6 из них могут быть использованы как PWM выходы). 6 аналоговых входов. Интерфейсы. USB интерфейс для программирования и подачи питания. UART (Serial), I2C, SPL Питание. Питание от USB или внешнего источника переменного тока/постоянного тока (7...12 вольт). Регулируемое напряжение на плате 5 вольт. Разъемы. Разъем для подключения к компьютеру через USB Разъемы для цифровых и аналоговых входов/выходов. Разъем питания и заземления. Кнопка сброса и индикаторы. Кнопка сброса для перезагрузки микроконтроллера. Индикаторы питания и активности. Загрузчик. Имеет загрузчик (bootloader), который позволяет про- шивать микроконтроллер через USB.
Рис. 2.1. Оригинальная плата контроллера Arduino UNO, вид спереди Рис. 2.2. Оригинальная плата контроллера Arduino UNO. вид спереди
Рассмотрим теперь модуль Arduino UNO R3 на чипе CHS40. «Клон» Arduino UNO R3 на чипе СН340 — это часто более доступная альтер- натива с теми же базовыми характеристиками, но с заменой USB- контроллера на СН340. В табл. 2.2 приведены их основные различия. Основные различия Arduino UNO R3 и Arduino UNO с СН34О Таблица 2.2 Параметр Arduino UNO R3 Arduino UNO с СН340 USB-контроллер Использует USB-контроллер ATiregal6U2 илиАТтеда8132 используе! чип СН34О в качестве USB контроллера Драйверы Arduino UNO с ATmegal 6U2/ ATmeg?8U2 обычно не требует установки дополнительных драйверов для работы с компьютером под большинством операционных систем Arduino UNO с СН340 может потребовать установки драйверов СН340 для подключения к компьютеру Совместимость Оба варианта совместимы с официальной средой разработки Arduino (IDE) и ис пользуют тот же самый микроконтроллер АТЙеда328Р Стоимость Arduino UNO с СНЗаО часто более доступен по цене из-за использования более дешевого иБВ конгроллера В остальном, функциональность и характеристики этих плат анало- гичны, и организатор олимпиады может выбрать между ними в зависи- мости от своих предпочтений и бюджета. В последнее время предпочте- ние отдается клонам плат, по этой причине вы можете с большой веро- ятностью на практическом туре олимпиады по технологии в качестве выдаваемого оборудования получить именно неоригинальную плату, но этого не стоит бояться. Но к этому стоит быть готовым. Рассмотрим некоторые мелочи, которые вы должны знать, работая с клонами плат Arduino. При использовании клона контроллера Arduino R3 на базе чипа СН340, следует учитывать несколько особенностей (табл. 2.3). Осооенности клона контроллера Ardwno R3 на базе чипа CH34G Таблица 2.3 Параметр Особенности Драйверы СН34О Необходимость установки драйверов CH34U для корректного взаимодействия с компьютером Этот драйеео обес печивает правильную работу USB-интерфейса и воспроизведение виртуального СОМ-портг Драйверы доступны на официальном сайте производителя СН540. Бывают ситуации, когда по тем или иным проблемам с роботом в платах с такими чипами слетает загрузчик. Если вы заметите что контроллер пересгал загружать ваш скетч, вероятно, мог слете-ь загрузчик Совместимость с ОС Удостоверьтесь, что выбранный клон Arduino с СЧ340 совместим с вашей операционной системой Обычно драйверы СН340 предоставляютс я для Windows, macOS и Linux Качество клонов Качество клонов может варьироваться от производителя к производителю Некоторые клоны могут иметь более низкое качество компонентов и пайки, что может повлиять на стабильность работы
Таблице. 2.3 (окончание) Параметр Особенности Надежность USB- соединения Б редких случаях могут возникнуть проблемы с подключением через USB особенно если используется некачественный или несовместимый кабель USB При возникновении проблем стоит попробовать другой кабель Совместимость с программным обеспечением В большинстве случаев клон с CH340 полностью совместим с официальным программным обеспечением Arduino IDE, но всегда рекомендуется исользсвать последнюю версию IDE и проверять совместимость с выбранной моделью Выбор поставщика Если планируемся использование клона, рекомендуется выбирать уважаемых производителей с хорошей репутацией, чтобы уменьшить вероятность проблем с качеством и совместимостью. Одним из таких поставщиков можем порекомендовать компанию RoooVed Информацию о компании вы можете найти в Интернете С учетом этих аспектов использование клона Arduino с чипом СН340 может быть успешным и бюджетным вариантом для проектов, но важно быть готовым к решению потенциальных технических вопро- сов, связанных с этими особенностями.
ГЛАВА Ъ МОДУЛИ ДАТЧИКОВ линии И СВЕТООТРАЖЕНИЯ Популярные типы датчиков линии или светоотрожения, игра- ющие важную роль в создании системы восприятия для робо- тов, обеспечивая им информацию о своем окружении и ориен- тацию в пространстве. Характеристики датчиков линии на базе оптической пары «TCRT 5000» Датчик линии, который использует оптопару TCRT5000, представ- ляет собой важное устройство для обнаружения линий, препятствий или маршрутов на поверхности. Этот датчик работает на основе инфра- красного светодиода и фотогранзистора, что позволяет ему чувстви- тельно реагировать на изменения освещенности (рис. 3.1 и рис. 3.2). Основной принцип работы датчика линии с оптопарой TCRT5000 следующий. Инфракрасный светодиод (ИК-светодиод) излучает инфра- красный свет в направлении поверхности, которую датчик должен ска- нировать. Свет отражается от поверхности и попадает на фототранзистор, который расположен рядом с ИК-светодиодом. Фототранзистор реаги- рует на интенсивность отраженного света. Если поверхность белая или светлая, то больше света отражается, и фототранзистор регистрирует это как высокий уровень сигнала. В случае черной или темной поверх- ности отраженного света меньше, и фоготранзистор выдает низкий уровень сигнала.
Рис. 3.1. Аналоговый датчик линии на базе оптической пары « TCRT 5000» Рис.З 2 Цифро аналоговый датчик линии на базе оптической пары «TCRT 5000»
Микроконтроллер, подключенный к датчику, может анализировать уровень сигнала с фототранзистора и, исходя из этого, определять поло- жение линии или препятствия. Датчики линии на основе оптопары TCRT5000 часто используются в робототехнике и автоматизации, например, для создания линейных трассировщиков, линейных роботов, автономных автомобилей для соревнований по трассировке линии и многих других приложений. Они позволяют роботам «читать* линии и ориентироваться на них, что делает их очень полезными для задач навигации и управления на поверхности. Датчик линии на основе оптопары TCRT5000 имеет несколько ключевых характеристик, влияющих принцип работы (табл. 3.1). Схематическое объяснение принципа работы датчика линии на базе оптической пары «TCRT 5000* представлено на рис. 3.3. Ключевые характеристики датчика линии на основе оптопары TCRT5OOO Таблица 3.1 Характеристика Комментарий Длина волны Инфракрасный светодиод (ИК-светодиод) в датчике излучает свете длиной волны 950 нм. Это специфическая область инфракрасного спектра, что позволяет датчику чувствительно реагировать на отраженный свет в этом диапазоне Диапазон обнаружения Датчик способен обнаруживать объекты на расстоянии от 1 мм до 25 мм от поверхности, на которой он установлен. Это позволяет использовать его для точного определения расположения линий или препятствий на дорожке Компаратор В состав датчика входит компаратор, который сравнивает уровень отраженного света с заданным порогом Подстроечный резистор позволяет настраивать этот порот срабатывания.что делает датчик более гибким в различных условиях Контрольный светодиод Датчик также оснащен контрольным «.ветодиодом. который светится грн срабатывании датчика Это удобно для диагностики и отладки работы датчика Конструктивные особенности Датчик имеет два крепежных отверстия, что позволяет легко и точно устанавливать его на нужном расстоянии от поверхности или объекта Оптический элемент разделен перегородкой, чтобы избежать взаимного влияния между инфракрасным светодиодом и фототранзистором Принцип работы Инфракрасный светодиод излучает инфракрасный свет на поверхность. Если свет отражается от бетой или светлой поверхности фототоанзипор регистрирует его, и на выходе датчика (OUT или SIGNAL) устанавливается логическая единица Если в зону видимости датчика попадает черный объект, который поглощает свет, фототранзистор перестает регистрировать свет, и на выходе датчика устанавливается логический ноль
Рис. 3.3. Схематическое объяснение принципа работы датчика линии но базе оптической поры «TCRT5000» СОВЕТ. При проектировании устройств с использованием дат- чика линии, необходимо четко следить за границами приближения/удаления модуля от исследуемой поверх- ности. Если фотоэлемент будет слишком приближен, то перегородка не даст пройти световому потоку от ИК-диода к фототранзистору, даже при самой белой по- верхности. Та же ситуаиия произойдет и при чрезмер- ном удалении фотоэлемента, так как весь световой по- ток попросту рассеется в воздушной среде не дойдя до объекта-отражателя. Правильное расположение датчика линии на роботе имеет боль- шое значение для надежной работы и точного обнаружения линий. Оптимальная высота крепления датчика линии составляет от 1 до 2 см над поверхностью. Это позволяет датчику работать наиболее эффек- тивно и обеспечивать точное срабатывание фототранзистора. Важно отметить, что даже если вы используете два одинаковых дат- чика линии, они могут показывать различные результаты на черных и белых поверхностях при одной и той же высоте. Это связано с каче- ственными различиями в производстве датчиков Например, в одной партии датчики могут быть более точно собраны, в другой менее каче- ственно, а в третьей могут быть датчики с дефектами, которые не рабо- тают должным образом. Поэтому при использовании датчиков линии на роботе важно про- вести калибровку и тестирование для каждого датчика отдельно и на
разных поверхностях. Это позволит настроить пороги срабатывания для каждого датчика так, чтобы они давали стабильные и надежные результаты в конкретных условиях эксплуатации. В итоге, правильное расположение и калибровка датчиков линии являются важными шагами при создании робота, способного следовать по заданному маршруту или выполнять другие задачи, связанные с определением линий на поверхности. Подключение датчика линии на базе оптопары TCRT 5000 к плате Arduino В своем составе датчик линии имеет 4 выхода (VCC, GND, АО, D0). Выводы VCC и GND предназначены для подачи питания на модуль. Вывод D0 служит для регистрации срабатываний датчика в цифровом виде при работе через компаратор. Вывод АО служит для регистрации срабатываний датчика в аналоговом виде и выдает значения в диапа- зоне от 0 до 1023. ПРИМЕЧАНИЕ. В олимпиадных роботах преимущество отдается ана- логовым датчикам линии. Цифровые датчики практи - чески не используются, поскольку при использовании цифрового сигнала не написать хорошего алгоритма движения по линии. Для движения по линии лучше ис- пользовать датчик линии, работающий в аналоговом режиме. Примеры тестирования датчиков линии Пример тестирования цифрового DO датчика линии: 1. // Подключение библиотеки для работы с платформой Arduino 2. #include <Arduino.h> 3. 4. // Определение пина, к которому подключен цифровой датчик линии 5. ccnsr int digitalLineSensorPin = 2;
6. 7. void setup () { 8. // Инициализация серийной связи для вывода результатов в монитор порта 9. Serial.begin (9600); 10. 11. // Настройка пина цифрового датчика линии как вход 12. pinMode(digitalLineSensorPin, INPUT); 13. } 14. 15 . void loop() { 16. // Чтение значения с цифрового датчика линии (HIGH — на линии, LOW — вне линии) 17. int digitalValue = digitalRead(digitalLineSensorPin); 18. 19. // Вывод результата в монитор порта 20. if (digitalValue == HIGH) { 21. Serial.printin("На линии"); 22. } else { * 23. Serial.printin("Вне линии"); 24. } 25. 26. // Задержка для стабилизации вывода 27. delay(1000); 28. } Пример тестирования аналогового АО датчика линии 1. // Подключение библиотеки для работы с платформой Arduino 2. #include <Arduino.h> 3. 4. // Определение пина, к которому подключен аналоговый датчик линии 5. const int analogLineSensorPin = АО; 6. 7. void setupO ( 8. // Инициализация серийной связи для вывода результатов в монитор порта 9. Serial .begin (9600) 10. } 11. 12 . void loop () { 13. // Чтение значения с аналогового датчика линии (0 — светлая линия, 1023 — темная линия) 14. int analogValue = analogRead(analogLineSensorPin);
15. 16. // Вывод результата в монитор порта 17. Serial.print(«Значение с аналогового датчика: «); 18. Serial.printin(analogvalue); 19. 20. // Задержка для стабилизации вывода 21. delay(10СС); 22. } Обе программы позволяют читать состояние датчика линии и выво- дить результаты в монитор порта. В цифровой версии датчика значения HIGH и LOW соответствуют наличию и отсутствию линии, а в аналого- вой версии датчика, значения аналогового сигнала могут быть интер- претированы как светлая или темная линия в зависимости от условий окружающей среды.
Популярные датчики расстояния в Arduino, которые предо- ставляют информацию о расстоянии между датчиком и объ- ектом. Эти датчики находят применение в различных про ектах, таких как избегание препятствий, измерение рассто- яний и другие задачи Разновидности и принцип действия Датчики расстояния (рис. 4.1...4.4) можно поделить на две группы: оптические и акустические. Оптические датчики расстояния работают на основе изменения интенсивности света, возвращающегося от поверхности. Этот метод изме- рения называется «измерением времени полета» (Time-of-Flight, TOF) и ънакн xyuaxi с оиапсзоном измеяения ш. м см
Рис. 4.2. Оптический аналоговый датчик расстояния GP2Y0A02YK0F с диапазоном измерения 20...150 см Рис. 4.3. Оптический (лазерный) цифровой датчик расстояния VL53LOX с диапазоном измерения до 2 м Рис. 4.4. Акустический цифровой датчик расстояния HGSR04 с диапазоном измерения от 2 до 400 см
использует изменение фазы, частоты: или амплитуды светозых волн для определения расстояния. Принцип работы TOF-датчика заключается в следующем. Датчик излучает короткие импульсы света, например, инфракрасные лазерные или LED импульсы. Эти импульсы света направляются в сторону объ- екта, который нужно измерить. Световые импульсы отражаются от объ - екта и возвращаются обратно к датчику. Датчик измеряет изменение характеристик света (например, время задержки, изменение фазы или амплитуды) между отправленными и полученными импульсами. Исходя из этого изменения световых харак- теристик, датчик вычисляет расстояние до объекта. ПРИМЕЧАНИЕ. TOF датчики обладают высокой точностью и способно стью работать на различных поверхностях и в разных условиях освещения. Они широко применяются в робо- тотехнике, автономных автомобилях, медицинском оборудовании и других областях, где требуется точное измерение расстояния Пины управления оптическим датчиком. Датчик расстояния имеет три вывода — земля (Gnd) и питание (Vcc) и сигнал (Out/S). Акустические датчики расстояния. Существует мною разных модификаций подобных устройств, но все они работают по принципу измерения времени прохождения отраженною звука. Датчики рассто- яния, работающие на основе измерения времени прохождения звука (ultrasonic sensors), используют ультразвуковые волны для определения расстояния до объекта. Принцип их работы следующий. Датчик генерирует ультразвуко- вой сигнал, который отправляется в заданном направлении. Ультразвуковые волны распространяются в воздухе и отражаются от ближайшего объекта (препятствия). Датчик ловит от раженные уль- тразвуковые волны. Измеряется время между моментом отправки сиг- нала и моментом его приема (время прохождения звука отдатчика до объекта и обратно). Расстояние до объекта вычисляется путем умноже- ния измеренного времени на скорость звука в воздухе и деления этой величины на два (так как сигнал проходит путь до объекта и обратно). Ультразвуковые датчики расстояния широко используются в робото- технике, автомобильной промышленности, медицинском оборудовании и других областях для измерения расстояния до объектов и обнаружения
препятствий. Они обладают высокой точностью и надежностью, а также работают в широком диапазоне условий, не завися от освешения. Пины управления датчиком ультразвука. Датчик HC-SR04 имеет четыре вывода. Кроме земли (Gnd) и питания (Vcc) еще есть Trig и Echo. Подключение оптического датчика расстояния SHARP 2Y0A21 к плате Arduinc Датчик SHARP аналоговый, а, значит, ею можно подключить к одному из входов АЦП Arduino. В нашем случае, подключаем к АО (рис. 4.5). Считывать полученное значение с датчика мы будем при помощи функции analogRead Функция analogRead возвращает нам целое число от 0 до 1023 и чтобы узнать уровень напряжение на выходе сенсора, нам нужно домножить это чисто на 5 и поделить на 1023. Подробно про АЦП можно прочитать в одном из предыдущих уроков — Аналого-цифровые преобразования — АЦП. Чтобы не совершать лишние операции в про- грамме, заменим 5/1023 на 0.0048828125. Рис. 4.5 Подключение оптического датчика расстояния SHARP 2 Y0A21 к плате Arduino
Рис. 4.6. Вывод результата замера до объекта с использованием оптического датчика расстояния SHARP 2YCA21 1. const int analogpin = АО; // Пин, к которому подключен датчик 2. float V; // Переменная для хранения значения АЦП 3. float dist; // Переменная для хранения вычисленного расстояния 4. 5. void setupO { G. Serial.begin(9G00); // Инициализация последовательного порта } 8. 9. void loop() { 10. // Считывание и вычисление расстояния 11. readDistance() ; 12. 13. // Вывод расстояния в порт 14 . printDistance() ; 15. 16. delay(1 000) ; // Пауза 1 секунда 17. } 18. 19. // Функция для считывания значения датчика и перевода в напряжение 20. void readDistance() { 21. int sensorValue = analogRead(analogPin); // Считывание значения сенсора 22. V = sensorValue * С.0048828125; // Преобразование в напряжение 23. dist = calculateDisrar.ee (V); // Вычисление расстояния 24. } 25.
26. // Функция для вычисления расстояния 27. float calculateDistance (float voltage) { 25. return 65 * pow(voltage, -1.10); 29. } 30. 31. // Функция для вывода расстояния в порт 32. void printDi.stan.ce () { 33. Serial.print("Distance: "); 34. Serial.print(dist); 35. Serial.printin(" cm"); 36. } Формула 65 * pow(voltage, -1.10) — на самом деле является функ- цией, которая отражает зависимость напряжения на выходе датчика от расстояния. В результате, мы должны увидеть на мониторе примерное расстояние до объекта. Вывод результата замера до объекта с исполь- зованием оптического датчика расстояния SHARP 2Y0A21 представлен на рис. 4.6 Подключение акустического датчика расстояния HC-SRO4 к плате Arduino Датчик HC-SR04 имеет четыре вывода. Кроме земли (Gnd) и пита- ния (Vcc) еше есть Trig и Echo. Оба этих вывода — цифровые, так что подключаем из к любым выводам Arduino UNO. Вывод результата замера до объекта с использованием оптического датчика расстояния SHARP 2Y0A21 представлен на рис. 4.7. Давайте попробуем инициировать передачу ультразвукового импульса датчику и затем зафиксировать возвращение этого импульса. Далее рассмотрим временную диаграмму (рис. 4.8;, иллюстрирующую работу датчика HC-SR04. На временной диаграмме видно, что для начала измерения необ- ходимо создать положительный импульс на выводе Trig длительностью 10 мкс. После этого датчик генерирует серию из 8 импульсов и пере- водит вывод Echo в режим ожидания отраженного сигнала, поднимая уровень на этом выводе. Как только датчик 'бнаружит возвращенный сигнал, он завершает положительный импульс на выводе Echo. Следовательно, нам нужно выполнить всего две операции: отпра- вить импульс на Trig для начала измерения и измерить длительность импульса па Echo, чтобы затем вычислить расстояние согласно простой формуле. Давайте приступим к выполнению этих операций.
Рис. 4.7. Вывод результата замера до объекта с использованием оптического датчика расстояния SHARP 2Y0A21 Sequence chart Initiate Ecno back 10uST l_to si jnal pin pulse width correspond! to distance (about 150uS - 25ms, 3 3ms if no obstade) Signal_ Formula pulse width (uS) / 58=distance (cm) pulse width (uS) / 148=distance (inch) Internal Ultrasonic Transducer will issue 8 40kHz pulse Puc. 4.8. Временная диаграмма длительности импульсов
Пример программного кода: 1. // Объявление пинов 2. int echcPin = 2; 3. int trigPin = 3; 4 . 5. void setups) { 6. // Инициализация последовательной связи 7. Serial.begin(9630); 8. 9. // Установка режимов пинов 10. pinMode(trigPin, OUTPUT); 11. prnMode(echoFin, INPUT); 12. } 13. 14 . void loop() { 15. int duration, cm; 16. 17. // Отправляем ультразвуковой импульс 18. digitalWrite(trigPin, LOW;; 19. delayMicroseconds(2); 20 . digital Write(trigPin, HIGH); 21. delayMicroseconds(10); 22. digitalWrite(trigPin, LOW); 23. 24. // Измеряем длительность импульса на Echo 25. duration pulsein(echoPin, HIGH); 26. 27. // Вычисляем расстояние в сантиметрах 28. cm = duration / 58; 29. 30. // Выводим результат на Serial Monitor 31. Serial.print(cm); 32. Serial.printin (" cm"); 33. 34. // Пауза перед следующим измерением 35. delay(lOC); 36. }
ПРИМЕЧАНИЕ. Функция pulsein замеряет длину положительного им- пульса на ноге ecnopin в микросекундах, В программе мы записываем время полета звука в переменную duration Как мы уже выяснили ранее, нам потребуется умножить время на скорость звука: s = duration * v = duration * 340 м/с Переводим скорость звука из м/с в см/мкс: s = duration * 0.034 см/мкс Для удобства преобразуем десятичную дробь в обыкновенную: s = duration * 1/29 = duration / 29 А теперь вспомним, что звук прошел 2 искомых расстояния: до цели и обратно. Поделим все на 2: s = duration / 58 Теперь мы знаем, откуда взялось число 58 в программе! Загружаем программу на Arduino UNO и открываем монитор после- довательного порта. Попробуем теперь наводить датчик на разные предметы и смотреть в мониторе рассчитанное расстояние. Подключение лазерного датчика расстояния VL53L0X к плате Arduino VL53LOX использует измерения дальности инфракрасного излу- чения для измерения дальности, что позволяет ему получать точные результаты независимо от цвета и поверхности цели. Измерения расстояния могут быть считаны через цифровой интерфейс 1аС. Плата имеет линейный регулятор 2,8 В и встроенные регуляторы уровня, которые позволяют ей работать в диапазоне вход- ного напряжения от 2,6 В до 5,5 В, а расстояние между выводами 0,1" облегчает использование сс стандартными макетами без припоя. Для использования платы VL53L0X необходимо как минимум четыре соединения (см. рис. 4.9): VIN, GND, SCL, SDA.
Рис. 4.9. Подключение лазерного дальномера VL55L0Xк плате Arduino UNO Вывод VIN должен быть подключен к источнику от 2,6 до 5,5 В, а заземление должно быть подключено к GND. Встроенный линейный регулятор напряжения преобразует VIN в источник питания 2,8 В для интегральной схемы VL53LOX Контакты I2C, SCL и SDA подключены к встроенным переключате- лям уровня, что делает их безопасными для использования при напря- жениях свыше 2,8 В, они должны быть подключены к шине 12С, работа- ющей на том же логическом уровне, что и VIN. Подключение лазерного дальномера VL53L0X к плате Arduino UNO представлено на рис. 4.9 Для использования цифрового датчика, работающего с протоколом I2C необходимо скачать библиотеку для VL53L0X. Скачать библиотеку можно по ссылке: https://arduinoplus.ru/libraries/vl5310x/ Эта библиотека должна поддерживать любую Arduino-совместимую плату, включая контроллеры Pololu A-Stai 32U4. Установка библиотеки для работы с лазерным дальномером В нашей среде разработки Arduino мы выбираем: Скетч -> Подключить библиотеку -> Управлять библиотеками Далее мы попадаем в Менеджер библиотек (рис. 4.10 и рис. 4.11), где начинаем вводить название библиотеки VL532L0X после чего нам нужно прокрутить окно вниз до VL53L0X by Polulu и нажать Установить.
Рис. 4.10. Открываем менеджер библиотек Рис. 4.11. Установка библиотеки для работы с VL53LOX
ПРИМЕЧАНИЕ. Если это не работает, вы можете вручную установить библиотеку. Для этого нам нужно скачать архив последней версии с GitHub и распаковать его. Потом переименовать vl5310x-arduino-master в VL53L0X. После чего перемещаем или копируем папку VL53L0X в папку libraries внутри директории, где установлена Arduino IDE. Вы можете просмотреть местоположение своего эскиза, открыв меню «Файл» (англ. — File) и выбрав «Найстроки» (Preferences) в Arduino IDE. Если в этом месте еще нет папки с библиотеками, создайте ее само- стоятельно. После установки библиотеки перезапустите Arduino IDE. Примеры программного кода для тестирования лазерного дальномера VL53L0X Пример показывает, как использовать непрерывный режим для измерения дальности с помощью VL53L0X. Он основан на vl5310x_ ContinuousRangingExample.c из API VL53L0X. Показания диапазона приведены в миллиметрах. Если вы просто скопируете код ниже, то не забудьте, что вам нужно установить две библиотеки для корректной работы — Wire.h и VL53LOX.h. Пример №1. 1. #include <Wire.h> 2. #include <VL53L0X.h> 3. 4. VL53L0X sensor; 5. 6. void setup() 7. { 8. Serial.begin(9600); 9 . Wire.begin(); 10. 11. sensor.setTimeout(500); 12. if (!sensor.init()) 13. {
14. Serial.printin(«Не удалось обнаружить и инициализировать датчик!»); 15. while (1) {} 16. } 17. 18. // Запустите непрерывный режим (снимайте показания 19. // как можно быстрее) . Чтобы вместо этого использовать непрерывный синхронизированный режим, 20. // укажите желаемый период между измерениями в мс 21. // (например, sensor.startContinuous(100)). 22. } 23. 24 . void loop () 25. { 26. Serial.print(sensor.readRangeContinuousMillimeters()) ; 27. if (sensor.timeoutOccurred()) { Serial.print (" ТАЙМАУТ"); } 28. 29. Serial.printin(); 30. } Пример №2. Во втором примере показано, как получить одиночное измерение дальности с помощью VL53L0X. При желании датчик можно настроить с различными профилями измерения дальности. Подробнее можно посмотреть в руководстве пользователя API VL53L0X, чтобы повысить производительность для определенного проекта. Код основан на четы- рех примерах «SingleRanging» из API VL53L0X. Показания диапазона приведены в миллиметрах. 1. #include <Wire.h> 2. #inclade <VL53L0X.h> 3. 4. VL53L0X sensor; 5. 6. // Раскомментируйте строку ниже, чтобы использовать дальний режим. 7. // Это увеличивает чувствительность датчика и расширяет его потенциальный диапазон, 8. //но увеличивает вероятность получения неточных показаний 9. // из-за отражений от объектов, отличных от намеченной цели. 10. // Лучше всего работает в темноте.
11. 12. //#define LONG_RANGE 13. 14. // Раскомментируйте одну из двух строк ниже, чтобы получить: 15. // - более высокую скорость за счет меньшей точности ИЛИ 16. // — более высокую точность за счет меньшей скорости 17. 18. //#define HIGH_S?EED 19. //^define HIGH_ACCURACY 20. 21. void setup () 22. { 23. Serial.begin(9600); 24 . Wire.begin (); 25. 26. sensor.setTimeout(500); 27. if (!sensor.init()) 28. ( 29. Serial.printin(«Не удалось обнаружить и инициализировать датчик!»); 30 . while (1) {} 31. } 32. 33. #if defined LONG_RANGE 34. // понижает предел скорости обратного сигнала (по умолчанию 0,25 MCPS (мчип/с)) 35 . sensor.setSignalRateLimit(0.1); 36. // увеличить периоды лазерного импульса (по умолчанию 14 и 10 PCLK) 37. // * — PCLK — это частота периферии 38. sensor.setVcselFulsePeriod(VL53L0X::VcselPeriodPreRa nge, 18); 39. sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRa nge, 14); 40. #endif 41. 42. #if defined HIGH_SPEED 43. // уменьшить тайминг до 20 мс (по умолчанию около 33 мс) 44 . sensor.setMeasurementTimingBudget(20000); 45. #elif defined HIGH_ACCURACY 4 6. // увеличить тайминг 200 мс
47. sensor.setMeasurementTimingBudget(2C0000); 48. #endif 49. } 50. 51 . void loop () 52. { 53 . Ser±a1.print(sensor.readRangeSingleMil1imeters()); 54. if (sensor.timeoutOccurred()) { Serial.print(" ТАЙМАУТ"); } 55. 56. Serial.printin(); 57. } Данные примеры приведены исключительно для познавательных целей. В олимпиадных заданиях организаторы стараются исключить использование датчиков 12С в связи со сложностями написания соб- ственных библиотек и ограниченным временем на выполнение олим- пиадного задания. Чаще всего вам будут предоставлены оптические аналоговые дальномеры SHARP 2YOA21.
ГЛАВА 5 МОДУЛИ УПРАВЛЕНИЯ ДВИГАТЕЛЯМИ - ДРАЙВЕР ДВИГАТЕЛЕЙ Популярные платы управления двигателями, также извест- ные как драйвер двигателей, необходимые для управления и контроля двигателями в электронных устройствах, таких как роботы, автомобили, принтеры и другие мехатронные системы. Платы драйверов двигателей Драйвер двигателей — это электронное устройство или интеграль- ная схема, которая используется для управления и усиления сигнала, подаваемого на электродвигатель. Драйверы двигателей обычно используются для управления скоростью и направлением вращения электродвигателей, таких как шаговые моторы, постоянного и пере- менного тока. Они обеспечивают защиту для моторов и микроконтрол- леров, а также усиливают управляющий сигнал, чтобы моторы могли работать эффективно. Платы драйверов двигателей представлены на рис. 5.1 и рис. 5.2. Данный экземпляр платы драйвера двигателей (рис. 5.1) самый популярный и есть практически во всех магазинах робототехники в России. Эта плата достаточно проста и неприхотлива в использовании. В нашей конструкции робота мы рассмотрим сборку робота на базе дру- гого драйвера двигателей (рис. 5.2). Преимущества данной платы (рис. 5.3) можно выделить в следу- ющем: помимо ее основного назначения — управление двигателями
Рис. 5.1. Плато №1 HW-095 драйвера двигателей L298N (самый бюджетный вариант) Рис. 5.2. Плата №2 DFRobot драйвера двигателей L298P Драйвер двигателей с 4 пинами управления - самый оптимальный и удобный вариант но олимпиадном роботе
Рис. 5.5. Плата №5 драйвера двигателей L 298Р (самый лучший вариант) Рис. 5.4. Плата драйвера двигателей L295D
робота, плата может использовать т ак же как плата расширения пор- тов ввода-вывода, поскольку на ней продублированы все необходимые пины управления. Вдобавок ко всему можно отметить, что на плате есть удобные пружинные фиксаторы для подключения проводов от моторов Данная плата двигателя на базе контроллера L293D (рис. 5.4) не зарекомендовала себя для роботов на Arduino. Использовать такую плату советуем в самых исключительных — безвыходных ситуациях. Прямое назначение плат драйверов двигателей Драйверы двигателей часто используются в проектах Arduino и дру- гих микроконтроллерных системах для управления двигателями. Они могут подключаться к микроконтроллеру через разные интерфейсы, такие как PWM (ШИМ), и предоставлять возможность точного управле- ния моторами. Один из популярных драйверов двигателей для Arduino — это L298N, который широко используется для управления постоянными и переменными двигателями постоянного тока. Этот драйвер может управлять двумя моторами одновременно и обеспечивает возможность управления направлением вращения и скоростью с помощью ШИМ сиг- нала. Драйверы двигателей играют важную роль в робототехнике, авто- матизации и других областях, где требуется управление двигателями для выполнения различных задач. Рассмотрим далее принцип работы бюджетного драйвера двигателей L298N Драйвер двигателей L298N Драйвер двигателей L298N — это устройство, предназначенное для управления двумя постоянными токами (DC) или шаговыми моторами с помощью платформы Arduino или другого микроконтроллера. Он предоставляет высокую мощность и позволяет управлять направле- нием вращения и скоростью двигателей. Рассмотрим назначение каж- дого из разъемов в табл. 5.1.
Назначение разъемов драйвера двигателей L298N Таблица 5.1 Разъем Назначение разъема ОсП1и OUT2 Эпи разъемы предназначены для подключения первого щеточного двигателя или первой обмотки шагового двигателя Они будут управлять направлением и скоростью вращения этого двига-еля OUT3 и OUT4 Эти разъемы предназначены для подключения второго щеточного двигателя или второй обмотки шагового двигателя Они также угравняют направлением и скоростью вращения этого двигателя VSS Это вход для питания двигателей и может принимать напряжение до +35V. Здесь подключается основное напряжение питания для двигателей GND Этот контакт представляет собой общий провод для всех цепей Важно подключить его к соответствующему GND- контакту на пл;те Arduino или другого микроконтроллера Vs Этот вход предназначен для питания логики микросхемы L298N. Обычно его соединяют с +5V, чтобы обеспечить работу логических элементов. Однако если вы используете внешний источник питания для логики, это можно оставить не подключенным IN1.IN2, IN3, IN4 Эти контакты управляют состоянием Н-моста, который контролирует движение двигателей. Путем подачи определенных комбинаций логических уровней на эти контакты вы управляете направлением и вращением двигателей ENAhENB Эти контакты предназначены для активации/деактивации соогветствуюших моторов или обмоток шагового двигателя. Подача логической единицы разрешает вращение двигателей, а лотический ноль - запрещает. Чтобы изменить скорость вращения щеточных моторов, на эти контакты можно подавать ШИМ-сигнал Для работы со шаговыми двигателями на эти контакты обычно ставят перемычки, обеспечивающие постоянную подтяжку к +5V Понимание назначения каждого контакта и разъема на плате L298N важно при подключении и настройке моторов в вашем проекте. Эта информация поможет вам эффективно управлять двигателями и соз- давать разнообразные робототехнические системы на базе Arduino. Расположение разъемов платы драйвера двигателей L298N представ- лено на рис. 5.5, а схематическое обозначение платы драйвера двига- телей L298N — на рис. 5.6. Плата драйвера двигателей L298N является ключевым компо- нентом вашего модуля для управления двигателями. Каждый из двух Н-мостов, встроенных в микросхему, состоит из четырех транзистор- ных ключей. Эти ключи используются для управления направлением вращения и скоростью двигателей, подключенных к модулю. Принцип работы Н-моста заключается в чередовании пар открытых и закрытых ключей для изменения полярности в обмотке двигателя, что в свою очередь определяет направление его вращения. Это позво- ляет управлять двигателями так, чтобы они могли вращаться в обоих направлениях и менять скорость вращения в зависимости от команд, подаваемых с микроконтроллера, такого как Arduino. С помощью этого модуля и микросхемы L298N вы можете легко и эффективно управлять вашими двигателями, что делает его отличным выбором для создания разнообразных робототехнических проектов.
Питание двигателей (до+35У) Перемычка для питания от стабилизатора 5V Двигатель «А» OUT1 или первая обмотка ШД OUT2 Драйвер L298N Стабилизатор +5V Общий (GND) +5V для питания логики Перемычки для выбора метода управления двигателями (прямой или ШИМ)______ Двигатель «В» -> или первая обмотка ШД OUT1 Упр. двиг. «В» или 2-й обмоткой ШД Упр. двиг. «А» или 1 -й обмоткой ШД Рис 5.5. Расположение разъемов платы драйвера двигателей L298N OUT2 ПРИМЕЧАНИЕ. Для выполнения олимпиадного задания этот драйвер двигателей подходит хуже, поскольку для эффективно го управления требуется задействовать 6 пинов кон- троллера Arduino UNO, в то время, когда лучший драй- вер имеет всего 4 пина управления. Схематическое объяснение принципа работы драйвера двигателей на основе транзисторного моста Н-типа представлено на рис. 5.7. Когда на вход IN 1 подается логическая единица, а на вход IN2 — логический ноль, это приводит к открытию транзисторов Т2 и ТЗ, что создает путь для тока через обмотку двигателя. При этом одна клемма обмотки под-
Рис. 5.6. Схематическое обозначение платы драйвера двигателей L298N Рис. 5.7. Схематическое объяснение принципа роботы драйвера двигателей на основе транзисторного моста Н-типа
ключается к плюсу питания, а другая к минусу, что обеспечивает враще- ние двигателя в определенном направлении. На нижнем рисунке, когда 1N3 устанавливается в логический ноль, а IN4 — в логическую единицу, транзисторы Т1 и Т4 открываются, а Т2 и ТЗ закрываются. Это изменяет направление тока через обмотку, застав- ляя второй двигатель вращаться в противоположном направлении Этот простой и эффективный принцип управления направлением вращения двигателей делает микросхему L298N популярным выбором для робототехнических проектов и других приложений, где требуется управление моторами. Подключение L298N к плате Arduino Работать с модулем L298N весьма просто и удобно, и вам не нужно глубокое знание сложных протоколов. Все сводится к основам: пере- ключению логических уровней (0 или 1) на выводах Arduino и, при необходимости, созданию ШИМ-сигнала (от 0 до 255) для управления скоростью вращения моторов. Модуль драйвера L298N способен работать с двумя типами мото- ров; щеточными постоянного тока и шаговыми. Давайте начнем с под- ключения и управления обычными щеточными моторами постоянного тока с помощью платы Arduino UNO. Схематическое объяснение под- ключения платы управления драйвера двигателей L298N представлено на рис. 5.8. Вы сможете легко управлять этими моторами, переключая логиче- ские уровни на соответствующих выводах Arduino и, при необходимо- сти, изменяя ШИМ-сигнал для регулировки скорости вращения. ПРИМЕЧАНИЕ. Следует обратить внимание, что з схеме предусмотре- на возможность управления скоростью вращения, по- этому выводы ENA и ENB драйвера подключены к пинам Arduino, способным выдавать ШИМ-сигнал Arduino пи- тается от отдельного источника 7..12 В. Если напря- жение питания моторов лежит в этом же диапазоне, то можно объединить питающие цепи в одну общую. Также необходимо следить за тем, чтобы минусовые провода всех элементов схемы были соединены между собой.
Рис. 5.8. Схематическое объяснение подключения платы управления драйвера двигателей L298N Для демонстрации возможностей модуля, напишем скетч, который будет вращать моторы с различной скоростью и периодически менять направления их вращения. Ниже приведена программа с подробными комментариями, которая реализует задуманный алгоритм. Пример программного кода для тестирования платы драйвера двигателей 1. #define PIN_ENA 9 // Вывод управления скоростью вращения мотора №1 2. #define PIN_ENB 3 // Вывод управления скоростью вращения мотора №2 3. #define PIN_ INI 7 // Вывод управления направлением вращения мотора №1
4. ♦oefine PIN_IN2 6 // Зыеод управления направлением вращения мотора №1 5. ♦ define PIN_IN3 5 // Вывод управления направлением вращения мотора №2 6. ♦define PIN_IN4 4 // Вывод управления направлением вращения мотора №2 7. uint8 t power = 105; // Значение ШИМ (или скорости вращения) 8. 9. 10. 11. 12. 13. 14 . void setup() { // Установка всех управляющих пинов в режим выхода pinMode(PIN_ENA, OUTPUT); pinMode(PIN_ENB, OUTPUT); pinMode(PIN INI, OUTPUT); pinMode(PIN IN2, OUTPUT); pinMode(PIN_IN3, OUTPUT); 15 . pinMode(PIN_IN4, OUTPUT); 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. // Команда остановки двум моторам digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW); digitalWrite(PIN IN3, LOW); digitalWrite(PIN IN4, LOW); } veld locp() ( // Вращаем моторы в одну сторону с разной скоростью while(power < 255) ( analogWrite(PIN_ENA, power); // Устанавливаем скорость 1-го мотора 26. analogWrite(PIN ENB, power); // Устанавливаем скорость 2-го мотора 27. 28. 29. 30. 31. 32 . 33. 34 . 35. 36. 37. 38. 39. // Задаем направление для 1-го мотора digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, LOW); // Задаем направление для 2-го мотора digitalWrite(PIN_IN3, HIGH); digitalWrite(PIN_IN4, LOW); delay(300C); // Пауза 3 секунды power += 30; // Увеличиваем скорость } power = 225; // Вращаем моторы в другую сторону с разной скоростью while(power > 105) { analogWrite(PIN_ENA, power); // Устанавливаем скорость 1-го мотора
40. analogWrite(PIN ENB, power); // Устанавливаем скорость 2-го мотора 41. // Задаем направление для 1-го мотора 42. digitalWrite(₽IN_IN1, LOW); 43. digitalWrite(PIN_IN2, HIGH); 44. // Задаем направление для 2-го мотора 45. digitalWrite(PIN_IN3, LOW); 46. digitalWrite(PIN_IN4, HIGH); 47. delay(3000); // Пауза 3 секунды 48. power -= 30; // Уменьшаем скорость 49. } 50 . power = 105; 51 . } В начале программы определены макроопределения для всех используемых выводов в проекте. В функции setupO все выводы Arduino UNO, которые участвуют в управлении, настраиваются как выходы. Выводам IN1-IN4 устанавливаются логические нули, чтобы гарантиро- вать, что двигатели не будут вращаться при запуске программы. В основном цикле программы реализован алгоритм для вращения двигателей в одном направлении. Скорость двигателей увеличивается каждые 3 секунды. Когда скорость достигает максимального значения, моторы начинают вращаться в обратном направлении, постепенно замедляя свою скорость. Когда скорость снижается до минимума, алго- ритм повторяется заново. ПРИМЕЧАНИЕ. В олимпиадном наборе, как малой так и большой плат- формы, мы будем рассматривать версию драйвера двигателей с управлением через 4 пина (2 пина PWM и 2 пина DIR), рассмотрим на примере платы от произво- дителя IARDUINO. Управление мотор-шилдом: перемычки и пины Если вы используете Motor Shield, надеваемый непосредственно на плату Arduino UNO, то обратите внимание на схему подключения управляющих сигналов. Управление моторами осуществляется через четыре входа: Н1, Е1, Е2, Н2 — это сигнальные входы драйвера, которые активируют моторы в нужном направлении и с нужной скоростью.
По умолчанию эти входы уже соединены перемычками (джампе- рами) с определенными цифровыми пинами Arduino: Hl -> D5 El -> 06 Е2 -» D7 Н2 -> D8 ПРИМЕЧАНИЕ. Такое подключение подходит для большинства стан- дартных программ. Как использовать другие пины. Если по какой-то причине вы хотите использовать другие цифровые выводы Arduino (например, если D5-D8 уже заняты другими устройствами): ♦ снимите перемычку (джампер) с соответствующего входа на Motor Shield; ♦ проведите соединительный провод от освободившегося входа к нужному цифровому пину Arduino; ♦ обязательно обновите вашу программу, указав новые пины в коде (digit al Writ е() или через PWM). Способ установки платы драйвера двигателей в плату контроллера Arduino UNO представлен на рис. 5.9 Рис. 5.9. Способ установки плоты драйвера двигателей в плату контроллера Arduino UNO
Моторы постоянного тока подключаются следующим образом: первый, к клеммнику Ml (управляется через входы Н1 и Е1), второй, к клеммнику' М2 (управляется через входы Н2 и Е2). Можно подключить только один мотор, к любому из клеммников Биполярный шаговый двигатель подключается следующим обра- зом: выводы одной обмотки к клеммнику Ml, выводы второй обмотки к клеммнику М2, (управляется через входы Н1 и Н2, а на входы Е1 и Е2 требуется подать уровень логической «1»). Питание Motor Shield: общее или раздельное? Motor Shield (драйвер двигателей, устанавливаемый на Arduino UNO) требует внешнего источника питания, подключаемого через клеммник Vin. Этот источник должен подавать напряжение в диапазоне от 2,5 до 35 В — именно от него питаются моторы. ПРИМЕЧАНИЕ. Варианты питания' перемычка решает! Рядом с клемм- ником питания Vin находятся три контакта с пере- мычкой. От положения этой перемычки зависит, как пи- таются Motor Shield и сама плата Arduino UNO. Режим 1: Общее питание (перемычка ближе к клеммнику) Напряжение с клеммника Motor Shield подается не только на моторы, но и на Arduino UNO через вход Vin. Используется один общий источник питания. Удобно и просто — один аккумулятор питает весь робот. Ограничение: напряжение не должно превышать 12 В, иначе можно повредить стабилизаторы на плате Arduino. Режим 2: Раздельное питание (перемычка дальше от клеммника или снята) Motor Shield и Arduino UNO получают питание отдельно: Motor Shield — от внешнего источника на Vin; Arduino UNO — либо от USB, либо от отдельного источника (через свой разъем). Позволяет подавать на моторы более высокое напряжение (до 35 В), не опасаясь повредить контроллер. Требуется два источника питания или грамотная схема стабилизации.
СОВЕТ. На олимпиадах чаще всего используется режим общего питания - он проще и быстрее в сборке Если ваш ро- бот оснащен мощными моторами или питанием выше 12 В - лучше выбрать раздельное питание и удалить перемычку. Перед включением проверьте напряжение мультиметром, особенно если используете литиевые аккумуляторы. Правильная настройка пита- ния — это не только безопасность, но и стабильная работа всей кон- струкции. Один неверный вольт может испортить всю попытку. Пример использования перемычки питания (обшее питание/Раздельное пита- ние) представлен на рис. 5.10, К Motor Shield можно подключить два коллекторных мотора, или один шаговый двигатель. Клеммник «М2» для подключения второго мотора Клеммник «М1» для подключения первого мотора ОБЩЕЕ ПИТАНИЕ Reset Колодка цифровых выводов Arduino (как на Trema Shield) Управляющие входы HI, El, Н2, Е2 можно подключить к любым выводам (по умолчанию Н1=7, Е1=6, Н2=4, Е2=5) Индикация направления и скорости для обоих моторов «М1» и «М2» Vin Перемычка ближе к клеммнику Колодка аналоговых выводов Arduino (как на Trema Shield) РАЗДЕЛЬНОЕ ПИТАНИЕ Рис. 5.10. Пример использования перемычки питания (общее питание/Разделоное питание)
Подробно о Motor Shield Motor Shield — это плата расширения, устанавливаемая непосред- ственно на Arduino UNO и предназначенная для управления двига- телями постоянного тока и шаговыми двигателями. Он построен на базе популярного чипа L298, и является универсальным решением для олимпиадных роботов. Возможности и особенности: ♦ позволяет управлять скоростью и направлением вращения двух двигателей постоянного тока; ♦ работает на базе L298 — классического двухканального драйвера; ♦ поддерживает подключение биполярного шагового двигателя че- рез стандарттгую библиотеку' Stepper; ♦ имеет разведенные аналоговые и цифровые выводы Arduino, как в Trema Shield, что удобно для подключения датчиков и дополни- тельных модулей. Управляется через четыре входа: ♦ Hl, Е1 — мотьр Ml; ♦ Н2, Е2 — мотор М2. Входы соединены перемычками с цифровыми пинами Arduino (по умолчанию D5-D8), но могут быть переподключены при необходимости. Управление моторами постоянного тока Для управления моторами постоянного тока на Arduini1 использу- ется комбинация функций: ♦ digitalWrite() - для задания направления вращения; ♦ analogWrite() — для задания скорости с помощью широтно-им- пульсной модуляции (ШИМ). Мотор Ml: ♦ Hl — отвечает за направление; ♦ Е1 — отвечает за скорость (PWM-сигнал). Мотор М2: ♦ Н2 — направление; ♦ Е2 — скорость. Направление вращения задается подачей логического сигнала: ♦ LOW — одно направление; ♦ HIGH — противоположное.
Скорость вращения регулируется подачей ШИМ-сигнала с опреде- ленным коэффициентом заполнения (от 0 до 255), через analogWrite() на вход Е1 или Е2. Чем выше значение — тем выше скорость вращения. Управление шаговым двигателем Motor Shield также позволяет управлять биполярным шаговым двигателем. Для этого используется библиотека Stepper, входящая в стандартную поставку Arduino IDE. Управление осуществляется через выводы Н1 и Н2. На выводы Е1 и Е2 необходимо подать логическую еди- ницу (HIGH) — это включает каналы драйвера. После этого библиотека управляет шагами, чередуя сигналы на Н1 иН2. ВНИМАНИЕ. При использовании шагового двигателя обязательно установить digitalWrite(El, HIGH) и digitalWtite(E2, HIGH) перед запуском последовательности шагов. Пример кода: плавное управление моторами через Motor Shield. Ниже приведен пример программы для Arduino, демонстрирующий, как управлять двумя моторами постоянного тока через Motor Shield. В этом примере: ♦ моторы поочередно плавно увеличивают и уменьшают скорость; ♦ после этого меняют направление вращения; ♦ управление скоростью осуществляется с помощью ШИМ-сигнала, а направлением — с помощью логических уровней. Объявление констант и переменных: 1. const uint8_t pinHl = 7; // Направление мотора 1 2. const uintS t pinEl =6; // Скорость мотора 1 (PWM) 3. const uint3_c pinE2 = 5; // Скорость мотора 2 (PWM) 4. const uint8_t pinH2 =4; // Направление мотора 2 5. uint8_t mSpeed =0; // Текущая скорость моторов 6. bool mDirect = HIGH; // Текущее направление вращения Настройка пинов в setup(): void setup(){ pinMode (pinHl, OUTPUT); digitalWrite (par.Hl, LOW);
pinMode(pinEl, OUTPUT); pinMode(pinE2, OUTPUT); pinMode(pinH2, OUTPUT); } digitalWrite(pinEl, LOW) digitalWrite(pinE2, LOW) digitalWrite(pinH2, LOW) ПРИМЕЧАНИЕ. Все пины, отвечающие за управление, конфигурируются как выходы. На старте всем подается логический уро- вень LOW (выключено). Основной цикл 1оор() 1. void loop() { 2. // Управление мотором 1 (Ml) 3 digitalWrite(pinHl, mDirect); // Устанавливаем направление 4. while(mSpeed < 255){ analogWrite(pLnEl, mSpeed++); delay(5); } // Плавне увеличиваем скорость 5. while(mSpeed > 0){ analogWrite(pinEl, mSpeed—); delay(5); } // Плавно уменьшаем скорость 6. 7. // Управление мотором 2 (М2) 8. digitaiWrite(pinH2, mDirect); // Устанавливаем направление 9. while(mSpeea < 255){ analogWrite(pinE2, nSpced++); delay(5); } // Плавно увеличиваем скорость 10. while(mSpeea > 0){ analogWrite(pinE2, mSpeed—); delay(5); } // Плавно уменьшаем скорость 11. 12. mDirect = ImDirect; // Инвертируем направление вращения 13. } Объяснение: ♦ мотор Ml управляется пинами Н1 (направление) и Е1 (скорость); ♦ мотор М2 — через Н2 и Е2; ♦ значение скорости увеличивается и уменьшается плавно, с ша- гом 1 и задержкой 5 мс; ♦ после изменения скорости меняется направление (переменная mDirect переключается с HIGH на LOW и наоборот); ♦ каждый мотор выполняет «петлю>/ (ускорение, торможение, смена направления). Что можно изменить; ♦ задержку delay(5) — чтобы моторы ускорялись медленнее или бы- стрее;
♦ значения pinHl ,.pinE2 — если вы используете другие пины (при снятых перемычках); ♦ добавить управление обоими мот орами одновременно, а не пооче- редно; ♦ расширить программу до полноценного движения вперед, назад, разворотов.
МОДУЛИ РАСШИРЕНИЯ ПОРТОВ ВВОДА-ВЫВОДА Популярные платы аасшпрения портов ввода-еывода (I/O) для Arduino. известные также как I/O Expander или I/O Shield, которые предоставляет дополнительные порты для под- ключения различных устройств и расширения возможностей микроконтроллера Arduino. Эти платы облегчают управление большим количеством датчиков, актуаторов и других пери- ферийных устройств. Модули расширения портов ввода-вывода для Arduino представ- ляют собой дополнительные платы или устройства, которые позволяют расширить количество доступных цифровых и аналоговых входов/ выходов для подключения дополнительных датчиков, актуаторов и других периферийных устройств. Эти модули облегчают разработку и расширение функциональности проектов на Arduino. Платы расшире- ния портов ввода-вывода представлены на рис. 6.1... рис. 6.3. Существует множество различных модулей расширения портов ввода-вывода для Arduino, и они могут различаться по количеству доступных портов, типам интерфейсов (цифровые, аналоговые, I2C, SPI и т. д,), а также по дополнительным функциям. Вот некоторые из наибо- лее распространенных модулей расширения портов ввода-вывода для Arduino. Arduino Shields. Это дополнительные платы, которые можно уста- новить непосредственно на верхнюю часть Arduino и которые предо- ставляют дополнительные порты ввода-вывода. Например, Arduino Ethernet Shield добавляет сетевые возможности к Arduino.
Рис 6.1.Плата расширения портов ввода-вывода Trema Shield Рис. 6.2 Плата расширения портов ввода вывода Troyka Shield Рис. 6.3. Плата расширения портов ввода-вывода DfRohct
Модули расширения на базе портов 12С и SPI. Эти модули обычно подключаются к разъемам I2C или SPI на Arduino и предостав- ляют дополнительные цифровые или аналоговые порты, а также интер- фейсы для подключения датчиков и других устройств. Мультиплексоры (МИХ). Мультиплексоры позволяют управлять множеством устройств с помощью ограниченного числа входов. Они позволяют переключать подключение между разными устройствами. Расширители портов GPIO (GPIO Expanders). Эти устройства подключаются через интерфейс 12С или SPI и расширяют количество доступных цифровых GPIO-портов для управления. Платы с множеством разъемов (Breakout Boards). Это неболь- шие платы с разъемами для подключения дополнительных устройств. Они часто используются для подключения конкретных датчиков или актуаторов. Платы расширения Arduino Mega. Arduino Mega имеет больше цифровых и аналоговых портов по сравнению с классическим Arduino Uno, что делает его хорошим выбором для проектов с большим количе- ством подключений. Выбор конкретного модуля расширения портов ввода-вывода зави- сит от требований вашего проекта. Как правило, модули расширения значительно упрощают процесс разработки и позволяют подключить больше устройств к вашей платформе Arduino. Е НИМАНИЕ. Настоятельно не рекомендуется использовать шилды с тонкими коннекторами (гребенкой), которые соединя- ют модули плат между собой. Ключевая проблема в таких разъемах заключается в том, что тон- кие длинные пины не обеспечивают гарантированного соединения, и модули между собой могут на время терять контакты даже от малей- шего их смещения, например, от вибрации. В один момент времени у участника датчики робота, сервомоторы, установленные в верхний разъем платы расширения ведут себя правильно, а в другой момент вовсе робот их не видит, так как мог произойти разрыв соединения. Такое автор книги наблюдал и исправлял очень часто. Используйте этот опыт в своей работе. Решением, хоть и временным, такой проблемы будет изгиб всех таких тонких «ножек» чтобы уменьшить вероятность потери контакта.
МОДУЛИ СТАБИЛИЗАТОРА ПИТАНИЯ Популярные платы стабилизаторов питания DC-DC, также известные как DC-DC конвертер или регулятор напряжения, применяемые для поддержания стабильного выходного напря- жения независимо от изменений входного напряжения. Эти платы особенно полезны в электронных проектах, где важна стабильность электропитания для компонентов Платы стабилизаторов питания DC-DC, также известные как DC-DC конвертеры или регуляторы напряжения, широко используются в элек- тронике для поддержания стабильного выходного напряжения неза- висимо от изменений входного напряжения. Эти устройства имеют ключевое значение во многих электронных проектах, где необходима надежная и стабильная электроподача для различных компонентов и устройств. Преобразователи представлены на рис. 7.1... рис. 7.3 Ниже представлены некоторые популярные характеристики и обла- сти применения DC-DC конвертеров. Стабилизация напряжения. DC-DC конвертеры обеспечивают стабильное выходное напряжение, что важно для защиты чувствитель- ных электронных компонентов от перепадов напряжения. Регулируемый выход: Многие модели оборудованы регулируемым выходным напряжением, что позволяет настраивать напряжение в соответствии с требованиями конкретного проекта. Высокая эффективность. DC-DC конвертеры обычно имеют высо- кий уровень эффективности, что помогает сократить потребление энер- гии и уменьшить выделение тепла.
Рис. 7.1. Понижающий DC-DC преобразователь XL4015E1 75W 5А с дисплеем для Arduino Рис. 7.2. Понижающий регулируемый DC-DC преобразователе (импульсный стабилизатор напряжения) на LM2596
Широкий диапазон входного напряжения. Они способны рабо- тать с широким диапазоном входного напряжения, что делает их уни- версальными для использования с различными источниками питания Защитные функции. Многие модели включают в себя функции защиты от короткого замыкания, перегрузки и перегрева, что обеспе- чивает безопасность в эксплуатации. DC-DC конвертеры предоставляют инженерам и электронщикам мощный инструмент для обеспечения надежной электроподачи в раз- личных ситуациях и помогают снизить риск повреждения компонентов вследствие нестабильного питания.
МОТОРЫ, СЕРВОМОТОРЫ Популярные сервомоторы и устройства, используемые для точного управления углом поворота Они могут использо- ваться в различных проектах, таких как робототехника, автоматизация и многие другие Микросервоприводы Рассмотрим первый популярный тип электрических двигателей. Сервомоторы и сервоприводы — это популярные устройства, которые применяются для точного управления утлом поворота механизмов или компонентов. Они нашли широкое применение в различных областях, включая робототехнику, автоматизацию и многие другие проекты. Вот некоторые особенности и области применения сервомоторов и серво- приводов. Микросервоприводы представлены на рис. 8.1... рис. 8.3. Сервомоторы и сервоприводы обладают высокой степенью надеж- ности и позволяют точно управлять механизмами, что делает их важ ными компонентами в мире электроники, робототехники и автомати- зации. Сервомоторы Arduino — это устройства, предназначенные для точного управления угловым положением. Они могут поворачиваться на определенный угол и находят широкое применение в робототехнике и других областях. У сервомоторов есть выходной вал, который может поворачиваться на 180 градусов, и с помощью Arduino можно устано- вить определенное положение этого вала.
Рис 8.1 Микросервопривод Feetech FS90 с углом поворота 180° с пластиковыми шестеренками Рис. 8.2. Микросервопривод постоянного вращения Feetech FS90R 560° с пластиковыми шестеренками Рис. 8.3. Микросепвопривод TlanKongRC MG90S180° с металлическими шестеренками
Сервоприводы начали использовать задолго до появления Arduino, особенно в мире радиоуправляемых устройств (RC). например, для управ- ления рулевыми механизмами игрушечных автомобилей или поворотом крыльев модельных самолетов. Позже они нашли широкое применение . робототехнике, автоматизации и, конечно, в сфере Arduino. Виды сервоприводов Сервоприводы бывают двух типов: аналоговые и цифровые. Они отличаются по внутренней управляющей электронике. У аналоговых сервоприводов встроена специальная микросхема, которая управляет мотором на основе анализа поступающих импульсов. В то время хак у цифровых сервоприводов на плате установлен микропроцессор, кото- рый принимает, анализирует и управляет мотором на основе поступаю- щих сигналов. Эти два типа сервоприводов физически могут выглядеть одинаково, но различия касаются способа обработки сигналов и управ- ления мотором. Шестерни в сервоприводах могут быть изготовлены из разных материалов, таких как пластик, карбон, и металл. Пластиковые (нейлоновые) шестерни легкие и не подвержены износу, но они не выдерживают больших нагрузок. Они хороши для проектов с небольшими нагрузками. Карбоновые шестерни более долговечны и практически не изна- шиваются, но они дороже пластиковых. Металлические шестерни самые прочные, но они тяжелее и быстрее изнашиваются. Шестерни из титана считаются одними из луч- ших среди металлических шестерен, но они также дороже. Типы моторов сервоприводов Сервоприводы могут иметь разные типы моторов. Обычный мотор с сердечником обычно имеет железный ротор с проволочной обмоткой и магнитами вокруг него. Он может вызывать небольшие колебания при вращении из-за секций ротора и магнитов, что делает его менее точным. Мотор без сердечника обладает полым ротором и одним магнит- ным сердечником, что делает его легче и обеспечивает более быстрый отклик без вибраций.
Бесколлекторный мотор не имеет щеток, что устраняет сопротив- ление вращению и обеспечивает высокую скорость, момент и уровень контроля. Они дороже других типов моторов, но обладают лучшими х арактеристика ми. Как работает сервопривод Выбор типа сервопривода зависит от конкретных потребностей проекта и требований к точности, нагрузке и скорости вращения. Рассмотрим более детально, как работает сервопривод. Сервоприводы Arduino — это умные устройства. Используя только один входной пин, они получают значения для позиционирования от микроконтроллера и переходят в это положение. Как .можно увидеть на рисунке в самом начале статьи внутри они имеют двигатель и цепь обратной связи, которая гарантирует, что вал/рычаг сервопривода достигнет желаемого положения. Схематическое объяснение принципа работы сервомотора в зависимости от длины сигнала представлено на рис. 8.4. Сигнал, который поступает на вход сервопривода, представляет собой прямоугольную волну, аналогичную сигналу ШИМ (широтно- импульсной модуляции). Каждый цикл этого сигнала длится 20 милли- секунд, и большую часть времени сигнал находится в состоянии LOW (низкого уровня). В начале каждого цикла значение сигнала становится HIGH (высокого уровня) на промежуток времени от 1 до 2 миллисекунд. При значении 1 миллисекунда вал или рычаг находятся в положе- нии 0 градусов, а при значении 2 миллисекунды — в положении 180 гра- дусов. Промежуточные значения ог 0 до 180 градусов соответствуют Минимальный импульс Средняя позиция Максимальный импульс _п_________п______п ---1 |-- Ширина импульса Рис 8 4. Схематическое объяснение принципа работы сервомотора в зависимости от длины сигнала
промежуткам времени между 1 и 2 миллисекундами. Этот метод управ- ления сервоприводами является очень эффективным и надежным. Подключение сервопривода к плате Arduino: Сервомотор имеет много встроенных деталей: двигатель, цепь обратной связи и, самое главное, драйвер мотора. Ему просто нужно дополнительно питание, земля и один контрольный пин. Управлять сервомотором можно несколькими способами. В первом примере мы рассмотрим управление сервомотором без подключае- мых сторонних библиотек — через импульсы. Для этого мы считаем показания из Serial Monitor — в нем нам нужно ввести чисто от 0 до 9. Эти значения мы равномерно распределим на 180 градусов и получим 20 градусов на каждую единицу показаний. Рис. 8.5. Подключение сервомотора к плате Aidumo UNO Вот пример программы управления сервомотором без исполь- зования библиотек 1. int servoPin =9; // сигнальный провод от серво на порт 9 2. int val; 3. 4. void setup() 5. { 6. pinMode(servoPin, OUTPUT); 7. Serial.begin (9600); 8. Serial.printin("Servo is ready"); 9 } 16.
11. void loop () 12. { 13. // convert number 0 to 9 to corresponding 0-180 degree angle 14. val = Serial.read(); 15. if (val >= 'O' && val <= '9') 16. { 17. val = val — 'O'; // convert to numerical variaole 18. val = val * (180 / 9); // convert number to angle 19. Serial.print("moving servo to "); 20. Serial.print(val, DEC); 21. Serial.printin(); 22. // giving the servo time 23. //to rotate to commanded position 24. for (int 1=0; i <= 50; i++) 25. { 26. servoPulse(servoPin, val); 27. } 28. } 29. } 30. 31. // define a servo pulse function 32. void servoPulse(int pin, int angle) 33. { 34. // convert angle to 500-2480 pulse width 35. int pulseWidth = (angle * 11) + 500; 36. digitalWrite(pin, HIGH); // set the level of servo pin as high 37 . delayMicroseconds(pulseWidth); // delay microsecond of pulse width 38. digitalWrite(pin, LOW); // set the level of servo pin as low 39. delay(20 — pulseWidth / 1000); 40. } Программа (скетч) ниже содержит инструкции для управления сер- воприводом. Сначала сервопривод перемещается в положение 0 гра- дусов, затем ожидает 1 секунду. После этого он поворачивается на 90 градусов, снова ожидает одну секунду и, наконец, поворачивается на 180 градусов, после чего возвращается в исходное положение.
Вот пример программы управления сервомотором через встро- енную библиотеку «Servo.h». 1. // Подкдоючаем библиотеку Servo 2. #inclade <Servo.h> 3. 4. // Пин для сервопривода 5. int servoPin =3; 6. // Создаем объект 7. Servo Servol; 8. 9. void setupO { 10. // Нам нужно подключить сервопривод к используемому номеру пина 11. Servol.attach(servcPin); 12. } 13. 14 . void loop ()1 15. // 0 градусов 16. Servol.write (0); 17 . delay(10CC); 18. // 90 градусов 19 . Servol.write(90); 20. delay(lOCO); 21. // 18C градусов 22. Servol.write(180); 23. delay(1000); 24. } Коллекторные моторы Рассмотрим основной тип моторов, используемых в робототех- нике — коллекторные моторы. Коллекторные моторы — это один из наиболее распространенных типов моторов, применяемых в робототех- нике и множестве других областей. Они основаны на принципе работы электромагнитного поля и имеют несколько ключевых особенностей, делающих их популярными в робототехнике. Устройство коллекторного мотора представлено рис. 8.6. Основными компонентами коллекторного мотора являются якорь, коммутатор (или коллектор) и обмотки. Когда электрический ток пода- ется через обмотки, создается магнитное поле, которое заставляет якорь вращаться. Коммутатор переключает направление тока в обмот- ках, что обеспечивает постоянное вращение якоря.
Рис. 8.6. Устройство коллекторного мотора Преимущества коллекторных моторов включают их относитель- ную простоту конструкции, высокий крутящий момент при низких ско- ростях вращения, а также возможность точного управления скоростью и направлением вращения. Эти моторы широко применяются в робо- тотехнике для приведения в действие колес, манипуляторов и других механизмов. Однако у коллекторных моторов есть и недостатки, включая износ щеток, которые используются для соединения с источником питания, и электромагнитные помехи, которые они могут создавать. Тем не менее, благодаря их простоте и эффективности, коллекторные моторы оста- ются популярным выбором для многих робототехнических приложе- ний. Устройство коллекторного мотора (слева — без редуктора, справа — с редуктором) можно видеть на рис. 8.7. Использование моторов с встроенным редуктором Редуктор в моторе — это механическое устройство, которое сни- жает скорость вращения выходного вала мотора при помощи системы шестерен или зубчатых колес. Он состоит из нескольких зубчатых колес разного размера, которые взаимодействуют друг с другом, передавая вращение с одного вала на другой с разной скоростью.
Рис. 8.7. Устройство коллекторного мотора (слева - без редуктора, справа - с редуктором) Главная цель редуктора в моторе — увеличить крутящий момент и снизить скорость вращения. Это особенно полезно для роботов, кото- рые должны выполнять точные и плавные движения, например, при управлении манипуляторами или механизмами захвата. ПРИМЕЧАНИЕ. Редуктор позволяет роботу работать более стабиль- но, с меньшими рывками и дерганьем, что особенно важ- но для олимпиадных заданий, где качество выполнения задания часто важнее скорости. Использование мотора с редуктором позволяет роботу более плавно и точно управляться, что улучшает его способность выполнения задачи с высокой точностью. Даже если это означает, что робот будет двигаться медленнее, его стабильность и надежность делают его более эффективным в выполнении сложных задач, требующих высокой точности и контроля. Понижающие редукторы уменьшают скорость вращения выход- ного вала мотора и увеличивают крутящий момент. Они применяются там, где требуется больше мощности и меньшая скорость вращения, например, для привода колес робота, манипуляторов или других меха- низмов, требующих сильного крутящего момента. Повышающие редукторы, наоборот, увеличивают скорость вра- щения выходного вала мотора и уменьшают крутящий момент. Они применяются там, где требуется более высокая скорость вращения при более низком крутящем моменте, например, для привода вентиляторов или других устройств, где важна скорость вращения.
Оба типа редукторов имеют свои преимущества и применяются в зависимости от конкретных требований конструкции и функциональ- ности робота или другого устройства. Подключение коллекторного мотора к плате Arduino ВНИМАНИЕ. Ни в коем случае не пытайтесь подключать мотор на- прямую к пинам Arduino! Максимальный ток на выводах Arduino слишком низок для прямого подключения мощных нагрузок, таких как электродвигатели, которые потре бляют десятки или сотни миллиампер. Это может при- вести к перегреву и повреждению микроконтроллера. Для безопасного подключения электродвигателей к Arduino необхо- димо использовать специальные устройства, называемые драйверами двигателей. Эти драйверы предназначены для управления мощными нагрузками, обеспечивая защиту микроконтроллера от перегрузок и коротких замыканий. Драйверы двигателей обычно оснащены отдельными выводами для подключения источника питания, выводами для подключения электродвигателя и управляющими выводами, которые подключа- Рис. 8.8. Подключение коллекторного мотора к L298N и Arduino
ются к Arduino для управления двигателем. Популярные микросхемы, используемые в драйверах двигателей, включают L293D, L298N, HG788, L911OS и другие. Использование драйверов двигателей позволяет безопасно и эффективно управлять электродвигателями с помощью Arduino, обе- спечивая необходимую мощность и защиту от повреждений. Схема подключения коллекторного мотора через драйвер двигате- лей L298N приводится на рис. 8.8. Программа для драйвера мотора L298N Напишем простую программу, которая будет вращать мотор в одну сторону 3 секунды с максимальной скоростью, и затем 3 секунды в обратную сторону с более медленной скоростью. 1. byte епа = 3; 2. byte ini = 4; 3. byte in2 = 5; 4. void setup() { 5. pinMode ( ena, OUTPUT ); 6. pinMode( ini, OUTPUT ); 7. pinMode( in2, OUTPUT ) ; 8. } 9. void loop() { 10. // выставляем 100% мощность на моторе А — 255 из 255 11. analogWrite( епа, 255 ); 12. // выставляем режим мотора — вращение по часовой 13. digitalWrite( ini, HIGH ); 14. digitalWrite( in2, LOW ); 15. delay(3000); // пауза Зсек 16. 17. // выставляем мощность на мотора А — 150 из 255 18 . analogWrite( епа, 150 ); 19. // режим мотора — вращение против часовой 20. digitalWrite( ini, LOW ); 21. digitalWrite( in2, HIGH ); 22 . delay(3000); // пауза Зсек 23. }
Подключение больших коллекторных моторов с энкодерами В версии большого робота используются коллекторные моторы с установленным энкодерм. Энкодер (от англ, encode — «кодировать») представляет собой при- бор, преобразующий вращательное или поступательное движение в цифровые импульсы. Проще говоря, это чувствительный элемент, измеряющий угол поворота или смещение по прямой. Соответственно, различают ротационные (угловые) и линейные модели. В основе работы инкрементального энкодера лежит генерация электрических сигналов при механическом перемещении: при равно- мерном вращении выходом становятся два квадратных импульса, сме- щенных друг относительно друга на четверть периода (90° по фазе), что позволяет не только фиксировать количество шагов, но и определять направление движения. Назначение выводов коллекторного мотора v.l с установленным энкодером представлено на рис. 8 9, а назначе- ние выводов коллекторного мотора v.2 с установленным энкодером — на рис. 8.10. Устройство шестеренок (редуктора) — слова, общий вид мотора — справа можно видеть на рис. 8.11. ВНИМАНИЕ. В зависимости от производителя цветовая маркировка и ее чередование может быть другим!
1 2 3 4 5 6 — Ml motor — GND Encoder — Encoder A phase — Encoder В phase — 3V3 Encoder + — Ml motor + Puc.8.10 Назначение выводов коллекторного мотора v.2 с установленным энкодером Рис. 8.11. Устройство шестеренок (редуктора) - слева, общий вид мотора - справа При подключении инкрементальных энкодеров (с каналами А и В, и опционально каналом Z) к плате Arduino важно соблюдать несколько принципиальных правил: правильное питание, развязку «земель», использование подтягивающих резисторов и выбор подходящих циф- ровых входов для прерываний. Питание энкодера: ♦ VCC 5 В (или 3,3 В, если у вас «логика» энкодера 3,3 В). ♦ GND -» GND на Arduino (обшая «земля» обязательно должна быть одна!). Сигнальные каналы: ♦ А —> цифровой вход Arduino. ♦ В —> цифровой вход Arduino. Выбор пинов и прерываний. На Arduino Uno рекомендуются пины 2 и 3, т. к. они поддерживают аппаратные прерывания (INTO и INT1). Антидребезг (Debounce). Контакты энкодера могут «дребезжать» при переключении. Аппаратный debounce (конденсатор-ь резистор) или программный (проверка стабильности сигнала через 1...2 мс) помогут снизить ложные импульсы.
Советы по надежности Короткие провода: минимизируйте длину сигнальных проводов, чтобы снизить помехи. Экран: при помехах используйте экранированный кабель и под- ключайте экран к «земле* у Arduino. Фильтрация’ если энкодер часто «дребезжит», добавьте небольшие RC-фильтры (R-1 к£2 + 0100 nF) на входах А и В. Пример подключения мотора с энкодерами к плате контроллера Arduino UNO представлен на рис. 8.12. Рис, 8.12. Пример подключения моторе с энкодерами к плате контроллера Arduino UNC Программа управления моторами и считывающая показания энкодера Программа управления моторами: ♦ управляет моторами через пины 4, 5, 6, 7 (2 — направление, 2 — PWM); ♦ подключает энкодеры на D2 и DS (прерывания 0 и 1); ♦ выполняет поочередные движения и повороты с плавной регули- ровкой скорости; ♦ выводит значения энкодеров на каждом шаге в Serial Monitor.
Вот листинг программы управления моторами. 1. // --- НАСТРОЙКИ ПИНОВ --- 2. ttdefine ENCODER_L_DIR_FIN 14 // Пин направления левого энкодера 3. ((define ENCODER_R_DIP_FIN 15 // Пин направления правого энкодера 4 . ^define ENCODER_L INTERRUPT О // Прерывание по левому энкодеру (пин 32) 5. tfdefine ENCODER_R_INTERRUPT 1 // Прерывание по правому энкодеру (пин D3) 6. 7. // --- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ДЛЯ ЭНКОДЕРОВ --- 8. volatile int encoderL = 0; 9. volatile int encoderR = 0; 10. 11. // --- ПРОЦЕДУРА ПОДСЧЕТА ИМПУЛЬСОВ ЛЕВОГО ЭНКОДЕРА ---- 12. void encoderlO { 13. if (!digitalRead(ENCCDER_L_DIR_PIN)) 14. encoderL++; 15. else 16. encoderL--; 17. } 18. 19. // --- ПРОЦЕДУРА ПОДСЧЕТА ИМПУЛЬСОВ ПРАВОГО ЭНКОДЕРА 20. void encoder2() { 21. if (digitalRead(ENCCDER_R DIF PIN)) 22. encoderR++; 23. else 24. encoderR--; 25. } 26. 27. //---ФУНКЦИЯ ДЛЯ УПРАВЛЕНИЯ МОТОРАМИ------- 28. void motor(int ml, int mr) 29. { 30. digitaLWrite(4, (ml < 0)); // направление левого мотора 31. ml = abs (ml) ; 32. if (ml > 255) ml = 255; 33. analogWrite(5, ml); // мощность левого мотора (PWM) 34. 35. digitalWrite(7, (mr < 0)); // направление правого мотора 36. mr = abs(mr);
37. if (mr > 255) mr = 255; 38. analogtorite (6, mr); // мощность правого мотора (PWM) 39. ) 40. 41. void setup() { 42. Serial.begin (115200); 43. 44. // Настройка пинов для управления моторами 45. pinMode(4, OUTPUT); // направление левого 46. pinMode (5, OUTPUT); // ШИМ левого 47. pinMode(6, OUTPUT); II ШИМ правого 48. pinMode(7, OUTPUT); // направление правого 49. 50. II Настройка пинов энкодеров 51. pinMode(ENCODER_L_DIR PIN, INPUT); 52 . pinMoae(ENCODER_F_DIP_PIN, INPUT); 53. attachlnterrupt (ENCODER_T. INTERRUPT, encoderl, FALLING); 54. attachlnterrupt(ENCODER_R_INTERRUPT, encoder2, FALLING); 55. 56. // -- ТЕСТ ПЛАВНОГО РАЗГОНА/ТОРМОЖЕНИЯ И ЭНКОДЕРОВ ----- 57. uint32 t motoiTestTime = millisO; 58. while (true) { 59. uint32_t deltaTime = millisO — motorTestTime; 60. 61. if (0 < deltaTime && deltaTime < 300) 62. motor(128, 0); // левый вперед 63. if (300 <= deltaTime && deltaTime < 600) 64. motor(0, 128); // правый вперед 65. if (600 <= deltaTime && deltaTime < 1200) 66. motor(-128, 0); // левый назад 67. if (1200 <= deltaTime && deltaTime < 1800) 68. motor(0, -128), // правый назад 69. if (1800 <= deltaTime deltaTime < 2400) 70. motor(0, 0); // остановка 71. 72. if (2400 <= deltaTime && deltaTime < 3900) { 73. int power = (deltaTime — 2400) / 1500.0 * 256.0 * 2; 74. motor(power, -power); // поворот по часовой стрелке 75. } 76. 77. if (3900 <= deltaTime && deltaTime <= 4500) 78. motor(0, 0); // остановка
79. 80. if (4500 <= deltaTime && deltaTime < 6C0G) { 81. int power = (deltaTime — 4500) / 1500.0 * 256.0 * 2; 82. motor(-power, power); // поворот против часовой стрелки 83. } 84. 85. if (deltaTime >= 6000) 86. break; 87. 88. // Печать значений энкодеров 89. Serial.print("encoderL = "); 90. Serial.print(encoderL); 91. Serla1.print("XtencoderR = "); 92. Serial.printin(enccderR); 93. } 94. 95. motor(0, 0); // Финальная остановка 96. } 97. 98 . void loop() { 99. // Периодический вывод значений энкодеров 100. Serial.print(«encoderL = «); 101. Serial.print(encoderL); 102. Serial.print("XtencoaerR = "); 103. Serial.princln(encoderR); 104 .delay (100); 105 . }
ГЛАВА 9 ВРАЩЕНИЯ, ЭНКОДЕРЫ Устройства, используемые для измерения скорости вращения или углового положения вала. Они полезны в робототехнике, автоматизации и других проектах, где требуется отслежи- вание движения. Измерительные устройства, предназначенные для определения скорости вращения или углового положения вала, играют важную роль в различных областях, таких как робототехника, автоматизация и дру- гие проекты, где необходимо отслеживать движение. Эти устройства, называемые энкодерами, обеспечивают точное измерение угловых изменений или скорости вращения и обладают широким спектром применения. Энкодеры могут использоваться для контроля положения механиз- мов, обратной связи в системах управления, измерения расстояния и скорости в движущихся объектах, а также для реализации различных алгоритмов управления и навигации. Они представляют собой важ- ный элемент в механизмах позиционирования, обеспечивая точность и надежность в работе систем. Разновидности энкодеров. Существует несколько типов энкоде- ров, включая оптические, магнитные и инкрементальные. Они раз- личаются по принципу работы и методу измерения, что позволяет выбирать наиболее подходящий тип в зависимости от конкретных тре- бований проекта. Энкодер оптический DFRobot vl.3 для колеса 45^18 представлен на рис. 9.1 и рис. 9.2
ПРИМЕЧАНИЕ. Важно отметить, что энкодеры играют ключевую роль в обеспечении точности и стабильности работы меха- низмов, что делает их неотъемлемой частью современ- ных систем автоматизации и робототехники. Рис. 9.1. Энкодер оптический DFRooot vl.3 для колеса 45*12 Рис. 9.2. Энкодер оптический DFRobo^ vl.5 для колеса 45*18
Этот энкодер создан специально для установки на удлиненный дер- жатель Pololu для мотор-редуктора, который предназначен для работы с колесом PoJolu размером 42*19 мм и с металлическими мотор-редук торами Gekko MR-12. Б,тагодаря этому, он может использоваться без дополнительных изменений во множестве проектов. Однако стоит учитывать, что толщина печатной платы в 1,6 мм изменит высоту шасси относительно колеса. Эти энкодеры совме- стимы только с колесами размером 42*19 мм, удлиненными держа- телями для мотор-редукторов и металлическими мотор-редукторами Gekko MR-12, а также металлическими микромотор-редукторами PoJolu и Solarbotics, с передаточным числом от 5:1 до 298:1. Кроме того, суще- ствует набор, включающий два энкодера, пару колес 42*19 мм и пару удлиненных держателей. Металлические мотор-редук горы продаются отдельно. У энкодера два цифровых выхода, которые можно подключить напрямую к цифровым входам на большинстве микроконтроллеров, хотя рекомендуется использовать входы с прерываниями. При скорости вращения колеса 1 м/с с 48 импульсами на оборот колеса 42 мм, будет около 360 изменений сигнала в секунду. При использовании двух дат- чиков, как это часто бывает в дифференциально-управляемых роботах, энкодер потребует внимания почти каждую миллисекунду. Обработка данных энкодера займет всего несколько процентов от общей вычис- лительной мощности высокопроизводительных микроконтроллеров, таких как AVR Atmel, используемых в контроллерах Arduino. Однако, использование энкодеров может быть затруднено с более медленными микроконтроллерами без доступных внешних прерываний. ПРИМЕЧАНИЕ. Существует возможность модификации энкодера для работы с напряжением 3,3 В. Это можно сделать путем снижения сопротивления ИК-излучателя и калибровки фототранзистора для обоих датчиков. Посте проведения этих процедур энкодер будет работать от 3,3 В и потреблять около 10 мА. Далее энкодер должен быть откалиброван для компенсации регулировки ИК-светодиодов. Это можно сделать с помо- щью осциллографа, подключенного к выходам, или с помощью микро- контроллера, запрограммированного для измерения рабочего цикла выходов. Схема подключения оптического энкодера к контроллеру Arduino UNO приведена на рис. 9.3.
Рис. 9.3. Подключение оптического знкодера DFRobot vl.3 к Arduino UNO Пример программы с использованием оптического энкодера Этот код создает простую программу для измерения скорости вра- щения энкодера. Он использует два цифровых пина Arduino для под- ключения энкодера: один для сигнала А (пин 2), который используется для прерывания, и другой для сигнала В (пин 4). При каждом измене- нии состояния энкодера (CHANGE) вызывается функция wheelSpeed(). В этой функции определяется направление вращения энкодера и соответствующим образом увеличивается или уменьшается перемен- ная duration, которая отражает количество импульсов, поступивших от энкодера. Программа с использованием оптического энкодера 1. const byte encoderCpinA = 2;//A pin -> the interrupt pin 0 2. const byte encoderOpir.B = 4;//B pin -> the digital pin 4 3. byte encoderOPinALast; 4. int duration;//the number of the pulses 5. boolean Direction;//the rotation diiection 6.
7. 8 . void setup () 9. { 10. Serial.begin(57600);//Initialize the serial pert 11. Encoderlnit();//Initialize the module 12. } 13. 14 . void loop () 15. { 16. Serial.print ("Pulse:"); 17. Serial.printin(duration); 18 . duration = 0; 19. delay(ICC); 20. } 21. 22. void EncoderInit() 23. ( 24. Direction = true;//default -> Forward 25 . pinMode(encoderOpinB,INPUT); 26. attachlnrerrupt(0, wheelspeed, CHANGE); 27. } 28. 29. void wheelSpeed() 30. { 31. int Estate = digitalRead(encoderOpinA); 32. if ( (encoderCPinALast == LOW) && Lstate==HIGH) 33. { 34. int val = digitalRead(encoderOpinB); 35. if(val == LOW && Direction) 36. { 37. Direction = false; //Reverse 38. } 39. else if (val == HIGH && (Direction) 40. { 41. Direction = true; //Forward 42. } 43. } 44. encoderCPinALast = Estate; 45. 46. if (I Direction) duration ; 47. else duration--; 48. }
Использование энкодера в в Arduino Использование энкодеров в Arduino позволяет расширить возмож- ности управления и отслеживания движения ваших проектов. Arduino в сочетании с энкодерами может быть использован для контроля за положением механизмов, измерения скорости вращения двигателей, реализации обратной связи в системах управления и многих других приложениях, где требуется точное определение углового положения или скорости вращения. СОВЕТ. Для работы с энкодерами в Arduino вы можете исполь- зовать специальные библиотеки, такие кик Encoder.h, которая предоставляет удобные методы для работы с энкодерами. С ее помощью вы можете легко подключить и настроить энкодеры, а затем использовать получен- ные данные в своем проекте. Применение энкодеров в Arduino открывает широкий спектр воз- можностей для создания различных устройств, таких как роботы, CNC- машины, ЗП-принтеры, умные устройства и многие другие. Благодаря их точности и надежности, энкодеры становятся важным компонентом в многих проектах, где требуется контроль за движением и позициони- рованием. Энкодер, происходящий от английскою слова «encode» (кодиро- вать), представляет собой устройство, предназначенное для преобра- зования угловых или линейных перемещений в цифровой формат. Он может быть как крутильным, так и линейным, в зависимости от типа перемещения, которое он измеряет. Работа энкодера основана на пре- образовании механического движения в электрические сигналы В слу- чае обычного инкрементального энкодера, который мы рассматриваем, это два квадратных сигнала, сдвинутых на 90 градусов по фазе (при рав- номерном вращении). Графики работы энкодера при вращении пред- ставлены на рис. 9.4,
Рис. 9 4. Графики работы энкодера при вращении Подключение механического модуля энкодера к Arduino Подключение механического модуля энкодера к Arduino (рис. 9.5) осуществляется очень просто: питание (GND и VCC) подключается к соответствующим выводам Arduino, а логические выводы CLK и DT (выводы тактов) и SW (кнопка) подключаются к любым доступным пинам на Arduino (цифровым или аналоговым). У круглых модулей энкодера выводы обозначены как S1 и S2, а кнопка как Key, и их под- ключение осуществляется аналогично. Порядок подключения тактовых выводов энкодера влияет на направление его работы, но это можно скорректировать в программе. В модулях энкодера тактовые выводы уже подтянуты к питанию и выдают низкий сигнал при активации, также на них установлены RC-цепи для подавления эффекта дребезга контактов. Вывод кнопки не имеет внутренней подтяжки. При подключении промышленного энко- дера происходит аналогичное подключение: черный и красный про- вода отвечают за питание, остальные — за тактовые выходы. В модулях энкодеров тактовые выходы и кнопка подтянуты к пита- нию. У круглого модуля также присутствуют RC-цепи для аппаратного подавления дребезга контактов, в то время как у KY-40 (прямоуголь-
Рис. 9 5. Подключение модуля механического энчодеэа к контроллеру Arduino ного) модуля присутствует только подтяжка. При необходимости под- ключения «голого» энкодера к плате, в целом его можно подключить напрямую без дополнительных средств, поскольку библиотека Arduino предоставляет возможность использования внутренних подтяжек (INPUT PULLUP) и программного подавления дребезга. Однако реко- мендуется добавить RC-цепи как для кнопки, так и для тактовых выво- дов энкодера. Если важна не только функциональность библиотеки, но и мак- симальная скорость работы с энкодером и минимальное время его опроса, то предлагается следующий код. В этом примере используется аппаратное прерывание (одно на один энкодер), чтобы повысить ско- рость выполнения прерывания. Также для увеличения эффективности используется функция bitRead вместо digitalRead, что значительно уско- ряет процесс. В коде также предусмотрена настройка типа энкодера. Работа энкодера происходит параллельно основному коду скетча, а значение encCounter изменяется при вращении рукоятки и выводится через порт. Пример программы обработки механического энкодера Программа обработки механического энкодера. 1. #aefine ENC_& 2 // пин энкодера 2. #aefme SNC_B 4 // пин энкодера
3. #define ENC_TYPE 1 // тип энкодера, 0 или 1 4. volatile int encCcunter; 5. volatile boolean stateO, lastState, turnFlag; 6. void setup() { 7. Serial.begin(9600); 8 attachlnterrupt(0, intO, CHANGE); 9. } 10. void into() { 11. stateO = bitRead(PIND, ENC_A); 12. if (stateO != laststate) { 13 . #if (ENC_ TYPE == 1) 14. turnE'lag = ! turnFlag; 15. if (turnFlag) 16. encCounter += (bitRead(PIND, ENC_B) != laststate) ? -1 : 1; 17 . #else 13. encCounter += (bitRead(PIND, ENC_B) != lastState) ? -1 : 1; 19. #endif 20. lastState = stateO; 21. } 22. } 23. void loop() { 24. Serial.printin(encCounter); 25 . delay(100); 26. }
ГЛАВА 10 ЭЛЕМЕНТЫ ПИТАНИЯ Используемые элементы питания для робота Arduino, вклю чающие в себя различные типы батаоей и аккумуляторов, в зависимости от требований проекта и предпочтений поль- зователя. Батарейки и батареи Элементы питания для робота на Arduino могут быть разнообраз- ными и выбираются в зависимости от требований проекта, таких как продолжительность работы, вес, размеры и доступность. Вот некото- рые из наиболее распространенных типов элементов питания, которые используются в робототехнике: Батарейки АА и ААА (рис. 10.1). Эти стандартные батарейки. Они легкие, недорогие и тегкодоступные. Они обычно используются в небольших роботах, таких как линейные роботы или роботы для обра- зовательных целей.
Рис. 10.2.Литиевые батареи Литиевые батареи (рис. 10.2). Литиевые батареи, такие как Li-ion и LiPo, предоставляют высокую энергетическую плотность, что делает их идеальным выбором для более мощных роботов, которым требуется длительная автономная работа. Аккумуляторы NiMH (рис. 10.3). Аккумуляторы никель-металл- гидрид (NiMH) являются перезаряжаемыми и обеспечивают хорошее соотношение между стоимостью и производительностью. Они обычно используются в роботах, где требуется надежная источник питания, который можно перезаряжать. Рис. 10.5. Аккумуляторы никель-металл-еидрид (NiMH) Рис. 10 4. Батарейные сборки из нескольких батарей
Батарейные блоки и сборки (рис. 10.4;. Для более крупных роботов могут использоваться батарейные блоки, которые состоят из нескольких элементов питания, объединенных в одном корпусе для обеспечения высокого напряжения и емкости. ПРИМЕЧАНИЕ. Выбор элементов питания зависит от конкретных по- требностей проекта, включая требуемую мощность, продолжительность работы, вес и размеры робота, а также доступность ресурсов и бюджет. Выбор варианта питания для олимпиадных работ В олимпиадных роботах часто используются аккумуляторы типа «Крона» и аккумуляторы типа «18650» из-за их прочности, энергоемко- сти и надежности. Вот почему. Аккумуляторы «Крона» (рис. 10.5). Эти аккумуляторы известны своей небольшой емкостью и долго нс проработают. Рабочее напря- жение составляет 9 вольт. Они не могут обеспечить длительное время работы робота без необходимости частой замены или перезарядки. По этой причине аккумуляторы «Крона» перестали часто использоваться в олимпиадных роботах, где надежность и стабильность работы являются ключевыми факторами. Аккумуляторы типа «18650» (рис. 10.6). Эти литий-ионные (бывают разные) аккумуляторы обладают высокой энергоемкостью и могут выдерживать большое количество циклов зарядки и разрядки. Рабочее напряжение 3,7 вольт. Они компактны и легки, что делает их
Рис. 10.6. Аккумуляторы «18650» 5,7 В привлекательным выбором для олимпиадных роботов, где важна ком- пактность и эффективность использования пространства. Этот тип батарей формата 18650 стал основным при использовании в олимпи- адных роботах. Оба типа аккумуляторов обеспечивают надежное и стабильное питание для роботов, что позволяет им эффективно выполнять олим- пиадные задания без перерывов или сбоев в работе. ВНИМАНИЕ. При использовании аккумуляторов 18650 важно соблю- дать определенные правила, чтобы обеспечить их без- опасную и эффективную работу. Одно из таких правил заключается в том, чтобы не разряжать аккумуляторы ниже определенного уровня напряжения, например, 2,6 вольт. Недопустимость глубокого разряда аккумулятора обусловлена несколькими факторами. Рассмотрим их. Глубокая разрядка аккумуляторов 18650 до уровня ниже 2,6 вольт может привести к повреждению аккумулятора и ухудшению его характеристик. При этом процессе может произойти необрати- мое разрушение химической структуры аккумулятора, что снизит его емкость и уменьшит срок службы. Проблемы с зарядкой. Зарядные устройства могут не распознать аккумуляторы, разряженные до уровня ниже 2,6 вольт, и отказаться от их зарядки. Это может привести к тому, что аккумуляторы будут счи- таться неисправными, хотя на самом деле они могут быть пригодны для дальнейшего использования.
Снижение емкости и производительности. При глубокой раз- рядке и последующей зарядке аккумуляторы 18650 могут потерять часть своей емкости и производительности. Это может привести к тому, что они будут быстро разряжаться при использовании в роботе, что может создать проблемы во время работы. СОВЕТ. Важно следить за уровнем разряда аккумуляторов 13650 и не допускать их глубокой разрядки до уровня ниже 2,6 вольт, чтобы обеспечить их долговечность и эффективную роботу в роботе.
ПРОВОДА ДЛЯ ПРОТОТИПИРОВАНИЯ Используемые соединительные провода для прототипирова- ния в Arduino, предназначенные для удобного соединения раз- личных компонентов на макетной плате, а также самих моду- лей между собой. Алгоритм использования проводов для прототипирования в Arduino Провода для прототипирования — это соединительные кабели с разъ- емами, специально предназначенные для использования на макетных платах (breadboards) при создании прототипов электронных устройств. Они обычно имеют мужские и женские коннекторы на концах, которые легко вставляются в контактные отверстия макетной платы. Алгоритм использования проводов для прототипирования в Arduino довольно прост. Рассмотри его. Подготовьте макетную плату. Установите компоненты (микро- контроллер Arduino, датчики, светодиоды, резисторы и т. д.) на макет- ную плату в соответствии с вашим проектом. Подключите компоненты. Используйте провода для прототипи- рования, чтобы соединить компоненты между собой так, как это необ- ходимо для вашего проекта. Вставьте мужские коннекторы проводов в контактные отверстия компонентов или макетной платы, и убедитесь, что они надежно соединены. Проверьте подключения. После того как все компоненты под- ключены, убедитесь, что соединения сделаны правильно, и нет никаких обрывов или неправильных подключений.
Тестируйте ваш проект. Загрузите программу на Arduino и про- верьте, как работает ваш проект. Если что-то не работает правильно, перепроверьте все подключения и убедитесь, что они сделаны пра- вильно. Использование проводов для прототипирования позволяет легко и быстро создавать прототипы различных электронных устройств, не требуя пайки или других специализированных инструментов. Это удобный способ тестировать и отлаживать ваш проект перед созданием окончательной версии. Виды проводов для прототипирования Соединительные провода «Папа-папа» (М-М) представлены на рис. 11.1. Эти провода имеют мужские разъемы на обоих концах и используются для соединения контактов между собой на макетной плате. Они особенно удобны при подключении микроконтроллера Arduino к различным датчикам, модулям или другим компонентам. Соединительные провода «папа-папа» поставляются в виде шлейфа из проводов всех цветов радуги. Шлейф может быть использован как в цельном виде, так и в качестве отдельных проводов, которые легко отделяются от общего набора. В соединительном шлейфе «папа-папа», каждый провод с двух сто- рон обжат пластиковым коннектором BLS-1 с выходным штырьком на конце, который принято называть «папа» или «Male». Это означает, что провода «папа-папа» подойдут для коммуникации устройств с ответным гнездом под штырь, который принято называть «мама» или «Female». Каждый провод выполнен из многожильной луженой меди. Изоляция из ПВХ защищает провод от механических воздействий и агрессивной среды: например, бензина, минеральных масел, кислот и щелочей. Длина каждого провода от 10 см с диаметром 1,25 мм. Рис. 11.1. Провоза для протипирования <<Папа попа», разъемы BL S-1
Рис. 11.2. Провидя для протипировония «Мама-мама» Соединительные провода «Мама-мама» (F-F) представлены на рис. 11.2. Эти провода имеют женские разъемы на обоих концах и при- меняются для расширения длины мужских проводов или соединения компонентов с женскими разъемами между собой. В соединительном шлейфе «мама-мама», каждый провод с двух сторон эбжат пластиковым коннектором BLS-1 с выходным гнездом под штырь на конце, который принято называть «мама» или «Female». Это означает, чти провода «мама-мама» подойдут для коммуникации устройств с ответным коннектором в виде штыря, который принято называть «папа» или «Male».
РАЗДЕЛ КОНСТРУКТОРСКАЯ ЧАСТЬ: СОЗДАНИЕ БАЗОВОЙ КОЛЕСНОЙ ПЛАТФОРМЫ С ЛЕГКОСТЬЮ Второй раздел нашей книги посвящен процессу конструирования, предо- ставляя подробные инструкции для легкой и безошибочной сборки базо- вой колесной платформы. Здесь вы найдете шаг за шагом описанные действия, которые позволят вам создать надежную основу для вашего Arduino-робота. От выбора подходящих компонентов до правильного монтажа и подключения, эта глава поможет вам избежать распростра- ненных ошибок и обеспечит гладкое продвижение к следующим этапам вашего проекта. Готовьтесь к творческому и успешному старту в мире робототехники с нашим конструкторским разделом книги!
ВИДЕО-УРОК “ 1]1 ПО СБОРКЕ ОЛИМПИАДНОЙ Л ПЛАТФОРМЫ Просмотрите живой видеоурок, на котором разработчики показывают и подробно рассказывают особенности сборки платформы. Узнайте из первых уст, и получите полезный опыт конструирования от технических экспертов. Специально для этой главы разработчики подготовили подробную видеоинструкцию, в которой показан весь процесс сборки вживую. Отсканируйте OR-код с помощью смартфона или планшета. Видео-урок от разработчиков олимпиадной платформы по сборке маленькой олимпиадной платформы Видео урок от разработчиков олимпиадной платформы по сборке болошой олимпиадной платформы
ПОШАГОВАЯ СБОРКА И НАСТРОЙКА МАЛОЙ ОЛИМПИАДНОЙ ПЛАТФОРМЫ Подробные шаги по сборке маленькой круглой платформы робота, начиная с пустой основы до сборки и подключения всех электронных и механических узлов колесной платформы. Узнайте все особенности и хитрости сборки, изучите слабые места монтажа электронных модулей Arduino. Научитесь правильно использовать крепежные изделия на практике. Основные элементы корпуса малой платформы Процесс сборки малой олимпиадной платформы делится на три- четыре основные части: монтаж нижней платформы, установка боко- вой стенки, монтаж средней и верхней платформ, Ниже приведен пошаговый план с пояснениями к каждому этапу. Малая олимпиадная платформа — это готовая основа для сборки мобильного робота (рис. 13.1), предназначенного для участия в сорев- нованиях и выполнения заданий. Как правило, платф уорма представ- ляет собой трехуровневую конструкцию, которую участник должен собрать и настроить в соответствии с требованиями конкретной олим- пиады. На основе анализа опыта предыдущих соревнований была разра- ботана универсальная конструкция платформы, подходящая для боль- шинства типовых заданий. Она отличается гибкостью и возможностью модификации под различные сценарии.
Рис. 13.1.Оснобные элементы корпуса милой платформы Основные особенности платформы Нижняя платформа служит основанием всей конструкции. На нее устанавливаются крепежные уголки для моторов, сами моторы, воло- куши, а также боковая стенка. Боковая платформа (стейка) является вспомогательной несущей конструкцией, соединяющей все три уровня. На нее устанавливаются батарейный блок, плата стабилизатора питания и выключатель. Средняя платформа создает жесткость всей конструкции и обе- спечивает гибкость в размещении оборудования. Плата имеет множе- ство отверстий для крепления вспомогательных устройств, электрон- ных модулей, пассивных захватов и сервомоторов. Верхняя платформа используется для установки выключателя и управляющих кнопок. Также она, как и средняя, позволяет размещать различные модули в произвольной конфигурации. Благодаря модульной системе, платформа легко адаптируется под разные типы задач — от слежения за линией до автономной навигации по полю.
ПРИМЕЧАНИЕ. Универсальность конструкции означает, что сбор- ка не сводится к единственно правильному варианту. Участник может проявить инженерную смекалку и вы- брать наиболее эффективное расположение компонен- тов для выполнения конкретной задачи. Монтаж нижней платформы Шаг № 1. Установка уголков для крепления моторов К нижней платформе крепятся пластиковые уголки, которые будут удерживать моторы. Важно установить их симметрично, чтобы ось робота была ровной. Сборка начинается с установки металлических уголков — именно они будут удерживать моторы на нижней платформе Уголки необхо- димо сначала зафиксировать, но не затягивать крепеж полностью. Это делается для того, чтобы впоследствии можно было легко вставить моторы в отверстия уголков, выровнять их и только после этого окон- чательно затянуть винты. Шаг № 2. Установка моторов Приводные моторы устанавливаются в уголки и фиксируются вин- тами. Проверяйте, чтобы они не болтались и не перекручивались. Рис. 13.2. Колеса с моторами и уголки крепления моторов к нижней платформе
Рис. 13 3 Колеса с моторами и уголки крепления моторов к нижней платформе
Рис. 13.6. Установленные и отцентрованные моторы в уголках ПРИМЕЧАНИЕ. При окончательной затяжке обязательно используйте пружинные шайбы (гроверы). Они предотвращают само- произвольное ослабление крепежа во время движения Это особенно актуально на соревнованиях, когда робот сталкивается с вибрациями, резкими стартами и оста- новками. Пружинная шайба создает постоянное прижа тие гайки и не дает ей раскручиваться. СОВЕТ. Сначала установите все уголки но платформу, затем аккуратно вставьте моторы, выровняйте их симме тричнс, и только после этого - фиксируйте оконча- тельно. Шаг № 3. Установка колес Колеса надеваются на валы моторов. После установки проверьте, чтобы они свободно вращались и не задевали корпус платформы. Колеса можно установить с любой стороны на ось мотора — реко- мендуем устанавливать колеса так, чтобы они не выпирали за периметр круглой платформы.
Рис. 13.7. Колеса 42 мм для олимпиадной платформы Рис. 13.8. Правильная установка колес на моторах, не выпирающих ?а пределы корпуса робота Шаг № 4. Установка волокуши На нижнюю часть платформы добавляется опорная волокуша — это третья точка опоры робота, обеспечивающая его устойчивость при дви- жении. На фотографиях ниже показана сборка нестандартной «самодель- ной» волокуши для робота. Такая волокуша может вам пригодиться в тех случаях, когда базовой волокуши не хватает или она вовсе мешает выполнять поставленное олимпиадное задание. Участник сам выби- рает, как будет выглядеть опорное «колесо». Но изначально в базовой комплектации у вас всегда будет волокуша с шариком.
Рис, 13.9, Вариант самодельной волокуши с нужной нестандартной высотой Рис. 13.10. Пример базовой волокуши с металлическим шариком - лучший вариант ПРИМЕЧАНИЕ Еще раз уточним, что в момент сборки робота для фо- тоотчета - у нос просто не было в наличии круглой волокуши. По этой причине нс фото (рис. 13.9) у нас стоят самодельные волокуши. Вам же мы рекомендуем строго-настрого использовать нормальные волокуши с шариком, так как они обеспечивают наилучшее сколь- жение и не царапают полигон.
Установка боковой стенки Шаг № 5. Монтаж боковой стенки в основание Боковая стенка фиксируется в пазы нижней платформы. Она играет роль несущей части, на которой будут закреплены компоненты питания и управления. Боковая стенка является несущей стенкой для всех этажей — вы можете крепить на нее как элементы электроники робота, так и серво- моторы, захваты, датчики расстояния и все те элементы конструкции, которые помогут вам в реализации олимпиадного задания. Рис. 13.11. Установка боковой стенки в нижнюю платформу Рис. 13.12. Установка боковой стенки в нижнюю платформу
Рис. 13.13. Фиксация боковой стенки через шип-паз и затягивание бинтом для скрепления, вид спереди Рис. 13.14. Фиксация боковой стенки через шип-паз и затягивание винтом для скрепления вид сзади Установка управляющей электроники Подготовка к установке электроники. На боковой стенке пред- усмотрены места под установку батарейного блока и платы стабилиза- тора питания — они будут размешены здесь позже Шаг № 6. Установка платы Arduino UNO На нижнюю платформу устанавливается микроконтроллер Arduino UNO. Он закрепляется винтами через технологические отверстия. Микроконтроллер Arduino UNO — это сердце вашего робота, и его правильный монтаж играет ключевую роль в надежности всей кон- струкции. На первый взгляд может показаться, что установка платы — простая задача. Но и здесь есть свои подводные камни, которые спо- собны повлиять на весь результат олимпиады
Рис. 13.15. Установка платы контроллера Arduino UNO на стойки из пластиковых шайб ПРИМЕЧАНИЕ. Особое внимание - технологическим отверстиям! При установке Arduino важно использовать предусмотренные монтажные отверстия. Особую осторожность необходимо проявить с отверстиями, расположенными вблизи USB-разъема и входа 12 В пита- ния. Именно возле разъема 12 В: ♦ проходят токоведущие дорожки; ♦ находятся распаянные радиодетали (резисторы, конденсаторы и т. д.); ♦ поверхность платы покрыта защитным лаком, но он легко повреж- дается при неосторожной установке. Почему это опасно? Если вы слишком сильно затянете винт с метал- лической шляпкой, которая может содрать лак и коснуться токопрово- дящей дорожки или ножки детали. Это приведет к неявному короткому замыканию, которое может проявиться не сразу. В худшем случае про- изойдет сбой в работе платы, повреждение бутлоадера или полный выход Arduino из строя. Как избежать ошибок: ♦ не перетягивайте винты. Фиксация должна быть надежной, но не чрезмерной; ♦ используйте винты с потайной головкой — они меньше соприкаса- ются с поверхностью и не повреждают покрытие; ♦ не используйте металлические шайбы при креплении Arduino на- прямую к платформе.
СОВЕТ. Идеальным решением будет испопьзование нейлоновых стоек и винтов - они не проводят ток и полностью безопасны, хотя требуют бережного обращения. Кстати! Подобные ошибки часто выявляют только опытные тех- нические эксперты. Но теперь и вы, благодаря этой книге, знаете, на что обратить внимание, и можете уверенно сказать — вы не новичок, а инженер, заботящийся о надежности каждой детали! При монтаже электроники робота нередко возникает проблема: провода болтаются, торчат наружу и задевают подвижные части кон- струкции. Это не только портит внешний вид робота, но и может при- вести к серьезным техническим проблемам, особенно во время заезда. Чем это опасно: ♦ длинные и незакрепленные провода могут намотаться на колеса или оси моторов, нарушив движение; ♦ при натяжении проводов велика вероятность, что один из них ото- рвется от контакта, особенно если он соединен пайкой. ♦ на олимпиаде участнику нельзя использовать паяльник, и если, на- пример, оторвется провод у мотора, исправить это сможет только технический эксперт, что приведет к потере драгоценного време- ни или даже к снятию с заезда. Что делать: ♦ избыточную длину проводов укладывайте в свободные участки конструкции. Например, провода от моторов удобно проложить Рис. 13.16. Установленная плата контроллера Arduino UNO
между платой Arduino UNO и драйвером двигателей — это безопас- но и экономит место; ♦ при укладке проводов сразу продумайте, откуда какой провод вы- ходит — это избавит вас от путаницы при подключении; ♦ используйте пластиковые хомуты, термоклей или двусторонний скотч, чтобы зафиксировать проводку в нужных местах; ♦ помечайте провода (например, цветными термоусадками или на- клейками), чтобы не перепутать их при подключении. Помните: аккуратная проводка — это не только порядок, но и гарантия стабильной работы робота на олимпиаде. Один неудачный контакт может стоить вам целого задания! Лайфхак: защита от короткого замыкания при установке шилдов. При установке драйвера двигателей поверх платы Arduino UNO часто используется так называемый шилд-формат, когда плата надевается прямо на пины Arduino. Однако в некоторых версиях плат наблюдается следующая проблема: контакты нижней части шилда (драйвера) могут касаться металлического корпуса USB-разъема микроконтроллера. Что может пойти не так: ♦ контакт пинов с металлическим корпусом разъема приводит к ко- роткому замыканию; ♦ плата начинает работать нестабильно: появляются случайные сиг- налы, перезагрузки или Arduino вообще перестает запускаться. Как этого избежать? Чтобы предотвратить подобную ситуацию, достаточно воспользоваться маленькой хитростью. Возьмите кусочек изоленты (или малярного скотча) и аккуратно наклейте его в 1-2 слоя Рис. 13.17. Используйте платы для прокладки излишне длинных проводов
Рис. 13.18. Проверка уложенных проводов перед установкой платы драйвера двигателей на металлический корпус USB-разъема. Это создаст изоляционную про- слойку, которая защитит как Arduino, так и шилд от случайных контактов Такой прием особенно полезен, если вы не знаете заранее, какую версию Arduino UNO и драйвера вам выдадут организаторы олимпиады. Эта простая мера поможет избежать непредвиденных сбоев прямо во время заезда. Шаг № 7. Установка платы драйвера двигателей Сверху, прямо над Arduino, устанавливается драйвер двигателей (например, L298N). Обе платы образуют компактный блок управления, соединенный между собой короткими проводами.
Подключение моторов Шаг № 8. Подключение проводов к драйверу Провода от моторов подключаются к выходам драйвера, Важно не перепутать левый и правый мотор, иначе робот будет поворачивать в неправильную сторону. Частая ошибка: перепутанные прохода моторов. При подключении моторов к драйверу двигателей участники часто допускают критическую ошибку — не просто путают «+» и «-» у одного мотора (что еше можно легко исправить), а перепутывают сами моторы между собой. Что происходит. Вместо того чтобы один мотор подключить цели- ком в разъем «Motor А», а второй — в разъем «Motor В», участник слу- чайно вставляет один провод от правого мотора в «Motor А>>, а второй провод от левого мотора — туда же. Аналогично, в «Motor В» подключа- ются два оставшихся провода, каждый — от другого мотора. Последствия: ♦ при запуске программы моторы начинают работать не так, как за- думано; ♦ один может вращаться вперед, второй — назад; ♦ иногда они вообще не реагируют на команды, и это вызывает пута- ницу, особенно у начинающих. Как избежать: ♦ на этапе подключения всегда проверяйте, что оба провода от пра- вого мотора идут в один и тот же разьем драйвера двигателей; ♦ проверяйте то же самое — для левого мотора; ♦ пометьте провода цветом или наклейками, чтобы не запутаться; Посте подключения протестируйте направление вращения моторов простой программой: дайте команду ехать вперед и проверьте, оба ли мотора вращаются в правильную сторону. Профессиональные команды всегда тратят 1-2 минуты на проверку подключения моторов — и экономят на этом часы в будущем. Не спе- шите — будьте внимательны. Основные элементы корпуса малой платформы представлены на рис. 13.20 и рис. 13.21.
Рис. 13.20. Основные элементы корпуса малой платформы. Фото № 1 Рис. 13.21. Основные элементы корпуса малой платформы Фото №2 Особенности современных драйверов моторов: удобно и компактно Современные платы драйверов моторов, входящие в олимпиадные наборы, разработаны с учетом удобства и скорости сборки. Это осо- бенно важно в условиях ограниченного времени, когда каждый винт и каждый разъем имеет значение. Быстрые разъемы. Многие драйверы оснащены удобными винто- выми или пружинными клеммами, с помощью которых можно быстро и надежно подключать провода моторов и питания. Такие разъемы: ♦ не требуют пайки; ♦ обеспечивают надежный контакт; ♦ позволяют легко менять местами провода при необходимости. Это экономит время участника и снижает риск ошибок при под- ключении.
Комбинированная плата «2 в 1». Одной из особенностей вашего олимпиадного набора является использование комбинированной платы драйвера двигателей, которая совмещает в себе: ♦ сам драйвер моторов (обычно на чипе типа L298N или его аналогах); ♦ выводы всех цифровых и аналоговых пинов Arduino, доступные в виде гребенки. Это дает два больших преимущества: ♦ не нужна дополнительная плата расширения (шилд) — все пины доступны прямо с драйвера, ♦ не нужна макетная плата (breadboard) — сенсоры и сервомоторы можно подключать напрямую, что упрощает монтаж и снижает ко- личество проводов. Укладка проводки Провода аккуратно укладываются вдоль корпуса и закрепляются хомутами или термоклеем, чтобы они не наматывались на колеса и не мешали работе моторов. Частые ошибки и хитрости Проверяйте полярность подключения. Лучше заранее поме- тить провода моторчиков маркером (например, «левый», «правый»). Используйте гибкие провода длиной не более необходимой. Установка питания Шаг № 9. Монтаж батарейного блока Батарейный отсек (например, под 6 АА-элементов или литиевую батарею) устанавливается на боковую стенку, ближе к нижней части, чтобы сохранялся низкий центр тяжести. Установка батарейного блока на 2 батарейки «18с>50» проиллюстрировано на рис. 13.22. Шаг № 10. Установка платы стабилизатора питания с мульти- метром Плата DC-DC стабилизатора с дисплеем устанавливается рядом. Она позволяет точно настраивать выходное напряжение и контролиро- вать параметры питания в реальном времени. Процесс проиллюстриро- ван на рис. 13.23 ... рис. 13.25.
Рис. 13.22. Установка батарейного блока на 2 батарейки «18ь 50'> Рис. 13.23. Установка платы стабилизатора питания на импровизированные стойки из пластиковых колец Рис. 13 24. Укладка проводов и их подключение на вход платы стабилизатора питания
Рис. 13.25. Подключение батарейного блока е разъем IN+ и IN- платы стабилизатора питания Стабилизатор питания играет важную роль в системе робота — он обеспечивает нужное напряжение для сервомоторов и других компо- нентов, защищая при этом микроконтроллер от перегрузок. В вашем олимпиадном наборе используется удобная плата стабилизатора с встроенным цифровым вольтметром. Преимущества встроенного вольтметра: ♦ вы всегда видите текущее напряжение, подаваемое от батарей; ♦ вольтметр позволяет контролировать заряд элементов питания в реальном времени — особенно важно при использовании сменных батареек; ♦ если напряжение падает ниже допустимого уровня, вы можете за- ранее заменить элементы и избежать сбоев во время выполнения задания. Многие команды теряют баллы из-за того, что не замечают про- садки напряжения. Но с таким стабилизатором t-ы всегда на шаг впе- реди: визуальный контроль - это просто и эффективно. Установка средней платформы Шаг № 11. Монтаж платформы на стойки Средняя (вторая) платформа устанавливается на стойки, закре- пленные к нижнему уровню Это промежуточный уровень, служащий для размещения дополнительного оборудования. Процесс проиллю- стрирован на рис. 13.26 и рис. 13.27.
Рис. 13 26 Установка стоек для крепления средней платформы Рис. 13.27. Установка средней платформы Шаг № 12. Установка сервомотора На средней платформе крепится сервомотор — например, для управления захватом или другим подвижным элементом. Убедитесь, что ось вращения не перекрывается другими компонентами. Процесс проиллюстрирован на рис. 13.28 и рис. 13.29. Важно: установка качалки и захвата на сервомотор1 При установке сервомотора важно не торопиться и строго соблюдать порядок дей- ствий Особенно если вы используете стандартные синие сервомоторы (SG90), у которых редуктор выполнен из пластика — он легко пс чрежда- ется при неправильной установке. Как правильно установить качалку (рычаг) и захват? Не надевайте качалку сразу. Сначала необходимо программно задать положение сер- вомотора — например, повернуть его в крайнее левое, правое или цен- тральное положение.
Рис. 13 29. Укладка проводов от сервомотора Только после этого надевайте качалку так, чтобы при повороте она: ♦ не задевала корпус робота; ♦ не заклинивала; ♦ не упиралась в другие детали. ВНИМАНИЕ. Если установить качалку «наугад», а затем отправить сигнал на движение - она может резко удариться о кор- пус и повредить редуктор Пластиковь1е шестерни при этом легко ломаются.
Популярная ошибка: крутить сервомотор вручную! Никогда не пытайтесь проворачивать ось сервомотора руками, если он подключен к питанию! В этот момент сервомотор удерживает заданный угол с уси- лием — он «сопротивляется» повороту. Если попытаться повернуть его вручную, вы можете сорвать редук- тор или перегрузить электронику. ПРИМЕЧАНИЕ. Даже если кажется, что «ничего не случилось», внутри могли повредиться зубья, и со временем мотор выйдет из строя Работа с сервомоторами требует аккуратности и понимания логики их работы. Уважайте механику — и ваш робот прослужит вам весь сорев- новательный сезон без поломок. Установка верхнего этажа Шаг № 13. Монтаж верхней платформы Верхняя (третья) платформа (рис. 13.30) фиксируется на верхушке боковой стенки через соединение «шип-паз» и дополнительно стягива- ется винтом для прочности. Рис. 13 30. Установка верхней платформы
Шаг № 14. Установка выключателя питания На верхней платформе размещается главный выключатель питания робота (рис. 13.31). Он должен быть легкодоступен участнику и распо- ложен так, чтобы исключить случайное выключение во время заезда. Рис. 13.31. Установка выключателя в верхней платформе Подключение основного питания Шаг № 15. Подача питания от стабилизатора к драйверу дви- гателей Выход стабилизатора питания подключается к входу драйвера дви- гателей (разъемы + и -). Таким образом, питание подается сразу на моторы и микроконтроллер (рис. 13.32). Варианты подключения питания: свобода с осторожностью! В рам- ках олимпиад по робототехнике участнику’ разрешается самостоятельно выбрать схему коммутации источника питания. Это допускается прави- лами, и вы можете сами решить, как именно будет подаваться напряже- ние на контроллер, моторы и модули. Свобода есть — но она требует осторожности! Да, у вас есть выбор. Но неправильная схема подключения может привести к серьезным последствиям: ♦ при неправильном подключении полярности или соединении це- пей напрямую может возникнуть короткое замыкание;
Рис. 13 32. Подключение выключателя к выходу платы стабилизатора питания ♦ может расплавиться батарейный блок или загореться провода; ♦ возможно выгорание стабилизаторов питания на плате Arduino UNO — в результате контроллер перестает работать полностью; ♦ электроника может выйти из строя мгновенно и без возможности восстановления — особенно если используется питание выше до- пустимого уровня. На олимпиаде чаше всего организаторы заранее собирают базовую схему питания робота правильно и безопасно. Ваша задача — внима- тельно изучить, как именно она реализована, и не вносить изменения без полной уверенности в своих действиях (рис. 13.33 и рис. 13.34). ПРИМЕЧАНИЕ. Для выполнения олимпиадного задания вам нужно будет отобразить схему подключения е виде 31 (структурной схемы) или 33 (принципиальной схемы).
Рис 15.33. Выключатель разрывает плюсовой контакт между OUT+ (выходом стабилизатора питания и + (разъемом платы драйвера двигателей) Рис. 13.34. Подключение плюса и минуса в разъем питания платы драйвера двигателей СОВЕТ. Будьте внимательны: не трогайте схему питания «вслепую». Лучше потратить 5 минут на разбор и ос- мысление, чем потерять весь робот. При сборке и подключении электроники крайне важно соблюдать порядок и понятную систему маркировки проводов. Один из лучших способов — использовать провода определенных цветов в зависимости от назначения.
Рекомендуемая цветовая схема: ♦ красный — для подключения плюсового питания (+); ♦ черный — для минусового провода (-) или общего GND: ♦ синий, зеленый, желтый и другие цвета — для сигнальных ли- ний: подключения к пинам Arduino, сервомоторам, датчикам и т. д. Подключение дополнительного оборудования Шаг № 16. Установка датчиков .линии Устанавливаются на передней части платформы (рис. 13.35 и рис. 13.36). С их помощью робот может следовать по линии, распозна- вая черные и белые участки на поле. Важно: требуется аккуратный монтаж датчиков и электронных модулей! При установке датчиков линии и других электронных компо- нентов всегда обращайте внимание на расположение технологических отверстий и элементов платы. Ошибки на этом этапе могут привести к повреждению модуля — точно гак же, как это бывает при неправильном монтаже платы Arduino UNO. Где кроется опасность? Вблизи монтажных отверстий на модулях часто расположены мелкие радиокомпоненты (резисторы, конденса- торы) и токоведущие дорожки. При использовании металлических винтов и шайб есть риск. ♦ закоротить цепь; ♦ повредить лак и создать скрытое короткое замыкание; ♦ сломать пайку или оторвать элемент; ♦ ударит ь и отломать отверткой или плоскогубцами радиодетати на 11лате. Рис. 13.35. Установка датчиков линии с использованием вспомогательных элементов конструкции - балки разной длины
Рис. 13.36. Установка датчиков и их безопасный крепеж металлическими винтами Как избежать проблем: ♦ используйте винты с потайной головкой — они меньше касаются поверхности и не цепляют дорожки; ♦ устанавливайте винт шляпкой «отдатчика», так чтобы гайка закру- чивалась не со стороны радиокомпонентов; ♦ не применяйте металлические шайбы при креплении датчиков; ♦ лучший вариант — пластиковые или нейлоновые крепления; Если пластиковых деталей нет, можно использовать тонкие дере- вянные шайбы или прокладки из картона/изолента, чтобы защитить поверхность платы от металлических элементов. ПРИМЕЧАНИЕ. Датчики - зтс глаза и уши вашего робота. Бережное и продуманное крепление — залог того, что он будет «ви- деть» и «чувствовать» четко и стабильно. Лайфхак. Надежное подключение проводов к датчику линии! Место установки датчиков линии участник выбирает самостоятельно — это зависит от конкретного задания и тактики. Но не менее важно пра- вильно и надежно подключить провода к датчику, чтобы избежать тех- нических сбоев во время выполнения задания. Проблема. По умолчанию пины на большинстве датчиков линии (VCC, GND, сигналы) распаяны горизонтально — то есть параллельно самой плате. Это может вызвать неудобства — провода «папа-мама» подключаются вбок, и со временем они могут расшатываться, плохо контактировать или вообще выпасть. Особенно части это происходит при вибрациях или ударах робота об препятствия.
Рис. 13.17. Правильная установка датчиков с выносом в сторону от основной платформы Простое и эффективное решение. Вы можете осторожно загнуть пины вертикально вверх, под утлом 90°: ♦ в этом положении провода свободно свисают вниз, и сила тяжести удерживает их в разъеме; ♦ контакт становится более надежным, и вероятность случайного от- ключения существенно снижается. ♦ для большей надежности провода можно дополнительно зафикси- ровать пластиковыми стяжками, хомутиками. ПРИМЕЧАНИЕ. Иногда такое мелочи определяют успех всей попытки. Один нестабильный контакт - и робот внезапно «ос- лепнет» на трассе. Не дайте этому случиться! Удобное расположение пинов датчика линии проиллюстрировано на рис. 13.38. . рис. 13.40. Шаг № 17. Установка дальномеров Размещаются в передней или боковой части корпуса, обеспечи- вая роботу способность «видеть» препятствия и реагировать на них (рис. 13.41). Сборка малой олимпиадной платформы закончена!
Рис. 13.38. Удобное расположение пиноз датчика линии (загнуты вверх) Рис. 13.39. Удобное расположение пинов датчика линии (загнуты вверх), вид спереди Рис. 13.40. Удобное расположение пинов датчика линии, общий вид Рис. 13.41. Основные элементы корпуса малой платформы
ГЛАВА 14 JI ПОШАГОВАЯ СБОРКА * И НАСТРОЙКА БОЛЬШОЙ ОЛИМПИАДНОЙ ПЛАТФОРМЫ Подробные шаги по сборке большой круглой платформы робота, начиная с пустой основы до сборки и подключения всех электронных и механических узлов колесной платформы. Узнайте все особенности и хитрости сборки, изучите слабые места монтажа электронных модулей Arduino. Научитесь правильно использовать крепежные изделия на практике. Основные этапы сборки Процесс сборки большой олимпиадной платформы делится на три основные части: монтаж нижней платформы, монтаж верхней плат- формы и установка дополнительных модулей. Ниже приведен пошаго- вый план с пояснениями к каждому этапу. Большая олимпиадная платформа — это готовая основа для сборки мобильного робота (рис. 14.1), предназначенного для участия в сорев- нованиях и выполнении заданий. Как правило, платформа представ- ляет собой двухколесную тележку, которую участник должен собрать и настроить в соответствии с требованиями конкретной олимпиады. На основе анализа опыта предыдущих соревнований была разрабо- тана универсальная конструкция большой платформы, подходящая для большинства типовых заданий. Она отличается гибкостью и возможно- стью модификации под различные сценарии.
Рис. 14.1. Основные элементы корпуса большой платформы Особенности плаз формы Конструкция состоит из двух или более уровней (этажей). Это позво- ляет удобно размещать как механические, так и электронные модули (например, платы управления, аккумуляторы, сенсоры). Отверстия и крепежные точки на платформах позволяют устанав- ливать модули в разных конфигурациях — в зависимости от поставлен- ной задачи. В комплект также входят дополнительные элементы крепления: балки, стойки и уголки. С их помощью можно установить на робота датчики линии, сервомоторы, ультразвуковые дальномеры и другие элементы конструкции. Благодаря модульной системе, платформа легко адаптируется под разные типы задач — от слежения за линией до автономной навигации по полю. ПРИМЕЧАНИЕ. Важно, универсальность конструкции означает, что сборка не сводится к единственно правильному вариан- ту. Участник может проявить инженерную смекалку и выбрать наиболее эффективное расположение компо- нентов для выполнения конкретной задачи.
Монтаж нижней платформы Шаг № 1. Установка нижней платформы На этом этапе мы начнем с основной споры конструкции — круглого основания, которое послужит базой для установки всех компонентов, Нижняя платформа имеет большое количество вспомогательных технических отверстий, используя которые участник олимпиады может собирать различную конфигурацию одного и того же робота. Шаг № 2. Установка уголков креплений моторов Сначала монтируются специальные металлические или пластико- вые уголки, которые будут надежно фиксировать моторы на платформе (рис. 14.3). Важно правильно выровнять их, чтобы обеспечить симме- трию. Рис. 14.2. Установка уголков для крепления мотора ^0.
Существует два основных способа крепления уголков : ♦ с нижней стороны платформы — в этом случае моторы находятся ниже основания, а колеса максимально опущены. Это повышает устойчивость робота и смешает центр тяжести вниз; ♦ с верхней стороны платфоомы — моторы поднимаются выше, а колеса оказываются ближе к корпусу. Такой вариант позволяет ис- пользовать колеса меньшего диаметра и сохранять минимальный клиренс (дорожный просвет). Регулировка высоты колес за счет положения моторных уголков — это удобный способ адаптировать платформу под различные условия: ♦ при использовании колес разного диаметра; ♦ если по условиям задания робот должен преодолевать наклонные поверхности или подъемы; ♦ при необходимости установить сенсоры или другие элементы ни- же или выше относительно земли. СОВЕТ. Перед финальной сборкой обязательно проверьте, не задевают ли колеса корпус или другие элементы. В не- которых случаях будет полезно поэкспериментировать с разными вариантами установки моторов. ПРИМЕЧАНИЕ. Важно- использование шайб при сборке1 Чтобы робот был надежным и устойчивым при движении, важно пра вильно подбирать не только основные компоненты, но и крепежные элементы - винты, гайки и шайбы. Особенно важно применять плоские и пружинные шайбы.
Плоские шайбы. Плоская шайба устанавливается между гайкой (или шляпкой винта) и поверхностью платформы. £е основная задача — распределить давление по большей площади, чтобы: ♦ избежать повреждения деталей; ♦ добиться более прочного соединения; ♦ предотвратить проворачивание или деформацию пластика, металла. Пружинные шайбы (гроверы). Пружинная шайба (также называ- ется «гровер») предотвращает самопроизвольное откручивание гайки из-за вибраций и тряски, которые возникают при движении робота. Она слегка подпружинивает и создает постоянное давление, которое «удерживает» резьбовое соединение. СОВЕТ Используйте комбинацию плоской и пружинной шайбы- Сначала ставится плоская, затем пружинная, и только потом - гайка. Проверяйте затяжку соединений после испытаний или тренировок - даже с шайбами иногда что-то может ослабнуть Не пренебрегайте этими ме- лочами: правильно подобранные шайбы - это залог на- дежной, долговечной конструкции, особенно в условиях интенсивной роботы нс олимпиаде. Основные этапы проиллюстрированы на рис. 14.5...14.14.
Рис. 14.6. Правильная последовательность крепежей (справе налево, винт - плоская шайба - материал корпуса - плоская шайба - пружинная шайба - гайка)
Рис. 14.9 Общий вид на колеса Рис. 14.10. Общий вид на колеса
Рис. 14.12. Коллекторные моторы со встроенным эн кодером Рис. 14.13. Установка втулки и ее фиксация нс ось мотора
Шаг № 3. Установка двух приводных двигателей в крепежные утолки Двигатели закрепляются винтами и гайками, чтобы исключить люфт при движении робота (рис. 14.15 .. рис. 14.17). Рис. 14 15. Установка мотора в уголок Рис. 14,16. Установка мотора в уголок с использованием пружинной шайбы
Шаг № 4. Установка втулок-переходников на ось моторов Для соединения моторов с колесами применяются втулки (адап- теры), которые устанавливаются на вал каждого мотора. Они обеспечи- вают надежную передачу зрашения (рис, 14.18 и рис. 14.19). Рис. 14.19. Установленные моторы и втулки вид сверху Шаг № 5. Установка колес Колеса надеваются на втулки и фиксируются винтами. На этом этапе важно проконтролировать, чтобы оба колеса были установлены на одной высоте и вращались свободно (рис. 14.20).
Рис. 14.20. Установленные колеса общий вид Шаг № 6. Установка опорной волокуши (третьей точки опоры) Для устойчивости платформы устанавливается дополнительная точка опоры — пластиковая «волокуша» или шаровая опора, предотвра- щающая заваливание вперед или назад (рис. 14.21... рис. 14.23). Рис 14.21. Опорная волокуша с дополнительной прослойкой для выравнивания высоты
Рис. 14.23. Установка волокуши на нижнюю платформу, вид сверху Шаг № 7. Установка стоек для крепления верхней платформы С помощью стоек (латунных или пластиковых) мы поднимаем второй уровень конструкции. Они обеспечивают нужный зазор между нижним и верхним этажами (рис. 14.24 и рис. 14.25). Рис 14.24. Установка опорных стоек для крепления верхней платформы, вид сверху
Шаг № 8. Установка батарейного блока Закрепляем батарейный отсек или аккумуляторный модуль. Обычно он располагается на нижнем уровне, чтобы сместить центр тяжести вниз и повысить устойчивость. СОВЕТ. Важно: регулярно проверяйте моторы на наличие по- сторонних металлических предметов Рис. 14 26. Установка батарейного блока, вид -.верху На моторах с энкодерами установлены постоянные магниты, кото- рые обеспечивают работу системы обратной связи (энкодера). Эти маг- ниты очень сильно притягивают мелкие металлические детали: гайки, шайбы, винты. Все, что может случайно упасть с верхней платформы в процессе работы или при сборке. Почему это опасно: ♦ попавшие внутрь мотора металлические предметы могут закли- нить вращение; ♦ в зоне энкодера находятся токоведущие элементы — и если туда попадет гайка или винт, это может вызвать короткое замыкание; ♦ последствия: выход из строя мотора, энкодера, а иногда — всей электроники робота. Что 1гужно делать: ♦ проверяйте моторы перед каждым запуском, особенно после те- стов, тренировок или транспортировки; ♦ используйте магнитную отвертку или пинцет, чтобы извлечь при- липшие предметы, если они есть; ♦ при возможности закрывайте энкодер защитной крышкой или корпусом, если он предусмотрен в вашей модели.
ВНИМАНИЕ. Помните: даже одна забытая шайба может стоить вам целого задания на олимпиаде. Следите за чистотой рабочей зоны и платформы! Рис, 14.27. Вчд на энкодер без посторонних предметов Рис. 14.28. Вид нс энкодер с примагнитившимится металлическими посторонними предметами
Монтаж верхней платформы Шаг № 9. Установка верхней платформы Верхняя платформа — это второй ярус конструкции. Она крепится к стойкам с помощью винтов и служит площадкой для размещения управляющей электроники (рис. 14.29 и рис. 14.30). Шаг № 10. Установка платы Arduino UNO Микроконтроллер Arduino UNO — «мозг» робота. Он закрепляется на верхнем ярусе с помощью винтов и пластиковых стоек. Не забудьте оставить доступ к USB-разъему (рис. 14.31 . рис. 14.33). Рис. 14.30. Использование пружинной шайбы в сборке
ВНИМАНИЕ. Будьте осторожны: выполняйте правильный монтаж платы Arduino и других модулей. При установке микро- контроллера Arduino UNO (или любого другого модуля) важно внимательно отнестись к способу крепления платы к платформе. Большинство плат имеют специ- альные технологические отверстия - они предназначе- ны для монтажа, ни при неправильном подходе могут стать источником опасных коротких замыканий. В чем проблема. На плате Arduino, особенно рядом с разъемом питания 12 В, проходят токоведущие дорожки и расположены элементы пайки. Существует реальный риск короткого замыкания между винтом и проводящей частью платы, если при монтаже: ♦ использовать металлические шайбы; ♦ применить винты с грубой или острой шляпкой; ♦ сильно перетянуть винт (до трещины платы). Такие замыкания особенно опасны, потому что: ♦ не проявляются сразу — робот может работать нормально, пока в один момент не «вылетит» контроллер; ♦ визуально все может выглядеть исправно, и проблему трудно най- ти без тщательного осмотра; ♦ винт может стереть защитное лаковое покрытие и коснуться до- рожки или ножки компонента. Как правильно крепить плату. Используйте пластиковые или нейлоновые стойки и винты, если они есть в комплекте. Они не прово- дят ток и не повреждают плату. Минус: такие крепления часто одноразовые и могут ломаться — будьте аккуратны при затяжке. Если используете металлические винты: ♦ выбирайте винты с потайной головкой - их коническая форма меньше контактирует с платой; ♦ не затягивайте винты с усилием — фиксация должна быть плотной, но без риска повредить плату; ♦ не используйте металлические шайбы, особенно под винтом, кото- рый соприкасается с платой.
СОВЕТ. При необходимости можно наклеить под плату тонкую пластиковую прокладку (например, изоляционную пленку или скотч), чтобы создать дополнительный защитный слой. Рис. 14.31. Самое уязвимое отверстие в плате контроллера Arduino UNO из-за близкого расположения токоведущих дорожек и радиокомпонентов Рис. 14 32. Безопасный способ крепления платы контроллера Arduino UNO при использовании металлического крепежа. Использование винта с потайной шляпкой и диэлектриечских шайб, вид сверху
Рис. 14.33. Безопасный способ крепления плоты контроллера Arduino UNO при использовании металлического крепежа. Использование винта с потайной шляпкой и диэлектриечских шайб, пружинной шайбы, вид снизу Шаг №11. Установка драйвера двигателей Модуль управления моторами (например, L298N или аналогичный) устанавливается поверх платы Arduino. Он от вечает за передачу управ- ляющих сигналов и питание моторов. А также одновременно является платой расширения портов ввода/вывода (рис. 14.34 и рис. 14.35). Рис. 14.34. Установка платы драйвера двигателей на плату контроллера Arduino UNO Шаг № 12. Установка кнопки запуска — тактовой кнопки Удобная кнопка, как правило, монтируется на верхней части плат- формы. С ее помощью можно запускать и останавливать программы без подключения к компьютеру. Производить предстартовую кали- бровку робота и последующий старт (рис. 14.36 и рис. 14.37).
Рис. 14.35. Установка платы драйвера двигателей на плату контроллера Arduino UNO. вид сверху
Шаг № 13. Установка стабилизатора питания Если питание от батарей нестабильно или превышает допусти- мое напряжение, используется понижающий стабилизатор (DC-DC- конвертер), чтобы защитить электронику. Подключение питания олимпиадного робота: как сделать пра- вильно. Питание — один из ключевых компонентов в любой робото- технической системе. От стабильности напряжения зависит работа всех модулей, особенно микроконтроллера. В олимпиадных роботах пита- ние можно организовать разными способами, и выбор схемы зависит от поставленной задачи, используемых компонентов и особенностей маршрута. Способы подключения питания: ♦ напрямую в плату7 Arduino UNO (через разъем питания 12 В или VIN-пин) — самый простой, но не всегда надежный способ; ♦ через модуль стабилизатора напряжения, с возможностью гибко распределять питание между компонентами. ♦ параллельное подключение к драйверу двигателей и стабилизато- ру — оптимальный вариант, который повышает устойчивость всей системы. Рекомендуемая схема питания. Оптимальным решением счита- ется двойное подключение батарейного блока: ♦ подключаем батарейный блок к входу стабилизатора питания — в разъемы IN^ и IN-; ♦ тот же источник питания подключаем параллельно к входу драйве- ра двигателей — к клеммам + и — питания моторов. ♦ с выхода стабилизатора (OUT+ и OUT-) подаем стабилизированное напряжение 5,6...6 В на питание сервомоторов (или других моду- лей, чувствительных к просадкам). Почему это важно. Arduino UNO питается от более высокого напря- жения (например, 9 В), подаваемого на вход VIN. Это позволяет ей не «перезагружаться» при резких просадках напряжения в момент запу- ска моторов или сервомоторов. Микроконтроллер получает питание не через ту же цепь, что моторы, что снижает влияние электромагнитных помех и скачков тока. Питание сервомоторов поступает не напрямую с платы Arduino, а с выхода стабилизатора — это защищает контроллер от перегрузки. S ПРИМЕЧАНИЕ При током подходе можно легко измерять и регулиро- вать напряжение, подаваемое на разные части робота, j
СОВЕТ. Не подключайте мощные моторы и сервомоторы на- прямую к Arduino - плата не предназначена для пита- ния таких нагрузок. Используйте стабилизатор с за- пасом по току (например, минимум 2 А), особенно если планируется подключение нескольких сервомоторов. Следите за охлаждением стабилизатора - при больших токах он может сильно нагреваться. Используйте ра- диаторы или активное охлаждение при необходимости. Основные этапы работы проиллюстрированы на рис. 14.38 ... рис. 14.69
Рис. 14.40. Подключение проводов от батарейного блока через выключатель к плате стабилизатора питания на разъем IN+ и IN-
Рис 14.41. Подключение проводов мотора. Фото № 1 Рис. 14.42. Подключение проводов мотора. Фото № 2
Рис. 14.43. Используем технологические отверстия для прокладки проводов Рис. 14.44. Слева на право разъемы платы драйвера двигателей для подключения левого и правого моторов, а также разъем питания +12 В

Рис. 14.47. Использование стяжек для фиксации проводов в «пучок» Оля предотвращения попадания в механические узлы робота Рис. 14.48. Вид на зафиксированные провода моторов между платформами
Рис 14.49. Вид нс зафиксированные провода мотоиов между платформами. Проверка на отсутствие посторонних металлических предметов в энкодерах моторов Рис. 14.50. Подключение питания +12 В от разъемов IN+ и IN- плато/ стабилизатора питания в разъемы + и. платы драйвере двигателей
Рис. 14.51. Установка элементов питания, аккумуляторных батарей типоразмеоа «18650» в батарейный отсек робота Рис. 14.52. Установка элементов питания, аккумуляторных батарей типоаазмера «18650» в батарейный отсек робота
Рис. 14 53. Установка датчиков линии на базе оптической пары TCRT5000 на нижнюю платформу робота Рис. 14.54. Установка датчиков линии на базе оптической пары TCRT5000 на нижнюю платформу робота
Рис. 14.55. Особенности крепления датчиков линии с использованием металлического крепежи, вид сверху Рис. 14.56. Особенности крепления датчиков линии с использованием металлического крепежа, вид снизу
Рис. 14.57. Общий вид на собранную базовую платформу болошого робота Рис. 14.58. Особенности расположения датчиков линии для качественной езды по линии
Рис. 14.59. Особенности расположения датчиков линии для качественной езды по линии, где датчики располагаются прямо нс краю черной линии Рис. 14.60. Вариант крепления и установки большого серводвигателя на платформу робота
Рис. 14.61. Вариант крепления и установки большого серводвигателя на платформу робота Рис. 14.62. Вариант крепления и установки пассивного захвата с использованием толстой медной проволоки
Рис, 14.63. Вариант крепления и установки ультразвукового датчика расстояния HS... Рис. 14.64. Вариант крепления и установки ультразвукового датчика расстояния HS... Рис. 14.65 Вариант крепления и установки ультразвукового датчика расстояния HS...
Рис. 14.66. Вариант крепления и установки аналогового датчика расстояния Sharp. Фоте № 1 Рис. 14.67. Вариант крепления и установки аналогового датчика расстояния Sharp Фото № 2
Рис. 14.68. Общий вид олимпиадного робота с установленными датчиками Рис. 14.69. Общий вид олимпиадного робота с установленным сервозохватом Сборка большой олимпиадной платформы закончена!
РАЗДЕЛ СХЕМОТЕХНИКА РОБОТОВ И СЕКРЕТЫ ИХ СОЗДАНИЯ Этот раздел будет полезен не только учащимся, но также педагогам и наставникам, которые готовят школьников к олимпиадам. Она представ- ляет собой ценный ресурс для педагогической работы и поможет эффек- тивно подготовить учеников к соревнованиям. Данный практический раз- дел поможет освоить мир робототехники на Arduino, подготовиться к школьной олимпиаде и достичь выдающихся результатов. Раздел пригла- шает к увлекательному путешествию в мир технологий и робототехники, где только ваша фантазия будет ограничивать возможности создания.
ГЛАВА 15 ТЕСТИРОВАНИЕ ВЫДАННОГО ОБОРУДОВАНИЯ: < НАДЕЖНОСТЬ НА ПЕРВЫХ ЭТАПАХ ОЛИМПИАДЫ Погружаемся е мир тестирования в этой главе нашей книги. Здесь мы рассмотрим различные методы проверки выданного оборудования участникам олимпиады. Этот раздел, несо- мненно, является ключевым, поскольку в самом начале олим- пиадного соревнования участники должны самостоятельно убедиться в исправности плат и модулей Arduino, которые им предоставпены. Мы рассмотрим практические советы и стратегии, которые помогут участникам провести эффек- тивное тестирование, а также избежать возможных проблем в дальнейшем Готовьтесь к усовершенствованию своих навы- ков проверки оборудования и к беспрепятственному старту в технологическом вызове олимпиады! Мелочи, которые могут пригодиться тестировщику Погружаемся в мир тестирования в третьей главе нашей книги. Здесь мы рассмотрим различные методы проверки выданного обору- дования участникам олимпиады. Этот раздел, несомненно, является ключевым, поскольку в самом начале соревнования участники должны самостоятельно убедиться в исправности плати модулей Arduino, кото- рые им предоставлены.
Мы рассмотрим практические советы и стратегии, которые помо- гут участникам провести эффективное тестирование, а также избежать возможных проблем в дальнейшем. Готовьтесь к усовершенствованию своих навыков проверки оборудования и к беспрепятственному старту' в технологическом вызове олимпиады! Вот основные его этапы. Этап № 1. Подготовка к тестированию: Этап № 2. Ознакомление с оборудованием: участникам важно знать основные характеристики и функции предоставляемых плат и модулей. Этап № 3. Создание чек-листа необходимых инструментов: спи- сок инструментов и устройств, которые потребуются для тестирования (например, мультиметр, компьютер с установленной средой разра- ботки). Основные методы тестирования: ♦ визуальная проверка: первый шаг — визуально осмотреть плату па предмет повреждений или дефектов; ♦ проверка питания (убедиться, что плата корректно подключается к источнику питания и правильно его распределяет); ♦ тестирование ввода/вывода (I/O), проверка всех портов ввода-вы- вода на плате с помощью простых программ мигания светодиода или чтения данных с датчиков; ♦ программирование и загрузка кода: проверка возможности загруз- ки и выполнения программ на плате. СОВЕТ. Создайте базовую проверочную программу, программа, которая последовательно активирует различные функ- ции платы, поможет/ быстро выявить любые неполадки Используйте документацию и сообщество: не забывай- те обращаться к официальной документации и фору- мам за помощью или советами. Планируйте время на тестирование важно уделить достаточно времени на тестирование перед началом соревнований, чтобы из- бежать спешки и возможных ошибок. Тестирование оборудования — это не просто шаг к успешному уча- стию в олимпиаде, это также возможность лля участников усовершен- ствовать свои навыки работы с электроникой и программированием. При правильном подходе этот процесс не только повысит шансы на успех в соревнованиях, но и даст ценный опыт, применимый в будущих проектах.
Продолжая тему тестирования оборудования для участия в олим- пиаде, давайте подробнее рассмотрим наиболее распространенные модули Arduino, которые могут быть предоставлены участникам, и типичные неполадки, на которые стоит обратить внимание при их про- верке. Это поможет вам подготовиться к тестированию и убедиться в надежности вашего оборудования. ПРИМЕЧАНИЕ. При тестировании выданного оборудования для сборки олимпиадного робота на базе Arauino следует учесть множество мелочей, которые могут значительно об- легчить процесс и повысить эффективность работы. Научитесь эффективно использовать полученные зна- ния для экономии времени. Что делать, если оборудование неисправно? Даже при самом внимательном производстве могут встречаться неисправные платы, модули или провода. Главное — не паниковать и действовать по алгоритму, чтобы не потерять драгоценное время на олимпиаде. Алгоритм действий участника: ♦ убедитесь, что проблема не в подключении или прошивке; ♦ проверьте, правильно ли вы подключили модуль (полярность пи- тания, сигнальные пины); ♦ используйте заведомо рабочую тестовую программу (например, мигание встроенным светодиодом); ♦ проверьте кабель, порт USB и настройки платы в Arduino IDE; ♦ повторите тест на другом устройстве; ♦ если есть мультиметр — измерьте напряжение на выходах; ♦ подключите модуль к другой плате Arduino (если она доступна). Иногда помогает просто заменить соединительные провода. Не пытайтесь чинить оборудование самостоятельно. Согласно регламенту олимпиад, участникам запрещено исполь- зовать паяльник, клей, скотч и другие материалы для ремонта. Даже если вы уверены, что «просто отвалился провод», не трогайте его — это может быть расценено как нарушение правил. Обратитесь к техниче- скому эксперту.
СОВЕТ. Сразу сообщите организатору или эксперту на площад- ке, что у вас подозрение на неисправность При необходимости вам заменят элемент (если в наличии есть запасной) или подтвердят его работоспособность Всегда уточняйте, можно ли продолжать использовать модуль, если его «поведение неста- бильное». Важно помнить, что неисправное оборудование — это не ваша вина. Участнику не начисляется штраф, если он обнаружил брак в начале соревнований. Оперативность обращения увеличивает шансы, что вы быстро получите замену и продолжите работу без потери времени. Не бойтесь задавать вопросы. Олимпиада — это не только проверка зна- ний, но и возможность научиться решать технические проблемы пра- вильно. При тестировании выданного оборудования для сборки олимпиад- ного робота на базе Arduino следует учесть множество мелочей, кото- рые могут значительно облегчить процесс и повысить эффективность работы. Научитесь эффективно использовать полученные знания для экономии времени. Как только ваша олимпиада началась — вы можете взять в руки вашего робота включить его питание и убедиться, что все работает. Чаще всего организаторы загружают в вашего робота тестовый демон- страционный скетч, который показывает вам, что моторы робота крутятся в разные стороны, с разной скоростью (это демонстрирует исправную работу' платы драйвера на предмет переключения направ- ления вращения мотора и то, что мотор может плавно ускоряться и плавно тормозить). Так же если у вас на роботе установлен манипулятор, — захват, или как принято его называть «схват» — он должен пошевелиться или даже захватывать какой-либо предмет. Например, кубик, или шайбу. Если тестовый скетч вам продемонстрировал исправного робота, вам необходимо далее самостоятельно убедиться, что выданное дополни- тельное оборудование рабочее и исправное, показывает и работает так, как заявлено в прилагаемой технической документации (она должна лежать у вас на столе вместе с оборудованием на каждый электронный и механический компонент). Если у вас что-то не работает, то далее мы рассмотрим, как выявить проблему и ее локализовать.
| Какие узлы Arduino UNO F «любят» ломаться Разъемы. Питания (DC-джек 12 В) и USB-разъем. Постоянные «перетаскивания» кабелей ослабляют контакты, они гнутся или «выла- мываются» из платы. Пин-коннекторы (Dupont, штыревые колодки) — при частом под- ключении-отключении ног ардуины пластик может потрескаться, а контакты — окислиться. Стабилизатор напряжения (LM2596 или AMS1117-5V). Нагревается при большом токе (моторы, сервоприводы), от перегрева «уходит» в защиту' или вовсе сгорает — на выходе 5 В перестает быть 5 В. Конденсаторы (электролиты и керамика). На входе питания и рядом с микроконтроллером стоят конденсаторы для «гашения» помех. Со временем под действием высоких токов и нагрева они могут поте- рять емкость или потечь. Токоведущие дорожки и площадки печатной платы. При меха- нических нагрузках (излом, перегрев паяльника) дорожки отвалива- ются. Особенно у питающих линий (5 В, GND) — если через них идет большой ток, отломленная дорожка моментально «горит». Микроконтроллер ATmega328P. Маловероятно, но возможно: ♦ перепрограммирование «на все» flash-памяти (ошибкой 1SP- программэтора); ♦ перебои питания во время записи bootJoader’a; ♦ выход из строя из-за статического разряда (ESD). Технически о проблеме металлических винтов у разъема питания Когда вы крепите Arduino UNO на шасси (например, робота), часто используют М3-винты прямо через монтажные отверстия платы. Обратите внимание на указанные далее рекомендации и информацию. Расположение. Отверстие под винт рядом с DC-джеком 12 В бук- вально вплотную находится к токоведущим дорожкам, к земляным (GND) и питающим (VIN). Как возникает короткое? При слишком сильном затягивании винт «продавливает» защитный лак (гальваническую маску). Обнажаются медные дорожки под маской, металл винта создает твердый контакт «пластина-винт-пластина» между GND и VIN (или между двумя GND- линиями с разных сторон платы).
При подаче 12 В через такой «мини-шунт» питание сразу же просе- дает, стабилизатор и конденсаторы перегреваются, могут «взбеситься» (вдрут стартует защитный режим) или сгореть. Почему организаторы часто выбирают металлический кре- пеж? Плюс: прочный и многоразовый — быстро ставить/снимать плату. Минус: при ошибке затяжки винты калечат плату — особенно на олим- пиадах, где время ограничено и сборка «на скорую руку». Решения и профилактика Изолирующие втулки-стойки (standoffs). Пластиковые МЗ-стойки с винтам снизу: ♦ удерживают плату' на высоте 5...8 мм над поверхностью шасси. ♦ исключают контакт винта с дорожками. Но пластик хрупкий — при перетягивании ломается. Пластиковые винты и гайки. Можно использовать пластиковые винты-шурупы 3 мм вместо металлических. Осторожно сильно не затягивать, чтобы tie «сплюшитъ» резьбу. Металлические стойки с изолирующими шайбами. Устанавливают металлическую стойку, но между голой головкой винта и платой — непроводящую шайбу (.пластиковую или резиновую). Это дает жесткость и многократность использования при безопасности. Контроль усилия при затяжке. Использовать небольшую отвертку-ограничитель момента. Достаточно «чуть-чуть» притянуть, чтобы стойка не болталась, но и не «рвала» плату. Проверка после сборки. Визуально осмотреть место у крепежа — нет ли облезшей маски или оголенного меди. Мультиметром проверить, что между VIN и GND нет короткого (бесконечное сопротивление). Подытожим. Самые уязвимые элементы Arduino UNO — это разъ- емы питания/USB, стабилизатор, токоведущие дорожки и конденсаторы (рис. 15.1). При установке на платформу робота обязательно следите за тем, чтобы крепеж не повредил маску платы и не закоротил дорожки. Используйте изолирующие втулки или шайбы, а также контролируйте усилие затяжки.
Рис. 15.1. Место крепления металлического крепежа в плате Arduino UNO для монтажа на платформу (мести вероятной проблемы) Появление технической проблемы Когда во время олимпиады возникла техническая проблема (не загружается скетч, нет питания, коротит плата и т. д.), действуй по сле- дующему алгоритму. Не паникуй и сохраняй спокойствие Сделай глу- бокий вдох, выпрями осанку. Выключи питание робота и визуально осмотри то, как ты подклю- чил внешние модули — датчики линии, датчики расстояния, сервомо- торы. ПРИМЕЧАНИЕ. Самая популярная проблема у участников - перепутали местами + и - у подключаемых модулей.
На платах расширения (которые стоят над вашей платой Arduino UNO) есть много разъемов, по 3 штуки в ряд, каждый из которых несет свои задачи: +5 В, GND и сигнал. Часто путают подключение именно тут. Убедись, что ты ничего не подключил на 0 и 1 цифровые пины кон- гроллера Arduino UNO. Цифровые выводы О (RX) и 1 (ТХ) на плате Arduino UNO жестко свя- заны с аппаратным последовательным портом (UART), который исполь- зуется в двух случаях. Случай № 1. Для загрузки скетча. При «Upload» IDE посылает ваш скомпилированный код по USB-UART на эти же ножки. Если на RX/TX что-то подключено, оно может: ♦ зажимать линию в низкий уровень (О В) и мешать приему данных, из-за чего загрузчик просто не «увидит» новый скетч; ♦ пгуметь или генерировать сигналы, подавая на микроконтроллер мусор, из-за чего загрузка виснет или выбрасывает ошибки. Случай № 2. Для отладки через Serial Monitor. Когда вы в коде пишете SeriaLbegin(%00), Serial.print(...), все данные идут через 0/1 па USB-чип (ATmegal6U2). Если одновременно к этим выводам подклю- чены датчики, модули или другой микроконтроллер, возможны: ♦ конфликт уровней, при котором два источника драйвят одну ли- нию — это может даже вывести порт из строя; ♦ потеря частей сообщений — в мониторе отладочных данных будет «кракозябрный» мусор. Работа загрузчика bootloader. Bootloader (который хранится во флеш-памяти ATmega328P) «слушает» на RX сразу после сброса платы. Любой внешний сигнал на RX в этот момент может: ♦ заблокировать старт программы; ♦ перезагрузить микроконтроллер или увязать его в «бесконечном ожидании» перед началом выполнения вашего кода. СОВЕТ. Убедись, что проблема действительно не решается простыми действиями (перезагрузить компьютер, пе реподключить кабель, выключить/включить питание). Обязательно попробуй загрузить провереннный веками и работоспособный скетч мигания светодиодом «Blink», расположенный в программе Arduino IDE - Файл - Примеры - Basics - Blink (рис. 15.2). Подготовь краткое и емкое описание проблемы. Назови свое место (номер стола/номера): «Здравствуйте, я участник с места №...»
Настройки страницы Ctrl+Smft+P ^-Communication DigitalReadSenal 11ечать Ctrl+P 05.Control Faoe Настойки ::.h: u...ma 06-Sensors ReadA'ialngVoltage Puc. 15.2. Расположение тестового скетча «Bunk» мигания светодиодом для проверки работоспособности платы Arduino UNO Опиши оборудование и симптом: «Плата Arduino UNO не подает 5 В на выход/при подключении кабеля питания светодиод не загорается/ не загружается программа в контроллер...» Что уже попробовал сделать сам: «Я перепроверил все кабели и шты- ревые коннекторы, сбросил плату и перезагрузил IDE». Правило «3 + 1»: кто ты и где —» что не работает —> что делал сам —» какая нужна помощь. Вежливо обратись к техническому специалисту. Подойди к столу с техподдержкой или позови технического специалиста к столу. СОВЕТ Убедись, что тебя услышали и к тебе идут. Это важно. Как только ты столкнулся с технической проблемой — техническому специалисту нужно зафиксировать время обращения. Запиши время на таймере на свой листок, и время исправления проблемы. Это потре- буется для вынесения вердикта — добавить ли тебе дополнительное время, затраченное на решение твоей технической проблемы, или не добавить, если выяснится, что плату7 испортил сам участник.
Грамотный технический специалист легко выявит твою ошибку, и даже догадается, если ты изначально сам неправильно воткнул датчик линии в плату расширения, перепутав разъемы, но потом поставив как надо (но уже поздно). Но конечно, чаше всего ошибку участника в случае отключенных от ардуины и шилдов модулей выявить и доказать нельзя, по этому с веро- ятностью в 90% технической специалист пойдет на встречу участнику и добавит затраченное время на решение проблемы. ПРИМЕР. «Извините, у меня место № 12. При подключении вашего кабеля питания Arduino не получает напряжение, хотя на соседней плате все работает. Я проверил питающий кабель и USB-шнур - безрезультатно Можете, пожа- луйста, проверить плату или сменить кабель?» Держи себя профессионально. Говори четко, не перебивай тех. специалиста. Не обвиняй организаторов или других участников. Проблема на оборудование, а не в человеке. Благодари техподдержку, даже если придется ждать: «Спасибо, что помогли». Следуй инструкциям техподдержки. Делай именно то, что гово- рят: меняй кабель, подключай другую плату, записывай новые fuse- биты. Если проблема не решилась сразу, задай один уточняющий вопрос: «Можно ли проверить, есть ли короткое между VIN и GND?». Не отвлекайся на посторонние мысли — сразу после решения возвращайся к задаче Фиксация после решения. Как только проблема решена, коротко сообщи: «Проблема устранена, спасибо!». Вернись к своему столу и про- верь привычным тестовым примером (например, Blink). «Слабые» места по питанию на типовой плате-расширении драйвера моторов Рассмотрим основные «слабые» места (узлы) на типовой плате-рас- ширении драйвера моторов, которые чаще всего дают сбой или «лома- ются» на практике. Джамперы переключения источника питания (.рис. 15.3) могут выпадать или садиться в неправильное положение (например, вместо 5 В выбрать «VIN» или наоборот).
Рис. 15.3. Расположение джампера переключения линии питания Болтающиеся неизолированные провода или разъемы. На плате случайно мог упасть проводок (рис. 15.4), подключенный к какому-либо элементу робота, и при механических движениях робота вызывает сбои платы или всего робота в целом. Плохое соединение проводов моторов и проводов питания в колод- ках/клеемниках. Часто бывает, что из-за незатянутого и не крепкого соединения проводки моторов «выскальзывают» из своих соедини- тельных разъемов (рис. 15.5). Это же касается и линии питания мото- Рис. 15.4.Болтаюшийся неизолированный провод (желтый) на плоте драйвера двигателей
Рис. 15.5. Места подключения проводов клеммником/разъемом ров +7...12 В. Также участник moi1 перепутать физическое подключение моторов в эти разъемы. Стабилизатор напряжения (LDO или DC-DC). Перегрев при боль- ших нагрузках, выход из строя из-за скачков напряжения или короткого замыкания на выходе. Предохранители (полимерные РТС или плавкие). При пере- грузке переходят в защитное состояние и нагреваются, после чего долго «открываются». Проблемы соединения и распайки на типовой плате-расширении драйвера моторов Винтовые клеммы и разъемы питания/моторных выводов. Ослабление винта ведет к плохому контакту, искрению и локальному перегреву Пин-коннекторы (Dupont, штыревые гребенки). Могут окис- ляться или трескаться при частом пере-подключении — пропадает кон- такт сигнальных линий. Пайка и дорожки. При механических ударах или вибрациях могут отпаяться дорожки или сам чип драйвера «отвалиться» от платы.
Проблемы модулей драйвера на типовой плате- расширении драйвера моторов Полевые транзисторы (MOSFETbi) в мостовой схеме выходят из строя при перегрузках, пробоях из-за высокого напряжения или нагрева без радиатора. Защитные диоды (flyback-диоды). В недорогих платах они могут отсутствовать либо быть неудовлетворительного качества — при реверсе напряжения транзисторы «пробивает». Микросхема драйвера (например, DRV8833, L298 и т. п.) стра- дает от ESD-разрядов, перегрева и неправильного подключения вход- ных сигналов. Проблемы логики и сигналы управления на типовой плате-расширении драйвера моторов Джамперы/переключатели режимов (DIR, MODE, MICROSTEP). Если снят или переустановлен не на то место, мотор будет крутиться в неверную сторону или с неподходящим шагом. Уровневые преобразователи (если есть) TTL 5 В «-» 3,3 В конвер- теры могут «зависнуть» или выйти из строя от перегрузки или корот- кого замыкания на шине. Контроллер (микроконтроллер на плате-расширении) — реже, но возможно, заводской брак или сбой прошивки, особенно если плата позволяет «умную» логику. Проблемы компонентов фильтрации и сглаживания на типовой плате-расширении драйвера моторов Конденсаторы (электролитические и керамические) с течением времени теряют емкость, особенно под постоянным током моторов, что приводит к скачкам напряжения и дребезгу. Индуктивности (фильтры EMI-fc) — при перегрузке могут нагре- ваться и менять параметры, ухудшая помехоподавлен ие Примеры типичных симптомов и места «поломок» приведены в табл. 15.1.
Типичные симптомы и места «поломок» Таблица 15.1 Симптом Возможный «сломавшийся» узел Мотор не реагирует на команды, светодиоды драйвера горят Плохой контакт в клеммах или джампере питания Двигатель дергается или «пропускает шаг» Некорректный микрошаг (MODE-джампер) или пересушенные конденсаторы Сильный нагрев платы и отключение Сгоревший MOSCET или пере-рев стабилизатора Плата полностью не включается Разъем питания ослаблен, «сел» джампер VIN/5 V, сгорел предохранитель Как действовать при обнаружении проблемы Питание. Убедитесь, что подаете правильное напряжение на VMOT (обычно 6 ..12 В) и на VCC (логика, 3,3 В или 5 В). Проверьте положение джамперов POWER SELECT (если есть): питание моторов vs. логики. Контакты и коннекторы. Затянули ли прочно винтовые клеммы моторных выводов? Нет ли там искрения или обрыва? Штыревые пины ровные, без погнутых ножек, ничего не болтается Диагностические светодиоды. На большинстве плат есть LED ALIVE (питание), LED FAULT или LED STATUS. Обратите внимание: ♦ нет LED ALIVE—> нет питания логики; ♦ LED FAULT горит/мигает —> короткое в обмотке или перегрузка. Измерения мультиметром напряжения на VMOT и VCC. VMOT = ваш моторный источник (6...12 В), VCC = 5 В или 3,3 В — посмотрите в документации платы. Проверка мультиметром целостность предохранителя (если есть). Некоторые платы содержат запаянный РТС-предохранитель. Проверьте сопротивление на входе и выходе стабилизатора (должно быть <1 Ом). Проверка мультиметром выходных каналов. Без моторов соеди- ните выходы АЗ или 1/2 вместе и посмотрите, выдает ли плата ШИМ- сигнал (например, частота ~20 кГц для DRV8833) при работе скетча. Пробный «минимальный» скетч. Напишите простую программу, которая просто переключает направление (DIR) и даег фиксированный ШИМ (например, analogWrite(pin, 128)}. Так вы удостоверитесь, что про- блема именно в драйвере, а не в коде. Проверка платы «методом тыка». Плата драйвера двигателей может запускаться даже без микроконтроллера Arduino UNO. Нам доста- точно взять 4 проводка папа-мама, одеть все 4 проводка на линию +S В На пины, отвечающие за ШИМ (PWD) повесить по 1 проводку на 5 В, а друтими проводами играться с пинами направления, запуская таким
образом вручную драйвер двигателей и моторы в разные стороны без использования программы. Более того, если написать программу совсем не получается, вы можете просто заставить на зачетной попытке выехать из зоны старта, или подключив датчики к пинам управления моторов заставить робота ехать по линии и набрать хотя бы какие-то но баллы за выполнение задания. Почему нет? Так вы удостоверитесь, что проблема именно в драйвере, а не в коде Изоляция проблемы. Снимите нагрузку (отсоедините моторы). Подключите нагрузку известную рабочую (если есть запасной мотор). Поменяйте кабели или смените плату на соседнюю. Это позволит убе- диться, что дело не в блоке питания или в самих моторах. Обращение к техническому специалисту Когда вы убедились, что самостоятельно ничего не решается, при- влеките техподдержку. Подойдите в окно/зону техподдержки, пред ставьтесь: «Здравствуйте, я участник № 15, плата драйвера (L298) не запускает .моторы». Четко опишите: * какая плата (модель); ♦ какие проверки уже сделали (измерили напряжение, сняли нагруз- ку, пробовали другой мотор); ♦ что вы ожидаете (поменять блок питания, кабель или саму плату). СОВЕТ. Не перебирайте инженера, ждите, когда он сможет по- дойти. Поблагодарите за помощь и сразу после вмешательства проверьте: «Сейчас все ОК, спасибо за замену кабеля/блока питания». Возвращение к задаче. Как только драйвер заработал, сразу запустите тестовый пример: «мигание» моторами на малой нагрузке Проверьте основные функции — реверс, ШИМ, торможение. Если все стабильно, возвращайтесь к основной задаче и не меняйте больше ничего в подключениях. Следуя этому алгоритму, вы минимизируете траты времени и полу- чите помощь от т ехподдержки максимально быстро и эффективно.
Основные механические проблемы при работе с платой-расширением портов ввода-вывода Рассмотрим основные механические проблемы, с которыми может столкнуться участник при работе с платой-расширением портов ввода- вывода (I/O-shield) Тонкие контакты (штыревые пины). Легко погнуть при уста- новке или выдергивании модуля. При многократном «насаживании» на Arduino могут ослабнуть или вовсе отломаться. Плохие паяные соединения. Если пин-гребенка некачественно пропаяна, контакт «пропадает» при малейшей вибрации или изгибе платы. Иногда на заводе припой оседает «комком» и не опаивает ножку. Неподходящее выравнивание плат. При неверной посадке один или несколько контактов могут оказаться «в воздухе» — сигнал не про- ходит, и один из портов «мертвый». Основные электрические проблемы при работе с платой-расширением портов ввода-вывода Рассмотрим основные электрические проблемы, с которыми может столкнуться участник при работе с платой-расширением портов ввода- вывода (I/O - shield) Джамперы питания (POWER SELECT). В неправильном положе- нии джампер может кормить расширение с VIN (12 В) вместо 5 В, что сгорит микросхемы. Джампер легко выскальзывает и может «пере- ехать» на соседний контакт. Конфликт напряжений. Если сама плата-расширение рассчитана на 3,3 В, a Arduino дает 5 В (или наоборот), без уровневых преобразова- телей сигналы «не читаются». Копоткое между контактами. При погнутом или ослабленном пине соседние дорожки на плате-расширении могут замыкаться метал- лической ножкой коннектора. EMI и шумы. Моторы, датчики или длинные шлейфы рядом с шиной I2C/SPI/Serial могут наводить помехи — данные «теряются» или «прыгают». Как действовать при проблеме Визуальный осмотр. Проверь выравнивание и целостность пинов, положение джамперов, нет ли залома или трещин в плате.
Проверка контакта. Аккуратно промой коннекторы спиртом, слегка подсади пины плоскогубцами (но не перетягивай!). Мультиметр и логика. Прозвони дорожки «от Arduino -» плата- расширение» на целостность. Измерь напряжение на входе и выходе стабилизатора. Тест по шагам. Отключи все джамперы и подключи только пита- ние + GND, проверь, загорается ли статусный диод. Затем поочередно подключай по одному сигналу (SCL, SDA, D2...) и запускай простой скетч «мигания» светодиодом на этом выводе. Обращение к техподдержке. Четко опиши: ♦ номер места/команды; • как подключал (какие джамперы, какие порты); ♦ что именно не работает и что уже пробовал делать сам. Вывод. Большинство «поломок» I/G-плат связаны либо с механикой (погну- тые/отломанные пины, плохая пайка), либо с неправильными джампе- рами и уровнем напряжения. Последовательная проверка «визуально -> мультиметр —* тест скетчем» поможет быстро найти и устранить неисправность. Механические неисправностей стандартных «хобби»-серво Рассмотрим самые распространенные механические неисправно- сти стандартных «хобби»-серв-' (SG90, MG90, MG995 и т. п.), с которыми могут столкнуться участники. Износ или поломка шестерен. Пластиковые шестерни (особенно в дешевых «coreless»-cepBos) со временем истираются или зубья обламы- ваются. Симптом: при подаче сигнала серво «проскальзывает», делает «хруст» внутри или вовсе не меняет положение. Поломка сервы при попытке ее ручного вращения. Если серва подключена к роботу и запитана, она блокирует вращение своего вала в какой-либо установленной позиции. Часто участники забывают про это и пытаются провернуть серву, после чего слышится неприятный хруст пластиковых шестеренок. Тоже самое может происходить при попытке изменения положения схвата робота, так как в схвате используется мел- кая пластиковая серва. Заедание вала. Попадание пыли/крошек пластика между шестер- нями, люфт в подшипниках. Симптом: мотор вращается с усилием, перегревается, наглухо зали- пает в каком-то положении.
Разбалтывание вала. Износ втулок или подшипников —► люфт, неточный угол; сервопривод «гуляет» — не держит позицию. Болты сервы, соединяющие се корпус воедино — раскрутились. Такое бывает на мелких серпах, и даже на больших. Если такое произошло — затяните их потуже. Электрические неисправностей стандартных «хобби»-серво Рассмотрим самые распространенные электрические неисправно- сти стандартных «хобби»-серво (SG90, MG90, MG995 и т. п.), с которыми могут столкнуться участники Повреждение кабеля и коннектора. Перелом провода у основа- ния шлейфа -» прерывистый контакт питания или сигнала. Симптом: серво «дергается» или периодически отключается. Короткое в обмотках или проводке. Изоляция намотки стерлась -г при вращении под нагрузкой — КЗ, сильный нагрев или срабаты- вание защиты БП. Симптом блок питания уходит в защиту, серво не получает питание. Перегрев и термозащита. При длительной работе под перегруз- кой («зажато» между упорами) серво внутренне перегревается — неко- торые модели имеют термодатчик и отключаются. Симптом: серво вне- запно «отключается» и начинает работать заново только после остыва- ния (-1...2 мин) Неисправности электроники управления стандартных «хобби»-серво Рассмотрим самые распространенные неисправности электроники управления стандартных «хобби»-сервс (SG90, MG90, MG995 и т. п.), с которыми могут столкнуться участники. Отказ управляющей платы. Обрыв дорожек, коррозия пайки, выход из строя микроконтроллера (обычно Р1С-совместимый). Симптом: серво не реагирует на команду, «нехрустит» и «не шуршит» вообще. Потеря калибровки. Сроки службы микроконтроллера прошли, память балансировки «сбоит» —> серво неправильно интерпретирует ширину импульса. Симптом: при значении PWM 1.5 ms вал не в ней- трали, а где-то в сторону.
Сбой сигнального интерфейса стандартных «хобби»-серво Рассмотрим сбой сигнального интерфейса стандартных «хобби»- серво (SG9U, MG90, MG995 и т. п.), с которыми могут столкнуться участ- ники. Неправильные параметры PWM. Частота (обычно 50 Гц) и дли- тельность импульса (1...2 мс) заданы неверно или дребезжат. Симптом: серво «прыгает» между крайними положениями или стоит «на месте». Интерференция/помехи на линии. Длинный неэкранирован- ный провод рядом с силовыми линиями моторов приводит к наводкам. Симптом: случайные рывки без команды, «шумы» в Serial Monitor (для цифровых I2C/RS485-cepBos). Эксплуатационные и внешние факторы стандартных «хобби»-серво Рассмотрим эксплуатационные и внешние факторы стандартных «хобби»-серво (SG90, MG90, MG995 и т. п.), с которыми могут стол- кнуться участники. Переохлаждение/перегрев. Низкая температура -»смазка густеет, высокое трение; при +60 °C пластиковые детали деформируются. Симптом: серво медленно реагирует или заедает. Влажность и коррозия. Попадание конденсата/воды внутрь кор- пуса —»окисление контактов, короткие замыкания. Симптом: периоди- чески работает, потом «залипает» и не отзывается. II Как выявить и диагностировать I проблему стандартных «хобби»-серво Рассмотрим, как выявить и диагностировать проблему стандарт- ных «хобби»-серво (SG90, MG90, MG995 и т. п.), с которыми могут стол- кнуться участники. Визуальный осмотр. Проверьте целостность шлейфа и коннек- тора, нет ли облезшего пластика на корпусе. Проверка «на слух». Подайте на сервопривод средний PWM (1,5 мс). Если внутри слышен «хруст» или «скрежет» без движения, дело в шестернях. Измерение питания. С помощью мультиметра убедитесь в ста- бильном 5...6 В на «+» и «-», независимо от положения вала.
Тест простым скетчем. 1 . frinclude <Servo.h> 2. Servo s; 3. void setup() 4 . s.attach (9) ; 5. s.write (90); 6. de 1 a у (10 0 C) ; 7 . s.write (C); 8. dclay(lOCO); 9. s.write(180) 10. } 11. void loop () { // или ваш пин I/ нейтраль / край // другой край } • ПРИМЕЧАНИЕ. Если серво не проходит весь диапазон плавно, проблема аппаратная. Изоляция от помех. Подключите серво на коротком экранирован- ном проводе, подальше от силовых кабелей моторов. Замена компонентов. Для механических поломок меняйте шестерни или корпус. Для электрических — перепаивайте шлейф, про- веряйте обмотки на сопротивление (в исправном -10...30 Ом). ПРИМЕЧАНИЕ. Понимание этих неисправностей и умение быстро их диагностировать поможет участнику оперативно справиться с проблемой и не потерять баллы на сорев- новании.
ГЛАВА 16 ПРОГРАММНАЯ ЧАСТЬ: ОТ ЭЛЕМЕНТАРНЫХ ДЕЙСТВИЙ ДО СЛОЖНЫХ СЦЕНАРИЕВ В этой главе вы узнаете, как поэтапно создавать программу для Arduino-робота - от простейших действий до составле- ния полноценного алгоритма для выполнения задач на олим- пиадном полигоне Мы научимся считывать данные с датчи- ков, управлять исполнительными механизмами, писать функ- ции и объединять их в сложные структуры поведения. Каждая тема содержит конкретные практические примеры, которые можно использовать в ваших проектах. Элементарные действия - основа всего Основные идеи и подходы. Программирование роботов для олим- пиадных задач требует четкого структурирования и разбиения слож- ных заданий на элементарные действия. В основе подхода лежит идея «конструктора»: из простых «кубиков» поведения собирается сложная логика. Любая сложная задача для робота сводится к последовательности простых операций. Например, движение по полю с черными линиями можно разложить на: ♦ проезд вперед на определенное количество перекрестков; ♦ поворот на 90 градусов; ♦ остановку по достижении цели.
Эти действия становятся «кубиками», из которых строится про- грамма. Например, чтобы добраться из точки (0,0) в (2,1), робот выпол- няет: ♦ движение вперед на 2 перекрестка; ♦ поворот направо; ♦ движение вперед на 1 перекресток. Какие кубики нам нужны Элементарными действиями для нашего робота будем считать: ♦ управление моторами, включение / выключение на заданной ско- рости, поворот на месте направо/налево; ♦ включение / выключение светодиодеь; ♦ поворот оси сервопривода на заданный угол; ♦ включение / выключение пищалки; ♦ чтение показаний датчиков освещенности; ♦ чтение показания инфракрасного датчика расстояния; ♦ чтение показания ультразвукового датчика расстояния. Опрос нажатия кнопки Элементарные ть-ведения: ♦ ожидание нажатия кнопки; ♦ автоматическая калибровка: ♦ движение вдоль линии в течение заданного времени; ♦ движение вдоль линии до заданного количества перекрестков; ♦ поворот до обнаружения линии; ♦ манипуляции с объектами. Изучив работу с каждым модулем Arduino по отдельности — вы научитесь тестировать роботов, а также лучше познакомитесь с устрой- ством каждого модуля и будете понимать, как использовать разные компоненты в одном едином устройстве — вашем роботе. Как мы пишем программу Программирование робота на Arduino осуществляется в среде Arduino IDE на языке С. Важно знать, что любая директива С закан- чивается переводом строки, логический блок команд заключается в фигурные скобки {и}. Скобки вкладываются друг в друга по принципу матрешки.
Любая программа для Arduino обязательно содержит 2 функции: 1. void setup() // — выполняется один раз в начале программы 2. { 3. ...(набор команд, которые выполняются в начале программы) 4. ) И 1. void loop() // — циклически бесконечно 2. { 3. ... (набор команд, которые выполняются постоянно) 4. } Программа может быть дополнена любым числом пользователь- ских функций, которые описываются обычно вначале программы сле- дующим образом, где name.fund 0 — название пользовательской функ- ции, которая не принимает и не возвращает никаких значений. 1. void name funclO 2. { 3. ... (набор команд, которые выполняются при вызове функции) 4. } name_func2() — название пользовательской функции, которая при- нимает на вход два параметра р 1, р2 и не возвращает никаких значе- ний. 1. void name func2(int pl, int p2) // 2. { 3. ... (набор команд, которые выполняются при вызове функции) 4. } name func3() — название пользовательской функции, которая при- нимает на вход два параметра р1, р2 и не возвращает никаких значе- ний. 1. int name func3(int рЗ) // 2. { 3. ... (набор команд, которые выполняются при вызове функции name_func3 4. int out = 20; 5. return out; 6. }
Обращение к функциям происходит по имени и при необходимости с указанием фактических значений параметров, например 1. nanit_funcl () 2. name_func2(40, 255) 3. Vari = name_func3(150) Для работы некоторых устройств нужно использовать их библио- теки. Для подключения библиотек используется команда: 1. «include «namejib.h» Для контроля данных часто используется вывод данных в монитор последовательного порта В void setup() помещается следующая строка, где 115200 — скорость обмена. 1. Serial.begin(115200); В нужное место кода помещаются строки, описывающие, что именно мы хотим вывести в монитор порта. В кавычки заключается любой текст с описанием выводимой информации, без кавычек указы- вается имя переменной, которую мы хотим вывести. 1. int NAME VAR = ICO; 2. Serial .print ("Значение переменной NANE VAR=") ; 3. Serial.print(NAME_VAR); 4. // Код выведет: 5. //> Значение переменной NAME VAR=100 Отладочная печать во всех примерах может быть закомментиро- вана, если все работает нормально. Комментирование строки выполня- ется вводом Ц в начале строки Пишем программу для управления моторами Начинаем программирование нашего робота с управления мото- рами. На роботе два мотора, будем называть их «левый» и «правый» относительно движения вперед. Для управления каждым мотором необходимо использовать 2 пина, которые работают на вывод информации (OUTPUT). Один будет управ- лять направлением движения вперед-назад, другой скорос тью враще- ния моторов. Для управления скоростью перемещения будем использовать спо- соб формирования сигнала управления в виде импульсов. Этот способ называется широтно-импульсная модуляция, или ШИМ. Чем длиннее
ШИМ 9044 t Pua 16.1. Графики отношения длины импульса к периоду широтно импульсной модуляции импульс относительно всего периода, тем выше напряжение поступает на могоры. Для такого формирования сигнала можно использовать только пины, которые помечены знаком -(тильда). Скорость мотора будет определяться как часть от максимальной, в соответствии с отно- шением длины импульса к периоду (рис. 16.1). Широтно импульсная модуляция: 1. /* === Моторы === */ 2. 3. // Заладим номера пинов, с которыми работаем 4. II с помощью директивы препроцессора «define 5. // Эго позволит, при необходимости, не изеняя программу поменять номера пинов 6. 7. «define MOTOR_LEFT_DIR PIN 4 // Пин управления направлением левого мотора 8. «define MOTOR_LEFT_PWM_PIN 5 // ШИМ-пии для управления скоростью левого мотора 9. «define MOTOR_RIGHT_DIR_PTN 7 // Пин управления направлением правого мотора 10. «define MOTOR RIGHT_PWM_PIN 6 // ШИМ-пин для управления скоростью правого мотора 11. 12. «define MVF.L 80 // Базовая скорость моторов (0-255) 13. 14. // Функция инициализации моторов: настройка пинов и вывод информации в Serial 15. void motor_init() 16. (
17. pinMode(MOTOP_LEFT_DIF_PIN, OUTPUT); // Настройка пинов направления как выходы 18 . pinMode (MOTOP._LEFT_PWM_PIN, OUTPUT); // Настройка ШИМ- пинов как выходы 19. pinMode(M0T0R_PIGHI_3IR_PIN, OUTPUT); 20. pinMode(MOTOR_RIGHT_PWM_PIN, OUTPUT); 21. 22. // Для удобства отладки программы вся информация выводится в последовательный порт 23. // с помощью команд Serial.print и Serial.printin 24. // Serial.print(значение) — выводит значение в последовательный порт 25. // Serial.printin(значение) — выводит значение в последовательный порт с новой строкой 26. // Значением может быть строка, число, значение переменной и т. д. 27. Serial .printin («МОТОР. INIT») ; // Вывод информации об инициализации моторов 28. 29. motor_write(0,0); // Выдача изначального управления на моторы 30. } 31. 32. // Функция управления моторами: задает скорости и направления для обоих моторов 33. void motor_write(int left, int right) 34. { 35. // Ограничиваем скорость значениями ст -255 до 255 36. // ВНИМАНИЕ: В случае если мотор крутится в неправильную сторону 37. // здесь можно добавить знак минуса перед constrain 38. // чтобы изменить направление вращения 39. left = constrain(left, -255, 255); 40. right = constrain(right, -255, 255); 41. // right = -constrain(right, -255, 255); // <- Например так 42. 43. // LEFT 44. digitalWrite(MOTOR_LEFT_DIR_PIN, left > 0); // 1 если вперед, 0 если назад 45. analogWrite(MOTOR_LEFT_PWM_PIN, ahs(left)); // модуль от скорости (ШИМ) 46. 47. // RIGHT 48 . digitalWrite(MOTOR_RIGHT_DIR_PIN, right > С);
49. analogWrite(MOTOR_RIGHT_PWM_₽IN, aba (right)); 50. } 51. 52. void 3etup() 53. { 54. // IN1T — Инициализация всех компонентов 55. Seria1.begin(115290); // Инициализация последовательного порта с высокой скоростью 56. motor _ ir.it () ; // Инициализация моторов 57. } 58. 59 . void loop() 60 { 61. // Обновление управления моторами 62 . motor vrite(-MVEL, MVEL); // Поворот на месте против часовой стрелки 63. delay(1000); 64 . motor write(MVEL, -MVEL); // Поворот на месте по часовой стрелке 65. delay(1000); 66 } При работе с моторами важно внимательно следить за правильно- стью направления вращения моторов и их стороной. Имеет смысл про- верить работу моторов следующим набором тестов. Прокрутить левый мотор вперед, правый стоп 1. void loop() 2. { 3. mctor_write(100, 0); // Поворот левого мотора вперед 4. } Прокрутить левый мотор назад, правый стоп 1. void loop() 2. { 3. motor write(-1С0, 0); // Поворот левого мотора назад 4. } Прокрутить левый мотор вперед, правый стоп 1. void loop () 2. { 3. motor write(0, 100); // Поворот правого мотора вперед 4. }
Прокрутить левый мотор назад, правый стоп 1 . void loop() 2. { 3. motor_write(О, -ICO); // Поворот правого мотора назад 4- } Если все тесты прошли успешно, то моторы работают корректно. Если в каких-то тестах моторы ведут себя не так, как вы ожидаете, про- верьте следующее правильность указания пинов моторов (не перепу- таны ли DJR с PWM и стороны моторов). При необходимости измените знак скорости перед constrain в функции motor write. Пишем программу для управления светодиодами 1. /* === Светодиоды === */ 2. 3. Jfdefine LEE PIN 13 // Пин для управления светодиодом (обычно встроенный светодиод на Arduino) 4 . 5. // Инициализация светодиода 6. void led init() 7. { 8. pinMode(LED PIN, OUTPUT); // Настройка пина светодиода как выход 9. 8. Serial.printin(«LED INTT»); 9. 1 12. 13. // Функция для включения/выключения светодиода 14. void led_write(int state) 15. { 16. digitalWrite(LEU PIN, state); // Установка состояния светодиода (HIGH/LOW) 17. ) 18. 19. void setup() 20. { 21. // INIT — Инициализация всех ксмпонентов 22. Serial.begin(115200); // Инициализация последовательного порта с высокой скоростью 23. led_init(); // Инициализация светодиода
24. } 25. 26. void loop () 27. { 28. // Обновление светодиода 29. led_write(HIGH); // Включение светодиода 30. delay(1C0C); 31. lea_write(LOW); // Выключение светодиода 32. delay(lCCC); 33. } Пишем программу для управления сервоприводами 1, 2. 3. /* === Сервопривод === */ ♦include «Servo.h» // Подключение библиотеки для работы 4 . 5. 6. 7. 8 9- 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. с сервоприводами ♦define SEP.VC PIN 9 // Пин для управления сервоприводом Servo servo; // Создание объекта сервопривода // Инициализация сервопривода и вывод информации в Serial void servo_init() { servo.attach(SERVO PIN); // Привязка сервопривода к пину Serial.printin(«SERVO INIT»); } // Функция для установки угла поворота сервопривода void servo_write(int angle) { 2С. // Ограничиваем угол значениями от 0 до 180 градусов 21. 22. angle = constraintangle, 0, 180); 23. 24. 25. 26. 27. // Установка заданного угла servo.write(angle); ) void setup()
28. { 29. // INIT — Инициализация всех компонентов 30 . Serial.begin(115200); // Инициализация последовательного порта с высокой скоростью 31. servo_init(); // Инициализация сервопривода 32. } 33. 34 . vol d loop () 35. { 36. // Обновление управления сервоприводом 37. servc_write(90); // Установка угла поворота сервспривола в 90 градусов 38. delay(1000); 39. ser vo_ wr ite (180) ; // Установка угла поворота сервопривода в 180 градусов 40. delay(1000); 41. ) Пишем программу для включения пищалки 1. /* === Пищалка === */ 2. 3. ^define BUZZER_PIN 11 // Пин для управления пищалкой (зуммером' 4. 5. // Инициализация пищалки 6. void bnzzer_init() 7. { 8. pinMode(BUZZER_PIN, OUTPUT); // Настройка пина пищалки как выход 9. 10. Serial.printin(«BUZZER INIT»); И. } 12. 13. // Функция для включения пищалки с заданной частотой 14. void buzzer_on(int freq) 15. { 16. tone(BUZZER_PIN, freq, 200); // Генерация звука с заданной частотой на 200 мс 17. ) 18.
19. // Функция для выключения пищалки 29. void buzzer _ aff () 21. { 22. noTone (BUZZEP. PIN); // Остановка генерации звука 23. } 24. 25. void setup() 26. { 27. /I IN1T — Инициализация всех компонентов 28. Serial.begin(115200); // Инициализация последовательного порта с высокой скоростью 29. buzzer initO; // Инициализация пищалки 30. } 31. 32 . void loop() 33. { 34. // Обновление пищалки 35 . buzzer_on(400); II Звуковой сигнал с частотой 400 Гц 36. delay (500); 37. buzzer ог.(600); // Звуковой сигнал с частотой 600 Гц 38. delay(500); 39. } Учимся читать датчики освещенности 1. /* === Датчики освещенности === */ 2. 3. #define LIGHT LEFT PIN AO // Аналоговый пин для левого датчика освещенности 4. #define LIGHI_R1GHT PIN Al // Аналоговый пин для правого датчика освещенности 5. 6. int light_]eft threshold = 100; // Пороговое значение для левого датчика (граница черное/белее) 7. int 1ight_right_threshold = 100; // Пороговое значение для правого датчика (граница черное/белое) 8. 9. // Инициализация датчиков освещенности 10. void light init() 11. { 12. pinMode(LIGHT_LEFT_PIN, INPUT); // Настройка пинов как входы 13. pinMode(LIGHT RIGHT_PIN, INPUT); 14. 15. Serial.printin(«LIGHT INIT»); 16. }
17. 18. // Функция чтения значения с левого датчика освещенности 19. int light_leftread() 20. { 21. return analogRead(LIGHT LEFTPIN); // Чтение аналогового значения (С-1023) 22. } 23. 24. // Функция чтения значения с правого датчика освещенности 25 int light_right_read() 26. { 27. return analogRead(LIGHT RIGHT PIN); // Чтение аналогового значения (0-1023) 28. } 29. 30. // Проверка, находится ли левый датчик над черной линией 31. bool left_is_on_black() 32. { 33. return light left read() > light_left_tnreshold; // Если значение больше порога, то датчик над черным 34. } 35. 36. // Проверка, находится ли правый датчик над черной линией 37. bool right is on_black() 38. { 39. return light_right_read() > light_right_threshold; // Если значение больше порога, тс датчик над черным 40. } 41. 42 . void setup() 43. { 4 4. // INIT — Инициализация всех компонентов 45 . Serial.begin (115200); // Инициализация последовательного порта с высокой скоростью 46. light_init(); II Инициализация датчиков освещенности 47. } 48. 49. voia loop() 50. { 51. Serial.print("Left: ") ;
52. Serial.print(light left read()); 53. Serial.print(", Left is on black: "); 54 . Serial .print (left_is_cr._black () ) ; 55. Serial.print(", Right: "); 56. Serial.print(light_right_read()); 57. Serial .print (", Right, is on black: ") ; 58 . Serial.printin(right_is_on_black()); 59. 60 . delay (100) ; 61. } При выполнении программы в последовательном порту будут видны значения датчиков освещенности в реальном времени (рис. 16.2). Hawi Ina v 11528Й.» v ; Clear output Рис. 16.2. Значения датчиков освещенности в реальном времени Left. 499. Left it on black: 1. Right 529. Right is on black Left: 491 Left 1» on black: 1 Right. 52? Right is on black: Left: 499. Left 1> on black 1 Right: 52B Right is on black. Left: 499. Left it on black 1 Right. 54Б. Right it on black. Left 491 Left it on black 1. Right: 529, Right is on black Left: 494. Left Is on black 1 Right 527 Rignt is on black: Left 499 Left is on olack: 1, Right 543. Right is on black: Left- 499. Left Is on biack 1, Right 529. Right is on black; Left 499 Left is on black 1, Right 527. Right Is on black' Left: 491, Left it on black 1, Right 529. Right is on black: Left: 499. Left is on blacx 1, Right 529. Right is on black: Left: 491 Left it on black: 1, Right 529. Right is on black' Left. 493, Left is on black: 1, Right 529, Right is on black: Left: 499, Left is on black: 1. Right 531 Right is on black Left 499 Left is on black 1. Right 527 Right is on black. Left: 499, Left is on black: 1, Right 526, Right is on black. Б Autoscroll f~] Show tl Best аир Как размещать датчики освещенности Самое лучшее положение для них — так, чтобы их области видимо- сти касались друг друга и были размером с линию. Допустимо поста- вить их чуть шире линии, однако чем шире стоят датчики — тем больше «слепая зона» робота и тем хуже он будет ехать по линии. На рис. 16.3 изображена линия и области чувствительности дат- чиков освещенности. Красным и синим цветами отмечены области, которые «видят» датчики, вызывая стремление робота выровняться. Когда линия попадает в красную область, робот будет стремиться ехать влево, а когда в синюю — вправо. Когда линия находится в центральной (белой) области — робот будет ехать прямо.
Здесь у робота слепая зона Рис. 16.3. Размещение датчиков освещенности Задача при установке датчиков освещенности — сделать так, чтобы красная и синяя области касались друг друга. При этом робот будет более точно компенсировать отклонения от линии, поскольку слепая зона будет меньше. На размер области чувствительности влияет высота расположения датчика. На рис. 16.4 показаны варианты размещения датчиков осве- щенности с учетом высоты. Вид спереди Рис. 16.4. Варианты размещения датчиков освещенности с учетом высоты ПРИМЕЧАНИЕ. Пример калибровки датчиков освещенности для авто- матического определения порога серого будет описан позднее.
Для определения порога серого вручную воспользуйтесь следую- щим алгоритмом (повторить для каждого из датчиков освещенности): ♦ поставить датчик на белое и запомнить значение датчика как white; ♦ поставить датчик на черное и запомнить значение датчика как black; ♦ посчитать среднее арифметическое измеренных значений — это и будет порог серого: threshold = (white + black) / 2. ПРИМЕЧАНИЕ. При использовании положений датчиков 2 и Ъ опреде- ление порога как среднего арифметического может вы- звать ложные определения перекрестков (т.к. датчики находятся прямо над линией и их значения при езде бу- дут очень близки к этому порогу). В этом случае стоит воспользоваться модифицированной формулой для того, чтобы сместить порог в сторону черного цвета (т.е, порогом будет нс серый, а темно-серый цвет): threshold = (white + 3 * black) / 4 Эта формула позволит избавиться отложных детекций перекрестков. II Как считывать значения | с датчиков освещенности Чтение данных с любых датчиков использует встроенные в микро- контроллер аналого-цифровые преобразователи. Для чтения показаний выход датчиков подключается на аналоговый вход микроконтроллера, сам пин устанавливается в состояние INPUT, а чтение производился с помощью команды analogRead(). При этом значение измеряемой дат- чиком величины будет считываться как целое число в диапазоне 0-1023.
Учимся измерять расстояние с ИК дальномером (Sharp) 1. /* === ИК дальномер (Snarp) === */ 2. 3. #define SHARP PIN A2 II Аналоговый пин для подключения ИК дальномера 4. 5. // Инициализация ИК дальномера 6. void sharp_init() 7. { 8. pinMode(SHARI FIN, INPUT); // Настройка пина как вход 9. 10. Serial.printin(«SHARP INIT»); 11. ) 12. 13. // Функция чтения расстояния с ИК дальномера в миллиметрах 14. int sharp_read mm() 15. { 16. float voltage = analogRead(SHARP_PIN) * 5.0 / 1023.0; // Преобразование считанного значения в напряжение 17. int distance = 40С.0 / voltage; // Формула пересчета напряжения в расстояние (зависит от модели датчика) 18. // определяется по datasheet или экспериментально 19. return distance; 20. ) 21. 22 . void setup() 23. { 24. // INIT — Инициализация всех компонентов 25. Serial.begin(115200); // Инициализация последовательного порта с высокой скоростью 26. sharp init(); // Инициализация ИК дальномера 27. } 28. 29. void loop() 30. { 31. // Обновление управления сервоприводом 32. int distance = snarp_reaa_mm(); // Чтение расстояния с ИК дальномера в миллиметрах 33. 34. Serial.print(distance); // Вывод расстояния в последовательный порт
Serial.printIn(); 36. 37 . delay(ICO); 38 . } ВНИМАНИЕ. Важно помнить, что ИК дальномеры имеют слепую зону. Для SHARP 2У0а21 измерения ближе 10 см некорректны. Рис. 16.5. Вывод показаний ИК-дальномера Учимся измерять расстояние с УЗ дальномером (HC-SR04) 1. /* === УЗ дальномер (HC-SP.04) === */ 2. 3. ^define SONAR_TRIG_PIN АЗ // Пин для триггера ультразвукового дальномера 4. #define SONAR_ECHO_?IN А4 // Пин для приема эха ультразвукового дальномера 5. 6. // Инициализация ультразвукового дальномера 7. void sonar_init() 8. { 9. pinMode(SONAR_TRIG_PIN, OUTPUT); // Пин триггера - выход 10. pinMode(SONAR_ECHO_PIN, INPUT); // Пин эха - вход
11. 12. Serial.printin(«SONAR INIT»); 13. } 14. 15. Il Функция чтения расстояния с ультразвукового дальномера в миллиметрах 16. int sonar_read_mm() 17. { 18. digitalWrite(SONAR_TRIG_PIN, LOW); // Сброс триггера 19. delayMicroseconds(2) ; 20. digitalWrite(SONAB_TR1G_P1N, HIGH); // Подача сигнала на триггер 21. deiayMicroseconds(10); // Длительность импульса 10 мкс 22. digitalWrite(SONAR_TRIG_PIN, LOW); Il Сброс триггера 23. 24. int duration = pulseln(SONAR_ECHO_PIN, HIGH); // Измерение длительности эхо-сигнала 25. int distance = duration * 0.34 I 2; // Формула пересчета времени в расстояние (скорость звука/2) 26. return distance; 27. ) 28. 29 . void setup () 30. { 31. // INIT — Инициализация всех компонентов 32 . Serial.begin (115200); // Инициализация последовательного порта с высокой скоростью 33. sonar_init(); // Инициализация УЗ дальномера 34. } 35. 36. void loop() 37. { 38. int distance = sonar read_mm(); // Чтение расстояния с УЗ дальномера в миллиметрах 39. 40. Serial.print (distance); // Вывод расстояния в последовательный порт (число в миллиметрах) 41. Serial.printin(); // Вывод символа перевода строки 42. 43. delay(100); 44. }
ВНИМАНИЕ. УЗ дальномеры имеют слепую зону. Для HC-SR04 измере- ния ближе 3 см некорректны! ВАЖНО помнить, что УЗ дальномеры осуществляют измере- ния относительно долго. Время измерения может варьироваться от 1 до Юме (в зависимости от расстояния до объекта и его видимости). Поэтому их не стоит использовать для движения с использованием регуляторов (например, вдоль стенки). Для этих задач лучше использо- вать аналоговые ИК дальномеры. УЗ хорошо подходят для определения присутствия объектов и в других случаях, когда не требуется высокая скорость измерений. Учимся работать с кнопкой Особенность работы кнопки — настройка пина, к которому она под- ключена, в режим INPUT PULLUP. Можно принять это просто, как пра- вило. 1. /* === Кнопка === */ 2. 3. ^define BUTTGN_P1N 12 // Пин для подключения кнопки 4 .
5. // Инициализация кнопки (вход с подтягивающим резистором) 6. void button_init() 7. { 6. pinMode(BUTTON_PIN, INPUT_PULLUP); Il Настройка пина как вход с подтягивающим резистором (HIGH по умолчанию) 9. 10. Serial.printin(«BUTTON INIT»); // Вывод информации oG инициализации кнопки 11. } 12. 13. // Функция проверки, нажата ли кнопка 14. bool button_is_pressed() 15. { 16. return digitalRead(BUTTON PIN) == LOW; // Кнопка нажата, если на пине LOW (из-за подтягивающего резистора) 17. } 18. 19 . void setup() 20. { 21. // INIT — Инициализация всех компонентов 22 . Serial.begin(115200); // Инициализация последовательного порта с высокой скоростью 23. button initO; // Инициализация кнопки 24. } 25. 26. void loop() 27. { 28. bool is_pressed = button_is_pressed(); // Проверка, нажата ли кнопка 29. 30. Serial .print (impressed); // Вывод результата проверки в последовательный порт (1 — нажата, 0 — не нажата) 31 .. Serial .printin () ; // Вывод символа перевода строки 32. 33. delay(100); 34. }
Рис. 16.7. Вывод показаний работы с кнопкой Знакомимся с умной задержкой 1. /* === Умная задержка === */ 2. 3. tfdeiine Ts_ms 10 // Период дискретизации в миллисекундах 4. tfdefine Ts_s (Ts_ms / 1000.0) // Период дискретизации в секундах 5. б. // Функция умной задержки для обеспечения постоянного периода выполнения 7. void smart_delay(int ms) 8. { 9. static uint32_t last_time = 0; // Статическая переменная для хранения предыдущего времени 10. while (millisO — last_time < ms); // Ожидание, пока не пройдет заданное время 11. last_time = millis(); // Обновление времени последнего вызова 12. } 13. 14 . void setup () 15 . { 16 . // INIT — Инициализация всех компонентов 17 . Serial.begin(115200); // Инициализация последовательного порта с высокой скоростью 18. } 19. 20. uint32_t last_time =0; // Статическая переменная для хранения предыдущего времени
21. 22 . void loop () 23. { 24. smart delay(Ts_ms); // Умная задержка для обеспечения постоянного периода выполнения 25. // smart_deiay(10); 26. 27. Serial.printin(millis() — last_time); // Вывод периода итерации в последовательный порт (число миллисекунд) 28. last_time = millis (); // Обновление времени последнего вызова 29. ) Использование умной задержки позволяет получить фиксирован- ное время между итерациями цикла. Это очень важно при использова- нии ПИД регуляторов, поскольку настройка регулятора сильно зависит от периода. При использовании обычного delay0 время между итера- циями цикла изменяется в зависимости от времени выполнения дру- гих команд, тогда как smart _delay() изменяет время задержки так, чтобы суммарное время выполнения цикла было фиксированным. ПРИМЕЧАНИЕ. smart_delayQ не спасет если другие команды в цикле зани- мают больше времени, чем заданное время задержки. Это может привести к неправильной роботе ПИД регуляторов. По этой причине стоит быть внимательным при исполь- зовании очень маленьких значений периодов (в 1...2 мс). Для неторопливых роботов лучше выбрать период 10... 25 мс. 18 18 । 18 18 1В 18 11 IB 18 18 18 18 18 Я RutoKrol IС2 Sno> llaaata* ' Ишим v v ] [ С Utr airtout Рис. 16.8. Вывод периода итерации в последовательный порт (число миллисекунд)
Период выполнения цикла не постоянный ПИД работает плохо Период выполнения цикла фиксирован ПИД работает хорошо Также стоит обратить внимание на использование медленных команд, таких как Serial.print() и чтение УЗ дальномеров. Они могут занимать приличное время и привести к неправильной работе регуля- торов и непостоянному времени выполнения цикла. Считаем перекрестки I I * * * * * * * * * * * * * * * * * * * * * * * * * * * I 2. /* Код предыдущих примеров */ 3. /* кроме void setup() */ 4 /* и void 1оор() */ /*★*★*★★*★**★***★★***★★★*★★★I 6. 7. 8. /* === Подсчет перекрестков === */ 9. 10. int intersection counter = 0; // Счетчик перекрестков (перекресток — когда оба датчика видят черную линию) 11. 12. // Сброс счетчика перекрестков 13. void intrs_reset() 14. ( 15. intersection counter = 0; 16. } 17. 18. // Функция проверки и подсчета перекрестков 19. int intrs_check() 20. { 21. bool is_left_black = left_is_on_black(); // Проверка левого датчика
22. bool is_right black = right_is on_black(); // Проверка правого датчика 23. 24 . static bool is_on cross_old = false; /7 Статическая переменная для хранения предыдущей ошибки 25. 26. bool is_on_cross = is left_black && is right black; // Робот на перекрестке, если оба датчика видят черное 27. 28. // Если перекресток начался (переход из состояния «не на перекрестке» в состояние «на перекрестке») 29. if (is )n cross == tree && is_on_cross old == false) 30. ( 31. intersection_counter++; // Увеличиваем счетчик перекрестков 32. } 33. 34. is >n cross old = is on cross; // Сохраняем текущее состояние для следующего вызова 35. } 36. 37 . void setup () 38. ( 39. // INIT - Инициализация всех компонентов 40 . Serial.begin (115200); // Инициализация последовательного порта с высокой скоростью 41. light_init(); // Инициализация датчиков освещенности 42. 43.intrs reset(); // Сброс счетчика перекрестков 44 } 45. 4 6. void loop () 47. { 4 8. // Обновление управления сервоприводом 49. intrs check(); // Проверка и подсчет перекрестков 50. 51. Serial.print(intersect!on counter); // Вывод результата проверки в последовательный порт (число перекрестков) 52. Serial.printin(); // Вывод символа перевода строки 53. 54. delay(lOO) ; 55. } Работу счетчика перекрестков можно проверить вручную наводя робота датчиками на перекресток или на край стола.
Рис. 16.10 Вывод показаний счетчика перекрестков При каждом наезде на перекресток счетчик увеличивается на 1. Используем регулятор для движения по линии 2. /* Кед предыдущих примерев */ 3. /* креме void setup!) */ 4. /* и void loop!) */ б. 7. /* === Датчики освещенности === */ 8. /* === Моторы === */ 9. /* === Умная задержка === */ 10. 11. 12. /* === Регулятор для движения по линии === */ 13. 14. #define LINE FORW SPEED JMVEL) // Базовая скорость движения вперед 15. #define LINE_KP 0.3 // Пропорциональный коэффициент ПД-регулятора 1G. #define LINE_KD 0 // Дифференциальный коэффициент ПД-регулятсра (в данном случае не используется) 17. 13. // Функция для движения по линии с использованием ПД-регулятора
19. void line_drive() 20. { 21. int left = light_left_read(); // Чтение левого датчика 22. int right = light right_ read(); // Чтение правого датчика 23. 24. // Вычисление сшибки как разницы между отклонениями датчиков от пороговых значений 25. float err = (left — light_ieft -threshold) — (right — light_right_thresnold); 26. 27. static float err_ aid = 0; // Статическая переменная для хранения предыдущей ошибки 28. 29. float р = err * LINE_KP; // Пропорциональная составляющая 30. float delta err = (err - err_old) I Ts s; // Скорость изменения ошибки 31. float d = delta err * LINE KD; // Дифференциальная составляющая 32. 33. err_old = err; // Сохраняем текущую ошибку для следующего вызова 34. 35. float v = LINE_FORW_SPEED; // Базовая скорость движения 36. float u = р + d; // Управляющее воздействие (сумма П и Д составляющих) 37. 38. Serial.print (err); 39. Serial.print (" "); 40. Serial.print (u); 41. Serial.printin(); 42. 43. motor_write(v — u, v + u) , // Задаем скорости моторов с учетом управляющего воздействия 44. } 45. 46 . void setup() 47. { 48. // INIT — Инициализация всех компонентов 49. Serial.begin(115200); // Инициализация последовательного порта с высокой скоростью 50 . motor_init(); // Инициализация моторов 51. light_ir.it () ; // Инициализация датчиков освещенности
52. ) 53. 54 . void loop () 55. ( 56. smart_delay(Ts_ns); // Умная задержка для обеспечения постоянного периода выполнения 57. 58. // Обновление управления моторами 59. line_drive(); // Движение по линии 60. 61. Serial.printin(); !/ Вывод символа перевода строки 62. } Для движения по линии на низких скоростях достаточно исполь- зования П-регулятора. Примерные коэффициенты для маленького и большого олимпиадных роботов представлены в табл. 16.1. Примерные коэффициенты для маленького и большого олимпиадных роботов 1аблиио 16.1 Параметр Маленький робот Большой робот MVEL 80 90 UNE КР 0.1 0 3 LINE.KD 0 Если робот не успевает за поворотами линии следует увеличить коэффициент LINE KP. Если же робота сильно трясет, то коэффициент L1NE_KP стоит уменьшить. Программируем элементарные поведения В этом разделе мы с вами познакомимся со структурой элементар- ных поведений и алгоритмом их написания. Элементарным поведением мы будем называть функцию, кото- рая выполняет определенное законченное действие, например: захват объекта, движение по линии до перекрестка, ожидание нажатия кнопки ит.д. Структуру элементарного поведения можно представить следую- щим образом: 1. void behaviour (/* <Э> параметры поведения */) 2. [ 3. /** <1> Инициализация поведения 4. *
5. * Например — сброс количества перекрестков 6. */ 7. 8. while(true) /* <2> Цикл поведения */ 9. { 10. if(/* <3> Условие завершения выполнения поведения */) И. { 12. break; // <4> Выход из цикла при условии поведения 13. } 14 . 15. smart_delay(); // Умная задержка для обеспечения постоянного периода выполнения 16. } 17. 18. /’’* < 6> Завершение выполнения поведения 19. * 20. * Например — вывод сообщения о завершении поведения или дополнительный проезд по времени 21. */ 22. } Некоторые поведения также могут быть описаны более простой структурой: 1. void behaviour(/* <0> параметры поведения */) 2. { 3. /+* <1> Выполнение простой последовательности действий 4. * 5. */ 6. } Используем функцию ожидания нажатия кнопки Познакомимся с первым примером элементарного поведения: /★*★★★**★★**★★★**★★★★★★★**** I 2. /» Ход предыдущих примеров */ 3. /+ кроме void setup() */ 4. /* и void loop () */ /★**★*★**★**★★★★★*★★★*★★**★*/ 6. 7. /* === Кнопка === */ 3. /* === Умная задержка === */ 9.
10. 11. /* === Функция ожидания нажатия кнопки === */ 12. 13. void wait _butto.n () 14. ( 15. while (true) 16. { 17. smart_delay (Ts_ir.s; ; 18. if (button is_pressed()) break; // Выход из цикла при нажатии кнопки 19. } 20. ) 21. 22 . void setup () 23. { 24. // INIT — Инициализация всех компонентов 25. Serial.begin (115200); // Инициализация последсвательного порта с высокой скоростью 26. button init(); // Инициализация кнопки 27. } 28. 29 . void loop() 30. { 31 wait_button(); // Ожидание нажатия кнопки для продолжения 32. 33. Serial.print("Button pressed at: ”); 34. Serial.print(millis()); // Вывод времени нажатия кнопки 35. Serial.printin(); // Вывод символа перевода строки 36. } Данная функция не имеет блоков инициализации и завершения работы и состоит из одного цикла с условием выхода. Каждую итера- цию цикла производится опрос кнопки. Если кнопка нажата, то цикл прекращается и функция завершается. Пишем автоматическую калибровку Суть калибровки датчиков освещенности в определении порого- вых значений серого для каждого из датчиков. По своей природе дат- чики линии очень чувствительны к уровню освещенности вокруг. При движении по линии по двум датчикам это не страшно, поскольку робот
едет по разнице показаний, котора от освещения почти не зависит. Однако при анализе перекрестков это становится проблемой, поскольку значения черного и белого от освещенности могут сильно зависеть. Простейший алгоритм калибровки можно описать следующим образом: ♦ измерить значение датчика на белом; ♦ измерить значение датчика на черном; ♦ посчитать среднее арифметическое измеренных значений — это и будет порог серого. Алгоритм несложный, однако, требующий ручных измерений при каждом изменении условий освещенности. Для получения наилучших результатов этот процесс необходимо выполнить при каждом запуске робота, что возможно только если его автоматизировать. В автоматическом режиме алгоритм выглядит следующим образом: ♦ начать вращаться на месте так, чтобы датчики прошли и белые и черные участки полигона; ♦ со время вращения запомнить минимальное и максимальное зна- чения датчиков освещенности; ♦ вычислить порог серого как среднее между минимальным и мак- симальным значениями. Этот алгоритм описан в примере ниже в функции calibrate_basic(). В примере используется модифицированная формула, описанная в раз- деле пр. - работу с датчиками освещенности. 1 • / 2 , /* Код предыдущих примерев */ 3 . /* креме void setup () */ 4 . /* и void 1оор() */ 6. 7. /* === Моторы ==- */ 3 . /* === Пищалка === */ 9. /* === Датчики освещенности === */ 10. /* === Кнопка --= */ 11. /* === Умная задержка === */ 12. 13. 14. /* === Функция калибровки датчиков освещенности === */ 15. 16. void calibrate_basic() 17. { 18. buzzer_on(500); // Звуковой сигнал о начале калибровки 19. delay(500);
20. 21. // Инициализация переменных для хранения минимальных и максимальных значений 22. int left white = 1023, left black = 0; 23. int right white = 1023, right black = 0; 24. 25. // Первая фаза калибровки — поворот в одну сторону 26. uint32_t timer = millisО; 27. while (millis() — timer < 500) // В течение 500 мс 28, { 29. smart delay(Ts_ms); 30 31. int left = 1ight_left_read(); 32. int right = 1ight_right_read(); 33. 34. // Обновление минимальных и максимальных значений 35. if (left < left_white) left_white = left; 36. if (left > left black) left_black = left; 37. if (right < right white) ragntwhite = right; 38. if (right > right black) right_black = right; 39. 40. motoi write(-MVEL, MVEL); // Поворот на месте против часовой стрелки 41. } 42. 43. // Вторая фаза калибровки — поворот в другую сторону 44. timer = millis (); 45. while (millis() — timer < 5C0) // В течение 500 мс 46. { 47. smart_delay(Ts _ms); 48. 49. int left = light left read(); 50. int right = light right_read(); 51. 52. // Обновление минимальных и максимальных значений 53. if (left < left_white) left white = left; 54. if (left > left clack) left_black = left; 55. if (right < right_white) right_white = right; 56. if (right > right_clack) right_black = right; 57. 58. motor_write(MVEL, -MVEL); // Поворот на месте по часовой стрелке 59. }
60. 61. // Вычисление пороговых значений как среднего между белым и черным 62. 1 ight_left threshold = (lefr._white + 3 * left black) / 4; 63. light_right_threshold = (right_white + 3 * right black) / 4; 64. // Мы здесь смещаем порог срабатывания датчиков в сторону черного 65. // для более стабильного детектирования перекрестков 66. 67 . motor_write(0, 0); // Остановка моторов 68. 69. // Вывод результатов калибровки 70 . Serial.print("Left blk/wht: "); 71. Serial print (left_black); 72. Serial.print("/"); 73. Seri al.printin(lett_white); 74 . Serial.print("Right blk/wht: "); 75 . Serial.print(right black); 76. Serial.print("/"); 77 . Serial.printin(right_white); 78. 79. Serial.print("Left threshold: "); 80. Seri al.print (light left_threshold); 81. Serial.print(", right threshold: "); 82 . Serial.print(light_right_threshold); 83. Serial.printin (); 84. } 85. 86 . void setup() 87. { 88. // INIT — Инициализация всех компснентоз 89. Serial.begin(115200) ; // Инициализация последовательного порта с высокой скоростью 90 . motor !nit(); // Инициализация мотороз 91. light_init(); // Инициализация датчиков освещенности 92. button init(); // Инициализаци кнопки 93. buzzer_init(); // Инициализация пищалки 94. 95. wait_button(); // Ожидание нажатия кнопки для продолжения 96.
97. calibrate_oasic(); // Выполнение калибровки датчиков освещенности 98. buzzer_or. (400) ; // Звуковой сигнал о завершении калибровки 99. } 100. 101. void 1оор() 102. { 103. } Для использования этой функции достаточно просто вызвать ее после инициализации всех устройств в момент, когда робот готов к калибровке (в примере она вызывается после нажатия кнопки на роботе). После этого в переменные light_left_threshold и light_right_ threshold будут сохранены откалиброванные пороговые значения. Программируем движение по линии в течение заданного времени 2. /* Код предыдущих примеров */ 3. /* кроме void setup() ’/ 4. /* и void loop() */ 5 6. 7. /* === Моторы === */ 8. /* === Пищалка === */ 9. /* === Датчики освещенности === */ 10. /* === Кнопка === */ 11. /* === Умная задержка === */ 12. /к === Регулятор для движения по линии === */ 13. /* === Функция ожидания нажатия кнопки === ♦/ 14. /* === Функция калибровки датчиков освещенности === */ 15. 16. 17. /* === Движение по линии в течение заданного времени === */ 18. 19. void forwara Line ms(int time ms) 20. { 21. uint32_t timer = millisO; 22 .
23. tvhilfe (millis() — timer < time_ms) //3 течение заданного времени 24. { 25. smart_delay(Ts ms); 26. line_drive(); // Движение по линии 27. } 28. 29. motor_write(О, С); // Остановка после завершения 30. } 31. 32 . void setup () 33. { 34. // INIT — Инициализация всех компонентов 35 . Serial.begin (115200); // Инициализация последовательного порта с высокой скоростью 36. motor_init(); // Инициализация моторов 37. light_init(); // Инициализация датчиков освещенности 38. button init(); // Инициализаци кнопки 39. buzzer init(); // Инициализация пищалки 40. 41. wait_outton(); // Ожидание нажатия кнопки для продолжения 42. calibrate basic(); // Выполнение калибровки датчиков освещенности 43. buzzer оп(4С0); // Звуковой сигнал о завершении калибровки 44. 45. wait_button(); // Ожидание нажатия кнопки для продолжения 46. 47. forward_line_ms(5000); // Движение по линии в течение 5000 мс 48. ) 49. 50 . void loop() 51. { 52. }
Движение по линии до заданного количества перекрестков 1 /*★****★★★★★★**★★*★*★*★★★★**/ 2 . /* Код предыдущих примеров */ 3 . /* кроме void setup() */ 4 . /* и void loop () */ у***************************/ 6. 7. /* === Моторы === */ 8. /* === Пищалка === */ 9. /* === Датчики освещенности === */ 10. /* === Кнопка === */ 11. /* === Умная задержка === */ 12. /* === Регулятор для движения пс линии === х/ 13. /* === Подсчет перекрестков === */ 14. /* === Функция ожидания нажатия кнопки === */ 15. /* === Функция калибровки датчиков освещенности === */ 16 /* === Движение по линии в течение заданного времени === */ 17. 18. 19. /* === Движение по линии дс заданного количества перекрестков === */ 20. 21. void forward_line(int intrsoount) 22. { 23. intrs_reset(); // Сброс счетчика перекрестков 24. 25. rfhile (true) 26. { 27. smart_delay(Ts_ms); 28 . 29. line drive(); // Движение по линии 30. intrs_check(); // Проверка перекрестков 31. 32. if (intersection_counter >= intrs_count) break; // Выход, если достигнуто заданное количество перекрестков 33. } 34. 35. buzzercn(400); // Звуковой сигнал о достижении цепи 36. 37. forward_line_rtis (450) ; // Продолжение движения по линии еще 45С мс (чтобы проехать перекресток) 38.
39. motor_write(О, 0); // Остановка 40. } 41. 42 . void setup () 43. { 44. // INIT — Инициализация всех компонентов 45. Ser ial.begin(115200); // Инициализация последовательного порта с высокой скоростью 46. motor_i nit () ; // Инициализация моторов 47. light_init(); // Инициализация датчиков освещенности 48. 49. wait button(); // Ожидание нажатия кнопки для продолжения 50. calibrate basic(); // Выполнение калибровки датчиков освещенности 51. buzzer_on (400); // Звуковой сигнал с завершении калибровки 52. 53. wait button(); // Ожидание нажатия кнопки для продолжения 54 . 55. forward_line(2); // Движение по линии до второго перекрестка 56. } 57. 58 . void loop() 59. { 60. } Учимся разворачиваться на линии в обратном направлении 2. /* Код предыдущих примеров */ 3. /* кроме void setup О */ 4. /* и void loop() */ /★★★*★*★*★★★★*★**★****★★★**★/ 6. 7. /* === Моторы === */ 8. /* === Пищалка === */ 9. /* === Датчики освещенности === */ 10.. /* === Кнопка === */ 11. /х === Умная задержка === */ 12. /* === Функция сжидания нажатия кнопки === */
13. /* === Функция калибровки датчиков освещенности === */ 14. 15. 16. /* === Поворот в сторону до обнаружения линии === */ 17. 18. епшг { 19. LEFT, // Поворот влево 20. RIGHT // Поворот вправо 21. }; 22. 23. void turn_till line(int dir) 24. ( 25. int left_speed = 0, right_speed = 0; 26. // Задаем скорости моторов в зависимости от направления поворота 27. if (dir == LEFT) 28. ( 29. left speed = -MVEL; // Левый мотор назад 30. righo_speed = MVEL; // Правый мотор вперед 31. } 32. else 33. { 34. left_speed = MVEL; // Левый мотор вперед 35. right_speed = -MVEL; // Правый мотор назад 36. } 37. 38 . mocor_write(left_speed, right_speed); // Начинаем поворот 39. delay(200); // Небольшая задержка для гарантированного съезда с линии 40. 41. while (true) 42. { 43. sroart_delay(Ts_ms); 44 . 45. bool is_line_passed = false; 46. 47. // Проверяем, обнаружена ли линия нужным датчиком (зависит от направления поворота) 48. if (dir == LEFT) 49. { 50. is_line passed = left_is_on_black(); 51. }
52. else 53. { 54. is_linc_passed = right_is_on_black(); 55. } 56. 57. if (is_ljne_passed) 58. { 59. break; // Выход из цикла, если линия обнаружена 60. } 61. } 62. 63 . delay(50) ; // Дополнительная задержка для стабилизации на линии 64 . motor_wrice(С, 0); // Остановка 65. delay(250); 66. } 67. 68 . void setup() 69. { 70. // INIT — Инициализация всех компонентов 71. Serial.begin(115200); // Инициализация последовательного порта с высокой скоростью 72. motor init (); // Инициализация моторов 73. light_init(); // Инициализация датчиков освещенности 74. 75. wait button(); // Ожидание нажатия кнопки для продолжения 76. calibrate basic(); // Выполнение калибровки датчиков освещенности 77. buzzer on (400); // Звуковой сигнал с завершении калибровки 78. 79 . wait_button(); // Ожидание нажатия кнопки для продолжения 80. 81. forward_line(2); // Движение по линии до второго перекрестка 82. turn_till_line(RIGHT); // Поворот вправе до обнаружения линии 83. } 84. 85 . void loop () 86. { 87. }
Выполняем манипуляции с объектами "I у***************************/ 2. /* Код предыдущих примеров */ 3. /* кроме void setup() */ 4, /* и void 1оор() */ 6. 7. /* === Моторы === ★/ 8, /* === Пищалка === */ 9, /* === Датчики освещенности === */ 10. /* === Кнопка === */ 11. /* === Умная задержка === */ 12. /* === Регулятор для движения по линии === */ 13. /* === Функция ожидания нажатия кнопки === */ 14. /* === Функция калибровки датчиков освещенности === */ 15. /* === Движение по линии в течение заданного времени === */ 16. /* === Движение по линии до заданного количества перекрестков === */ 17. /* === Повооот в сторону до обнаружения линии === */ 18. 19. /* === Манипуляции с объектами === ★/ 20. 21. // Определение углов сервопривода для захвата и освобождения объекта 22. #dehne GRAB ANGLE 160 // Угол для захвата объекта 23. ^define RELEASE_ANGLE 135 // Угол для освобождения объекта 24. 25. void grab() 26. { 27. servc_write(GRAB_ANGLE); // Установка сервопривода в положение захвата 28. } 29. 30 . void release() 31. { 32. serv>_write(RELEASE ANGLE); // Установка сервопривода в положение освобождения 33. } 34. 35. void setup()
36. { 37. // INIT — Инициализация всех компонентов 39 . Serial.begin (115200); // Инициализация последовательного порта с высокой скоростью 39. mctcr_ir.it () ; // Инициализация моторов 40. light_init(); II Инициализация датчиков освещенности 41. bucton_inic(); // Инициализация кнопки 42. 43. wait_buttcn(); // Ожидание нажатия кнопки для продолжения 44. calibrate basic(); // Выполнение калибровки датчиков освещенности 45. buzzer оп(40С); // Звуковой сигнал о завершении капибрсвки 46. 47. wait_button(); // Ожидание нажатия кнопки для продолжения 48. 49. forward_line(2); // Движение по линии до второго перекрестка 50. turn til] line(RIGHT); // Поворот вправо до обнаружения линии 51. grab(); // Захват объекта 52. delay(400), // Ожидание для завершения захвата 53. releaseO; Il Освобождение объекта 54 . turn_til11ine(LEFT); // Поворот вправо до обнаружения линии 55. } 56 57 . vo id loop () 58. { 59. } Разбираем пример программы । для выполнения действий на полигоне (олимпиадное задание) Приведенная ниже программа показывает пример использова- ния построенных нами компонентов для выполнения простой задачи «сортировки банок», которые так любят придумывать организаторы на олимпиадах (рис. 16.11). На двух перекрестках робот смотрит на нали- чие стены и, если стена есть, он банку не трогает. В противном случае он ее сбивает. После этого он возвращается на базу.
Рис. 16.11. Прохождение роботом полигона 1. /*** ======== Драйверы устройств ======== »/ 2. 3. /** ====== Исполнительные механизмы ======= */ 4 . 5. /* ==== Моторы ==== */ 6. 7. frdefine MOTOR LEFT_DIP PIN 4 // Пин управления направлением левого мотора 8. frdefine MOTOR_LEFT_PWM_PIN 5 // ТИМ-пин для управления скоростью левого мотора 9. frdefine MOTOR_RIGHT_DIR_PIN 7 // Пин управления направлением правого мотора 10. frdefine MOTOR_RIGHT_PWM_PIN 6 // ШИМ-пин для управления скоростью правого мотсра 11. 12. frdefine MVEL 80 II Базовая скорость моторов (0-255) 13. 14. // Инициализация моторов: настройка пинов и вывод информации в Serial 15. void motcr_ir.it ()
16. { 1 7 . pinMode (MOTOR_I.EFT_DIF FIN, OUTPUT); // Настройка пинов направления как выходы 18. pinMode(MOTOR_LEFT PWM_PIN, OUTPUT); // Настройка ШИМ- пинов как выходы 19. pinMode(MOTOR_RIGHT_DIR_PIN, OUTPUT); 20. pinMode(MOTOR_RIGHT_PWM_PIN, OUTPUT); 21. 22. Serial.printin(«MOTOR INIT»); // Вывод информации об инициализации моторов 23. 24. motor write(0,0); // Выдача изначального управления на моторы 25. } 26. 27. // Функция управления моторами, задает скорость и направление для обоих моторов 28. void motor_write(int left, int right) 29. ( 30. // Ограничиваем скорость значениями от -255 до 255 31. left = constrain(left, -255, 255); 32. right = constrain(right, -255, 255); 33. 34. // LEFT 35. digitalWrite(MOTGR_LEFT_DIR_PIN, left > 0); // 1 если вперед, 0 если назад 36. analogWrite(MOTOR LEFT_PWM_PIN, abs(left)); // модуль от скорости (ШИМ) 37. 38. // RIGHT 39. digitalWrite(MOTOR_RIGHT_DIR_PIN, right > 0); 40. analogWrite(MOTOR_RIGHT_PWM_PIN, abs(right)); 41. } 42. 43. /* ==== Сервопривод ==== */ 44 . 45. frincluae «Servo.h» // Подключение библиотеки для работы с сервоприводами 46. 47. ^define SERVO_PIN 9 // Пин для управления сервоприводом 48. 49. Servo servo; // Создание объекта сервопривода 50.
51. II Инициализация сервопривода и вывод информации в Serial 52. void servo init() 53. { 54. servo.attach(SERVE_PIN); // Привязка сервопривода к пину 55. 56. Serial.printin(«SERVO INIT»); 57. } 58. 59. // Функция для установки угла поворота сервопривода 60. void servo write(int angle) 61. { 62. // Ограничиваем угол значениями от 0 до 180 градусов 63. angle = constrain(angle, 0, 180); 64 65. // Установка заданного угла 66. servo.write (angle); 67. } 68. 69. /** ====== Индикаторы ======= */ 70. 71. /* ==== Светодиоды ==== */ 72. 73. #deiine LEO PIN 13 // Пин для управления светодиодом (обычно встроенный светодиод на Arduino) 14. 75. // Инициализация светодиода 76. void led_init() 77. { 78. pinMode(LED_PIN, OUTPUT); // Настройка пина светодиода как выход 79. 80. Serial.printin(«LED INIT»); 81. } 82. 83. II Функция для включения/выключения светодиода 84. void led_write(int state) 85. { 86. digitalWrite(LEDPIN, state); // Установка состояния светодиода (HIGH/LOW) 87. } 88. 89. /* ==== Пищалка ==== */
90. 91. #define BUZZEF FIN 11 // Пин для управления пищалкой (зуммером) 92. 93. // Инициализация пищалки 94. void buzzer_Init() 95. { 96. pinMode (BUZZEF PIN, OUTPUT); // Настройка пина пищалки как выход 97. 98. Serial.printin(«BUZZER INIT»); 99. } 100. 101. // Функция для включения пищалки с заданной частотой 102. void buzzer_on(int freq) 103. { 104. tone (BUZZEF PIN, freq, 200); // Генерация звука с заданной частотой на 200 мс 105. } 106. 107. // Функция для выключения пишалки 108. void buzzer _off() 1 09. { 110 .noTone(BUZZER_PIN); // Остановка генерации звука 111 . } 112 . 113 ./** ====== Датчики ======= */ 114 . 115 ./* ==== Датчики освещенности ==== */ 116 . 117 .#define LIGHT LEFT_PIN АО // Аналоговый пин для левого датчика освещенности 118 .#define LIGHT 3IGHT_PIN Al // Аналоговый пин для правого датчика освещенности 119. 1 20.int light left threshold = ICO; // Пороговое значение для левого датчика (граница черное/белое) 1 21.int 11ght_right_threshold = 100; Il Пороговое значение для правого датчика (граница черное/белое) 122. 123 .// Инициализация датчиков освещенности 124 .void light_init() 125 . {
126 .pinMode(LIGHT_LEFT_PIN, INPUT); // Настройка пинов как входы 127 .pin.Mcde (LIGHT_RIGHT_FIN, INPUT); 128 . 129.Serial.printin(«LIGHT INIT»); 130 . } 131 . 132 .// Функция чтения значения с левого датчика освещенности 133 .int light_left_read() 134 . { 135 .return analogRead(LIGH7_LEFT_PIN); // Чтение аналогового значения (0-1023) 136 . } 137 . 138 .// Функция чтения значения с правого датчика освещенности 139 .int light_right_read() 140 . { 141 .return analogRead(LIGHT_R1GHT_PIN); // Чтение аналогового значения (0-1023) 142 . } 143 . 144 .// Проверка, находится ли левый датчик над черной линией 145 .bool lefc_LS on_black() 146 . { 147 .return light_left_read() > light_left_threshold; // Если значение больше порога, то датчик над черным 148 . } 149 . 150 // Проверка, находится ли правый датчик над черной линией 151 .bool right_is_on_black() 152 . { 153 .return light right_read() > light_right_thresnold; // Если значение больше порога, тс датчик над черным 154 . } 155 . 156 ./* ==== ИК дальномер (Sharp) ====*/ 157 . 158 .#define SHARP PIN A2 // Аналоговый пин для подключения ИК дальномера Sharp 159 .
160 .// Инициализация ИК дальномера 161 .void sharp_init() 162 . { 163 .pinMode(SHARP_PIN, INPUT); // Настройка пина как вход 164 . 165.Serial.printin(«SHARP INIT»); 166 . } 167 . 168 .// Функция чтения расстояния с ИК дальномера в миллиметрах 169 .int sharp_read_mm() 170. { 171.float voltage = analogRead(SHARP_PIN) * 5.0 / 1023.0; // Преобразование считанного значения в напряжение 172.int distance = 400.0 / voltage; // Формула пересчета напряжения в расстояние (зависит от модели датчика) 173 .return distance; 174 . ) 175 . 176 ./* ==== УЗ дальномер (HC-SR04) ====*/ 177 . 178 .#define SONAR_TRIG_PIN АЗ // Пин для триггера ультразвукового дальномера 179 .#define SONAR_ECHO_PIN А4 // Пин для приема эха ультразвукового дальномера 180 . 181 .// Инициализация ультразвукового дальномера 182 .void sonar_init() 183 . { 184 .pinMode(SONAR_TRIG_PIN, OUTPUT); // Пин триггера - выход 185 .pinMode(SONAR_ECHO_PIN, INPUT); // Пин эха - вход 186 . 187.Serial.printin(«SONAR INIT»); 188. ) 189. 190. // Функция чтения расстояния с ультразвукового дальномера в миллиметрах 191 .int sonar_read_mm() 192 . { 193 .digitalWrite(SONAR_TRIG_PIN, LOW); // Сброс триггера 194 .delayMicroseconds(2); 195 .digitalWrite(SONAR_TRIG_PIN, HIGH); // Подача сигнала на триггер
196 .delayMicroseconds(10); // Длительность импульса 10 мкс 197 .digitalWrite(SONAR_TRIG_PIN, LOW); // Сброс триггера 198. 199 .int duration = pulsein(SONAR ECHOPIN, HIGH); // Измерение длительности эхо-сигнала 200 .int distance = duration * 0.34 I 2; // Формула пересчета времени в расстояние (скорость звука/2) 201 .return distance; 202 . } 203 . 204 ./* ==== Кнопка ==== */ 205 . 2O6 .#define BUTTON_PIN 12 // Пин для подключения кнопки 207 . 208 .// Инициализация кнопки 209 .void button init() 21С. { 211.pinMode(BUTTON PIN, INPUT PULLUP); // Настройка пина как вход с подтягивающим резистором 212. 213.Serial.printin(«BUTTON INIT»); 214 . } 215 . 216 .// Функция проверки, нажата ли кнопка 217 .bool button is pressedO 218 . { 219 .return digitalRead(BUTTON_P1N) == LOW; // Кнопка нажата, если на пине LOW (из-за подтягивающего резистора) 220 . ) 221 . 222 ./*** ======== Обработка сигналов ======== */ 223 . 224 ./* ==== Умная задержка ==== */ 225 . 22 6.ldefine Ts_ms 10 // Период дискретизации в миллисекундах 227. Цdefine Ts_s (Tsms / 1000.0) // Период дискретизации в секундах 228. 229. // Функция умной задержки для обеспечения постоянного периода выполнения 230. void spiarn_delay (int ms = Ts_ms) 231. {
23 2.static uint32_t last time = 0; // Статическая переменная для хранения предыдущего времени 233. while (millisO — last_time < ms); // Ожидание, пока не пройдет заданное время 234. last time = millisO; // Обновление времени последнего вызова 235. } 236. 237. /* ===- Подсчет перекрестков ==== */ 238. 239 .int intersection counter = 0; // Счетчик перекрестков (.перекресток — когда оба датчика видят черную линию) 240 . 241 .// Сброс счетчика перекрестков 242 .void intrs_reset() 243 . { 244.i ntersection_counter = 0; 245 . } 246 . 247.// Функция проверки и подсчета перекрестков 2 43.int intrs_check() 249 . { 250 .bool is_left black = left_is_on black(); // Проверка левого датчика 251 .bool is right_black = right_is_on_black() ; // Проверка правого датчика 252 . 253.static bool is on_cross old = false; // Статическая переменная для хранения предыдущего состояния 254 . 255 . bool is_on_cross = is_lef t_black is_right_black; // Робот на перекрестке, если оба датчика видят черное 256 . 257 .// Если перекресток начался (переход из состояния «не на перекрестке» в состояние «на перекрестке») 258 .if (is_on_cross == true &i is_on cross old == false) 259. ( 260 .intersection_counter++; // Увеличиваем счетчик перекрестков 261 . } 2 62. 263.is_on_cross old = is_on_crcss; // Сохраняем текущее состояние для следующего вызова 264 . }
265. 266 ./* ==== Регулятор для движения го линии ==== */ 267 . 268 .#define LINE_FORW_SPEED (MVEL) // Базовая скорость движения вперед 269 .#define L1NE_KP 0.1 // Пропорциональный коэффициент ПД-регулятора 270 .#define LINE_KD 0 // Дифференциальный коэффициент ПД-регулятора (в данном случае не используется) 271 . 2~i2.ll Функция для движения по линии с использованием ПД-регулятора 273 .void line_drive() 274 . { 2 75.int left = light_left_read(); // Чтение левого датчика 2 76.int right = light_cight_read(); // Чтение правого датчика 277 278 .// Вычисление ошибки как разницы между отклонениями датчиков от пороговых значений 279 .float err = (left — light_left_threshold) — (right - light_right_threshold); 280 . 281.static float err_old = 0; // Статическая переменная для хранения предыдущей ошибки 282. 283 .float р = err * LINF_KP; // Пропорциональная составляющая 284 .float, delta err = (err — err old) / Ts_s; // Скорость изменения ошибки 285 .float d = delta_err * LINE_KD; // Дифференциальная составляющая 286 . 287.en_old = err; // Сохраняем текущую ошибку для следующего вызова 288. 289.float v = LINE_FORW_SPEEL; // Базовая скорость движения 290.float u = р + d; // Управляющее воздействие (сумма П и Д составляющих) 291. 292.Serial.print(err); 293.Serial.print(" "); 294.Serial.print(u); 295.Serial.printin(); 296.
297 .motor_write(v — u, v + u); // Задаем скорости моторов с учетом управляющего воздействия 298 . } 299 . 300 ./** ====== Элементарные поведения ======= */ 301 . 302 // Функция калибровки датчиков освещенности 303 .void calibrate_basic() 304 . { 305 .buzzer on(500); // Звуксьой сигнал о начале калибровки 306 .delay(500); 307 . 308.// Инициализация переменных для хранения минимальных и максимальных значений 309.int left_white = 1023, left_black = 0; 310.int right white = 1023, righc^black = 0; 311. 312 .// Первая фаза калибровки — поворот в одну сторону 313 .uint32_t timer = millis(); 314 .while (millis() - timer < 500) // В течение 500 мс 315 . { 316 . зтагг_бе^.ау (); 317 . 318.int Left = light_left_read(); 319.int right = light_right_read(); 320. 321.// Обновление минимальных и максимальных значений 322. if (left. < leit_white) left_white = left; 323.if (left > left black) left_black = left; 324.if (right < right_white) right_white = right; 325.if (right > right_black) right_black = right; 326. 327.motor_write(-MVEL, MVEL); // Поворот на месте против часовой стрелки 328. } 329. 330.// Вторая фаза калибровки — поворот в другую сторону 331. timer = millis О; 332.while (millisO — timer < 500) // В течение 500 мс 333. { 334.smart_lelay (); 335. 336.int left = light_left_read();
337.int right = light right read(); 338. 339.// Обновление минимальных и максимальных значений 340.if (left < left white) left white = left; 341.if (left > left_black) left_black = left; 342.if (right < right white) right white = right; 343.if (right > right black) right black = right, 344 . 345.motor_write(MVEL, --MVEL); // Поворот на месте по часовой стрелке 346. } 347. 343.// Вычисление пороговых значений как среднего между белым и черным 349. light left_threshold = (left_white + left_t>lack) / 2; 350.light rignt threshold = (right_white + right_black) I 2; 351. 352.motor_write(C, 0); // Остановка моторов 353. ЗЬ4.// Вывод результатов кали&рськи 355.Serial.print("Left blk/wht: "); 356.Serial.print(left black); 357.Serial.print("/*) ; 35&.Serial.printIn(left white); 359.Serial.print("Right blk/wht: "); 360.Serial.print(right_black) ; 361.Serial.print("/"); 362.Serial.printin(right white); 363. 364.Serial.print("Left threshold: ") ; 365.Serial.print(light_left threshold); 366.Seri a 1.print(", right threshold: ") ; 367.Serial.print(light_right_threshold); 368 Serial.printin(); 369. } 370. 371.// Функция ожидания нажатия кнопки 372.void waif_nutton() 373. { 374.while (true) 375. { 376.smart_delay();
377 .if (button_iS—pressed()) break; // Выход из цикла при нажатии кнопки 378. } 379. } 380. 381.// Функция движения по линии в течение заданного времени 382..void forward—line ms (int time_ms) 383, { 384.uint32_t timer = millisO; 385. 386.while (millisO — timer < tirce_ms) // В течение заданного времени 387. { 388.smart_delay(); 389.line drive(); // Движение по линии 390. } 391. 392.motor write (0, 0); // Остановка после завершения 393. } 394 . 395 .// Функция движения по линии до заданного количества перекрестков 396 .void forwaro_line(int intrs_count) 397 . { 398.intrs_reset (); // Сброс счетчика перекрестков 399. 400.while (true) 401 . { 402.smart delay!); 403. 404. line drived; // Движение по линии 405.intrs_check (); // Проверка перекрестков 406. 407.if (intersection-rounter >= intrs_ccunt) break; // Выход, если достигнуто заданное количество перекрестков 408. } 409. 410.buzzer_on(400) ; // Звуковой сигнал о достижении цели 411. 412.forward—line ns(450); // Продолжение движения по линии еше 500 мс (чтобы проехать перекресток) 413. 414.motor write(0, 0); // Остановка
415. } 416. 417.// Определение констант для направления поворота 418.enum { 419.LEFT, // Поворот влево 420.RIGHT // Поворот вправе 421. }; 422. 423 .// Функция поворота до обнаружения линии 424 .void turn_till_iine(int dir) 425 . { 426.int left speed = 0, right_speed = 0; 427.// Задаем скорости моторов в зависимости от направления поворота 428.it (dir == LEFT) 429. { 430.left_speed = -MVEL; // Левый мотор назад 431.right speed = MVEL; // Правый мотор вперед 432. } 433.else 434. { 435.left_speea = MVEL; // Левый мотор вперед 436.гight_speed = -MVEL; // Правый мстср назад 437. } 438. 439.motor_write(left speed, right speed); // Начинаем поворот 440.delay(200) ; // Небольшая задержка для гарантированного съезда с линии 441. 442.while (true) 443. { 44 4.smarr_delay() ; 445. 446 .bool is_line_passed = false; 447. 448 .// Проверяем, обнаружена ли линия нужным датчиком (зависит от направления поворота) 449.i f (dir == LEFT) 450. { 451.is_line_passed = left_is_on_olack(); 452. } 453.else
454. { 455.is_line_passed = right_is_cn_black(); 456. } 457. 458.if (is_line_passed) 459. { 46C.break; // Выход из цикла, если линия обнаружена 461. } 462. } 463. 464.delay(5С); // Дополнительная задержка для стабилизации на линии 4 65 . rr.otor_ vrite (0, 0); // Остановка 466.delay(250); 467. } 468. 469.// Определение углов сервопривода для захвата и освобождения объекта 47O.#define GRAB_ANGLE 160 // Угол для захвата объекта 471.»deiine RELEASE_ANGLE 135 // Угол для освобождения объекта 472. 473.// Функция захвата объекта 474.void arab() 475. { 476.servo_write(GRAB ANGLE); // Установка сервопривода в положение захвата 477. } 478. 479.// Функция освобождения объекта 480.void release() 481. { 482.servo_write(RELEASE_ANGLE); // Установка сервопривода в положение освобождения 483. } 484. 485 ./* ==== Основная программа ==== */ 486. 487 .// Функция setup выполняется один раз при запуске 488 .void setup() 489 . { 490 .// INIT — Инициализация всех компонентов 491 .Serial.begin(115200); // Инициализация последовательного порта с высокой скоростью
492.motor init(); // Инициализация моторов 493.servo_init(); 11 Инициализация сервопривода 494.buzzer init(); // Инициализация пищалки 495.light_init(); // Инициализация датчиков освещенности 496.sharp // Инициализация ИК дальномера 497.// sonar init(); // Инициализация УЗ дальномера (закомментировано) 498.led init(); // Инициализация светодиода 499.buEtcn_rnit() ; // Инициализация кнопки ООО. 501.release (); // Установка сервопривода в положение «открыто» 502. 503.Serial.printin("\nlNIT COMPLETEln"); 504 .buzzcr_on(800); // Звуковой сигнал о завершении инициализации 505.delay(200) ; 506.buzzer on(800); 507.delay(200) 508.buzzer on (800); 509. 510.wait_button (); // Ожидание нажатия кнопки для продолжения 511. 512.// CALIBRATION — Калибровка датчиков 513 . Serial.printin("CAILBPATION ENTER"); 514 . 515 .calibrate_oasic (); // Выполнение калибровки датчиков освещенности 516. 517 .Serial.printin(«CALIBRATION COMPLETE») ; 518. 519 .wait_button(); // Ожидание нажатия кнопки для запуска программы 520. 521 .// PROGRAM — Основная программа 522 .Serial.printin("PROGRAM ENTER"); 523. 524 .// Алгоритм движения робота: 525 .forward—line(2); // Движение вперед до 2-го перекрестка 526 .turn_till_line(RIGHT); // Поворот направо до обнаружения линии 527.
528.// Проверка наличия объекта впереди с помощью ИК дальномера 529.if (sharp read_nm() < 40С) // Если объект обнаружен (расстояние менее 400 мм) 530. { 531.turn_till_line(LEFT); // Разворот (поворот налево до линии) 532.turn_till_line(LEFT); // Повторный поворот налево для завершения разворота 533.grab(); // Захват объекта 534.delay(40С) ; // Ожидание для завершения захвата 535.release() ; // Освобождение объекта 536.turn_till Line(RIGHT); // Поворот направо до линии 537. } 538.else // Если объект не обнаружен 539. { 540.turn_tili_Line(LEFT); // Престо поворот налево 541. ) 542.£orward_line(1); // Движение вперед до следующего перекрестка 543. 544 .turn_till line(RIGHT); 545 .// Проверка наличия объекта впереди с помощью ИК дальномера 546.if (sharp_read ran() < 400) // Если объект обнаружен (расстояние менее 400 мм) 547. { 548. turn till_l ine (I.EFT) ; // Разворот (поворот налево до линии) 549. turn till line(LEFT); // Повторный поворот налево для завершения разворота 550.grab (); // Захват объекта 551.delay(400) ; // Ожидание для завершения захвата 552.release (); // Освобождение объекта 553.turn_till_line(RIGHT); // Поворот направо до линии 554. ) 555.else // Если объект не обнаружен 556. { 557.turn_till_line(LEFT); // Просто поворот налево 558. } 559. 560.turn_till_line(RIGHT); // Поворот направо 561.turn_till_line(RIGHT); // Повторный поворот направо (разворот)
562. 563.forward_line(2); и Движение вперед дс ) 2-го перекрестка 564.buzzer_on(3000); и Звуковой сигнал О завершении программы 565.delay (500); 566.buzzer_on(3000); II Звуковой сигнал О завершении программы 567.delay(500); 568.buzzer_on(3000) ; и Звуковой сигнал о завершении программы 569. } 570 571 .// Функция loop выполняется циклически после setup 572 .void loop() 573 . { 574 .// Место для отладки 575 .// Чтобы попасть сюда добавь после иницализации 'return;', чтобы досрочно выйти из 'void setupO' 576 .float dist_mm = sharp_read_mm(); // Чтение расстояния с ИК дальномера 577. 578 .Serial.print(dist_mm); // Вывод расстояния в последовательный псрт 579 .Serial.printIn() ; 580. } Теперь у вас есть полное представление с рабочими примерами, которые помогут вам в выполнении различных олимпиадных заданий.
ГЛАВА 17 ТРЕБОВАНИЯ, ПРИМЕРЫ И ПОНИМАНИЕ КЛЮЧЕВЫХ АСПЕКТОВ В этой главе мы рассмотрим важные аспекты создания схем для Arduino-робота. Что такое ЕСКД и почему это нужно знать на олимпиаде. Здесь вы найдете подробные требования к составлению схем, а также примеры правильного и эффек- тивного их построения. Мы разъясним ключевые различия в типах схем и предоставим практические примеры, которые помогут вам лучше понять, как правильно представить ваши идеи на бумаге. Эта глава станет вашим проводником в мире схемотехники, обеспечивая необходимые знания и навыки для создания четких и надежных схем ваших Arduino-проектов. Готовьтесь к тщательному анализу и успешному созданию схем для вашего робота! Что такое ЕСКД и зачем он нужен ЕСКД - это аббревиатура, которая расшифровывается как «Единая система конструкторской документации». Это набор правил и стандар- тов, по которым инженеры оформляют чертежи и схемы. Представьте себе, что вы собрали робота и захотели, чтобы другой человек мог его повторить. Чтобы он не гадал, где какой провод, компонент и контакт, вы должны все нарисовать четко и понятно — по правилам. Вот для этого и нужен ЕСКД.
Зачем это нужно: ♦ чтобы все схемы и чертежи выглядели одинаково и их можно было легко читать: ♦ чтобы судьи на олимпиаде могли быстро разобраться в вашей схе- ме и не снижали баллы за неразборчивое оформление; ♦ чтобы вы сами не запутались, когда через неделю или месяц вер- нетесь к своему проекту; ♦ чтобы другие ребята могли повторить вашу схему по бумаге или файлу. Что включает ЕСКД: ♦ условные обозначения (например, как правильно рисовать бата- рейку, мотор, диод, провод); ♦ правила нанесения надписей (подписи компонентов, напряжения, пинов); ♦ порядок размещения элементов (например, питание сверху, «зем- ля» снизу); ♦ форматы листов, рамки и технические надписи (например, имя, дата, номер версии схемы). Пример из жизни. Если вы нарисуете просто «коробочку с плюси- ком», никто не поймет, что это. А если вы нарисуете по правилам ЕСКД символ батарейки — сразу видно, что это источник питания. На олим- пиаде по робототехнике участник должен не только собрать и запро- граммировать робота, но и суметь правильно оформить схему его под- ключения, как требуют судьи. || Основные ii требования Перед тем как рисовать электрическую схему для своего робота, важно знать: на олимпиадах проверяют не только работу устройства, но и качество оформления схемы. В этом разделе вы узнаете, какие пра- вила нужно соблюдать, чтобы ваша схема была понятной, правильной и соответствовала требованиям судей. Что обязательно должно быть в схеме: ♦ использование стандартных обозначений (УГО); ♦ все элементы на схеме должны быть нарисованы по правилам ЕСКД — это единые условные графические обозначения, понятные всем инженерам. Примеры: ♦ резистор — прямоугольник; ♦ светодиод — стрелка и треугольник;
♦ мотор — круг с буквой «М»; ♦ кнопка — разомкнутый контакт; ♦ Arduino — прямоугольный блок с подписанными пинами. Указание всех соединений: ♦ все провода между компонентами должны быть нарисованы и под- писаны (например. D9, TRIG, GND, PWM); ♦ если соединения «виртуальные» (например, линия питания 5 В), их тоже надо указать. Питание и земля: ♦ обязательно показать, откуда берется питание (например, бата- рейка, пауэрбанк, VIN); • как соединяется земля (GND) — все модули должны быть подклю- чены к обшей земле. Четкие подписи (компоненты должны быть подписаны); ♦ название (например, «датчик линии», «мотор», «HC-SR04»); ♦ обозначение пина Arduino (например, «D7», «АО»). Рамка и техническая надпись (в нравом нижнем углу): ♦ ФИО автора; ♦ название проекта; ♦ класс/команда; ♦ дата. Термины, которые нужно знать представлены в табл. 17.1. Термины, которые нужно знато Таблица 17.1 Термин Объяснение УГО Условное графическое обозначение - стандартный значок компонента на схеме VCC/5V Питание - ппюг GND Земля - минус, общий провод PWM Импульсно-широтная модуляция - управление скоростью мотора или сервомотора TRIG/ECHO Пины управления ультра звуковым датчиком HC-SR04 IN1.IN2 Управляющие пины драйвера мотора ENA/FNB Включение каната драйвера мотора (часто через ШИМ) SDA/5CL Пины интерфейса PC (для некоторых датчиков) ПРИМЕЧАНИЕ. Никаких «своих» значков - только принятые УГО. Схема - это не просто рисунок, а технический документ. Если схеме оформлена правильно - вам не снизят баллы, а проверяющий сразу поймет, как работает ваш робот.
Понимание различий в схемах Рассмотрим различия между схемами для разных типов компонен- тов. Освоим важные аспекты, такие как правильное подключение пита- ния, заземление и коммутация. Э1 — принципиальная электрическая схема. Это главная схема (рис. 17.1), на которой показаны все электриче- ские связи между компонентами: ♦ как именно соединены плата Arduino, моторы, датчики, кнопки и т.д.; ♦ какие сигналы куда подаются (например, пин D9 идет к сервопри- воду); ♦ как подается питание и где «земля» (GND); ♦ используются условные графические обозначения (УГО) — по стан- дарту ЕСКД.
ПРИМЕЧАНИЕ. На олимпиаде именно Э1 судьи проверяют в первую оче- редь, потому что по ней видно, понимает ли участник, как работает его робот на уровне схемы. Что такое схема ЭЗ? ЭЗ — схема подключения (монтажная схема или соединений). Это вспомогательная схема (рис. 17.2), на которой: ♦ не рисуются УГО, а показываются реальные модули, как они под- ключены; ♦ видно, какие провода куда идут — как будто вы рисуете, как под- ключали на макетке; ♦ часто используется при отладке, чтобы самому не запутаться; ♦ может быть в виде рисунка или картинки (например, Fritzing, Tinkercad, или вручную). Рис. 17.2. Схематическое объяснение принципа работы драйвера двигателей на основе транзисторного моста Н-типа
ПРИМЕЧАНИЕ. На олимпиаде схема Э5 может быть дополнением к Э1, чтобы показать, что вы правильно подключили железо вживую. Принципы проектирования схем Чтобы судьи на олимпиаде легко и быстро разобрались в вашей схеме, она должна быть не только правильной, но и удобной для чтения. Вот несколько важных рекомендаций, которые помогут вам получить за схему максимум баллов: ♦ соблюдайте логичное направление; ♦ старайтесь располагать питание (VCC, 5V) сверху, а «землю» (GND) - внизу; ♦ сигналы (например, от датчиков) лучше вести слева направо — так читается легче. Группируйте элементы по модулям. Разделите схему на модули: отдельно группа датчиков, отдельно двигатели, отдельно питание. Так называемое модульное проектирование облегчает проверку и отладку: ♦ судья сразу видит, где и что делает каждый блок; ♦ вы сами быстрее находите ошибки. Используйте стандартные УГО (условные графические обозна- чения). Это важно для схемы Э1. Судьи могут не засчитать схему, если вы рисуете «на глаз». Например: мотор, резистор, кнопка — у всех есть строго определенные значки по ГОСТу. Подписывайте пины и сигналы. Не забудьте указать: какой нин Arduino куда идет (D9, АО, GND и т. д.). Подпишите названия компонентов: датчик линии, пищалка, серво- мотор и т. п. Оставляйте свободное пространство. Не пытайтесь «впихнуть все в угол». Лучше пусть схема будет чуть больше, но аккуратная, чем плотная и нечитаемая. Добавьте рамку и техническую надпись. На олимпиаде часто требуют, чтобы схема имела рамку (по ЕСКД) с подписью: ФИО Класс / команда. Название проекта. Дата Почему это важно? Судья сможет быстро проверить вашу схему и понять, как работает робот. Вы сможете сами разобраться в своей схеме, если что-то пошло не так. А главное — вы покажете, что умеете мыслить как инженер и оформлять свои решения профессионально.
Примеры правильного составления схем в sPlan Шаг № 1, Создайте новый проект (рис. 17.3). Откройте sPlan и выберите формат листа (обычно А4 в альбомной ориентации). Рис. 17.3. Новый проект в программе sPlan Шаг № 2. Расположите микроконтроллер (рис. 17.4). Добавьте прямоугольник с подписью «Arduino UNO» или «Nano». Обозначьте важ- ные пины: GND. 5V, D2-D13, А0-А5. AS Arduino UNO 1 I ....... + ШИМ Рис. 17.4. Схематическое обозначение Э1 платы контроллера Arduino UNO
Шаг № 3. Добавьте компоненты. Используйте стандартные УГО (условные графические обозначения): моторы, кнопки, светодиоды, резисторы и т. д. Если УГО нет — рисуйте прямоугольники и подписы- вайте их (например, *TCRT500(b). X1 1CRT5000 Сигнал 0-5 В Рис 17 5. Схематическое обозначение Э1 платы датчика линии TCRT5000 А 7 LM2596 Рис. 17.6. Схематическое обозначение Э1 платы стабилизатора питания
Рис. 17.8. Схематическое обозначение Э1 сервоприводов Рис. 17.9. Схематическое обозначение Э1 платы драйвера двигателей Шаг № 4. Соедините элементы линиями Провода на схеме — это обычные прямые линии. Не забудьте указать направление сигнала и подписать линии (например, «TRIG», «INI», «PWM»).
Шаг № 5. Подпишите напряжения. VCC — обычно 5 В или 3,3 В. GND — общий минус, соединяется со всеми модулями. Рис. 1711. Схематическое обозначение Э1 батарейного блока с выключателем Шаг № 6. Добавьте рамку и подпись. В sPlan есть шаблоны рамок с технической надписью. Рис. 1712. Схематическое обозначение рамки 31. Заполните. ФИО%роект, дата, версия схемы Итоговый результат представлен но рис. 17.13 и на последующих рисунках.
Рис 17.14, Вид схемы 33 в программе sPlan
Рис. 17.16. Вид схемы ЭЗ стабилизаторе питания в программе sPlan Рис. 17.17. Вид схемы ЭЗ дальномера Sharp е программе sPlan Рис. 17.18. Вид схемы ЭЗ датчика линии TCRT3000 в программе sPlan
Рис. 17.20. Вид схемы ЭЗ сервопривода в программе sPlan Рис. 17.21. Вид схемы ЭЗ коллекторных моторов в программе sPlan
ГЛАВА 18 ПОПУЛЯРНЫЕ ую ОЛИМПИАДНЫЕ ЗАДАНИЯ ПО ARDUINO Эта глава книги предлагает читателям увлекательное и образовательное погружение в решение олимпиадных задач. В этой главе вы узнаете разнообразные задания, популярные но олимпиадах, и шаги по их решению. Это глава предоставляет читателям возможность не только узнать о том, как реша- ются олимпиадные задачи по Arduino, но и попрактиковаться в их решении, что способствует лучшему усвоению материала и развитию навыков Введение в олимпиадные задания В качестве примеров олимпиадных задач вы можете воспользо- ваться сайтом Робофинист раздел «Задания практической олимпиады» https://robofinist.ru/tasksolymp
Практическая олимпиада по робототехнике: Arduino Международного фестиваля робототехники РОБОФИНИСТ 2024 Задача 1. Поиск и спасение ЗОНА СТАРТА К HOC KVHOVUOT. 33 Описание задания: Робот должен двигаясь строг с по черной линии с перекрестками, находить и перемещать пострадавших' (пластиковые кубики, размер которых не менее 30 мм) з безопасную зону Линия шириной не менее 2С мм. Р0601 не должен превышать размерь. 200x200 мм. и должен умещаться в стартовой зоне на полигоне таким образом чтобы ни одна из частей проекции робота не пересекала пунктирную зеленую линию зоны старта. Безопасная зона находится в конце маршрута, также обозначена зеленой пунктирной линией. На полигоне будут находится «опасные* объекты, которые нельзя перемещать (например, красные кубики) Объект считается перемещенным, если любая часть его проекции вышла за пределы нанесенной линии разметки Если робот переместит такой объект он получит 15 штрафных очков Двигаясь в пределах полигона роботу запрещается пересекать больше одного квадрата без калибровки по черной линии. Правила; • Робот получает 5 баллов за каждый перемещенный в безопасную зону 'пострадавший' • За перемещение опасного объекта начисляется Т5 штрафных баллов ВНИМАНИЕ Роботу запрещается проезжать больше одного квадрата полигона без корректировки по черной линии За проезд роботом более одного квадрата без корректировки по черной линии выполнение задания останавливается, производится подсчет набранных баллов • Задание считается выполненным, когда все «пострадавшие» перемещены в безопасную зону или время выполнения задания вышло. • Время на выполнение задания. 180 секунд • Если робот полностью выполнит задание, оставшиеся секунды делятся на 10 и добавляются к общим баллам • Пост радавший считается дос тавленным в безопасную зону тогда, кода любая часть проекции кубика попадает в безопасную зону Доставленный кубик разрешается убрать из безопасной зоны, когда робот ее покидает • Перед каждой попыткой робот помещается в калибровгчную зону размером 200x200 мм для проверки размеров Время выполнения попытки начинается с команды «старт» псдаваемой судьей соревнования • Участник вправе остановить попытку в любой момент отчетливой командой «стоп попытка» Цель задания Проверить умение участников работать с различными т ипами сенсоров, прот раммировать логику перемещения объектов и избегания препятствий а также оптимизацию маршрута Внешний вид полигона «Поиск и спасение*
Л g Практическая олимпиада по робототехнике: Arduino Международного фестиваля робототехники “ РОБОФИНИСТ 2024 Задача 2. Сейф Описание задания: Робот должен, двигаться строго по черной линии с перекрестками, сканировать карточки перекрестков, которые расположены на маршруте от старта до финиша. Карточка с перекрестками - это участок полигона с черной линиеи, нэ которой могут быть от и до 4 пеоекрестков Робот должен проехать по такой карточке к запомните количес гео перекрестков Доехав до определенного участка, робот должен приблизиться к первой сейфовой ячейке с расположенным на стенке круглым, вращающимся диском. В зависимости от количества перекрестков, робот должен повернуть круглый диск сейфовой ячейки в соответствующее положение по часовой или против часовой стрелки определяемое карточкой и отметкой на самом диске Зона поворотов диска разбита на 4 области; I, II, III и IV, что соответствует карточке с количеством перекрестков После поворота диска в эпределе-чую зону. робот должен остановится на 3 секунды, зафиксировав диск в правильной эоне, одновременно с остановкой подать звуковой сигнал, по которому судья проверяет корректность выполнения попытки. Размер диска сейфовой ячейки - не менее 60 мм в диаметре а в его нижней части находится утяжелитель, возвращающий диск в исходное положение Способы вращения круглого диска определяются участником самостоятельно До начала движения робот не должен превышать размеры 200x200 мм. и должен умещаться в стартовой зоне на полигоне таким образом, чтобы ни одна из частей проекции робота не пересекала пунктирную зеленую линию зоны старта. Робот имеет неограниченное количество попыток установить диск в правильное положение в рамках отведенного на выполнение задания времени, однако каждая следующая повторная попы гка уменьшает количество очков на 5. Робот самостоятельно определяет правильность установки диска используя любые методы и комплектующие из выданного набора Вмешательство в работу робота запрещено. Правила' За правильную установку первого диска робот получает is очков, за второй 20 очков, за третий 30 очков. Количество баллов уменьшается на 5 за каждую повторную попытку установки диска а правильное положение в рамках отведенной попытки Задание считается выполненным, если все сейфовые ячейки были установлень в правильные положения, а сам робот всеми частями своей проекции заехал в зону финиша. Время на выполнение задания ISO секунд Робот может использовать любые датчики или программные методы для проверки правильности положения диска. - Вмешательстве участников в работу робота запрещено Перед каждой попыткой робот помешается в калибровочную зону размером 200x200 мм для проверки размеров. • Время выполнения попытки начинается с команды «старт», подаваемой судьей соревнования. * Участник вправе остановить попытку в любой момент отчетливой командой «стоп попытка» Внешний вид полигона «Сейф» Це>.« задания Проверить умение участников работать с различными сенсорами, программировать логику сканирования и запоминания данных, а также выполнять задачи по манипуляции объектами с точным управлением
| Практическая олимпиада по робототехнике: Arduino Международного фестиваля робототехники тТг РОБОФИНИСТ 2024 Задача 3. Умный манипулятор Описание задания: Робот должен, двигал вся по черной линии, сканировать объекты расположенные в определенной зоне с обеих сторон от него. Объекты расположены в хаотичном порядке на разном удалении от линии движения робота. Задача робота - обнаружить объекть, определите какие из них можно сдвига’о и сдвинуть их с установленных мест так, ч-обы их проекция полнос*ью вышла за пределы зоны установки. края которой обозна чены тонкой оранжевой линиек Объекты имеют ширину не менее 30 мм и высоту не менее 10 мм Размерь и форма объектов могут быть разными, нс не превышать 50 мм в ширину и 100 мм в высоту. Места установки объектов пронумерованы и выставляются согласно карточке жеребьевки Верхняя часть объектов разделена пс цветам - черный или белый Белый означает, что этот объект можно сдвигать, черный цвет запрещав’ сдвигать объект Для перемещения объектов робот должен остановит вся елэ корпус должен оставаться неподвижным Сдвиг объектов должен осуществляться с помощью манипулятора, самосоятелоно собранного участниками и установленного на робе та Запрещено перемещать объекты, пока робот находится в движении по черной линии. Размеры робога не ограничены Задание считается завершенным, когда робот достигнет зоны финиша. Робот может выполните неограниченное количество попыток сдвигать объекты в течение отведенных 180 секунд. Направление перемещения объектов не регламентируется, их можно сдвигать в любую сторону. Правила: • За каждый правильно сдвинутый объект с белой крышкой начисляется 5 баллов. За каждый неправильно сдвинутый объект с черной крышкой начисляется "'О штрафных баллов Задание считается Выполненным, когда робот завершит работу и остановится в зоне финиша • Робот может совершать неограниченное количество попыток сдвигать объекты в течение 18о секунд Сдвиг объектов разрешен только при неподвижном корпусе робота. В движении по черной линии перемещение объектов запрещено • Размеры робота не ог раничены. Участник впдаве остановить попытку в любой момент, отчетливой командой «стог попытка» Цель задания: Проверить навыки участников в создании манипуляторов, программировании управления движением и распознавании объектов, а также в управлении перемещением объектов с учетом ограничений пространства и окружающей среды Внешний вид полним (Умный манипулятор»
fl l Практическая олимпиада по робототехнике: Arduino Международного онлайн-марафона робототехники W РОБОФИНИСТ 2023 Задача 1. «Вышибала» Робот должен, двигаясь пс, черной линии с перекрестками, выбить кубики с занимаемых полочек. Кубики имеют размер не менее ЗОхЗОхЗС мм Ширина линии 20 мм Стартовый размер роботе не может превышать размеры 2и0х20С мм Робог должен полностью умещаться в стартовый квадрат на полигоне Высота робота не ограничена На полках могут присутствовать черные кубики, которые нельзя сдвигать. Задание считается выполненным, когда робот выбьет все кубики и остановится в зоне финиша За каждый выбитый кубик с полки робот получает ТО баллов. За сдвигутый, но не выбитый с полки кубик, робог получает 5 баллов. За сдвинутый черный кубик робот получает штраф ТС баллов На выполнение задания дается 180 секунд Если робот выполнил задание полностью, то к баллам добавляется число сэкономленных секунд разделенное нацело на 10 Задача 2. «Маневрирование» Робот должен двигаясь по черной линии с перекрестками, обнаружить банки, установленные на одном из концов каждого перекрестка и перетащить на его противоположный конец Банка считается переставленной, когда она полностью помещена е зеленый квадрат В центре перекрестков установлены кубики размером не менее ЗОхЗОхЗС мм За правильно переставленную банку робот получает 10 баллов. В процессе выполнения задания робот не должен сдвигать кубики За сдвинутый кубик робо1 получает штрафных баллов Центральные перекрестки отмечены желтыми кругами диаметром не более 265 мм При маневрировании вокруг кубиков допускается съезд с черной линии таким образом, чтобы любая часть проекции робота была внутри желтой зоны В случае покидания роботом пределов желтой зоны, задание завериаетст Задание счи’ается выполненным, когда робот двигаясь ст зоны старта до зоны финиша, переместит все банки на противоположные им позиции. Время останавливается, как только все части проекции робо'а находя’ся в зеленом финишном квадрате. (Рис ". Внешний вид полигона •Вышибала^) (Рис. 2. Внешний вид полигона •Маневрирование*I
Практическая олимпиада по робототехнике: Arduino Международного онлайн-марафона робототехники РОБОФИНИСТ 2023 Задача 3. «Мишень» Робот должен двигаясь по черной линии с перекрестками, занять одну из трех зон в произвольном порядке и выстрелить в банку, находящуюся строго напротив занимаемой зоны Стартовые размеры робота ограничены стартовым квадратам 200x200 мм высота робота не ограничена Производить поражение мишени робот должен, находясь в пределах отведенных на это зон помеченных зеленой пунктирной линией и номерами 1,2, 3. Банки-мишени устанавливаются на подставки на разные высоты, всего 3 варианта. Пораженные мишени убираются судьей с полигона вс зпемя перезарядки робота На пути движения робота в каждую из зон выкладывается карточка с перекрестками по ко юрой робот должен определить, на какую высоту выставлена мишень Один перекресток означает, что банка установлена на высоту одной подставки. Карточки с перекрестками помещаются на полигон с помощью жеребьёвки перед каждой попыткой Механизм, которым робст должен поражать мишени, выдается в полусобранном виде. Допускается его доработка Механизм стреляет одним зарядом деревянной палочкой с безопасным наконечником Участнику разрешается ручная замена/установка метательною предмета и ручное взведение механизма Перезарядка механизма осуществляется по следующему правилу после первого выстрела в мишень эобот должен вернуться в старювый квадрат, остановиться, подать отчётливо слышимый звуковой сигнал, после которою на протяжении Ю с должен находиться в неподвижном состоянии В это время участник перезаряжает механизм По истечению 10 с робо1 должен издать звуковой сигнал длительностью 3 с и начать свое движение. Касаться робота во время выполнения попытки запрещено В случае если участник не успевает перезарядить механизм за отведенное время, он может сделать это после возвращения робота в стартовый квадрат для последующей перезарядки Количество перезарядок не ограничено Запрещается перезапускать программу во время выполнения попыки. Задание считается выполненным, когда робот поразил все 3 мишени и вернулся в место старта всей своей проекцией На выполнение задания дается 180 с. Если робот выполнил задание полностью, то к баллам добавляется число сэкономленных секунд разделенное нацело на 10. (Рис. 3. Внешний вид полигона •Мишень»)
* Практическая олимпиада по робототехнике: Arduino Международного энлайн-марафона робо-итехники ПУ РОБОФИНИСТ 2022 Задача 1. «Солнышко» Задача - найти на полигоне все белые банки и доставить их в кру, Робо г начинает движение из центрального круга диаметром не более 300 мм, ограниченного черной линией шириной 30 мм Робот должен двигаться гс черным линиям Исходящие от круга черные линии имеют длину от 100 до 300 мм и ширину от 10 до 5С мм. На конце каждой линии устанавливается белая или черная банка. Схема расположения банок становится известной участнику перед выполнением каждой попытки Перед началом попытки участник устанавливает робо-ь в центр круга, после чего производится жеребьёвка, в ходе которой определяется схема расположения банок на полигоне Задание считается выполненным, если все белые банки доставлены в круг. Банка считается доставленной, если по скончании выполнения задания ее проекция любой -очкой находится над белым кругом За каждую доставленную белую банку робот получает Ч' баллов, за каждую черную - теряет 10 баллов. На выполнение за ния дается 120 секунд. Если робот выполнил задание полностью к баллам добавляется число сэкономленных секунд, разделенное нацело на 10 Задача 2. «Перевертыши» Робот должен, двигаясь вдоль стенки по линии с перекрестками, в соответствии с заданной схемой повернуть черно-белые плитки, расположенные на стене Робот начинает движение от точки старта Пинии на полигоне имеют ширину 30 мм. С правой стороны от линии находите; стенка, на которой закреплено! черно-белые плитки Высота стены 2чи мм Плитки имеют размер не более 70 мм в ширину и 140 мм в высоту. Лицевая сторона плитки может быть окрашена в цвета: полностью белая, полностью черная, черно-белая На стенке мо'ут находиться плитки «помехи» - плит ки одного цвета, которые робот не должен трогато Схема расположения ллиток становится известной участнику перед выполнением каждой попытки. Перед началом! попытки участник устанавливает робота на линию старта, после чего производится жеребьёвка, в ходе которой определяется схема расположения плиток на стенке. Задача считается выполненной, если по достижению роботом финишной линии все плитки на стенке соответствуют цветовой схеме из карточки За каждую плитку на стенке, перевеочутую дебетом ч соответствии со схемой, робот получает 13 баллов, за неправильно неревернугую - теряет 10 баллов Подсчет баллов производится г< окончании всех действий робота Если пс окончании выполнения задания робот удерживает плитку в неустойчивом положении баллы за нее не учитываются На выполнение задания дается ЮС секунд. Если добот выполнил задание полностью то к баллам добавляется число сэкономленных секунд, разделенное нацело на 10 (Рис ’ Внешни* вид полигона •Солнышки») (Рис. 2. Схема полигона для здания №2 •Перевертыши» I
Примеры реальных олимпиадных конструкций В этом разделе представлены реальные платформы, собранные участниками на прошлогодних олимпиадах по робототехнике. Эти кон- струкции демонстрируют разнообразие инженерных решений, индиви дуальный подход к задачам и творческое мышление, с которым участ- ники подходили к сборке робота. ВНИМАНИЕ. Все фотографии конструкций зашифрованы или обезли- чены - мы не указываем имен, номеров команд или школ Это сделано для того, чтобы соблюсти принципы чест- ной игры и анонимности, установленные регламентом олимпиады. Как использовать эти примеры. Сравните представленные кон- струкции с тем, что вы собираете — возможно, вы найдете интересную идею по компоновке модулей, размещению датчиков или укладке про- водки. Обратите внимание на способы крепления сенсоров, монтажа аккумуляторов, установки захватов — даже мелкие детали могут быть полезны. Попробуйте повторить схему подключения, увиденную на фото, в виде схемы ЭЗ — это отличная тренировка. Что стоит отметить. Нет универсального варианта сборки. Каждый участник адаптирует робота под свое понимание задания и собствен- ные навыки. Успешные конструкции всегда аккуратны: хорошо уложен- ные провода, прочные соединения, удобный доступ к кнопке питания и USB. В некоторых решениях участники добавляли нестандартные эле- менты: шаровые -шоры, собственные платформы, экраны или системы индикации. Фотографии роботов с олимпиады представлены на рис. 18.1 ... рис. 18.6


Рис. 18.6. Зид сп рое а
Образовательная программа для учителей Наведите камеру телефона, чтобы перейти к скачиванию программы Образовательная программа по подготовке к олимпиаде по Arduino предназначена для учащихся 4-11 классов и направлена на формирование прочных знаний и практических навыков е области робототехники, схемотехники и программирования микрокон троллеров. В процессе обучения участники осваиваютосновы работы с компонентами Arduino,учатся собирать мобильные робототехнические пла’формы, выполнять электрические схемы по стандартам ЕСКД и ГОСТ, разрабатывать и отлаживать программы управления робо'ами. Особое внимание уделено работе с датчиками, исполнительными механизмами и системам автоматического управления. Программа включает изучение олимпиадных форматов, решение типсеых теоретических и практических заданий, а также разработку и защиту собственного проекта Учащиеся проходят весь путь - от идеи и конструирования дг защиты готового устройства, получая тем самым опыт, необходимый для уверенного участия ₽ инженерных соревнованиях и олимпиадах Программа развивает техническое мышление, навыки командной работы проектной деятельности и самосгоятельнсго анализа, формируя прочную базу для дальнейшего развития в инженерной и IT-сфере. Разработчик.. Мельников С. Р., руководитель образовательного проекта SERVODRCiD Автор книги «ВЕАМ-робототехника. От азов до создания практических устройств» Группа в Telegram для педагогов, наставников, учащихся Наведите камеру телефона, чтобы перейти к Telegram наведите камеру телефона, чтобы перейти к Telegram Добро пожаловать в сообщество, объединяющее преподавателей, олимпиадных наставников и увлеченных учащихся! Здесь вы можете. - получать актуальную информацию о занятиях, олимпиадах и проектах; - задавать вопросы по Arduino, программированию, схемотехнике и подготовке к олимпиадам; - обмениваться опытом и наработками; делать разбор задач, делиться учебными материалами и полезными ссылками: - получать консультации и участвовать в обсуждениях Присоединяйтесь - вместе растем в инженерии и образовании! Наведите камеру телефона,чтобы перейти к скачиванию программы Файлы для скачивания макетов олимпиадных платформ Наведите камеру телефона, чтобы перейти к скачиванию Файлы для скачивания. Макеты олимпиадных платформ Arduino Здесь вы можете скачать исходные файлы для изготовления и сборки платформ, используемых на занятиях и при подготовке к олимпиаде Маленькая олимпиадная платформа (диаметр -12. 14 см) Чертеж в формате PDF Модель для лазерной резки (DXF) STL-файлы для SD-печати креплений (по необходимости) Схема сборки с расположением модулей Большая олимпиадная платформа (диаметр -18...20 см) Чертеж в формате PDF Файл для лазерной резки (DXF) STL-фаилы (при наличии ЗЭ-деталей) Инструкция по сборке с фото Фаиль» добавляются по мере обновления материалов из откро/тых источников и сообществ в Интернете При копировании - соблюдайте авторское прево Если еам нужна помощь с форматом, пишите в чат!
На видео №1 демонстрируется пример выполнения олимпиадного задания, в котором роботу ставится задача перераспределения определенных кубиков в специальные ячейки, расположенные на полигоне Полигон выполнен е _иде перекрестков, на которых по заданию расставляются кубики двух цветов в случайном порядке, выбираемой жеребьевкой. На видео №2 демонстрируется пример выполнения олимпиадного задания, в котором роботу ставится задача переноса кубиков в подготовленную зону - коробку, которая имеет бортики высотой не менее 5 сантиметров Сложность задачи состоит з том, что робот должен найти ячейки с кубиками, призвести захват кубика манипулятором и доставку кубика в зону так, чтобы кубики не выпали из захвата в овремя транспортировки
ПРИЛОЖЕНИЕ ИНТЕРАКТИВНЫЙ СПРАВОЧНИК ДЛЯ РОБОТОТЕХНИКОВ ПО ARDUINO Плата Arduino - это электронная платформа, состоящая из микро- контроллера на печатной плате с разъенмами для подключения и про- граммирования. Она управляет датчиками, моторами и другими устрой- ствами, принимая входные сигналы (например, от кнопок) и преобразуя их в выходные (например, включая светодиоды). Различные платы, такие как Arduino Uno, Nano или Mega, отличаются форм-фактором, произво- дительностью и количеством портов, а модули расширения (шилды и аксессуары) добавляют специфическую функциональность, например, Wi-Fi, Bluetooth или LCD-дисплеи.
Приложение 1 СЕМЕЙСТВО rUlATARDUINO: Ш СРАВНИТЕЛЬНАЯ ТАБЛИЦА «* Модуль Arduino — это небольшая плата, собранная на микрокон- троллере AVR, которая служит основой для создания любых электрон- ных устройств управления, сигнализации и автоматики, которые могут применяться в самых разных областях электронной техники. Arduino является отличной альтернативой для начинающих разработчиков благодаря тому, что в модуле использован ряд ориги- нальных решений упрощающих разработку как схем, так и программ. Модуль не требует отдельного программатора и предоставляет раз- работчику простые средства обмена информацией с компьютером по последовательному USB каналу. Arduino оказался настолько удачной разработкой и получил настолько широкое распространение во всем мире, что теперь именно он считается самой удачной основой для изу- чения азов микроконтроллерной техники. Для системного представления о платах Arduino рассмотрим свод- ную таблицу (табл. П.1). А в последующих материалах рассмотрим эти платы подробно.
Сравнительная таблица плат Arduino Таблица П.1 Процессор Состав платы Примечание Плата Arduino Due Atmel SAM3X8E ARM Cortex-M3 54 цифровых вход/выхода (из них 12 можно задействовать под выходы ШИМ); 12 аналоговых входов; 4 последовательных порта UART; генератор тактовой частоты 84 МГц; связь по USB с поддержкой OTG; 2 ЦАП; 2 TWI; разъем SPI; разъем JTAG; кнопка сброса; кнопка стирания 8 отличие от других плат Arduino, Arduino Due работает от 3,3 В Т. е. максимальное напряжение, которое выдерживают вход/выходы, составляет 3,3 В. Подав более высокое напряжение, например, S В на выводы Arduino Due, можно повредить плату. Это первая плата Arduino на основе 32-битного микроконтроллера с ARM ядром Плата Arduino Leonardo ATmega32u4 20 цифровых вход/выходов, из них могут использоваться: 7 - как выходы ШИМ; 12 - как аналоговые входы. Частота кварцевого генератора 16 МГц. Плата имеет разъем микро- USB, силовой разъем, разъем ICSP и кнопку перезагрузки В отличие от всех предыдущих плат, ATmega32u4 имеет встроенную поддержку для USB соединения. Такая поддержка позволяет задать, как Leonardo будет виден при подключении к компьютеру (это может быть клавиатура, мышь, виртуальный СОМ порт) Плата Arduino YUN ATmega32u4 иAR9331 от фирмы Atheros Встроенные модули Ethernet и WiFi; USB-порт; слот для карты микро-SD; 20 цифровых вход/ выходов (7 из которых могут использоваться как выходы ШИМ и 12 как аналоговые входы); разъем микро USB; разъем ICSP; 3 кнопки сброса Это первый представитель новейшей серии плат Arduino со встроенным WiFi. Сочетает в себе широчайшие возможности Linux и простоту использования Arduino. Процессор от Atheros поддерживает ОС Linino (версия операционной системы Linux). Из-за ограниченного объема памяти взаимодействие Arduino с различными веб-сервисами является сложной задачей Ведь многие Web-технологии основаны на объемных текстовых форматах (подобных XML), для анализа которых требуется достаточно много памяти Поэтому для Arduino YUN была создана специальная библиотеку Bridge, использование которой позволяет переложить обработку НТТР- транзакций и всех сетевых подключений на сторону Linux Плата Arduino Micro ATmega32u4. разработан совместно с фирмой Adafruit 20 цифровых вход/выходов, их которых: 7 могут использоваться в качестве выходов ШИМ; 12 могут использоваться как аналоговые входы. Частота кварцевого генератора 16 МГц. Плата имеет: гнездо микро-USB; разъем ICSP; кнопку перезагрузки. Малый размер контроллера позволяет легко поместить его на макетной плате. Запитать плату можно: - ог внешнего источника питания 7...12 В (батарейка,аккумулятор или блок питания), используя контакты на плате RAW и GND; напрямую, используя контакты VCC и GND. При этом следует использовать только ток, прошедший через стабилизатор напряжения 5 В, чтобы не вывести плату из строя Приложение 1. Семейство плат Arduino: сравнительная таблица___275
Таблица П1 (продолжение) Процессор Состав платы Примечание Плата Arduinc UNG ATmega328D 14 цифровых входных/выходных выводов (6 из которых могут использоваться в качестве ШИМ выходов), 6 аналоговых входов, кварцевый резонатор 16 МГц, подключение USB. разьем питания разъем ICSP и кнопку перезагрузки Самая популярная версия базовой платформы Arduinc USB. Имеет новый чип ATMega8U2 для последовательного подключения по USB и новую, более удобную маркировку вход/выходов Плата Uno имеет стандартный порт USB. Напряжение внешнего источника питания может быть в диапазоне 6.20 В Не рекомендуется допускать снижения напряжения ниже 7 В из-за нестабильной работы устройства также нежелательно повышать напряжение питания более 12 В,т. к. может перегреется и выйти из строе стабилизатор Рекомендуемый диапазон напряжения питания 7...12 В Плата Arduino Ethernet ATmega328 14 цифровых входов/выходов, 6 аналоговых входов. Частота кварцевого генератора 1ь МГц. Имеет возможность подключить: R145 разъем; разьем питания; соединитель KSP и кнопку «Reset» На плату может быть добавлен дополнительный модуль питания через Ethernet (РоЕ) Выводы 10,11 12 и 13 зарезервированы для сопряжения с модулем Ethernet и не могут использоваться никак иначе Таким образом, число доступных выводов уменьшается до 9.4 из которых могут использоваться как выходы ШИМ Плата Arduino Duemilanove ATnegal68 ИЛИ ATmcga328 14 цифровых входов/выходов 6 из котооых могут использоваться как выходы ШИМ' 6 аналоговых входов кварцевый генератор 16 МГц; разьем USB. силовой разъем разъем ICSP кнопку перезагрузки Является предпоследней версией базовой платформы Arduino USB Duemilanove 'в переводе с итальянского - 2009) была названа в честь года своего выпуска - 2009 год Плата Arduino Dlecimila ATmegal68 14 цифровых входов/выходов, 6 из КОТОРЫХ могут использоваться как выходы ШИМ 6 аналоговых входов, кварцевый генератор частотой 16 МГц. На плате имеются, разьем USB; силовой разъем, разъем ICSP кнопка перезагрузки Arduino Dlecimila питается через подключение USB или от внешнего источника питания Выбор источника питания осуществляется перемычкой ₽WR SFL'для питания через USB необходимо замкнуть ближайшие два вывода к разъему USB. для внешнего источника питания - два ближайших ьыведа к силовому разъему Внешнее питание (не USB) может подаваться через преобразователь напряжения AC/DC (блок питания) или О’аккумуляторной батареи L''ermila (в пеоеводе с итальянского - 10000) была названа в честь выпуска 10000-ой платы Arduino 276 РОБОТОТЕХНИКА HAARDUINO
Таблица П.1 (продолжение) Процессор Состав платы Примечание Плата Arduino Nano ATmega328 (Arduino Nano 3.0) или ATmegal68 (Arduino Nano 2.x) 14 цифровых пинов (D0-D13), 8 аналоговых входов (А0-А7) и 6 выходов ШИМ (3, 5,6,9,10, 11).Также присутствуют специальные выводы для последовательной связи (UART - 0(RX) и 1(ТХ)), шины SPI (ll(MOSI), 12(MISO), 13(SCK), 10(SS)) и l2C (A4(SDA) и AS(SCL)) Компактная платформа с семейства Arduino, которая с одной стороны по функциональности сопоставима с платой Uno, а другой стороны, вся эта функциональность вместилось в компактных размерах, сопоставимых с платой Pro mini. Как и любая другая плата, Nano является открытой платформой и поэтому имеет большое количество разнообразных аналогов. Плата имеет небольшие размеры и может использоваться в лабораторных работах. Плата Nano разработана и производится компанией Gravitech. Имеет схожую с Arduino Duemilanove функциональность, однако отличается сборкой. Отличие заключается в отсутствии силового разъема и работе через кабель Mini-B USB Плата Arduino Mega ATmegal28O 54 цифровых входов/выходов, 14 из которых могут использоваться как выходы ШИМ; 16 аналоговых входов; 4 последовательных порта UART. Частота кварцевого генератора 16 МГц. Плата имеет: разъем USB; силовой разъем; разъем ICSP; кнопку перезагрузки Совместима со всеми устройствами расширения, разработанными для модулей Duemilanove или Diecimila. Может быть запитана от USB либо от внешнего источника питания. Тип источника выбирается автоматически. В качестве внешнего источника питания (не USB) может использоваться сетевой AC/DC-адаптер или аккумулятор/батарея. Напряжение внешнего источника питания может быть в пределах от 6 до 20 В. Уменьшение напряжения питания ниже 7 В приводит к уменьшению напряжения на выводе 5 В, что может стать причиной нестабильной работы устройства Плата Arduino Mega 2560 ATmega2560 54 цифровых входа/выхода (14 из которых могут использоваться как выходы ШИМ); 16 аналоговых входов; 4 последовательных порта UART, USB коннектор, разъем питания, разъем ICSP и кнопку перезагрузки. Частота кварцевого генератора 16 МГц Популярное решение для материнской платы 3D принтера, которое позволяет подключать драйвера шаговых двигателей, датчики температуры экструдера и нагревательной платформы и дисплей.Для работы с 3D принтером необходима также плата RAMPS, которая используется для управления компонентами 3D принтера. Arduino Mega 2560 совместима со всеми платами Duemilanove или Uno. Плата Arduino Mega 2560 совместима со всеми платами расширения, разработанными для платформ Uno или Duemilanove Плата Arduino ADK ATmega2560 54 цифровых входов/выходов, 14 из которых могут использоваться как выходы ШИМ; 16 аналоговых входов; 4 последовательных порта UART. Частота кварцевого генератора 16 МГц. Плата имеет: USB коннектор, разъем питания; разъем ICSP; кнопка перезагрузки. Последовательное подключение через USB реализовано на микросхеме Atmega8U2, также как в платах UNO и Меда Во многом пов-оряет Arduino Mega 2560. USB Host интерфейс реализован на микросхеме МАХ3421е. Особенность платы заключается в наличие USB Host интерфейса, который позволяет подключать контроллер к различным устройствам с интерфейсом USB, включая телефоны и другие устройства на базе Android Приложение 1. Семейство плат Arduino: сравнительная таблица
Таблица П.1 (продолжение) Процессор Состав платы Примечание Плата Arduino LilyPad ATmegal68V (маломощная версия с ATmegal68) или ATmega328V 14 цифровых входов/выходов (из них 6 могут использоваться как ШИМ выходы) и 6 аналоговых входов. Она также может иметь разное количество аналоговых входов в зависимости от модели: например, LilyPad Arduino Simple имеет 4 аналоговых входа. Максимальный ток, проходящий через один вывод, составляет 40 мА Разработана с целью использования как часть одежды. Она может быть зашита в ткань со встроенными источниками питания, датчиками и приводами с проводкой. Arduino LilyPad была создана компаниями Leah Buechley и SparkFun Electronics. Запитывается через USB или от внешнего источника питания. Напряжение внешнего источника питания должно быть в пределах от 2,7 до 5,5 В. В качестве внешнего источника может использовать обычный сетевой AC/DC адаптер или аккумулятор. Напряжение питания LilyPad Arduino не должно превышать 5,5 Вине должно быть отрицательным. При несоблюдении этого условия устройство может выйти из строя Плата Arduino Fio ATmega328P 14 цифровых входов и выходов, 6 из которых могут использоваться как выходы ШИМ; 8 аналоговых входов; резонатор; кнопку перезагрузки; отверстия для монтажа выводов. Работает при напряжении 3,5 В, с тактовой частотой 8 МГц. Содержит схему зарядки через разъем USB и позволяет подключить литий-полимерную батарею. На лицевой поверхности платформы установлен разъем ХВее. Arduino Fio может применяться в беспроводных сетях. Загрузка скетчей может производиться через кабель FTDI или плату-конвертер Sparkfun. Дополнительно имеется возможность загружать скетчи по беспроводной связи при использовании адаптера USB-to-XBee, например, ХВее Explorer USB Плата Arduino Mini ATmegal68 14 цифровых входов и выходов, 6 из которых могут использоваться как выходы ШИМ; 8 аналоговых входов Плата предназначена для использования в тех случаях, когда требуются минимальные размеры. Частота кварцевого генератора 16 МГц. Программируется при помощи адаптера Mini USB или любого преобразователя USB или RS232 bTTL. Недопустимы как превышение питающего напряжения, так и переполюсовка выводов питания Плата Arduino Pro A7megal68 или ATmega328 14 цифровых входов и выходов, 6 из которых могут использоваться как выходы ШИМ; 6 аналоговых входов; силовой разъем батареи; силовой выключатель; кнопку перезагрузки; отверстия для монтажа силового разъема; блок ICSP; блоки выводов Предназначена для непостоянной установки в объекты или экспонаты. Расположение выводов совместимо с платами расширения Arduino. Плата Pro производится в обоих исполнениях 3,3 В / 8 МГц и 5 В / 16 МГц. Шестипиновый блок может подключаться к кабелю FTDI или плате-конвертеру Sparkfun для обеспечения питания и связи через USB 278 РОБОТОТЕХНИКА HAARDUINO
Таблица П.1 (продолжение) Процессор Состав платы Примечание Плата Arduino Pro Mini ATmegal68 14 цифровых входов и выходов, 6 из которых могут использоваться как выходы ШИМ; 6 аналоговых входов; резонатор: кнопку перезагрузки; отверстия для монтажа выводов Блок из шести выводов может подключаться к кабелю FTDI или плате-конвертеру Sparkfun для обеспечения питания и связи через USB. Существует две версии платформы Pro Mini. Одна версия работает при напряжении 3,3 В и частоте 8 МГц, другая - при напряжения 5 В и частоте 16 МГц. Плата предназначена для непостоянной установки в объекты или экспонаты. Расположение выводов совместимо с платформой Arduino Mini Плата USB Serial Light адаптер ATmega8U2 Плата имеет встроенный разъем мини-USB. Вы также можете использовать 5 выводов: RX (для приема данных с компьютера), ТХ (для передачи данных), 5V, Ground (общий провод) и Reset (Сброс). Имеются светодиодные индикаторы питания и активности на линиях RX и ТХ Преобразует USB-канал в последовательный RS-232 канал TTL уровня, который можно подключить непосредственно к Arduino Mini, Arduino Ethernet или другим платам Arduino, не имеющим своего USB адаптера. Обеспечивает указанным платам связь с компьютером и загрузку скетчи. Логика конвертора реализована на базе чипа Atmega8U2, запрограммированном как конвертер из USB в последовательный сигнал,такой же, как на Arduino Uno. Для Windows требуется файл .inf с драйверами Приложение 1. Семейство плат Arduino: сравнительная таблица___279
Приложение 2 РАННИЕ ВАРИАНТЫ ПЛАТ ARDUINO Самые первые варианты Arduino представляли собой платы, на которых был установлен микроконтроллер (использовались микрокон- троллеры AVR) и элементы самой необходимой внешней обвязки: ♦ цепи сброса; ♦ внешний кварцевый резонатор; ♦ стабилизатор напряжения; ♦ несколько светодиодов для индикации питания и сигналов канала связи. С ПК первые Arduino связывались при помощи последователь- ного порта. В микроконтроллере для этого использовался встроенный канал UART. а в ПК — СОМ порт. Последовательный канал в микроконтроллере работает с сигна- лом, принимающим значения' О В и +5 В. В стандарте СОМ использу- ются уровни плюс 12 В и минус 12 В. Поэтому на плате Arduino при- сутствовала схема преобразования уровней. На рис. П. 1 изображен один из первых вариантов Arduino, исполь- зующих СОМ порт для связи с компьютером. СОМ порты в настоящее время уже полностью вытеснены таким универсальным стандартом, как USB. Микросхемы с адаптерами USB-СОМ. На платах Arduino поя- вились микросхемы с адаптерами USB-СОМ. В одном из вариантов маленький модуль с преобразователем USB-СОМ выполнялся как отдельный модуль, который после загрузки и отладки программы в основную плату снимался и мог быть использован для отладки и про- шивки в других разработках. В настоящее время все модели Arduino снабжены USB портами. На сегодняшний день в мире разработано и производится большое коли- чество самых различных моделей Arduino. Полезные упрощения в модуле. Главным преимуществом про- екта Arduino является его простота в понимании и использовании. Для
того чтобы работа с Arduino стала доступнее, авторами был придуман целый ряд упрощений. И одно из них — сквозная нумерация линий ввода-вывода. Так, все цифровые контакты объединены в одну общую группу и прону- мерованы, как контакт 0, контакт 1 и так далее до 13. На самом деле к контактам 0...7 подключены разряды D0...D7 порта PD микроконтрол- лера, а к контактам 8...13 — разряды В0...В5 порта РВ. Однако на языке программирования, который используется для создания программ в модуле Arduino, обращение к любому цифровому контакту произво- дится по его номеру. Группа аналоговых входов. Кроме группы цифровых контактов («пинов») в Arduino имеется группа так называемых аналоговых вхо- дов. Это шесть контактов, расположенных на противоположном «борту» модуля. В Arduino аналоговые входы называются А0,А1,... А5. На самом деле аналоговыми эти входы можно назвать условно В качестве ана- логовых входов используются разряды РСО...РС5 порта PC микрокон- троллера. То есть, это обычные разряды порта, которые могут служить и цифровыми входами, и цифровыми выходами. Но альтернативной функцией именно этих шести выводов микро- контроллера ATmega328P является то, что они могут служить входами внутреннего АЦП. Для упрощения эти входы объявлены аналоговыми. И это в Arduino основной режим их работы. Рис. П.1. Один из первом вариантов платы Arduino, использующий СОМ порт для связи с ПК
Разъем USB Рис. П.2. Схема распиновки модуля Arduino UNO 282 РОБОТОТЕХНИКА HAARDUINO
На плате Arduino контакты, при помощи которых можно произво- дить «аналоговый» вывод информации, обозначены значком «~». Это тоже связано с архитектурой микроконтроллера ATmega328P. Контакты питания «Power». Кроме вышеописанных контактов, на плате Arduino есть группа контактов под общим названием «Power» (питание). Сюда выведены: ♦ шина питания +5 В; ♦ опорное напряжение 3,3 В; ♦ контакт общего провода; ♦ сигнал сброса Так как большинство контактов модуля Arduino напрямую подклю- чены каждый к своему выводу микроконтроллера ATmega328P, для каж- дого из контактов модуля дублируются все альтернативные функции, характерные для соответствующего вывода микроконтроллера. На рис. П.2 изображена схема распиновки модуля Arduino UNO, где для каждого контакта указаны все поддерживаемые им функции. Это поможет вам разобраться с дополнительными функциями каждого кон- такта. ONLINE ВИДЕО Начало работы с Arduino, первые шаги Arduino для начинающих. Начало работы Изучаем Arduino #1 Для «чайников». Изучаем электронику и создаем интерактивные проекты Arduino первый урок для начинающих, программирование arduino с нуля.Ардуино с нуля, уроки ардуин Arduino и микроконтрол- леоы.Для начинающих и не только! Создаем ношу первую программу на Arduino
Приложение 3 ARDUINO UNO Arduino Uno - это устройство на основе микроконтроллера ATmega328 (Datasheet можно посмотреть, перейдя по ссылке рядом). В его состав входит все необходимое для удобной работы с микрокон- троллером: ♦ 14 цифровых входов/выходов (из них 6 могут использоваться в ка- честве ШИМ-выходов); ♦ 6 аналоговых входов; ♦ кварцевый резонатор на 16 МГц; ♦ разьем USB, ♦ разъем питания; ♦ разъем для внутрисхемного программирования (ICSP) и кнопка сброса. Для начала работы с Arduino Uno достаточно просто подать питание от AC/DC-адаптера или батарейки, либо подключить его к компьютеру посредством USB-кабеля. «Uno» (в переводе с итальянского — «один») назван но случаю пред- стоящего выпуска Arduino 1.0. Совместно с Arduino 1 0 данные устрой- ства будут базовыми версиями Arduino. Uno — эталонная модель платформы Arduino и явля- ется последней в серии USB-плат. ПРИМЕЧАНИЕ. В отличие от всех предыду- щих плат Arduino. Uno в каче- стве преобразователя интер- фейсов USB-UART использует микроконтроллер ATmegal6U2 (ATmega8U2 до версии R2) вме- сто микросхемы FTDI. ONLINE ИНФОРМАЦИЯ Datasheet на микроконтроллер АТтеда328
Физические характеристики. Максимальная длина и ширина печатной платы Uno составляет 6,9 см и 5,4 см соответственно, с уче- том разъема USB и разъема питания, выступающих за пределы платы. Четыре крепежных отверстия позволяют прикреплять плату к поверх- ности или корпусу. Внешний вид платы (лицо и оборот) представлен на рис. ПЗ. ПРИМЕЧАНИЕ. Расстояние между цифровыми выводами 7 и 8 не кратно традиционно/м 2.54 мм и составляет 4 мм. Рис.ПЗ. Внешний вид платы Arduino Uno R3. а - вид спереди б - вид сзади
Характеристики платы Arduino Uno представлены в табл. П.2. Внешние виды плат в цвете можно посмотреть, отсканировав OR-коды рядом. Характеристики платы Arduino Uno Таблица П.2 Параметр Значение Микроконтроллер ATmega328 Рабочее напряжение. 3 5 Напряжение питания (рекомендуемое), 8 7.. 12 Напряжение питания (предельное), В 6 20 Цифровые вх.оды/выходы (из них 6 могут использоваться в качестве ШИМ- выходов) 14 Аналоговые входы 6 Максимальный ток одного вывода, мА 40 Максимальный выходной ток вывода 3,3 В, мА 50 Flash память (из них 0,5 Кбайт используются загрузчихэм), Кбайт 32 (АТлпеда328) SRaM. Кбайт 2 (АТтеда323) EEPROM, Кбайт 1 (АГтеда328) Тактовая частота, МГц 16 ONLINE ИНФОРМАЦИЯ Arduino Uno R3 - вид сверху Arduino Uno R5 - вид снизу Arduino Uno R2 - вид сверху Arduino Uno SMD Arduino Uno - вид сверху Arduino Uno - вид снизу На плате Arduino Uno версии R2 — для упрощения процесса обновления прошивки добавлен резистор, подтягивающий к земле линию HWB микроконтроллера 8U2.
Изменения на плате версии R3: ♦ распиновка 1.0, т. е. добавлены выводы SDA и SCL (возле вывода AREF), а также два новых вывода, расположенных возле вывода RESET. Первый вывод (IOREF) позволяет платам расширения под- страиваться под рабочее напряжение Arduino. Данный вывод пред- усмотрен для совместимости плат расширения как с 5V-Arduino на базе микроконтроллеров AVR, так и с 3,ЗУ-платами Arduino Due. Второй вывод ни к чему не подсоединен и зарезервирован для бу- дущих целей; ♦ улучшена помехоустойчивость цепи сброса; ♦ микроконтроллер ATmega8U2 заменен на ATmega 16U2. Схему и исходный проект можнг посмотреть, отсканировав QR коды рядом. ONLINE ИНФОРМАЦИЯ Файлы EAGLE архиве .zip (совместимо с версиями Eagie не ниже 6.0) Схема Arduino Uno Rev3 в Формате pdj ПРИМЕЧАНИЕ. В файлах проекта Arduino могут фигурировать микро- контроллеры АТтеда8 168 или 328. Например, в последних моделях используется микроконтроллер АТтеда328, но на схеме может быть указан микроконтроллер АТтедаЗ. Это не является ошибкой, поскольку все три микросхемы полностью совместимы между собой по выводам. Питание. Arduino Uno может быть запитан от USB либо от внеш- него источника питания. Тип источника выбирается автоматически. В качестве внешнего источника питания (не USB) может использоваться сетевой AC/DC-адаптер или аккумулятор/батарея. Штекер адаптера (диаметр — 2,1 мм, центральный контакт — положительный) необхо- димо вставить в соответствующий разъем питания на плате. В случае
питания от аккумулягора/батареи, ее провода необходимо подсоеди- нить к выводам Gnd и Vin разъема POWER. Напряжение внешнего источника питания может быть в пределах от 6 до 20 В Однако, уменьшение напряжения питания ниже 7 В при- водит к уменьшению напряжения на выводе 5V, что может стать при- чиной нестабильной работы устройства. Использование напряжения больше 12 В может приводить к перегреву стабилизатора напряжения и выходу платы из строя. совет С учетом вышеизложенного, рекомендуется использо- вать источник питания с напряжением в диапазоне от 7 до 12 В Выводы питания, расположенные на плате, представлены в табл. П.З. Выводы питания расположенные на плате Таблица П.З. Вывод Комментарий VlN Напряжение, поьгупающее в Arduino непосредственно от внешнего источника питания (не связано с 5 В от USB или другим стабилизированным напряжением) Через этот вывод можно как подават о внешнее питание гак и потреблять ток. когда устройство запитано от внешнего адаптера 5V На вывод поступает напряжение 5 В от стабилизатора напряжения на пла-е вне независимости от того, как запитано устройство' от адаптера (7...12 В), от USB (5 В) или через вывод VIN (7...12 В) Запитывать устройство через “ыесды 5V или 3V3 не рекомендуется, поскольку в этом случае не используется стабилизатор напряжения, что может привести к выходу платы из строя 3V3 Напряжение 3,3 В пооупающие от стабилизатора напряжения на плате. Максимальный ток. потребляемый от этого вь вода, составляет 50 мА OREF Этот вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера Arduino В зависимости от напряжения, считанного с вывода IQREF. плата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней, что позволит ей работать как с 5V, так и с 3,ЗУ-устройствами GND Выводы земли Память. Объем флеш-памяти ATmega328 составляет 32 Кбайт (из которых 0,5 Кбайт используются загрузчиком). Микроконтроллер также имеет 2 Кбайт памяти SRAM и 1 Кбайт EEPROM (из которой можно счи- тывать или записывать информацию с помощью библиотеки EEPROM). Входы и выходы. С использованием функций pinMode(), digitalWritef) и digitalRead() каждый из 14 цифровых выводов может рабо- тать в качестве входа или выхода. Уровень напряжения на выводах огра- ничен 5 В. Максимальный ток, который может отдавать или потреблять
один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключенными) номина- лом 20.. S0 кОм Помимо этого, некоторые выводы Arduino могут выпол- нять дополнительные функции, представленные в табл. П.4. Выводы платы Ardumo Uno, выполняющие дополнительные функции Таблица П.4 Элементы схемы Выводы Комментарии Последовательный интерфейс 0 (RX) и 1 (ТХ) Используются для получения (RX) и передачи (ТХ) данных по последовательному интерфейсу. Эти выводы соединены с соответствующими выводами микросхемы Almega8U2, выполняющей роль преобразователя USE UART Внешние прерывания 2 и 3 Могут служить источниками прерываний возникающих при фронте,спаде или при низком уровне сигнала на этих выводах ШИМ 3. 5 6,9, 10 и 11 С помощью функции analogWriteC могут выводить 8-битные аналоговые значения в виде ШИМ-сигнала Интерфейс SPI 10 (SS) 11 (MOSI) 12 (MISO) 13 (SCK) С применением библиотеки SPI данные выводы могут осуществлять связь по интерфейсу SPI Светодиод 13 Встроенный светодиод подсоединенный к выводу 13. При отправке значения HIGH светодиод включается, при отправке LOW - выключается Аиало'овые входы А0-А5 В Arduino Uno есть Ь аналоговых входов (АО-АЗ), каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 различных значения). По умолчанию, измерение напряжения отущеттвляется относительно диапазона от 0 до 5 В Тем не менее, верхнюю границу этого диапазона можно изменить, используя вывод AREF и функцию analogRcferenceQ Некоторые из аналоговых входов имеют дополнительные функции: ♦ TWI. Вывод А4 или SDA и вывод А5 или SCL. С использованием би- блиотеки Wire данные выводы могут осуществлять связь по интер- фейсу'TW1; ♦ AREF. Опорное напряжение для анало- говых входов. Может задействоваться функцией analogReference(). Reset. Формирование низкого уровня (I.OW) на этом выводе приведет к переза- грузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения. Связь. Arduino Uno предоставляет ряд возможностей для осуществления связи с компьютером, еще одним Arduino или дру- гими микроконтроллерами. В ATmega328 имеется приемопередатчик UART, позво- ONLINE ИНФОРМАЦИЯ Соответствие выводов Arduino и АГтеда328. Распиновка для микроконтроллеров АТтеда8, АТтеда168 и АТтеда328 идентично
ляющий осуществлять последовательную связь посредством цифровых выводов О (RX) и 1 (ТХ). Микроконтроллер ATmegal6U2 на плате обе- спечивает связь этого приемопередатчика с USB-портом компьютера, и при подключении к ПК позволяет Arduino определяться как вирту- альный СОМ-порт. ПРИМЕЧАНИЕ. Прошивка микросхемы 16U2 использует стандартные драйвера USB-СОМ, поэтому установка внешних драйве- ров не требуется. На платформе Windows необходим только соответствующий .inf- файл. В пакет программного обеспечения Arduino входит специальная программа, позволяющая считывать и отправлять на Arduino простые текстовые данные. При передаче данных через микросхему-преоб- разователь USB-UART во время USB соединения с компьютером, на плате будут мигать светодиоды RX и ТХ. При последовательной пере- даче данных посредством выводов 0 и 1, без использования USB- преобразователя, данные светодиоды не задействуются. Библиотека SoftwareSerial позволяет реализовать последователь- ную связь на любых цифровых выводах .Arduino Uno. В микроконтроллере ATmega328 также реализована поддержка последовательных интерфейсов J2C (TW1) и SPI. В программное обеспе- чение Arduino входит библиотека Wire, позволяющая упростить работу с шиной I2C. Для работы с интерфейсом SPI используйте библиотеку SPI. Программирование. Arduino Uno программируется с помощью программного обеспечения Arduino (можно скачать по ссылке рядом). Для этого из меню Tools > Board необходимо выбрать «Arduino Uno» с микроконтроллером, соответствующим вашей плате ONLINE ИНФОРМАЦИЯ
ATmega328 в Arduino Uno выпускается с прошитым загруз- чиком, позволяющим загружать в микроконтроллер новые про- граммы без необходимости использования внешнего программатора. Взаимодействие с ним осуществляется по оригинальному протоколу STK500 (описание, заголовочные файлы С можно скачать по ссылкам рядом). ПРИМЕЧАНИЕ. Тем не менее, микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In- Circuit Serial Programming), не обращая внимания на за- грузчик. Исходный код прошивки микроконтроллера ATmegal6U2 (или 8U2 на платах версии R1 и R2) находится в свободном доступе. Прошивка ATmegal6U2/8U2 включает з себя DFU-загрузчик (Device Firmware Update), позволяющий обновлять прошивку7 микроконтроллера. Для активации режима DFU необходимо: ♦ на платах версии R1 замкнуть перемычку на обратной стороне платы (возле изображения Италии), после чего сбросить 8U2; ♦ на платах версий R2 и выше для упрощения перехода в режим DFU присутствует резистор, подтягивающий к земле линию HWB микроконтроллера 8U2/16U2. После перехода в DFU режим для загрузки новой прошивки можно использовать программное обеспечение Atmel’s FLIP (для Windows) или DFU programmer (для Mac OS X и Linux). Альтернативный вари- ант — прошить микроконтроллер через разъем для внутрисхемного программирования ISP с помошью внешнего программатора, однако в этом случае DFU-загрузчик затрется. Автоматический (программный) сброс. Используется, чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса. Arduino Uno спроектирован таким образом, который позволяет осуществлять его сброс программно с подключенного ком- пьютера. Один из выводов ATmega8U2/loU2, участвующий в управле- нии потоком данных (DTR), соединен с выводом RF.SFT микроконтрол- лера ATmega328 через конденсатор номиналом 100 нФ. Когда на линии DTR появляется ноль, вывод RESET также переходит в низкий уровень на время, достаточное для перезагрузки микроконтроллера.
ПРИМЕЧАНИЕ. Данная особенность используется для того, чтобы можно было прошивать микроконтроллер всего одним нажатием кнопки в среде программирования Arduino. Такая архитектура позволяет уменьшить таймаут за- грузчика, поскольку процесс прошивки всегда синхрони- зирован со спадом сигнала на линии DTR. Однако эга система может приводить и к другим последствиям. При подключении Uno к компьютерам, работающим на Mac OS X или Linux, его микроконтроллер будет сбрасываться при каждом соединении про- граммного обеспечения с платой. После сброса на Arduino Uno акти- визируется загрузчик на время около пол секунды. Несмотря на то, что загрузчик запрограммирован игнорировать посторонние данные (т.е. все данные, не касающиеся процесса прошивки новой программы), он может перехватить несколько первых байт данных из посылки, отправ- ляемой плате сразу после установки соединения. Соответственно, если в программе, работающей на Arduino, пред- усмотрено получение от компьютера каких-либо настроек или других данных при первом запуске, убедитесь, что программное обеспечение, с которым взаимодействует Arduino, осуществляет отправку спустя секунду после установки соединения. На плате Uno существует дорожка (отмеченная как <vRESET-EN»), разомкнув которую, можно отключить автоматический сброс микро- контроллера. Для повторного восстановления функции автоматиче- ского сброса необходимо спаять между собой выводы, расположенные по краям этой дорожки. Автоматический сброс также можно выклю- чить, подключив резистор номиналом 110 Ом между выводом RESET и 5V. Защита USB от перегрузок. В Arduino Uno есть восстанавливае- мые предохранители, защищающие USB-порт компьютера от коротких замыканий и перегрузок. Несмотря на то, что большинство компьюте- ров имеют собственную защиту, такие предохранители обеспечивают дополнительный уровень защиты. Если от USB-порта потребляется ток более S00 мА, предохранитель автоматически разорвет соединение до устранения причин короткого замыкания или перегрузки.
ONLINE ВИДЕО Описание платы Arduino UNO RS Как прошить Arduino UNO. Обзор платы. Arduino для начинающих Arduino UNO Подключение Что такое Arduino Uno? Обзор плат Arduino Обзор набора Arduino Uno. Набор Starter Kit на базе UNO RS
Приложение 4 ARDUINO LEONARDO Arduino Leonardo — это устройство на базе микроконтроллера ATmega32L'4. Datasheet можно скачать по ссылке рядом. В его состав входит все необходимое для работы с данным микроконтроллером: ♦ 20 цифровых входов/выходов (7 из которых могут работать в каче- стве ШИМ-выходов, 12 — в качестве аналоговых входов); ♦ кварцевый резонатор на 16 МГц; ♦ разъем микро-USB, ♦ разъем питания; ♦ разъем для внутрисхемного программирования ICSP (In-Circuit Serial Programming); ♦ кнопка сброса Максимальная длина и ширина печатной платы Leonardo состав- ляет 6,9 см и 5,4 см соответственно, с учетом разъема USB и разъема питания, выступающих за пределы платы. Четыре крепежных отверстия позволяют прикреплять плату к поверхности или корпусу. Обратите внимание, что расстояние между цифровыми выводами 7 и 8 не кратно традиционным 2,54 мм и составляет 4 мм. Внешний вид платы (лицо и оборот) представлен на рис. П4. Внешний вид Arduino Leonardo без разъемов представлен на рис. П.5. Для начала работы с Leonardo достаточно просто подать питание от АС,Т)С-адаптера или батареи, либо подключить его к компьютеру посредством USB-кабеля. Отличие Leonardo от всех предыдущих плат заключается в том, что его USB-контроллер встроен непосредственно в микроконтроллер ATmega32U4, что исключает необходимость в ONLINE ИНФОРМАЦИЯ Dotas neet микроконтроллера ATmega52U4
6 a Рис. П4. Внешний вид Arduino Leonardo с разьемами: а - вид сверху; б - вид снизу
Рис. П.5. Внешний вид Arduino Leonaido без разъемов дополнительном процессоре. Благодаря этому при подсоединении к компьютеру Leonardo может определяться не только как виртуальный (CDC) СОМ- порт, но и как обычная мышь или клавиатура. Кроме того, такая архитектура оказывает влияние и на поведение платы. Характеристики платы Arduino Leonardo представлены в табл. П.5. Внешние виды плат в цвете можно посмотреть, отскани- ровав OR-коды рядом. Характеоистики платы Arauino Leonardo Таблица П 5 Параметр Значение Микроконтроллер ATmega32d4 Рабочее напряжение В 5 Напряжение питания (рекомендуемое), В 7. .12 Напряжение питания (предельное) Б 6 .20 Цифровые входы/выходы 20 Каналы ШИМ 7 Аналоговые входы 12 Максимальный ток одного вывода, мА 40 Максимальный выходной ток вывода 3 3V, мА 50 Flash-память (из них 4 Кбайт используются загрузчиком), Кбайт 32 (ATmega32u4) SRAM, Кбайт 2,5 (ATmega32u4) EEPROM, Кбайт 1 (ATmega32u4) Тактовая час-ота, МГц 16
ONLINE ИНФОРМАЦИЯ Arduino Leonardo с разъемами - вид спереди Arduino Leonardo - вид сзади Arduino Leonardo без разъемов - вид спереди Схему и исходный проект можно посмотреть, отсканировав QR-коды рядом. ONLINE ИНФОРМАЦИЯ Схема в формате .pdf Питание. Arduino Leonardo может быть запитан от микро-USB либо от внешнего источника питания — тип источника выбирается автома- тически. В качестве внешнего источника питания (не USB) может исполь- зоваться сетевой AC/DC-адаптер или аккумулятор/батарея. Штекер адаптера (диаметр — 2,1 мм, центральный контакт — положительный) необходимо вставить в соответствующий разъем питания на плате В случае питания от аккумулятора/батареи, ее провода необходимо под- соединить к выводам Gnd и Vin разъема POWER. Напряжение внешнего источника питания может быть в пределах от 6 до 20 В.
ВНИМАНИЕ. Уменьшение напряжения питания ниже 7 В приводит к уменьшению напряжения на выводе 5V, что может стать причиной нестабильной роботы устройства Использование напряжения больше 12 В может! приво дить к перегреву стабилизатора напряжения и выходу платы из строя. С учетом этого, рекомендуется исполь зовать источник питания с напряжением в диапазоне от 7 до 12 В В табл. П.6 перечислены выводы питания, расположенные на плате. Выводы питания, расположенные на плате Таблииа П.6 Вывод Комментарий VIN Напряжение поступающее a Arduino непосредственно от внешнего исочника питания (не связано с 5 В о- USB или другим стабилизированным напряжением). Через этот вывод можно как подавать внешнее питание, так и потреблять ток, если устройство запитано от внешнего адаптера 5V Стабилизированное напряжение 5 В, питающее микроконтроллер и другие компонен-ы на плате Может поступать как через стабилизатор напряжения питания VIN так и от USB или другого стабилизированного источника 5 В 3V3 Напряжение 3,3 В, поступающие от стабилизатора напряжения на пла-е. Максимальный выходной так, потребляемой от этого вывода, составляет 50 мА IOREF Рабочее напряжение цифровых входсв/выхог ое платы (эквивалентно напряжению VCC на плате) В Leonaido это напряжение оавно 5 В GND Вотводы земли Память. Объем памяти программ микроконтроллера ATmega32U4 составляет 32 Кбайт (из них 4 Кбайт отведены под загрузчик). Помимо этого, он имеет 2,5 Кбайт оперативной памяти SRAM и 1 Кбайт EEPROM (для взаимодействия с которой служит библиотека EEPROM), Входы и выходы. С использованием функ- ций pinMode(), digitalWriteQ и digitalRead() каж- дый из 20 цифровых выводов может работать в качестве входа или выхода. Рабочее напряже- ние выводов — 5 В. Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключенными) номиналом 20...50 кОм. Помимо этого, некоторые выводы ONLINE ИНФОРМАЦИЯ Соответствие выводов Arduino и ATmega32b'4
Arduino Leonardo могут выполнять дополнительные функции, пред- ставленные в табл. П.7. Выводы платы Arduinc Leonardo, выполняющие дополнительные функции Таблица П.7 Элемент схемы Выводы Комментарии Последова- тельный интерфейс С (RX) 1 (ТХ) Используются для получения (RX) и передачи (ТХ) данных по последовательному интерфейсу посредством аппаратного приемопередатчика, встроенного б ATmega32U4. Обратите внимание, что в Arduinc ^eonaroo класс Serial отвечаем за передачу данных через USB (ССС)-соединение, для передачи данных через выводы 0 и 1 необходимо использовать класс Seriall TWI 2 (SDA) 3 (SCL) С использованием библиотеки Wire данные выводы мо-ут осуществлято связь по интерфейсу tWI Внешние прерывания 3 ।interrupt 0) 2 .'interrupt 1) 0 (interrupt 2 1 (interrupt 3) 7 (interrupt 4) Данные выводы могут быть сконфигурированы в качестве источников прерываний, возникающих при различных условиях: при низком уровне сигнала, по фронту, по спаду или при изменении сигнала Шим 3. 5,6.9, lu 11,12 С помощью функции analogWriteQ могут выводить 8-битные аналоговые значения в виде ШИМ-сигнала Интерфейс SPI Выводы разъема ICSD С использованием библиотеки SPi данные вь воды позволяют осуществлять связо по интерфейсу SPI "братите внимание,что линии SPI выведены только на разъем ICSP и не соединены с выводами платы, как на Arduino Unc. Поэтому,те SPI-платы расширения, у которых нет 6-контактного разъема iCSP для подсоединения к Leonarac работать не будут Светодиод 13 встроенный светодиод, подсоединенный к выводу 13. При с-правке значения HIGH светодиод включается, при отпра-ке LOW - выключается Аналоговые входы A0-A5 A6-AJ1 (на цифровых выводах 4 6, 8, 9 10 и 12) F Arduino Leonardo есть 12 аналоговых входов (АО А! 1). каждый из которых может использоваться как обычный цифровой вывод. Аналоговые входы АО-А5 расположены так же, как и на Arduinc Uno; а входы А6-А11 - на цифровых выводах 4 6,8,9,10 и 12, соотве-ственно. Каждый из входов может представить аналоговое напряжение в виде 10-битнсго числа (1024 различных значения) По умолчанию, измерение напряжения осуществляется относительно диапазона от 0 до 5 В Однако, верхнюю границу это-о диапазона можно изменить, используя вывод AREF и функцию analogReferenceQ AREF Опорное напряжение для аналоговых входов Может задействоватося функцией anaiogReferenceO Reset Формирование низкого уровня |lOW) на этом выводе приведет к перезагрузке микроконтроллера Обычно этот вывод служит для функционирования кнопки сброса на платах расширения Связь. Arduino Leonardo предоставляет ряд возможностей для осу- ществления связи с компьютером, еще одним Arduino или другими микроконтроллерами. В ATmega32U4 имеется приемопередатчик UART, позволяющий осуществлять связь по последовательным интерфейсам посредством цифровых выводов О (RX) и 1 (ТХ). Микроконтроллер 32U4 поддерживает последовательную (CDC) связь через USB и при подклю- чении к компьютеру может определяться как виртуальный СОМ-порт.
При этом микросхема использует стандартные USB-СОМ драйвера и может работать в режиме USB 2.0 Full Speed. На платформе Windows необходим только соответствующий .inf файл. В пакет программ ного обеспечения Arduino входит специальная программа, позволяющая считывать и отправ- лять на Arduino простые текстовые данные. При передаче данных компьютеру через USB на плате будут мигать светодиоды RX и ТХ. ПРИМЕЧАНИЕ. ONLINE ИНФОРМАЦИЯ Программное обес печение Arduino Пои последовательной передаче данных посредством выводов 0 и 1 данные светодиоды не задействуются Библиотека SoftwareSeiial позволяет реализовать последователь- ную связь на любых цифровых выводах Leonardo. В микроконтроллере ATmega32U4 также реализована поддержка последовательных интерфейсов I2C (TW1) и SPI. В программное обеспе- чение Arduino входит библиотека Wire, позволяющая упростить работу с шиной I2C. Для работы с интерфейсом SPI используйте библиотеку SPI. Leonardo может определяться как обычная клавиатура или мышь, и с помощью библиотек Keyboard и Mouse может быть запрограммирован на управление этими устройствами ввода. Программирование. Arduino Leonardo программируется с помо- щью программного обеспечения Arduino (см. QR-код). Для этого из меню Tools > Board необходимо выбрать «Arduino Leonardo* с микро- контроллером, соответствующим вашей плате. ATmega32U4 в Arduino Leonardo выпускается с прошитым загруз- чиком. позволяющим загружать в микроконтроллер новые про- граммы без необходимости использования внешнего программатора. Взаимодействие с ним осуществляется по протоколу AVR109 ПРИМЕЧАНИЕ. Микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In-Circuit Serial Programming), не обращая внимания на загрузчик.
Автоматический (программный) сброс и запуск загрузчика. Чтобы каждый раз перед загрузкой программы не требовалось нажи- мать кнопку сброса, Leonardo спроектирован таким образом, который позволяет осуществлять его сброс программно с подключенного ком- пьютера. Сброс срабатывает после закрытия виртуального СОМ-порта, который предварительно был открыт на скорости 1200 бод. При срабатывании этого условия, процессор сбросится, разорвав USB соединение с компьютером (при этом виртуальный СОМ-порт исчезнет). После перезагрузки процессора, запускается загрузчик, оставаясь активным на протяжении приблизительно 8 секунд. Помимо этого, инициировать загрузчик можно, нажав кнопку сброса на плате Leonardo. ПРИМЕЧАНИЕ. Обратите внимание, что при первом включении устрой- ства вместо запуска загрузчика, контроллер сразу пере- йдет к выполнению пользовательской программы (если таковая есть). СОВЕТ. Из-за особенностей механизма сброса Leonutdo, реко- мендуется предоставлять программному обеспечению Arduino возможность осуществить сбрсс перед загруз- кой программы, особенно, если вы привыкли нажимать кнопку сброса при прошивке других плат Если же программное обеспечение не сможет сбросить устройство, вы всегда сможете запустить загрузчик, нажав кнопку сброса вручную. Защита USB от перегрузок. В Arduino Leonardo есть восстанавли- ваемые предохранители, защищающие USB-порт компьютера от корот- ких замыканий и перегрузок. Несмотря на то, что большинство компью- теров имеют собственную защиту', такие предохранители обеспечивают дополнительный уровень защиты. Если от USB-порта потребляется ток более 500 мА, предохранитель автоматически разорвет соединение до устранения причин короткого замыкания или перегрузки.
ONLINE ВИДЕО Arduino Leonardo Программируемый контроллер Включение и работа платы Arduino Leonardo Arduino Leonatdo: Управляем Клавиатурой и Мышью чере з Python в любом приложении Ардуино Leonardo Как отличить оригинал от подделки Тестиривание плат микро ардуино Леонардо
Приложение 5 ARDUINO DUE Arduino Due — это устройство на основе микропроцессора Atmel SAM3X8E ARM Cortex-МЗ (см Datasheet по QR-коду рядом). Это пер- вая плата Arduino на базе 32-разрядного микроконтроллера ARM. В ее состав входят: ♦ 54 цифровых выводов (из которых 12 мо- jyr работать в качестве ШИМ-выходов); ♦ 12 аналоговых входов; ♦ 4 UART (аппаратных приемопередатчика, осуществляющих последовательную пере- дачу данных); ♦ генератор тактовой частоты на 84 МГц; ♦ USB с поддержкой технологии OTG; ♦ 2 ЦАН (цифро-аналоговых преобразовате- ля); ♦ 2TWI; ♦ разъем питания; ♦ разъем SP1; ♦ разъем JTAG; ♦ кнопка сброса; ♦ кнопка очистки памяти ONLINE ИНФОРМАЦИЯ Datasheet на микропроцессор Atmel SAM3X8E ARM Cortex М3 Физические характеристики и совместимость с платами рас- ширения. Максимальная длина и ширина печатной платы Arduino Due составляет 10,2 см и 5,4 см соответственно, с учетом USB-разъемов и разъема питания, выступающих за пределы платы. Три крепежных отверстия позволяют прикреплять плату к поверхности или корпусу. Обратите внимание, что расстояние между цифровыми выводами 7 и 8 не кратно традиционным 2,54 мм и составляет 4 мм. Внешний вид платы (лицо и оборот) представлен нэ рис. Пб.
Рис П6. Внешний вид Arduino Due а - вид сверх}- б - вид снизу ВНИМАНИЕ. В отличие от других плат Arduino, рабочее напряжение Arduino Due составляет 3,3 В. Соответственно, макси- мальное напряжение, которое могут выдержать его вы- воды, равно 3,3 В. Подача на вывод большего напряже- ния (например, 5 В) может привести к выходу платы из строя.
В состав устройства входит все необходимое для обеспечения работы микроконтроллера. Для начала работы достаточно просто подать питание от АС/ DC-адаптера или батарейки, либо подключить его к компьютеру посредством USB-кабеля. Внешние виды плат в цвете можно посмо- треть, отсканировав QR -коды рядом. ONLINE ИНФОРМАЦИЯ Arduino Due совместим со всеми платами расширения, работаю- щими от 3,3 В, и соответствует требованиям распиновки 1.0: ♦ выводы SDA и SCL (TWI) расположены возле вывода AREF; ♦ предусмотрен свободный вывод, зарезервированный для будущих целей: ♦ присутствует вывод 10REF, позволяющий платам расширения под- страиваться под рабочее напряжение Aiduinu. Благодаря этому, ила ты расширения могут быть совместимы как с 3,3V-Ardumo (подоб- ными Due), так и с 5V-Ardumo на основе микроконтроллеров AVR. Преимущества использования ядра AJRM. Благодаря использо- ванию 32-разрядного ядра ARM, Arduino Due во многом превосходит типичные платы на базе 8-разрядных микроконтроллеров Наиболее существенные отличия заключаются в следующем: ♦ 32-битное ядро позволяет обрабатывать 4х-байтовые данные всего за один такт; ♦ тактовая частота — 84 МГц; ♦ объем оперативной памяти SRAM составляет 96 Кбайт; ♦ объем флеш-памяти программ — 512 Кбайт; ♦ наличие DMA контроллера, позволяющего разгрузить централь- ный процессор от выполнения ресурсоемких операций с памятью. Схему, исходный проект и расположение выводов (распиновку SAM3X) можно посмотреть, отсканировав OR-коды рядом.
ONLINE ИНФОРМАЦИЯ Характеристики платы Arduino Due представлены в табл, П.8 Таблице 11.8 Характеристики платы Arduino Due Параметр Значение Микроконтроллер AT91SAM3X8E Рабочее напряжение, В 5,3 Напряжение питания (рекомендуемое), В 7. 12 Напряжение питания (предельное), В 6 .16 Цифровые выводы (из них 12 MOiyr работать как ШИМ выходы) 54 Аналоговые входы 12 Аналоговые выходы 2 (ЦАП) Суммарный выходной ток всех выводов (максимальный), мА 130 Максимальный выходной ток вывода 5,3V, мА 800 Максимальный выходной ток вывода 5V, ма 800 Flash память, в полном объеме доступная пользовательским программам, кбайт 512 Кбайт SRAM (два банка памяти: 64 Кбайт и 32 Кбайт), Кбайт 96 Тактовая частота 84 МГц Питание. Arduino Duc может быть запитан от USB либо от внеш- него источника питания — тип источника выбирается автоматически. В качестве внешнего источника питания (не USB) может использоваться сетевой AC/DC адаптер или аккумулятор/батарея. Штекер адаптера (диаметр — 2,1 мм, центральный контакт — положительный) необхо- димо вставить в соответствующий разъем питания на плате. В случае питания от аккумулятора/батареи, ее провода необходимо подсоединить к выводам Gnd и Vin разъема POWER. Напряжение внешнего источника питания может быть в пределах от 6 до 20 В.
ВНИМАНИЕ. Уменьшение напряжения питания ниже 7 В приводит к уменьшению напряжения на выводе SV, что может стать причиной нестабильной работы устройства. Использование напряжения больше 12 В может приводить к перегреву стабилизатора напряжения и выходу платы из строя. С учетом этого, рекомендуется использовать источ ник питания с напряжением е диапазоне от 7 В до 12 В. В табл. П.9 перечислены выводы питания, расположенные на плате Arduino Due. Выводы питания, расположенные на плате Arduino Due Таблица П.9 Вь'ьод Комментарий VIN Напряжение, поступающее в Arduino непосредственно от внешнего источника питания (не связано с 5 В от USB или другим стабилизированным напряжением). Через этот вывод мсжно как подавать внешнее питание гак и потребля-ь ток, когда устройство запитано or внешнего адаптера 5V На вывод поступает напряжение 5 В от стабилизатора напряжения на плате, вне независимости от того, как запитано устройство: от адаптера (7... 12 В), от USB (5 В) или через вывод VIN (7 12 В). Внимание Запитывать устройство через выводы 5V или 3V3 не рекомендуется, поскольку в этом случае не используется с-абилизатор напряжения что может привести к выходу платы из строя 3V3 Напряжение 3.3 В. поступающие от стабилизатора напряжения на птате. Данный стабилизатор также обеспечивает питание mi кроконтроллера SAM3X. Максимальный ток, потребляемый ст этого вывода сос-авляет 800 мА I04EF Этот вызод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера Ardu по В зависимости от напряжения, считанного с вывода IOREF плата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней ч-о позволит ей работать как с SV.tbk и с 3, ЗУ-устройствами GND Выводы земли Память. Объем флеш-памяти программ микроконтроллера SAM3X составляет 512 Кбайт (2 блока по 256 Кбайт). Устройство выпускается с прошитым загрузчиком, расположенном в отдельной памяти ПЗУ. Объем доступной оперативной памяти SRAM составляет 96 Кбайт, пред- ставляющих собой два смежных банка памяти по 64 Кбайт и 32 Кбайт соответственно. Вся доступная память (Flash, ОЗУ и ПЗУ) имеет общее линейное адресное пространство. Кнопка удаления, расположенная на плате, позволяет очистить Flash-память микроконтроллера SAM3X и стереть текущую загружен- ную программу. Для этого необходимо нажать и удерживать ее в тече- ние нескольких секунд. Входы и выходы. Цифровые входы/выходы: выводы 0-53. С использованием функций pinMode(), digitalWriteo и digitalRead()
каждый из 54 цифровых выводов может работать в качестве входа или выхода. Рабочее напряжение этих выводов составляет 3,3 В. Максимальный выходной ток каждого вывода колеблется в пределах от 3 мА до 15 мА (в зависимости от вывода), а максимальный входной ток — от 6 до 9 мА (в зависимости от вывода;. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключен- ными) номиналом 100 кОм. Помимо этого, некоторые из выводов могут выполнять дополни- тельные функции, представленные в табл. П.10. Выводы платы Arduino Due. выполняющие дополнительные функции Таблица П.10 Интерфейс Выводы Комментарии Последовательный интерфейс Serial 0 (RX) и 1 (ТХ) Испог ьзуются для получения (RX) и передачи (ТХ) последовательных данных (уровень напряжения TTL 3,3 В). Выводы С и 1 соединены г соответствующими -ыводами микросхемы ATmeqal6U2 выполняющей роль преобразователя USB-UART Последовательный интерфейс Serial 1 19 (RX) и 18 (ТХ) Последовательный интерфейс Serial 2 17 (RX) и 16 (ТХ) Последовательный интерфейс Serial 3 15 (RX) и 14 (ТХ) ШИМ 2. .13 С помощью функции analogWriteQ могут ныводи1ь 8-битные аналоговые значения в виде ШИМ-си1нала. Разрядность ШИМ можно изменить с помощью функции analocWriteResolutionQ Интерфейс SPI 5PI (на платах Arduino разъем ICSP) С применением библиотеки SPI данные выводы мстут осуществлять связь по интерфейсу SPI. Линии SPI выведены на ь-контактный разъем по центру платы физически совместимый с Uno. 1 eonardc и Меоэ256С Обратите внимание.что разъем 5PI не предназначен для внутрисхемного программирования микроконтроллера SAM3X и может использоваться только для связи с другими SPI-устройствами. Кроме того в Aidoino Due SPI имеет ряд дополнительных возможностей которые можно использовать с помощью специальных методов Интерфейс CAN CANRX и CANTX Данные выводы поддерживают проюкол связи CAN, однако на данный момент ею реализация в Arduino API пока отсутствует «L» светодиод 13 Встроенный светодиод, подсоединенный к выводу 13. При отправке значения HIGH светодиод включается, при отправке 1OW - выключается. Помимо зтого. яркость свечения светодиода можно регулировать, поскольку вывод 1 3 может работа-ь как ШИМ-выход Интерфейс TWi 1 20 (SDA) и 21 (SCL) С использованием библиотеки Wire данные выводы могут осуществлять связь по интерфейсу TWI Интерфейс IWI 2 SDA1и SCL1 Аналоговые входы: выводы АО-All. В Arduino Due есть 12 анало- говых входов, каждый из которых может представить аналоговое напря- жение в виде 12 битного числа (4096 значений). Разрядность АЦП, взаи- модействующего с этими выводами, по умолчанию, установлена в 10 бит (для совместимости с другими платами Arduino). Изменить разрядность
АЦП можно с помощью функции analogReadResolution(). На аналого- вые входы Arduino Due можно подавать напряжение в диапазоне от 0 до 3,5 В. При подаче большего напряжения микроконтроллер SAM3X может выйти из строя. Функция analogReferenceO в Arduino Due игнорируется. На плате вывод AREF соединен с выводом опорного напряже- ния микросхемы SAM3X через резисторный мост. Для использования вывода AREF необходимо выпаять резистор BR1. DAC1 и DAC2. Аналоговые выходы 12-битного цифро-аналогового преобразователя. С помошью функции analogWrite() позволяют фор- мировать 4096 различных уровня напряжения. Данные выводы могут использоваться для создания аудио-выхода (см. библиотеку Audio). Другие выводы на плате: ♦ AREF. Опорное напряжение АЦП. Используется функцией analogReferenceO; ♦ Reset. Формирование низкого уровня (LOW) на этом выводе при- ведет к перезагрузке микроконтроллера. Обычно этот вывод слу- жит для функционирования кнопки сброса на платах расширения. Связь. Arduino Due предоставляет ряд возможностей для осущест- вления связи с компьютером, еще одним Arduino или другими микро- контроллерами, а также с различными устройствами, такими, как теле- фоны, планшеты, камеры и т. д. В микроконтроллере SAM3X есть один аппаратный UART и три аппаратных USART для реализации последова- тельных интерфейсов с TTL-уровнем напряжения 3,3 В. USB-порт для программирования на плате взаимодействует с микросхемой ATmegal6U2, выполняющую роль USB-UART преобразо- вателя, который при подключении к компьютеру опреде.ляется как вир- туальный СОМ-порт. ПРИМЕЧАНИЕ. Для корректной идентификации на Windows-системах потребуется jnf-файл, на системах с OSX и LINUX пла- та распознается автоматически. Микросхема 16U2 соединена с аппаратным приемопередатчиком UART микроконтроллера SAM3X. Для программирования микрокон- троллера через микросхему ATmegal6U2 используются выводы RX0 и ТХО. В пакет программного обеспечения Arduino входит специальная программа, позволяющая считывать и отправлять на Arduino про- стые текстовые данные. При передаче данных через микросхему-пре- образователь USB-UART во время USB- соединения с компьютером, на плате будут мигать светодиоды RX и ТХ. (При последовательной
передаче данных посредством выводов 0 и 1, без использования USB- преобразователя, данные светодиоды не задействуются). Штатный USB-порт на плате также соединен с контроллером SAM3X и предназначен для последовательной (CDC) передачи данных через USB. Данный порт позволяет Arduino взаимодействовать с раз- личными приложениями на компьютере (например, Serial Monitor или др.). Использование штатного USB-портэ при подсоединении к ком- пьютеру позволяет Arduino Due работать в качестве USB-мыши или клавиатуры. Штатный USB-порт также может работать какиЗВ-хост и поддержи- вает подключение периферийных устройств, таких как мыши, клавиа- туры или смартфоны. Поддержка последовательных интерфейсов TWI и SPI. В микро- контроллере SAM3X также реализована поддержка последовательных интерфейсов TW1 и SPI В программное обеспечение Arduino входит библиотека Wire, позволяющая упростить работу с шиной I2C. Для работы с интерфейсом SPI используйте библиотеку SPI. Программирование. Arduino Due программируется с помощью программного обеспечения Arduino (см ссылку по QR-коду, располо- женную рядом). Процесс загрузки программ в микроконтроллер SAM3X отличается от процесса прошивки AVR-микроконтроллерса, используемых в дру- гих платах Arduino. Особенность SAM3X заключается в том, что для его перепрошивки требуется предварительно с(читать Flash-память кон- троллера. Такая необходимость обусловлена тем, что процесс загрузки программы контролируется загрузчиком в ПЗУ SAM3X, который запу- скается только при условии отсутствия программы во Flash-памяти микроконтроллера. ПРИМЕЧАНИЕ. Любой из USB-портов может ис- пользоваться для прошивки пла- ты. Тем не менее, рекомендуется использовать USB-nopm для про- граммирования в силу некоторых особенностей процесса очистки памяти микроконтроллера ONLINE ИНФОРМАЦИЯ Порт для программирования. Для исполь- зования этого порта в среде разработки Arduino
IDE в качестве рабочей платы выберите «Arduino Due (Programming Port)». Подсоедините Due к компьютеру, соединив USB-кабель с разъ- емом для программирования (расположенным ближе к разъему пита- ния). Порт для программирования взаимодействует с микросхемой 16U2, выполняющей роль преобразователя USB-UART. Микросхема 16U2 в свою очередь соединена с первым UART микроконтроллера SAM3X (выводы RX0 и ТХО), а также управляет его выводами Reset и Erase. При открытии и закрытии порта на скорости 1200 бод, на выводах Erase и Reset формируется активный уровень, что приводит к очистке памяти микроконтроллера. Таким образом, срабатывает так называе- мая процедура «аппаратной очистки» перед взаимодействием с UART SAM3X. Этот способ более надежен, чем «программная очистка» при использовании штатного USB -порта, и работает даже в случае зависа- ния процессора. Именно поэтому для прошивки Arduino Due рекомен- дуется использовать порт для программирования. Штатный USB-порт. Для использования этого порта в среде раз- работки Arduino IDE в качестве рабочей платы выберите «Arduino Due (Naive USB Port)». Штатный USB-порт соединен непосредственно с микроконтроллером SAM5X. Подсоедините Due к компьютеру, соеди- нив USB-кабель со штатным USB-разьемом (расположенным ближе к кнопке сброса). Открытие и закрытие порта на скорости 1200 бод при- ведет к срабатыванию процедуры «программной очистки», во время которой очищается flash-память, перезагружается микроконтроллер и стартует загрузчик. Поскольку эта процедура выполняется исклю- чительно программой самого микроконтроллера SAM3X, то в случае зависания последнего процесс очистки может не произойти. При этом открытие/закрытие штатного порта на различных скоростях не помо- жет перезагрузить микроконтроллер. ПРИМЕЧАНИЕ В отличие от других плот Arduino. для программиро- вания которых используется avrdude, процесс прошив- ки Arduino Due осуществляется с помощью программы bossac. Исходный код прошивки микроконтроллера ATmegal6U2 доступен в репозит ории Arduino. Прошить микроконтроллер можно через разъем для внутрисхемного программирования ISP с помощью внешнего про- грамматора (в этом случае затрется DFU загрузчик). Защита USB от перегрузок. В Arduino Due есть восстанавливае- мые предохранители, защищающие USB-порт компьютера от коротких
замыканий и перегрузок. Несмотря на го, что большинство компьюте- ров имеют собственную защиту, такие предохранители обеспечивают дополнительный уровень зашиты. Если от USB-порта потребляется ток более 500 мА, предохранитель автоматически разорвет соединение до устранения причин короткого замыкания или перегрузки. Arduino Due спроектирован таким образом, чтобы обеспечивать совместимость с большинством плат расширения для Uno, DiecimiJa или Duemilanove. Расположение основных выводов платы полностью эквивалентно: ♦ цифровые выводы 0-13 (а также смежные выводы AREF и GND); ♦ аналоговые входы 0-5; • разъем POWER; ♦ разъем «ICSP» (SP1). Все выводы расположены на одинаковых расстояниях друг относи- тельно друга. Кроме того, линии основного приемопередатчика UART соединены с одними и теми же выводами (0 и 1). ВНИМАНИЕ. ды 4 и 5). Номера выводов I2C на Arduino Due (20 и 21) отличают- ся от выводов Duemilanove / Diecimila (аналоговые вхо- ONLINE ВИДЕО Arduinc Due Arduinc DUE - дружим Arduino DUE c 7>, TFT LCD + SD Карточка Программируемый контроллер Arduino Due
Приложение 6 ARDUINO YUN Arduino YUN — это первый представитель серии плат Arduino со встроенным Wi-Fi, сочетающая в себе широчайшие возможности Linux и простоту использования Arduino. Arduino YUN представляет собой комбинацию классического Arduino Leonardo (на базе микроконтрол- лера ATmega32U4) и WiFi-системы на кристалле, работающей под управлением Linino (дистрибутив ОС GNUAJnux на основе OpenWRT для микропроцессоров MIPS). Технически Linux-машину поместили на печатную плату Arduino Leonardo, связав их таким образом, чтобы у программиста Ардиуно была возможность удобно и просто запу- скать команды на стороне Linux, используя его в качестве интерфейса Ethernet или Wi-Fi. ПРИМЕЧАНИЕ. Из-за ограниченного объема памяти взаимодействие Arduino с различными веб-сереисами всегда было доволь- но сложной задачей. Это объясняется тем, что многие веб-технологии зачастую осно- ваны на объемных текстовых форматах (подобных XML), для анализа которых требуется достаточно много памяти. Поэтому для Arduino YUN создана специальная библиотека Bridge, использование которой позво- ляет переложить обработку HTTP транзакций и всех сетевых подклю- чений на сторону Linux (рис. П.7). Внешние виды плат в цвете можно посмотреть, отсканировав QR-коды рядом.
О л л л <= иьоааа'лае arduino. сс Рис. П.7. Внешний вид плоть: Arduino YtJN: а - вид с лицевой стороны' б - вид с обратной стороны
ONLINE ИНФОРМАЦИЯ Внешний вид Arduino YUN - вид с лицевой стороны Внешний вид Arduino YUN - вид с обратной стороны Характеристики платы Arduino YUN представлены в табл. П.11. Внешние виды плат в цвете можно посмотреть, отсканировав QR-коды рядом. Характеристики платы Arduino YUN Таблица П11 Параметр Значение Микроконтроллер ATmeya32u4 Рабочее напряжение Р 5 Напряжение питание через microUS-i или РоЕ 802.3af, В 5 Цифровые входы/выходы 14 Канале! ШИМ 7 Аналоговые входы (плюс 6 мультиплексируемых на 6 цифровых выводах) 6 Максимальный ток одного вывода, мА 40 Максимальный выходной ток вывода 3 3V, мА 50 Flash-память (из которых 4 Кбайт используются загрузчиком), Кбайт 32 (АТгпеда32и4) SRAM, Кбайт 2,5 (АТтеда32ц4) EEPROM, Кбайт 1 (АТтеда32и4) Тактовая частота, МГц 16 Процессор, работающий на частоте до 400 МГц MI=S 24К Память DDR2 64МБ ОЗУ и 16 М5 S₽l Flash Точка доступа или маршрутизатор совместимый с IEEE 802.Подл 1»1 USB хост/периферийчое устройство USB 2.0 MicnaSD поддержка РоЕ 802.3af Начало работы с Arduino Yun. Arduino Ydn — это устройство, не похожее ни на одну из моделей Arduino. С точки зрения программиро- вания, он очень похож на Aiduino Leonardo, поскольку имеет такой же микроконтроллер (Atmel ATmega32U4), но в отличие от Leonardo, в нем также есть дополнительный процессор (Atheros AR9331), работающий под управлением Linux, с беспроводным стеком OpenWrt. Прошивка контроллера 32U4 через USB осуществляется точно так же, как и в
Arduino Leonardo. А после того, как вы настроите Yun на работу в вашей сети WiFi, контроллер можно будет прошивать и через Wi-Fi. Для подключения Arduino Yun к компьютеру понадобится USB- кабель с разъемом Micro-B. Через USB-кабель осуществляется не только питание, но и передача данных между устройством и компьютером. Для прошивки Arduino Ydn, необходимо из меню Tools > Board в среде про- граммирования Arduino выбрать пункт Arduino Ydn. Поддержка платы Ydn реализована только в версии Arduino IDE 1.5.4 или позже. Отличия от Arduino Leonardo. Помимо микросхемы 32U4, в Arduino Yun есть дополнительный процессор, Atheros AR9331, работаю- щий под управлением специального дистрибутива Linux для встроен- ных систем — Linino, основанного на OpenWrt. В системе уже установ- лен Python 2.7. Arduino Yun отличается от Leonardo физическими характеристиками, а также наличием множества разъемов. Например, на плате есть встро- енный разъем для SD-карты, разъем Ethernet, коннектор USB-А для под- ключения внешних устройств (работает как хост). На плате Arduino Yun нет разъема питания; устройство запитывается от micro-USB. На плате не встроенного стабилизатора напряжения на 5 В. Поэтому, если напряжение, подаваемое на плату, больше 5 В, то Arduino Yun может выйти из строя Питание устройства можно осуществлять не только через micro-USB, но и через выводы Vin и 5V на плате. Однако производителем рекомендуется использовать интерфейс USB для пита- ния платы всегда, когда это возможно. Разъемы SD. Ethernet и USB-А физически не соединены с контрол- лером 32U4, они соединены с AR9331. В Arduino Yun микроконтроллер 32U4 работает точно так же, как и в Leonardo, за исключением того, что не допускается использовать в про- грамме класс Serial 1, поскольку соответствующий ему последователь- ный порт зарезервирован для взаимодействия с процессором AR9331. В Arduino Yun есть встроенный WiFi- модуль, который позволяет ему соединяться с беспроводным роутером, либо работать в каче- стве точки доступа. Все три процессора — 32и4, контроллер Wi-Fi и AR9331 — имеют свою кнопку сброса на плате. На плате есть несколько светодиодных индикаторов текущего состояния Yun — инди- катор питания, индикатор соединения WLAN, индикатор соединения WAN и USB Вывод 13 также соединен с одним из светодиодов. ONLINE ВИДЕО Linux на Arduino. Платформа/ Tian, Yun и Yun mini
Приложение 7 ARDUINO TRE Arduino TRE — первая плата Arduino, произведенная в США (рис. П.8). Благодаря микропроцессору Sitara АМ335х с тактовой часто- той 1 ГГц, Arduino TRE обладает примерно в 100 раз большей произ- водительностью по сравнению с Arduino Leonardo или Uno. Для разра- ботчика такая производительность открывает широкие возможности по использованию мощных Linux-приложений. Arduino на базе микро- процессора Sitara может выполнять высокопроизводительные десктоп- приложения Linux, ресурсоемкие алгоритмы и обеспечивать работу быстродействующих интерфейсов связи Внешний вид платы в цвете можно посмотреть, отсканировав QR-код рядом. Arduino TRE, по сути, объединяет в себе два устройства: Arduino на базе микропроцессора Sitara с ядром Linux и Arduino на базе AVR- микроконтроллера (рис. П.9, автор: Erives, Alejandro). Встроенное AVR- ядро позволяет не только сохранить простоту и традиции программи- рования Arduino, но и обеспечивает полную совместимость Arduino TRE с существующими платами расширения. Благодаря этому, разра- ботчики могут расширять функциональность Arduino TRE. Эго позволяет использовать плату для решения широкого спектра задач, требую- щих контроля и выполнения различных опера- ций в режиме реального времени, например: ♦ управление 3D -принтерами; ♦ автоматизация зданий и освещения; ♦ сбор и обработка данных от беспроводных датчиков. ONLINE ИНФОРМАЦИЯ Внешний вид платы Arduino TRE
Рис. П.8. Внешний вид плоты Arduino TRE I/O Expansion I/O Expansion Includes. Includes: 1GHz Sltara AM3359ARM- Cortex “-A8 processor Embedded Linux computer for connectivity control and advanced user interface 512MB DDR3 -------------- 800MHz 2-port USB Hub (Ports 3 and 4j Connect everday devices such as mouse and keyboard HDMI port (1920x1080) Connect directly to monitors and TVs Audio in jack ----------- Audio out jack Arduino shield connectors Backward compatibility with existing Arduino shields • CAN • LCD • UART . PWM • GPIO GRID Includes: • SPI • UART • GPIO Atmel1 ATmega32u4 Backward compatibility with previous Arduino boards Arduino shield signals Mirroreo signals 5V DC Powei Supply USB Client Micro USB port Ethernet Port 10-100 XBee connectors For wireless connectivity microSD (on back side' Memory slot fo- code and data storage 2-port USB Hub (Pons 1 and 2) Рис. П 9. Основные узлы платы Arduino TRE
ПРИМЕЧАНИЕ. Следует отметить, что Arduino TRE частично явля- ется результатом тесного сотрудничества Arduino и организации BeagleBoard.org. Эта команда пионеров от- крытого аппаратного обеспечения разделяет страсть к дальнейшему развитию открытых разработок, де- лая технологии доступными для художников, дизай- неров и простых любителей, увлекающихся электро- никой. Проект Arduino TRE основан на опыте Arduino и BeagleBoard.org, сочетая в себе преимущества разрабо- ток обеих организаций. Характеристики платы Arduino TRE представлены в табл. П.12. Характеристики платы Arduino TRE Таблица П.12 Параметр Значение Микроконтроллер Almel ATmega32u4 Тактовая частота МГц 16 Flash-память, Кбайт 32 (ATmega32u4) SRAM, Кбайт 2 5 (ATmega32u4) EEPROM, Кбайт 1 (ATmega32u4) Цифровые ..ходы/выходы (логический уровень 5 В) 14 Каналы ШИМ (логический уровень 5 В) 7 Аналоговые входы 6 Микропроцессор Texas Instrument Sitara AM3359AZCZ100 (ARM Cortex-A8) Тактовая частота, Тц 1 SRAM CDR3L 512 ME RAM Сеть Ethernet 10/100 USB порт 1 riopi USR 2 0,4 хост-порта US 8 2.0 Видео HDMI (1920 « 1080) Аудио HDM|, аналоговый стерео-вход и выход Цифровые входы/выходы Логический уровено 3,3 В) 12 Каналы ШИМ (логический уровень 3,3 В) 4 MicroSD карта памяти Поддерживает разъем для подключения LCD-экрана
ARDUINO MICRO Arduino Micro — это устройство на основе микроконтроллера ATmega32u4, разработанное совместно с Adafruit (рис. П.10). В его состав входит все необходимое для удобной работы с микроконтроллером. ♦ 20 цифровых входов/выходов (из них 7 могут использоваться в ка- честве ШИМ-выходов, 12 — в качестве аналоговых входов); ♦ кварцевый резонатор на 16 МГц; ♦ разъем micro-USB; ♦ разъем ICSP для внутрисхемного программирования; ♦ кнопка сброса. Максимальная длина и ширина печатной платы Micro составляет 4.8 см и 1,77 см, соответственно, с учетом разъема USB, выступающего за пределы платы. Печатная плата устройства спроектирована таким образом, чтобы его можно было удобно размещать на беспаечной макетной плате. Для начала работы с платой достаточно просто подключить ее к компьютеру посредством USB-кабеля. Плата Arduino Micro разработана таким образом, чтобы ее можно было удобно размещать на макетной плате. Внешний вид платы в цвете (лицо и оборот), а также распино- вку платы можно посмотреть, отсканировав OR-коды рядом. Как и в Leonardo, в Arduino Micro используется микропроцессор ATmega32u4 со встроенным контроллером USB. Такое решение исклю- чает необходимость использования дополнительного контроллера, и при подключении к компьютеру позволяет Arduino Micro определяться в системе как обычная мышь, клавиатура или виртуальный СОМ-порт. Помимо этого, использование данного микроконтроллера оказывает влияние на поведение платы. Характеристики платы Arduino Micro представлены в табл. ПЛЗ.
ONLINE ИНФОРМАЦИЯ Внешний вид платы Arduino Micro (лицевая часть) Внешний вид платы Arduino Micro (оборот) Распиновка платы Характеристики плоть: Arduino Micro Таблица П.15 Параметр Значение Микроконтроллер ATrreqa32u4 Рабочее напряжение, В 5 Напряжение питания (рекомендуемое), В 7.. .12 Напряжение питания (пределоное), В 6 20 Цифровые ьхиды/выхиды 20 Каналы ШИМ 7 Аналоговые входы 12 Максимальный ток одного вывода мА 40 Максимальный выходной ток вывода 3,3V, мА 50 Rasti-память (из нее 4 Кбайт используются загрузчиком Кбайт 52 (ATmega32u4) SRAM, Кбайт 2,5 (ATmega32u4) БЕРРОМ Кбайт 1 (ATmega32u4) Тактовая частота, МГц 16 Схему, исходный проект и расположение выводов (распиновку SAM5X) можно посмотреть, отсканировав QR-коды рядом. ONLINE ИНФОРМАЦИЯ Файлы EAGLE в архиве .zip Схема в формате .pdf Соответствие выводов Arduino и ATmega32U4
Рис. П.10. Внешний вид платы Arduinc Micro Питание. Arduino Micro может быть запитан через USB или от внеш- него источника питания — тип источника выбирается автоматически. В качестве внешнего источника питания (не USB) может использоваться любой источник питания постоянного тока (DC) или обычный акку- мулятор/батарея. Для этого выводы аккумулятора или DC-источника питания необходимо подсоединить к выводам Gnd и Vin. Напряжение внешнего источника литания может быть в пределах от 6 до 20 В. ВНИМАНИЕ. Уменьшение напряжения питания ниже 7 В приводит к уменьшению напряжения на выводе 5V. Это может стать причиной нестабильной работы устройства. Использование напряжения больше 12 В может приво- дить к перегреву стабилизатора напряжения и выходу платы из строя. С учетом этого, рекомендуется исполь- зовать источник питания с напряжением в диапазоне от 7 В до 12 В В табл. П.14 перечислены выводы питания, расположенные на плате. Память. Объем памяти программ микроконтроллера ATmega32U4 составляет 32 Кбайт (из них 4 Кбайт отведены под загрузчик). Помимо этого, он имеет 2,5 Кбайт оперативной памяти SRAM и 1 Кбайт EEPROM (для взаимодействия с которой служит библиотека EEPROM).
Выводы питания, расположенные на плоте Таблица П.14 Вывод Комментарий Vin Напряжение, поступающее в Arduino непосредственно от внешнего источника питания (не связано с 5 В от USB или другим стабилизированным напряжением) Через этот вывод можно подавато внешнее питание 5V Стабилизированный источник напряжения, используемый для пи*ания микроконтроллера и других компонентов устройства. Э-о напряжение может поступать как от встроенного стабилиза-ора напряжения Vin. гак и от USB или другого стабилизированного источника питания на 5 В 3V Питание 3,3 В,Формируемое встроенным стабилизатором напряжения. Максимальный выходной ток этого вывода составляет 50 мА Gnd Выводы земли Входы и выходы. С использованием функций pinMode(), digitalWrite() и digitalRead() каждый из 20 цифровых выводов может работать в качестве входа или выхода. Рабочее напряжение выводов составляет 5 В. Максимальный ток, который может отдавать или потре- блять один вывод, равен 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключенными) номи- налом 20...50 кОм. Помимо основных, некоторые выводы Arduino могут выполнять дополнительные функции (табл. П.15). Выводы Arduino, выполняющие дополнительные функции Таблица ПЛ 5 Элемент схемы Выводы и их использование Последовательный интерфейс Выводы 0 (RX) и 1 (ТХ). Используются для получения (RX) и передачи СХ) данных то поседовэтельному интерфейсу посредством аппаратного чриемопереда-чика, встроенного в ATmega32U4 Обратите внимание, что в Arduino Micro класс Serial отвечает за передачу данных через USB (CDQ-соединение для передачи данных через выводы 0 и 1 необходимо использовать класс Serial! 1WI Выводы 2 (SDA) и 3 (SCL). С использованием библиотеки Wire данные выводы позволяют осуществлять связь по интерфейсу TWI Внешние прерывания Выводы 0 (RX). 1 (ТХ). 2 и 3. Данные выводы могут быть сконфигурированы в качестве источников прерываний, возникающих при различных условиях- при низком уровне сигнала, по фронту, по спаду или при изменении сигнала.Для получения дополнительной информации см. функцию artachlnterruptQ ШИМ Выводы 3,5,6,9.10. 11 и 13. С помощью функции analogWritefl могут выводить 8-битные аналоговые значения в виде ШИМ-сигнала Интерфейс SPI Выводы разъема ICSP. С использованием библиотеки SPI данные выводы позволяют осуществлять связь по интерфейгу SPI. ОЬра'ите внимание, что в Arduino Micro линии SPI выведены только на разьем ICSP и на отдельные выводы MISO, MOSI и SCK, расположенные рядом с ним. При этом они не соединены с цифровыми выводами платы, как на Arduino Uno RX LED/SS Дополнительный вывод, которого не было в Arduino Leonardo. Он соединен со светодиодом RX_^ED, индицирующим процесс передачи данных через USB. Однако вместе с тем он может-акже использоваться в качестве вывода SS при работе с SPi-интерфейсом Свеюдиод Вывод 13. Вс-роенный све-одиод.подсоединенный к Сь'воду 13 При отправке значения HIGH светодиод включается при отправке LOW - выключается
Таблица П.15 (окончание) Элемент схемы Выводы и их использование Аналоговые входы Выводы А0-А5.А6-А11 (на цифровых выводах 4 6.8 9,10 и 12). В Arduino Micro всего есть 12 аналоговых входов: А0-А5 (отменены непосредственно на плате) и А6-А11 (расположены на цифровых выводах 4. 6 8,9 10 и 12,соответственно) Для обращения к этим выводам в программе можно исголозовать консанты АО-All Каждый из входов может предсавить аналоговое напряжение в виде 10-битного числа (1024 различных значения). По умолчанию, измерение напряжения осущесгвляегся относительно диапазона отО до 5 В. Однако верхнюю границу этого диапазона можно изменить, используя вывод AREF и функцию analogReferenceO AR£F Опорное напряжение для аналоговых входов Может задейавоваться функцией analogRe‘erence() Reset Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера Обычно этот вывод служит для функционирования кнопки сброса на платах расширения Расположение выводов Распиновка (рис. П.И) иллюстрирует функциональные возможности всех выводов Arduino Micro, что также позволяет использовать его как Arduino Leonardo. Связь. Arduino Micro предоставляет ряд возможностей для осу- ществления связи с компьютером, еще одним Arduino или другими микроконтроллерами. В ATmega32U4 имеется приемопередатчик UART, позволяющий осуществлять связь по последовательным интерфейсам посредством цифровых выводов О (RX) и 1 (ТХ). USB JACK Micro Тире В DC SS~T/PciNT8?r~-------------@ I TXD1 //~TNT3 II РОЗ //2?-© f RXO1 jflNTP If PD2 l(?g)-© /RESET//©----О ©ND~/--------О / SPA j/~iN1~r?' P >l ID---@ I SCL //OCD8// IN-8 )( RD8 //©Ac© IADC8 // ICP1 II P04 ID-----@ ОС sA//ССЗЛ// PC6 lD\r© /АРСЮ//ОС4о7/ T8 // POT Jf27y\r(o) [MTS 1(~ЫНв II PEt ID-------------© /нОС * 1 t//PC~N14// PB4 pl-© /АОС12//ОС4В//ОС1А/^С1НТД|/ PBS //29© г© /adci3//oc4b)/ccie//fsim6/,' рве //зе©,-© I RTS //OC8A//OC1C ДЮГНТТ// PB7 iD^r© / ADO) </0<Ч07/ T1 /I ROS /^6©/© © D( PE1 //RCINTt// SCI© @—DI рвз II ppo /©нтз// miso / O-------1 VIN О-------( GNP I O- —/©/RESET/ О-------/ SV / О-------{ NC j О-------{ NC ] ©-----pl PF8 If ADC8 I ©-----©©Pri"©PCI i © —/39?/ PF4~)/ ТОК Ц APC4) ©-----pl ~ 11 ™s 11 ADC 5~? ©- Dl PF6 )l TPO )l ADCS I © ^36)/~PFT /©TDI ~)/3\DC7~) О-----DCWE© О-----{ 3V3 / (^) Absolute MAX 150mA ©Л /Dpcpl ICP3~)©LK3~7/'OC4A )/ J
Микроконтроллер 32U4 поддерживает последовательную (CDC) связь через USB и при подключении к компьютеру может опреде- ляться как виртуальный COM-порт. При этом микросхема использует стандартные USB-COM драйвера и может работать в режиме USB 2.0 Full Speed На платформе Windows необходим только соответствующий .inf-файл. В пакет программного обеспечения Arduino входит специальная программа, позволяющая считывать и отправлять на Arduino простые текстовые данные. При передаче данных ком- пьютеру через USB на плате будут мигать све- тодиоды RX и ТХ. ONLINE ИНФОРМАЦИЯ Программное обеспечение Arduino ONLINE ВИДЕО Первое подключение Arduino Pro Micro и за грузка Blink Как прошить Arduino Pro Micro ATmeya32U4. Обзор платы. Arduino для начи- нающих. Проекты Arduino Arduino Pro Micro. Пайка ножек плоты Arduino Pro Micro. Пайка ножек платы Частотник 8bit на Arduino Micro и Infineon IGBT model 2 Arduino Pro Mini: установ- ка в Arduino IDE
ПРИМЕЧАНИЕ. При последовательной передаче данных посредством выводов 0 и 1 данные светодиоды не задействуются. Библиотека SoftwareSerial позволяет реализовать последователь- ную связь на любых цифровых выводах Micro. В микроконтроллере ATmega32U4 также реализована поддержка последовательных интерфейсов I2C (TWI) и SPI. В программное обе- спечение Arduino входит библиотека Wire, позволяющая упростить работу с шиной I2C. Для работы с интерфейсом SPI используйте библиотеку SPI. Arduino Micro может определяться как обычная клавиатура или мышь, и с помощью библиотек Keyboard и Mouse может быть запро- граммирован на управление этими устройствами ввода. Программирование. Arduino Micro программируется с помощью программного обеспечения Arduino (скачать его можно, перейдя по QR-коду рядом). Для этого из меню Tools > Board необходимо выбрать «Arduino Micro». ATmega32U4 выпускается с прошитым загрузчиком, позволяющим загружать в микроконтроллер новые программы без необходимости использования внешнего программатора. Взаимодействие с ним осу- ществляется по пр итоколу AVR109 Тем не менее, микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In-Circuit Serial Programming), не обращая внимания на загрузчик. Автоматический (программный) сброс и запуск загрузчика. Чтобы каждый раз перед загрузкой программы не требовалось нажи- мать кнопку сброса, Arduino Micro спроектирован так, что можно осу- ществлять его сброс программно с подключенного компьютера. Сброс срабатывает после закрытия виртуального COM-порта, который пред- варительно был открыт на скорости 1200 бод. При срабатывании этого условия, процессор сбросится, разорвав USB соединение с компьюте- ром (при этом виртуальный COM-порт исчезнет). После перезагрузки процессора, запускается загрузчик, оставаясь активным на протяже- ние приблизительно 8 секунд. Помимо этого, инициировать загрузчик можно, нажав кнопку сброса на плате Micro. Обратите внимание, что при первом включении устройства вместо запуска загрузчика, контрол- лер сразу перейдет к выполнению пользовательской программы (если таковая есть).
Приложение 9 ARDUINO ROBOT Arduino Robot — первая официальная версия Arduino, в конструк- ции которого предусмотрены колеса (рис. П.12). Робот состоит из двух плат, каждая из которых содержит свой микропроцессор: ♦ плата приводов (Motor Board) контролирует работу дви! ателей; ♦ управляющая плата (Control Board) считывает показания датчиков и принимает решения о дальнейших операциях. ПРИМЕЧАНИЕ Каждая из двух плат представляет собой полноценное устройство Arduino, программируемое с помощью среды разработки Arduino IDE. Диаметр Arduino Robot составляет 19 см, высота — до 10 см (с уче- том колес, GTFT-экрана и различных разъемов). Рис. П.12. Внешний вид Arduino RoDct. а - управляющая плата: б - робот из двух плат в сборе
ONLINE ИНФОРМАЦИЯ Внешний вид платы Arduino Robot (верхняя плата) Внешний вид платы Aidumo Robot (нижняя плата) Обе платы построены на базе микроконтроллера ATmega32U4, выводы которого связаны с различными приводами и датчиками на плате. Процесс прошивки Arduino Robot полностью аналогичен Arduino Leonardo. Оба микропроцессора ATmega32U4 имеют встроенный USB- контроллер, что исключает необходимость в дополнительном процес- соре. Благодаря этому, при подсоединении к компьютеру Robot может определяться как виртуальный (CDQ последовательный СОМ-порт. ONLINE ИНФОРМАЦИЯ Основные элементы платы Arduino Robot По традиции, любой элемент1 плаз формы Arduino — будь то аппа- ратные, программные средства либо документация — имеет открытый исходный код и полностью бесплатен. Этот дает возможность не только детально изучить устройство Arduino Robot, но и создавать своих робо- тов на основе его проекта. Arduino Robot — результат совместных уси- лий людей из разных стран, желающих сделать процесс познания науки доступным и захвэтываюшим. Характеристики плат Arduino Robot представлены в табл. П.16.
Характеристики плат Arduino Robot Таблица П.16 Параметр Управляющая плата (Control Board) Плата приводов (Motor Board) Микроконтрсллео ATmega32u4 Рабочее напряжение, В 5 Напряжение питания 5 В через шлейф 9 В для зарядного устройства Ал багарейно1и отсек нет 4 щелочных или Ni-Mh- аккумуляторов Цифровые входы/выходы 5 4 Каналы Ши1М 6 1 Аналоговые входы 4 (на цифровых выводах) 4 (на цифроЕ ых выводах) Аналоговые входо! (мультиплексируемые) 8 нет Максималоный ток одного вывода мА 40 DC-DC преобразователь нет генерирует 5 В для питания всего робота Flash-памя-ь 32 Кбайт (ATmega32u4), из которых 4 Кбайт используются загрузчиком SRAM 2.5 Кбайт (ATmega32u4) EEPROM (внутрення) 1 Кбайт (ATmeqa32d4) EEPROM (внешняя) 512 Кбит (120 нет Тактовая частота. МГц 16 Клавиатур.! 5 кнопок нет Регулятор Потенциометр, соединенный с аналоговым входом нет Полноцветный LCD-экран через интерфейс SPI нет SD кардридер для карт, отформатированных 1- FAT16 нет Динамик 8 Ом нет Цифровой компас показывает отклонение от географического севера в градусах нет I2C распаечные площадки 5 1 Области для прототипирования 4 2 Подс-роеьный резистор нет для калибровки движения ИК датчики для отслеживания линии нет 5 Исходный проект можно посмотреть (скачать), отсканировав QR-код рядом Питание. Arduino Robot может быть запитан от USB либо от 4 АА-аккумуляторов — тип источника выбирается автоматически. Батарейный отсек рассчитан на 4 NiMh-аккумулятора формата АА. С целью безопасности, в системе предусмотрено автоматическое отклю- чение двигателей во время питания робота от USB.
СОВЕТ. Для питания робота исполь- зуйте только перезаряжаемые аккумуляторы. Помимо этого, в Arduino Robot встро- ено зарядное устройство для аккумуляторог Питание зарядного устройства осуществля- ется от внешнего источника питания (сете- вого AC/DC адаптера) с выходным напряже- нием 9 В. Для включения зарядного устройства необходимо вставить штекер адаптера (диа- метр — 2,1 мм, центральный контакт — поло- ONL1NE ИНФОРМАЦИЯ Файлы EAGLE для управляющей платы и платы приводов в архиве zip жительный) в соответствующий разъем питания на плате Motor Board. Зарядное устройство не будет работать во время питания робота от USB. От источников питания, расположенных на плате приводов (Motor Board), также запитывается и управляющая плата (Control Board) Arduino Robot. Память. Объем памяти программ микроконтроллера ATmega32U4 составляет 32 Кбайт (из них 4 Кбайт отведены под загрузчик). Помимо этого, он имеет 2,5 Кбайт оперативной памяти SRAM и 1 Кбайт EEPROM (для взаимодействия с которой служит библиотека EEPROM. На управляющей плате расположена дополнительная EEPROM- память объемом 512 Кбит, доступ к которой осуществляется по прото- колу 12 С. В качестве дополнительного запоминающего устройства выступает внешний SD-кардридер (совмещен с GTFT-экраном), контролируемый микропроцессором управляющей платы. Входы и выходы. Робот поставляется с несколькими впаянными разъемами. Вместе с тем, на плате Arduino предусмотрено несколько областей, позволяющих при необходимости допаять в схему свои детали. Все разъемы на плате промаркированы и с помощью библиотеки Robot ассоциированы с портами микроконтроллера, что обеспечи- вает программисту' возможность работы со стандартными функциями Arduino. Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА при напряжении 5 В. Помимо основных фуцнкций, некоторые выводы Arduino Robot могут выполнять функции дополнительные (табл. П. 17).
Дополнительные функции плат Arduino Robot Таблица П.17 Элементы Комментарии Выводы ТКО-ТК7 на управляющей плате Данные выводы соединены с общим аналоговым входом микроконтроллера через мультиплексор Мсгут использоваться в качестве аналоговых входов для различных датчиков.таких, как дгльномеры, аналоговые ультразвуковые датчики, механические переключатели для обнаружения столкновений Выводы TKD0-KD5 на управляющей плате Эго цифровые выводы, соединенные непосредственно с процессором. Дли работы с данными выводами можно применять функции Robot.digitaIReadO i- Rooot.cngita.VvriteO. С использованием функции Rooot.anaiogReacO выводы TKD" -TKD3 могут работать в качестве аналоговых входов Примечание 3 первых версиях Ardirno Robot выводы TKD‘ оЬзначены на плате как TDK‘. Правильным названием является TKD" - именно оно используется при написании программ Выводы ТК1-ТК4 на плате приводов На этапе программирования эти выводы следует называть В_ТК1 ЕТК4, соответственно Данные выводы могут работать как в качестве цифровых, так и в качестве аналоговых входов, и взаимодействуют с функциями Robot. digitalReadQ Rooot.digitalWriteQ и Robor.analogReadO SPI на управляющей плате Интерфейс SPI используется для управления GTFT и взаимодействия с S3 кар-ой памяти. Поэтому, для перепрошивки процессора с помощью внешнего программатора, необходимо вначале отсоединить экран Светодиоды на управляющей плате На управляющей плате расположено 5 светодиода. Один из них (PWR) показывает наличие питания, остальные два - процесс передачи данных через USB-порт (LED1/RX и ТХ). Помимо этого, состояние светодиода LED1 может изменяться программно Разъемы I2C На управляющей плате - 3, на плате приводов - 1 Последовательная связь. Обе платы взаимодействуют друг с дру- гом по последовательному интерфейсу, контроллер которого встроен непосредственно в микропроцессор. Для соединения двух плат исполь- зуется 10-выводной разъем, по которому передаются последовательные данные, питание и другая вспомогательная информация (например, текущий уровень заряда аккумуляторов). Расположение выводов. Расположение выводов управляющей платы (Control Board) предсталено в табл. П.18, а платы приводов (Motor Board) — в табл. П.19. Расположение выводов управляющей платы {Control Board) Таблица П18 Arduino Leonardo Arduino Robot Control ATmega32u4 Функция Регистр DO RX PD2 RX RXD1/INT2 Dl TX PD3 IX TXD1/INT3 D2 SDA PD1 SDA SDA/INT1 D3# SCL PDO PWM8/SCL OCOB/SCL,/INTO D4 MUXJNA6 PD4 ADC8 D5# SUZZ PC6 CC3A/AOC4A D6# MUXA/TKD4 A7 PD7 FastPWM #OC4D/ADC10 D7 RST_LCD PF6 INT6/AIN0 D8 CARD.CS Д8 PB4 ADC11/PCINT4 D9# LCD_CS AS РБ5 PWM 16 OC1 A/#OC4B/ADC 12/PC1NT5
Таблица П18 (окончание) Arduino Leonardo Arduino Robot Control ATmega52u4 Функция Регистр D1U# DC.LCDA10 DB6 PWM16 OClB/Oc4B/ADC13/PCINT6 Dll# MUXB PB7 PWM8/16 OCOA/OC 1C/#RTS/PCINT7 D12 MUXC/TKD5 All PD6 T1/#OC4D/ADC9 D13# MUXD РС7 PWM10 CLKO/OC4A АО KEV D18 PF7 ADC7 Al TKDO D19 PF6 ADC6 A2 TKD1 D20 PF5 ADC5 АЗ TKD2 D21 PF4 ADC4 A4 TKD3 D22 PF1 ADC1 A5 POT D23 PFO ADCO MISO MISO D14 РБЗ MISO.PCINT3 SCK SCK D15 РБ1 SCK.PCINT1 MOSI MOSI D16 PB2 MOSI.PCINT2 SS RX_LED D17 РБ0 RXLED.SS/PCINTO TXIED TX LED PDS HWB PE2 HWB Расположение выводов плоть, приводов (Motor Board) Таблица П-19 Arduino Leonardo Arduino Robot Control ATmega32u4 Функция PoiHCrp DO RX PD2 RX RXD1/INT2 DI TX PD3 TX TXD1/INT3 D2 SDA PD1 SDA SDA/INT1 D3# SCL PDO PWM8/SCL OCOB/SCL/'NTO D4 TK3A6 PD4 ADC 8 D5# INA2 PC 6 OC3A/#OC#A D6# INAI A7 PD7 FastPWM #OC4D/ADC10 D7 MUXA PE6 INT6/AIN0 D8 MUXBAS PB4 AOC11/PCINT4 D9# INB? A9 PB5 PWM16 OC1A/#OC4B/ADC12/ JCINT5 DIO# INB1 A10 PB6 PWM16 OClB/Oc4B/ADC13/PCINT6 Dll# MUXC PB7 PWM8/16 OCOA/OC IC/# RTS/ PCI NT7 D12 TK4 All PD6 T1/#OC4D/ADC9 D13# MUXI PC7 PWM10 CLKO'OC4A AO TK1 D18 PF7 АЭС7 Al TK2 i)19 PF6 ADC6 A2 MUXJN D2C PF5 ADC5 A3 TRIM D21 PF4 ADC4 A4 SENSE A D22 PF1 ADC1 A5 SFNSF.B D23 PFO ADCO M'SC MISO DI 4 РБЗ MISO.PCINT3
Таблица П.19 (окончание) Arduino Leonardo Arduinc Robot Control ATmega52u4 Функция Регистр SCK SCK D15 PB1 SCK PC INTI MOSi MOSl D16 РВ2 MOSI.PCINT2 ss RX_LED D17 PBO RXLED.SS/PCINTO TXLED TX LED PD5 HWB PE2 HWB Связь. Arduino Robot предоставляет ряд возможностей для связи с компьютером, еще одним Arduino или другими микроконтроллерами. В ATmega32U4 имеется приемопередатчик UART (уровень напряжения TTL 5 В), позволяющий осуществлять связь но последовательному интер- фейсу через цифровые выводы 10 контактного межплатного разъема. Микроконтроллер 32U4 поддерживает последовательную (CDC) связь через USB и при подключении к компьютеру может определяться как виртуальный СОМ-порт. При этом микросхема использует стандарт- ные USB-СОМ драйвера и может работать в режиме USB 2.0 Full Speed. На платформе Windows необходим только соответствующий .inf-файл. В пакет программного обеспечения Arduino входит специальная программа, позволяющая считывать и отправлять на Arduino простые текстовые данные. При передаче данных компьютеру через USB на плате будут мигать светодиоды RX (LED1) и ТХ. ПРИМЕЧАНИЕ. При последовательной передаче данных между платами данные светодиоды не задействуются Поскольку у каждой платы есть свой USB- идентификатор, го в среде разработки Arduino они будут отображаться под разными портами. Поэтому, перед прошивкой убедитесь, что вы выбрали именно ту плату, которую вам необхо- димо прошить. В микроконтроллере ATmega32U4 также реализована поддержка последовательных интерфейсов I2C (TW1) и SP1. В программное обеспечение Arduino входит библиотека Wire, позволяюшая упростить работу с шиной I2C... Для работы с интерфейсом SPI используйте библиотеку SPI. ONLINE ИНФОРМАЦИЯ Программное обеспечение Arduino
Программирование. Arduino Robot программируется с помо- щью программного обеспечения Arduino (можно скачать, перейдя по OR-колу рядом). Для этого из меню Tools > Board необходимо выбрать «Arduino Robot Control Board» или «Arduino Robot Motor Board». ПРИМЕЧАНИЕ. ATmegc32U4 в Arduino Robot выпускается с прошитым загруз- чиком, позволяющим загружать в микроконтроллер новые программы без необходимости использования внешнего про- грамматора. Взаимодействие с ним осуществляется по про- токолу AVR109. Микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In-Circuit Senal Programming), не обращая внимания на загрузчик. Автоматический (программный) сброс и запуск загрузчика. Чтобы каждый раз перед загрузкой программы не требовалось нажи- мать кнопку сброса, Robot спроектирован таким образом, что позво- ляет осуществлять его сброс программно с подключенного компьютера. Сброс срабатывает после закрытия виртуального COM-порта, который предварительно был открыт на скорости 1200 бод При срабатывании этого условия, процессор сбросится, разорвав USB соединение с ком- пьютером (при этом виртуальный COM-порт исчезнет). После переза- грузки процессора, запускается загрузчик, оставаясь активным на про- тяжение приблизительно 8 секунд. ВНИМАНИЕ. Помимо этого, инициировать загрузчик можно, нажав кнопку сброса на плате Arduino Robot. Обратите внима- ние. что при первом включении устройства вместо за- пуска загрузчика, контроллер сразу перейдет к выполне- нию пользовательской программы (если таковая есть). Из-за особенностей механизма сброса Arduino Robot, рекоменду- ется предоставлять программному обеспечению .Arduino возможность осуществить сброс перед загрузкой программы, особенно, если вы при- выкли нажимать кнопку сброса при прошивке других плат. Если же программное обеспечение не сможет сбросить устройство, вы всегда сможете запустить загрузчик, дважды нажав кнопку сброса вручную. Однократное нажатие кнопки приведет к перезапуску загруженной программы, двукратное — к запуску загрузчика.
ONLINE ИНФОРМАЦИЯ Дополнительная информация: начинаем работу с Arduino Robot Защита USB от перегрузок. В обеих платах Arduino Robot есть восстанавливаемые предохра- нители, защищающие USB-порты компьютера от коротких замыканий и перегрузок. Большинство компьютеров имеют собственную защиту USB от перегрузок, гем не менее, такие предохрани- тели позволяют дополнительно повысить сте- пень зашиты. Если от USB-порта потребляется ток более 500 мА, предохранитель автоматиче- ски разорвет соединение до устранения причин короткого замыкания или перегрузки. Библиотека Robot: возможности. Библиотека Robot включена в среду разработки Arduino, начиная с вер- сии 1.0.5. В самом устройсгве Robot есть множество встроенных датчиков и приводов, для управления которыми и предназначена данная библиотека. Робот состоит из двух плат — платы приводов (Motor Board) и управ- ляющей платы (Control Board), у каждой из которых есть свой микро- контроллер. Библиотека Robot позволяет работать с различными датчиками и пери- ферийными устройствами, расположенными на управляющей плате- ♦ потенциометром; ♦ 5 кнопками; ♦ цветным экраном с разрешением 160 * 120 пикселей; ♦ памятью EEPROM объемом 512 Кбит; ♦ динамиком; • компасом; ♦ 3 разъемами I2C; ♦ 8 входными разъемами TinkerKit. Библиотека может работать с платой приводов и позволяет- ♦ управлять скоростью и направлением вращения двигателя; ♦ измерять ток, потребляемый каждым двигателем; ♦ считывать состояние 5 датчиков на днице (их еще называют датчи- ками линии); ♦ работать с выводами общего назначения на плате, ♦ управлять портом I2C; ♦ считывать сигнал с 4 входов TinkerKit. Структура библиотеки. Библиотека существенно упрощает работу с периферийными устройствами Arduino Robot Она построена на базе нескольких библиотек; ♦ Fat 16, Easy Transfer, Squawk, IRRemote (эго сторонние библиотеки); ♦ TFT, SPI и Wire (библиотеки Arduino).
ПРИМЕЧАНИЕ. Чтобы уменьшить общий размер программы, основные функции этих библиотек продублированы в библиотеке Robot. Вообще, запрограммировать можно не только управляющую плату (Control Boaid), но и плату приводов (Motor Board). Однако новичкам лучше оставить ее на потом и начать с программирования управляю- щей платы. Библиотека предоставляет доступ к датчикам обеих плат через один объект. Классы. Для управления роботом существует два основных класса: ♦ RobotControl — работает с управляющей платой (Control Board), в частности с выводами общего назначения и двигателями на Motor Board со стандартной прошивкой; ♦ RobotMolor — работает с платой приводов (Motor Board). Используй- те этот класс для создания собственных прошивок для Motor Board. Примеры. Перечисленные примеры демонстрируют основные воз- можности робота и помогут вам быстро его освоить: ♦ Logo — управляем движением робота с помощью встроенной кла- виатуры; ♦ Line Following — запускаем робота по нарисованному гоночному треку; ♦ Disco Bot — превращаем робота 8-битный музыкальный автомат; ♦ Compass — отправляемся на поиски сокровищ с цифровым компасом; ♦ Inputs — изучаем принципы работы с кнопками и клавиатурой; ♦ Wheel Calibration — отрегулируем движение колес, дабы заставить робота передвигаться еще лучше; ♦ Runaway Robot — заставляем робота избе- гать препятствия с помощью ультразвуко- вого датчика; ♦ Remote control — используем пульт от ста- рого ТВ для дистанционного управления роботом; ♦ Picture browser — хотите использовать свои изображения? Здесь написано как; ♦ Rescue — научите вашего робота искать в лабиринте скрытые жемчужины; ♦ Hello User — взламываем демо-приветствие робота и заменяем его на свое. ONLINE ИНФОРМАЦИЯ Библиотека Robot
ARDUINO ESPLORA Arduino Esplora — это микропроцессорное устройство, спроекти- рованное на основе Arduino Leonardo. Esplora отличается от всех пре- дыдущих плат Arduino наличием множества встроенных, готовых к использованию датчиков для взаимодействия. Он спроектирован для тех, кто предпочитает сразу начать работу с Arduino, не изучая перед этим электронику. Пошаговую инструкцию к Esplora вы сможете найти в руководс тве Начало работы с Esplora (см. QR-код рядом). Внешний вид платы представлен на рис. ПЛЗ. Максимальная длина и ширина печатной платы Esplora состав- ляет 16,5 см и 6,1 см соответственно, с учетом разъемов USB и TinkerKit, выступающих за пределы платы. Четыре крепежных отверстия позво- ляют прикреплять плату к поверхности или корпусу. Esplora имеет встроенные звуковые и световые индикаторы (для вывода информации), а также несколько датчиков (для ввода информации): джойстик; слайдер; датчик температуры; акселерометр; микрофон; световой датчик ONLINE ИНФОРМАЦИЯ Начало работы с Espiora Внешний вид Arduinc Esplora (еид сверху) Внешний вид Arduino Esplora (вид снизу)
Рис. П.13. Внешний вид Arduino Esplora. а - вид сверху: б - вид снизу Помимо этого, на плате есть два входных и выходных разъема Tinkerkit, а также гнездо для подключения жидкокристаллического TFT- экрана, позволяющие значительно расширить возможности устройства. Как и на плате Leonardo, в Esplora используется AVR- микроконтроллер ATmega32L'4 с кварцевым резонатором 16 МГц, а также разъем микро-USB, позволяющий устройству быть USB-гаджетом, подобно мыши или клавиатуре. В левом верхнем углу платы находится кнопка сброса для переза- грузки устройства, а также четыре светодиода, отображающих теку- щее состояние: ♦ ON [зеленый] показывает, подключено ли к устройству питание; ♦ L [желтый] напрямую соединен с микроконтроллером, управляется выводом 13; ♦ RX и ТХ [желтые] отображают получение или передачу данных че- рез USB. Плата содержит все необходимое для микроконтроллера. Для начала работы просто подключите ее к компьютеру посредством USB- кабеля. В Esplora встроены узлы, обеспечивающие связь через USB; при подключении к компьютеру устройство может определиться как мышь,
Reset Button Output Tinkerkit Connectors On Led L Led Tx ued input Tinkerkit Connectors ATM EGA 32U4 Analog joystick with central button Temperature PGb Led 3 Axis Acceierator Sensor LCD connectoi LDR (light sensor) 4 Switch Linear Potentiometer Рис. П.14. Элементы плоты Arduino Esplora клавиатура или виртуальный (CDC) последовательный СОМ-порт — в зависимости от типа устройства, плата будет вести себя по разному. Элементы платы представлены на рис. П. 14. Характеристики плат Arduino Esplora представлены в табл. П.20. Характеристики плат Arduino Esplora Таблица П 2С Параметр Значение Микроконтроллер ATmega52U4 Рабочее напряжение В 5 Объем Flash памяти (из котооых 4 Кбайт заняты загрузчиком), Кбайт 52 SRAM, Кбайт 2,5 EEPROM, Кбайт 1 Тактовая частота, МГц 16 Схему и исходный проект можно посмотреть (скачать), отскани- ровав QR-код рядом. ONLINE ИНФОРМАЦИЯ Файлы EAGlE в архиве .zip Схема в формате .pdf
Память. Микроконтроллер ATmega32U4 имеет 32 Кбайт памяти (из которых 4 Кбайт используются загрузчиком). Он также имеет 2,5 Кбайт SRAM и 1 Кбайт EEPROM (из которой можно считывать или записывать информацию с помощью библиотеки EEPROM). Входы и выходы. Конструкция платы Esplora напоминает кон- струкцию обычного геймпада с аналоговым джойстиком слева и четырьмя кнопками справа. В Esplora встроены следующие устройства ввода и вывода информации: ♦ аналоговый джойстик с центральной кнопкой — две оси (X и У) и кнопка по центру; ♦ 4 кнопки, расположенные в виде ромба; ♦ линейный потенциометр — спайдер внизу платы; ♦ микрофон для получения информации о громкости (амплитуде) окружающей среды; ♦ световой датчик для получения информации о яркости; ♦ датчик температуры, считывающий окружающую температуру; ♦ трехосевой акселерометр, измеряющий ускорение платы по трем осям (X, Y и Z); ♦ зуммер, генерирующий прямоугольные волны; ♦ RGB светодиод — яркий светодиод, объединяющий в себе красный, зеленый и синий элементы для смешивания цветов; ♦ 2 входа TinkerKit — для подключения 3-вы водных модулей TinkerKit с датчиками; ♦ 2 выхода TinkerKit — для подключения 3-выводных модулей TinkerKit с приводами; ♦ разъем для TFT-дисплея — разъем для подключения опционально- го цветного LCD-экрана, SD-карты либо других устройств, исполь- зующих протокол SPI Аналоговый мультиплексор. Для того чтобы задействовать все имеющиеся датчики, на плате используется аналоговый мультиплек- сор. Это значит, что один аналоговый вход микроконтроллера является общим для всех каналов датчиков (кроме грехосевою акселерометра). Выбор канала для считывания осуществляется четырьмя дополнитель- ными выводами микроконтроллера. Связь. У Leonardo и Esplora есть много возможностей для взаимо- действия с компьютером, еще одним Arduino либо другими микрокон- троллерами. Микроконтроллер ATmega32U4 позволяет осуществлять последовательную (CDC) связь с компьютером через USB, и при под- ключении определяется как виртуальный COM-порт. Данная микро- схема может работать б режиме USB 2.0 Full Speed, используя стан-
дартные драйвера USE-COM. В системе Windows для этого потребуется .inf файл. В программное обеспечение Arduino входит программа, которая позволяет отправлять и принимать данные от Arduino через последо- вательный интерфейс. При передаче данных через USB соединение с компьютером на плате будут мигать светодиоды RX и ТХ. Микроконтроллер ATmega32U4 также поддерживает связь через SPI, работать с которым можно с помощью библиотеки SP1. Esplora может определяться как обычная клавиатура или мышь, и с помощью библиотек Keyboard и Mouse может быть запрограммирован на управление этими устройствами ввода Программирование. Esplora программируется с помощью про- граммного обеспечения Arduino (доступно для скачивания). Выберите «Arduino Esplora» из меню Tools > Board. Для более подробной инфор- мации смотрите страницу начало работы, отсканировав QR-код рядом. ONLINE ИНФОРМАЦИЯ В Arduino Esplora ATmega32U4 выпускается с прошитым загруз- чиком, позволяющим загружать в микроконтроллер новые про- граммы без необходимости использования внешнего программатора. Взаимодействие с ним осуществляется по протоколу AVR109. Однако можно не обращать внимание на загрузчик, и прошить микроконтроллер через разъем для внутрисхемного программирова- ния ICSP (In-Circuit Serial Programming). Библиотека Esplora. Чтобы упростить написание программ для Esplora, существует специальная библиотека, которая содержит методы для считывания данных с датчиков и отправке информации на встро- енные устройства вывода. Эта библиотека содержит высокоуровневые методы, возвращаю- щие уже обработанные данные, например, градусы по Фаренгейту или
Цельсию, вычисленные п< показаниям датчика температуры. Данная библиотека также обеспечивает простой доступ к устройствам вывода, например при отправке значений RGB-светодиоду. Для получения подробной документации и соответствующих при- меров смотрите пи QR-коду страницу «Библиотека Esplora». Автоматический (программный) сброс и запуск загрузчика. Чтобы каждый раз перед загрузкой программы не требовалось нажи- мать кнопку сброса, Esplora позволяет осуществлять его сброс про- граммно с подключенного компьютера. Сброс срабатывает при усло- вии закрытия виртуального COM-порта, который предварительно был открыт на скорости 1200 бод. При срабатывании этого условия, процес- сор сбросится, разорвав USB соединение с компьютером (при этом вир- туальный COM-порт исчезнет). После перезагрузки процессора, запускается загрузчик, оставаясь активным на протяжение приблизительно 8 секунд. Помимо этого, инициировать загрузчик можно, нажав кнопку сброса на плате Esplora. ПРИМЕЧАНИЕ. Обратите внимание, что при первом включении устрой- ства вместо инициации загрузчика, контроллер сразу перейдет к выполнению пользовательской программы (если таковая есть). Из-за особенностей сброса Esplora рекомендуется предоставлять программному обеспечению Arduino возможность осуществить сброс перед загрузкой программы, особенно, если вы привыкли нажимать кнопку сброса при прошивке других плат. Если же программное обе- спечение не сможет сбросить устройство, вы всегда сможете запустить загрузчик, нажав кнопку сброса вручную. Защита USB от перегрузок. В Esplora есть восстанавливаемые предохранители, защищающие USB-порт компьютера от коротких замыканий и перегрузок. Несмотря на то, что большинство компьюте- ров имеют собственную защиту, такие предохранители обеспечивают дополнительный уровень зашиты. Если от USB-порта потребляется ток более 500 мА, предохранитель автоматически разорвет соединение до устранения причин короткого замыкания или перегрузки.
Приложение 11 ARDUINO ADK Arduino ADK — это устройство на основе микроконтроллера ATmega2560. С использованием микросхемы МАХ3421Е в нем реали- зован USB-хост для подключения смартфонов на базе операционной системы Android. В состав устройства также входят: ♦ 54 цифровых входа/выхода (из которых 15 могут использоваться в качестве ШИМ-выходов); ♦ 16 аналоговых входов; ♦ 4 UART (аппаратных приемопередатчика для реализации последо- вательных интерфейсов), ♦ кварцевый резонатор на 16 МГц; ♦ разъем USB; ♦ разъем питания; ♦ разъем ICSP для внутрисхемного программирования; ♦ кнопка сброса. Внешний вид плат представлен на рис. П.15 и рис. 11.16. ONLINE ИНФОРМАЦИЯ Внешний зид Arauino ADK R5 (вид сверху) Внешний вид Arduino ADK R3 (вид снизу)
ONLINE ИНФОРМАЦИЯ Рис. П.15. Внешний вид Arduinc ADK R5. а - вид сверху; б - вид снизу
Рис. П.16. Внешний вид Arduino ADK а - вид сверху б - вад снизу Максимальная длина и ширина печатной платы ADK составляет 10,2 см и 5,4 см, соответственно, с учетом разъема USB и разъема пита- ния, выступающих за пределы платы. Три крепежных отверстия позво- ляют прикреплять плату к поверхности или корпусу. ВНИМАНИЕ. Расстояние между цифровыми выводами 7 и 8 не кратно традиционным 2,54 мм и составляет 4 мм.
Arduino ADK спроектирован на основе Arduino Mega 2560. В каче- стве преобразователя интерфейсов USB-UART в Arduino ADK использу- ется микроконтроллер ATmega8U2 (как и в Arduino Uno и Mega 2560). Для упрощения процесса обновления прошивки, на плате MegaADK версии R2 добавлен резистор, подтягивающий к земле линию HWB микроконтроллера 8U2. Подобная мера позволяет упростить переклю- чение устройства в режим DFU. Изменения на плате версии Arduino ADK R3 перечислены ниже: ♦ улучшена помехоустойчивость цепи сброса; ♦ изменена распиновка 1.0 — добавлены выводы SDA и SCL (воз- ле вывода AREF), а также два новых вывода, расположенных возле вывода RESET. Первый — IOREF — позволяет платам расширения подстраиваться под рабочее напряжение Arduino. Данный вывод предусмотрен для совместимости плат расширения как с 5V-Ardui- по на базе микроконтроллеров AVR, так и с 3,ЗУ-платами Arduino Due. Второй вывод ни к чему не подсоединен и зарезервирован для будущих целей. Схему, исходный проект и расположение выводов можно посмо- треть (скачать), отсканировав QR-код рядом. ONLINE ИНФОРМАЦИЯ Файлы EAGLE в архиве .zip Схема в формате .pdf Расположение выводов: Р1пМар2560 Характеристики плат Arduino ADK представлены в табл. П.21. Характеристики плат Arduino ADK Таблица П.21 Параметр Значение Микроконтроллер АТтеда2560 Рабочее напряжение, В 5 Напряжение питания (рекомендуемое), В 7...12 Напряжение питания (предельное), В 6...20 Цифровые входы/выходы (из которых 15 могут использоваться в качестве ШИМ-выходов) 54
Таблица П.21 (окончание) Параметр Значение Аналоговые входы 16 Максимальный ток одного вывода, мА 4G Максимальный выходной ток выгода 3,5V, мА 50 Flash-память (из них 8 Кбайт используются загрузчиком), Кбайт 256 SRAM, Кбайт 8 ЕЕРР.ОМ. Кбайт 4 Тактовая частота, МГц 16 Питание. Arduinc ADK может быть запитан от USB либо от внеш- него источника питания — тип источника выбирается автоматически. В качестве внешнего источника питания (не USB) может использоваться сетевой AC/DC-адаптер или аккумулятор/батарея Штекер адаптера (диаметр — 2,1 мм, центральный контакт — положительный) необхо- димо вставить в соответствующий разъем питания на плате. В случае питания от аккумулятора/батареи, ее провода необходимо подсоеди- нить к выводам Gnd и Vin разъема POWER. Поскольку Arduino ADK работает в режиме USB-хоста, то при под- ключении к нему смартфона, последний будет пытаться потреблять от Arduino ток, необходимый для подзарядки его батареи. Если Arduino ADK запитан от USB, то максимальный ток, расходуемый на питание платы и смартфона, ограничен 500 мА. Стабилизатор напряжения в цепи внешнего источника питания способен пропускать ток до 1500 мА. Поэтому, при использовании внешнего источника, для питания Arduino и смартфона отводится 750 мА. Еще 750 мА зарезервировано для питания различных приводов и датчиков, подключаемых к плате. Таким образом, для использования всех возможностей Arduino необходим источник питания с выходным током не менее 1,5 А. Напряжение внешнего источника питания может быть в пределах от 5,5 до 16 В. ВНИМАНИЕ. Уменьшение напряжения питания ниже 7 В приводит к уменьшению напряжения на выводе 5V, что может стать причиной нестабильной работы устройства. Использование напряжения больше 12 В может приво- дить к перегреву стабилизатора напряжения и выходу платы из строя. С учетом этого, рекомендуется исполь- зовать источник питания с напряжением в диапазоне от 7 до 12 В.
Arduino ADK спроектирован таким образом, чтобы быть совме- стимым с большинством плат расширения для Arduino Uno, Diecimila и Duemilanove. Поэтому, цифровые выводы 0-13 (а также смежные с ними выводы AREF и GND), аналоговые входы 0-5, разъем питания и ICSP-разъем на всех платах расположены одинаково. Кроме того, в перечисленных устройствах для главного приемопередатчика UART отведены одни и те же выводы (0 и 1), как и для внешних прерываний 0 и 1 (выводы 2 и 3 соответственно). Линии интерфейса SPI выведены на разъем ICSP на обеих платах — как на ADK, так и на Duemilanove / Diecimila. Обратите внимание, что на Arduino ADK расположение интер- фейса 12С (выводы 20 и 21) отличается от плат Duemilanove / Diecimila (аналоговые входы 4 и 5). В табл. П.22 перечислены выводы питания, расположенные на плате Выводы питания, рас положенные на плате Таблица П.22 Вывод Комментарий VIN Напряжение, поступающее з Arduino непосредственно о- внешнего источника питания (не связано с 5 В о, USB или другим стабилизированным напряжением). Через этот вывод можно как подавать внешнее питание, так и потреблять ток, когда устройство запитано от внешнего адаптера 5V На этот вывод поступает напряжение 5 R от стабилизатора напряжения на плате, вне независимости от гео как запитано устройство от адаптера (7...12 В) от USB (5 В} или через вывод VIN (7...12 В) Запитывать устройство через выводы 5V или 3V3 не рекомендуется, поскольку в этом случае не используется стабилизатор напряжения что может привести к выходу платы из строя 3V3 Напряжение 3,3 Б. поступающие от стабилизатора напряжения на плате. Максимальный ток, потребляемый от этого вывода, составляет 50 мА IOREF Этот вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера Arduino. В зависимости от напряжения, считанного с вывода 10REF, плата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней, что позволит ей работать как с 5 В так и с 3,3 В-устройствами GND Выводы земли Память. Arduino ADK имеет 256 Кбайт флеш-памяти (из которых 8 Кбайт используются загрузчиком), 8 Кбайт памяти SRAM и 4 Кбайт EEPROM (из которой можно считывать или записывать информацию с помощью библиотеки EEPROM). Входы и выходы. С использованием функций pinMode(), digitalWrite() и digitalRead() каждый из 50 цифровых выводов Arduino ADK может работать в качестве входа или выхода. Уровень напряжения на выводах ограничен 5 В. Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отклю-
ценными) номиналом 20...50 кОм. Помимо этого, некоторые выводы Arduino ADK могут выполнять дополнительные функции, представ- ленные в табл. П.23. Выводы платы Arduino ADK выполняющие дополнительные функции Таблица П 23. Элементы схемы Выводы Комментарии Госпедовагельный интерфейс Serial 0 (RX) и 1 (ТХ); Serial 1 19 (RX) и .8 (ТХ), Serial 2 17 (RX) и 16(ТХ' Serial 3 15 (RX) и 14 (Тх) Используются для получения (RX) и передачи (ТХ) данных по последовательному интерфейсу. Выводы 0 и 1 также соединены с соответствующими выводами микросхемы ATmegd8U2, выполняющей роль преобразователя USB-UAR1 Внешние прерывания 2 (прерывание 0, 3 (прерывание 1) 18 прерывание 5) 19 (прерывание 4) 20 (прерывание 3/ 21 (прерывание 2) Могут служить источниками прерываний, возникающих при различных условиях: при низком уровне сигнала, при фронте, спаде или изменении сигнала на этих выводах ШИМ 2-13 и 44-46 С помощью функции analogWriteQ могут выводить 8 битные аналоговые значения в виде ШИМ-сигнала Интерфейс SFI 50 (MiSO) 51 (MOSI). 52 (SCK), 53 (SS) С применением библиотеки SPI данные выводы позволяют осуществлять связь по интерфейсу SPI Линии SPI также выведены на разъем ICSP, совме(тимый с Arduino uno Uuemilanove и Diecmua L'SB-xoct МАХ3421Е Микросхема МАХ5421Е взаимодействует г Arduino по шине SPI При этом задействуются следующие выводы. Цифровые: 7 (RST), 50 (MISO), 51 (MOSI), 52 (SCK). Примечание. Не следует использовать цифровой вывод 1 в качестве обычного входа или выхода, поскольку он участвует в процессе взаимодействия с микросхемой МАХ3421Е Линии микроконтроллера, не выведенные на разъемы. PJ3 (GP МАХ), Р'6 (INT Мах), РН7 (SS) Светодиод 13 Встроенный светодиод, подсоединенный к выводу 13. При отправке значения HIGH светодиод включается, при отправке LOW -- выключается TWI 20 (SDA) и 21 (SCL) С использованием библиотеки Wire данные выводы позволяют осуществлять связь по интерфейсу TWI Внимание Расположение этих выводов отличается от Arduino Duemilanove и Diecimila Аналоговые входы Б Arduino ADK есть 16 аналоговых входов каждый из которых может представить аналоговое напряжение в виде 10-бигного чи(ла (1024 различных значения). По умолчанию, измерение напряжения осуществляется относительно диагазона от С до 5 Б Тем не менее, верхнюю границу этого диапазона можно изменить используя вывод AREF и функцию analogReference() AREF Опорное напряжение для аналоговых входов Может задействоваться функцией analcgReference()
Таблица П 23 (окончание) Элементы схемы Выводы Комментарии Reset Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера Обычно этот вывод служит для функционирования кнопки сброса на платах расширения Связь. Arduino ADK предоставляет ряд возможностей для осущест- вления связи с компьютером, еще одним Arduino или другими микро- контроллерами. В ATmega2560 есть четыре аппаратных приемопере- датчика DART для реализации последовательных интерфейсов (с логи- ческим уровнем TTL 5 В). Микросхема ATmega8LT2 на плате обеспечивает связь одного из приемопередатчиков с USB-портом компьютера, и при подключении к ПК позволяет Arduino определяться как виртуальный COM-порт (для этого операционной системе Windows потребуется соответствующий .inf-файл, в отличие от OSX и Linux, где распознавание платы в качестве COM-порта происходит автоматически). В пакет программного обеспечения Arduino входит специальная программа SerialMonitor, позволяющая считывать и отправлять на Arduino простые текстовые данные. При передаче данных через микро- схему ATmega8U2 во время USB-соединения с компьютером, на плате будут мигать светодиоды RX и ТХ. ПРИМЕЧАНИЕ. При последовательной передаче данных посредгтвом выводов 0 и 1, без использования USB-преобразователя, данные светодиоды не задействуются. Библиотека SoftwareSerial позволяет реализовать последователь- ную связь на любых цифровых выводах Arduino ADK. В микроконтроллере ATmega2560 также реализована поддержка последовательных интерфейсов TWI и SPI. В программное обеспече- ние Arduino входит библиотека Wire, позволяющая упростить работу с шиной TWI; для получения более подробной информации см. библио- теку Wire. Для работы с интерфейсом SPJ используйте библиотеку7 SPI. USB-хост, реализованный с помощью микросхемы МАХ3421Е, позволяет Arduino ADK взаимодействовать с любыми типами USB- устройств. Например, с различными телефонами, камерами Canon, клавиатурой, мышью, игровыми контроллерами Wiimote или PS3, и т. д.
Программирование. Arduino ADK программируется с помощью программного обеспечения Arduino. ATmega2560 в Arduino ADK выпу- скается с прошитым загрузчиком (таким же, как и в Mega 2560), позво- ляющим загружать в микроконтроллер новые программы без необхо- димости использования внешнего программатора. Взаимодействие с ним осуществляется по оригинальному протоколу STK500v2. Тем не менее, микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In- Circuit Serial Programming), не обращая внимания на загрузчик Исходный код прошивки микроконтроллера ATmega8U2 находится в свободном доступе в репозиториях Arduino. Прошивка ATmega8U2 включает в себя DFU-загрузчик (Device Firmware Update), позволяющий обновлять прошивку микроконтроллера. Для активации режима DFU необходимо: ♦ на платах версии R1 — замкнуть перемычку на обратной стороне платы (возле изображения Италии), после чего сбросить 8U2; ♦ на платах версий R2 и выше — для упрощения перехода в режим DFU присутствует резистор, подтягивающий к земле линию HWB микро- контроллера 8U2/16U2.После перехода в DFU-режим для загрузки но- вой прошивки можно использовать программное обеспечение Atmel's FLIP (для Windows) или DFU programmer (для Mac OS X и Linux). Альтернативный вариант — прошить микроконтроллер через разъем для внутрисхемного программирования 1SP с помощью внеш- него программатора, однако в этом случае DFU-загрузчик затрется. Автоматический (программный) сброс. Чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса, Arduino ADK спроектирован таким образом, который позволяет осуществлять его сброс программно с подключенного компьютера. Один из выводов ATmcga8U2, участвующий в управлении потоком данных (DTR), соеди- нен с выводом RESET микроконтроллера ATmega2560 через конденса- тор номиналом 100 нФ. Когда на линии DTR появляется ноль, вывод RESET также перехо- дит в низкий уровень на время, достаточное для перезагрузки микро- контроллера Данная особенность используется для того, чтобы можно было прошивать микроконтроллер всего одним нажатием кнопки в среде программирования Arduino. t ПРИМЕЧАНИЕ. ______________________________________________ = | Такая архитектура позволяет уменьшить таймаут за- грузчика, поскольку процесс прошивки всегда синхрони- зирован со спадом сигнала но линии DTR.
Однако эта система может приводить и к другим последствиям. При подключении ADK к компьютерам, работающим на Mac OS X или Linux, его микроконтроллер будет сбрасываться при каждом соединении про- граммного обеспечения с платой. После сброса на Arduino ADK акти- визируется загрузчик на время около полсекунды. Несмотря на то, что загрузчик запрограммирован игнорировать посторонние данные (т. е. все данные, не касающиеся процесса прошивки новой программы), он может перехватить несколько первых байт данных из посылки, отправ- ляемой плате сразу после установки соединения. Соответственно, если в программе, работающей на Arduino, предусмотрено получение от компьютера каких-либо настроек или других данных при первом запу- ске, убедитесь, что программное обеспечение, с которым взаимодей- ствует Arduino, осуществляет отправку спустя секунду после установки соединения. ПРИМЕЧАНИЕ. На плате ADK существует дорожка (отмеченная как «RESETEN»), разомкнув которую, можно отключить ав- томатический сброс микроконтроллера Для повторного восстановления функции автоматического сброса необходимо спаять между собой выводы, расположенные по краям этой дорожки. Автоматический сброс также можно выключить, подключив резистор номиналом 110 Ом между выводом RESET и 5V. Защита USB от перегрузок. В Arduino ADK есть восстанавливае- мые предохранители, защищающие USB-порт компьютера от коротких замыканий и перегрузок. Несмотря на то, что большинство компьюте- ров имеют собственную защиту, такие предохранители обеспечивают дополнительный уровень зашиты. Если от USB-порта потребляется ток более 500 мА, предохранитель автоматически разорвет соединение до устранения причин короткого замыкания или перегрузки.
ARDUINO ETHERNET Arduino Ethernet — это устройство на основе микроконтроллера ATmega328. В его состав входит: ♦ 14 цифровых выводов; ♦ 6 аналоговых входов; ♦ кварцевый резонатор на 16 МГц; ♦ разъем RJ45; ♦ разъем питания; ♦ разъем для внутрисхемного программирования ICSP; ♦ кнопка сброса. ПРИМЕЧАНИЕ Выводы 10, 11, 12 и 13 задействованы для связи про- цессора с Ethernet-контроллером и не должны исполь- зоваться для других целей. Поэтому, при использовании Ethernet-контроллера количество доступных выводов уменьшается до 9 с 4 ШИМ-выходами. В качестве дополнительной опции с платой может быть приобре- тен специальный модуль, реализующий технологию Power over Ethernet (РоЕ). Данная технология позволяет потреблять электрическую энергию через витую пару в сети Ethernet. Внешний вид плат представлен на рис. П.17 и рис. П.18.
ONLINE ИНФОРМАЦИЯ Внешний вид Ardumo Ethernet Rev. 3 (вид сверху) Внешний вид Arduino Внешний вид Ardumo Ethernet Rev. 3 (вид снизу) Ethernet Rev. 2 (вид сверху) Рис. П17. Внешний вид Arduino Ethernet Rev. 3: а - вид сверху, б - вид снизу
Рис П.18. Arduino Ethernet Ethernet Rev. 2 - вид спереди с дополнателоным модулем РоЕ Максимальная длина и ширина печатной платы Ethernet составляет 6,9 см и 5,4 см соответственно, с учетом разъема RT45 и разъема пита- ния, выступающих за пределы платы. Четыре крепежных отверстия позволяют прикреплять плату к поверхности или корпусу. ВНИМАНИЕ. Расстояние между цифровыми выводами 7 и 8 не кратно традиционным 2,54 мм и составляет 4 мм. Arduino Ethernet отличается от других плат Arduino тем, что у него нет встроенного USB-UART преобразователя, но есть Ethernet- контроллер Wiznet, который также используется в Ethernet-платах рас- ширения. Встроенный MicroSD-кардридер позволяет хранить файлы, к которым можно организовать сетевой доступ. Управление кардридером осуществляется с помощью библиотеки SD. Вывод 10 используется для взаимодействия с чипом Wiznet, линия SS для выбора SD-карты соеди- нена с выводом 4. 6-контактный разъем для программирования совместим не только с USB-Serial адаптером от Arduino, но и с USB-кабелями от FTDI и аналогичными USB-UART переходниками от Sparkfun и Adafruit. Разъем спроектирован таким образом, чтобы обеспечивать возмож-
ность автоматического сброса микроконтроллера во время прошивки — это освобождает пользователя от необходимости вручную нажимать кнопку сброса. При подключении USB-Serial адаптера, питание Arduino Ethernet осуществляется от адаптера. Третья версия Arduino Ethernet (Rev. 3) удовлетворяет требова- ниям стандартной распиновки 1.0: ♦ добавлены выводы SDA и SCL (возле вывода AREF), а также два но- вых вывода, расположенных возле вывода RESET. Наличие этих выводов обеспечивает совместимость плат расширения, содержа- щих 12С-устройства, со всеми моделями Arduino; ♦ вывод IOREF — позволяет платам расширения подстраиваться под рабочее напряжение Arduino. Данный вывод предусмотрен для совместимости плат расширения как с 5V-Arduino на базе микро- контроллеров AVR, так и с З.ЗУ-платами Arduino Due. Второй вывод возле IOREF ни к чему не подсоединен и зарезервирован для буду- щих целей. Характеристики плат Arduino Ethernet (Rev. 3) представлены в табл. П.24. Характеристики плат Arduino Ethernet (Rev. 5) Таблица П.24 Параметр Значение Микроконтроллер ATmega328 Рабочее напряжение, В 5 Напряжение питания (рекомендуемое), В 7..12 Напряжение питания (предельное), В 6 20 Напряжение питание РоЕ (предельное), В 36 57 Цифровые выводы (из них 4 ШИМ-выхода) 14 Аналоговые входы 6 Максимальный ток одного вывода мА 40 Максимальный выходной ток вывода 3,5V, мА 50 Е:а5б-памя’ь (0,5 Кбайт занять’ за-рузчиком). Кбайт 32 (АТпеда328) SRAM, Кбайт 2 (Almega 528) EEPROM, Кбайт 1 (АТгпеда328) Тактовая частота. МГц 16 Зарезервированные выводы Arduino: ♦ вывод 2 — источник прерывания от микросхемы W5100 (при мо- стовом включении); ♦ вывод 4 используется при работе с SD-картой; ♦ выводы 10...13 — используются SPI. Кроме того, плата Arduino Ethernet (Rev. 3) имеет: ♦ встроенный Ethernet-контроллер W5100 TCP/IP; ♦ сетевой разъем, поддерживающий технологию Power over Ethernet;
♦ карта Micro-SD с преобразователями уровней. Схему, исходный проект можно посмотреть (скачать), отсканиро- вав QR-код рядом. ONLINE ИНФОРМАЦИЯ Файлы EAGLE в архиве .zip Схема в формате .pdf Питание. Устройство может быть запитано от внешнего источника питания, через дополнительный модуль «Power over Ethernet* (РоЕ), либо через USB-Serial адаптер или кабель FTDI. В качестве внешнего источника питания может использоваться сетевой ЛС/ОС-адаптер или аккумулятор. Штекер адаптера (диаметр — 2,1 мм, центральный контакт — положительный) необходимо вставить в соответствующий разъем питания на плате. В случае питания от акку мулятора, его провода необходимо подсоединить к выводам Gnd и Vin разъема POWER. ВНИМАНИЕ. Напряжение внешнего источника питания может быть в пределах от 6 до 20 В. Однако, уменьшение напряжения питания ниже 7 В приводит к уменьшению напряжения на выводе 5V, что может стать причиной нестабиль- ной работы устройства Использование напряжения больше 12 В может приводить к перегреву стабилиза- тора напряжения и выходу платы из строя С учетом этого, рекомендуется использовать источник питания с напряжением в диапазоне от 7 до 12 В. В табл. П.25 перечислены выводы разъема POWER, расположенные на плате.
Выводы разъема POWER, расположенные на плате Таблица П.25 Вывод Назначение VIN Напояжение поступающее в Arduino непосредственно от внешнего источника питания (не связано с 5 В от USB или другим стабилизированнь1м напряжением). Через этот вывод можно как подавать внешнее питание. так и пс-реблягьток. если устройства запитано от внешнего адаптера 5V На вывод поступает налояжение 5 В от стабилизатора напряжения на плате, вне независимости оттого, хак запитано устройстве, or адаптера (7...12В). от USB (5 В) или через Богвсд VIN (7. 12 В) Внимание Запитывать устройство через выводы 5V или 3V3 не рекомендуется поскольку в Э’ом случае не используется стабилизатор напряжения, что может привести к выходу платы из строя 3V3 Напряжение 3,3 В, поступающие от стабилизатора напряжения на плате. Максимальный выходной ток, потребляемый от этого вывода, составляет 5С мА IOREF Этот вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера Arduino В зависимости от напряжения.считаннс-э с вывода 10RЕплата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней, что позволит ей работать как с 5V так и с 3,3V-устройствами GND Выводы земли Дополнительный модуль РоЕ предназначен для получения электри- ческой энергии по обычной витой паре Ethernet-кабеля 5 категории: ♦ совместим со стандартом IEEE802.3af, ♦ низкий уровень выходных пульсаций и шумов (100 мВ от пика до пика); ♦ диапазон входного напряжения — от 34 В до 57 В; ♦ защита от перегрузок и коротких замыканий; ♦ выходное напряжение — 9 В; ♦ DC,/DC преобразователь с высоким КПД — 75% при нагрузке 50%; ♦ изоляция между входом и выходом — 1500 В ПРИМЕЧАНИЕ. Модуль «Power over Ethernet» - это проприетарное ап- паратное средство, разработанное третьими лицами без участия Arduino. Память. Объем памяти программ микроконтроллера ATmega328 составляет 32 Кбайт (из них 0,5 Кбайт отведены под загрузчик). Помимо этого, он имеет 2 Кбайт оперативной памяти SRAM и 1 Кбайт EEPROM (для взаимодействия с которой служит библиотека EEPROM). Входы и выходы. С использованием функций pinMode(), digitalWrite() и digitalRead() каждый из 14 цифровых выводов может работать в качестве входа или выхода. Рабочее напряжение выводов — 5 В. Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтя-
гивающими резисторами (по умолчанию отключенными) номиналом 20...50 кОм. Помимо основных функций, некоторые выводы Arduino могут выполнять функции дополнительные, собранные в табл. П.26. Дополнительные функции выводов Таблица П.26 Элементь! схемы Выводы Комментарий Последовательный интерфейс 0 (RX) и 1 (ТХ) Используются для получения (RX) и передаии (ТХ) данных по последовательному интерфейсу Внешние прерывания 2 и 3 Данные выводы могут быть сконфигурированы в качестве источников прерываний, возникающих при различных условиях- при низком уровне сигнала пс фронту по спаду или при изменении сигнала. Для голучениядополнительной информации см функцию attachlnterrupt;). ШИМ 3,5. 6.9 и 10 С помощью функции analcgWcteO могут выводить 8-битные аналоговые значения в виде ШИМ-сигнала Интерфейс SPI 10 (SS), 11 (MOSI). 12 (MISO), 13 (SCK) С использованием библиотеки SPI данные выводы позволяют осуществлять связь пс интерфейсу SPI. Светодиод 9 Встроенный светодиод, подсоединенный к выводу 9 При отправке значения HIGH светодиод включается, при отправке LOW - выключается 3 большинстве моделей Arduino этот светодиод соединен с выводом 13 В Arduino Ethernet он размещен на 9 выводе, поскольку вывод 13 является частью SPI-шины Аналоговые входы 6 аналоговых входов (А0-А5) каждый из них може’ представить аналоговое напряжение в виде 10-битного числа (1024 различных значения). По умолчанию, измерение напряжения осуществляется относительно диапазона от 0 до 5 Б.Тем не менее верхнюю границу этого диапазона можно изменить используя вывод AREF и функцию analogReferenceO TWI А4 (SDA) и А5 (SCL) С использованием библиотеки Wire данные выводы могут осуществлять связь по интерфейсу TWl AREF Опорное напряжение для аналоговых входов Может задействоваться функцией analogRefe'erceQ Reset Низкий уровень (uOW) Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения Связь. Arduino Ethernet предоставляет ряд возможностей для осу- ществления связи с компьютером, еще одним Arduino или другими микроконтроллерами. Библиотека SoftwareSerial позволяет реализовать последовательную связь на любых цифровых выводах Arduino Ethernet. В микроконтроллере ATmega328 также реализована поддержка последовательных интерфейсов TWI и SPI. В программное обеспече- ние Arduino входит библиотека Wire, позволяющая упростить работу с шиной TWI. Для работы с интерфейсом SPI используйте библиотеку SPI.
Помимо этого, плату можно подключить к проводной сети через Ethernet. При подключе- нии потребуется указать 1Р адрес и МАС-адрес устройства. Реализована полная поддержка библиотеки Ethernet. Для работы со встроенным microSD- кардридером служит библиотека SD, при работе с которой следует помнить, что линия SS соеди- нена с выводом 4 Программирование. Arduino Ethernet можно запрограммировать двумя способами: ♦ либо через 6-контактный разъем для про- ONLINE ИНФОРМАЦИЯ Соответствие выводов Arduino и АТтеаа328 граммирования; ♦ либо с помощью внешнего lSP-программагора. 6-контактный разъем для программирования совместим с USB- кабелями от FTDI и другими аналогичными USB-UART переходниками от Sparkfun и Adafruit, включая USB-Serial адаптер от Arduino. Разъем спроектирован таким образом, чтобы обеспечивать возможность авто- матического сброса микроконтроллера во время прошивки — это осво- бождает пользователя от необходимости вручную нажимать кнопку сброса. При подключении к USB-эдаптеру, питание платы осуществля- ется от адаптера. Внешний программатор. Arduino Ethernet можно прошить и с помощью внешнего программатора, подобного AVRISP mkll или USBTinylSP. Для этого в среде разработки необходимо установить режим прошивки программатором. Следует помнить, что использова- ние внешнего программатора повлечет за собой стирание загрузчика во flash-памяти микроконтроллера.
ARDUINO MINI Arduino Mini — это маленькое микропроцессорное устройство, ориентированное на использование с макетными платами или в прило- жениях, предъявляющих высокие требования к габаритным размерам. Первоначально устройство было спроектировано на базе микрокон- троллера ATmegal68, который в настоящее время заменен на микро- контроллер ATmega328. В состав устройства входит: ♦ 14 цифровых входов/выходов (из которых 6 могут использоваться в качестве ШИМ выходов); ♦ 8 аналоговых входов; ♦ кварцевый резонатор на 16 МГц. Arduino Mini можно прошить с помощью специального USB-Serial адаптера или любого другого преобразователя интерфейсов USB-Serial либо RS232-Serial с TTL-уровнями напряжения. ПРИМЕЧАНИЕ. В новой версии Arduino Mini (R5) обновлена печатная плата под микроконтроллер АТтеда528. благодаря чему все компоненты теперь расположены на лицевой сто- роне платы. Помимо этого, добавлена кнопка сброса. При этом в новой версии Arduinc Mini расположение вы- водов полностью аналогично предыдущей версии R4. ВНИМАНИЕ. Напряжение питания Arduino Mini не должно превышать 9 В или не должно быть отрицательным. При несоблю- дении этого условия плата может выйти из строя Внешний вид платы представлен на рис. П.19.
Рис. П. 19. Внешний вид Arduino Mini: а - вид сверху .'без разъемов!, б - вид снизу ONLINE ИНФОРМАЦИЯ Внешний вид Arduino Mini (вид сверху) Внешний вид Arduino Mini (вид снизу)
Характеристики плат Arduino Mini представлены в табл. IL27. Характеристики плат Arduino M!ni Таблица П 27 Параметр Значение Микроконтроллер АТпеда328 Рабочее напряжение В 5 Напряжение питания, В 7..9 Цифровые входы/вылоды (из них 6 могут исголозэваться в качестве ШИМ выходов; 14 Аналоговые входы (4 из которых на внешних выводах) 8 Максимальный ток одного вывода. мА 40 Flash-riaMBib (из которых 2 Кбайт используются загрузчиком) Кбайт 52 SRAM, Кбайт 2 EEPROM Кбайт 1 Тактовая частота МГц 16 Программирование. Arduino Mini про- граммируется с помощью программного обе- спечения Arduino (можно скачать, перейдя по ссылке рядом). Для прошивки Arduino Mini можно исполь- зовать специальный USB-Serial адаптер или любой другой преобразователь интерфейсов USB-Serial либо RS232-Serial с TTL-уровнями напряжения. ATmega328 в Arduino Mini выпу- скается с прошитым загрузчиком, позволя- ющим загружать в микроконтроллер новые программы без необходимости использования внешнего программатора. Взаимодействие с ним осуществляется по оригинальному прото- колу STKSOO. ONLINE ИНФОРМАЦИЯ Программное обеспечение Arduino ПРИМЕЧАНИЕ. Микроконтроллер АТтедо528 можно прошить и через разъем для внутрисхемного программирования ICSP (In- Circuit Serial Programming), не обращая внимания на за- грузчик. Входы и выходы. Каждый из 14 цифровых выводов Arduino Mini может работать в качестве входа или выхода. Уровень напряжения на выводах ограничен 5 В. Максимальный ток, который может отдавать
или потреблять один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключен- ными) номиналом 20...50 кОм. Выводы 3, 5, 6, 9, 10 и 11 могут выводить аналоговые величины в виде П1ИМ-сигнала. Выводы 0 и 1 используются при подключе- нии устройства к компьютеру через адаптер Mini USB (или похожий). Подключение к этим выводам каких либо внешних цепей может приво- дить к нарушению USB-соединения с компьютером или препятствовать процессу загрузки в микроконтроллер новых программ. В Arduino Mini есть 8 аналоговых входов, каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 различных значения). Входы 0-3 выведены на внешний разъем платы; для подключения к входам 4-7 на плате предусмотрены отвер- стия и распаечные площадки. По умолчанию, измерение напряжения осуществляется относительно диапазона от 0 до 5 В. Однако, верхнюю границу этого диапазона можно изменить, используя вывод AREF и несколько низкоуровневых команд. Соответствие выводов Arduino с выводами микроконтроллера ATmegal68/328 и распиновку Arduino Mini 03,04,05 можно посмотреть, перейдя по ссылкам рядом. Расположение выводов. Примечание: распиновка выводов в Arduino Mini версий 03 и 04 отличается. Убедитесь, что вы использу- ете схему, соответствующую вашей версии Arduino Схемы плат можно скачать, перейдя по соответствующим ссылкам рядом. ONLINE ИНФОРМАЦИЯ Соответствие выводов Arduino с выводами микроконтроллера ATmeqal68/328 Распиновка Arduino Mini 03 (совместима с более старыми версиями, за исключением отсутствующего разъема 107 вверху платы) Распиновка Arduino Mini 04 и 05 (вывод GROUND на левой стороне платы сместился вниз на одну позицию)
Схема Arduino Mini 05 Схема Arduino Mini 04 Схема Arduino Mini 05 Файлы EAGLE для Arduino Mini 05 Файлы Geiber для Arduino Mini 04 (оригинальные сборочные файлы не были выполнены в Eagle) Сборочные чертежи и трассировка адаптера Mini USB
LILYPAD ARDUINO USB LilyPad Arduino USB — это устройство на базе микроконтроллера ATmega32U4. В его состав входит все необходимое для работы с данным микроконтроллером: ♦ 9 цифровых входов/выходов (4 из которых могут работать в каче- стве ШИМ-выходоб, 4 — в качестве аналоговых входов}; ♦ кварцевый резонатор на 8 МГц; ♦ разъем микро-USB; ♦ разъем JST для литий-полимерного аккумулятора на 3,7 В; ♦ кнопка сброса. Для начала работы с LilyPad достаточно просто подать питание от аккумулятора либо подключить его к компьютеру посредст вом USB- кабеля. ПРИМЕЧАНИЕ. Отличие LilyPad Arduino USB от всех предыдущих плат LilyPad заключается в том, что его USB-контроллер встроен непосредственно в микроконтроллер ATmega32U4, что исключает необходимость в дополни- тельном USB-UART преобразователе. Благодаря этому при подсоединении к компьютеру LilyPad Arduino USB может определяться не только как виртуальный (CDC) COM-порт, но и как обычная мышь или клавиатура. Кроме того, токая архитектура оказывает влияние и нс поведение платы. Печатная плата LilyPad Arduino USB имеет форму круга диаме- тром около 50 мм (2"). Разъем microUSB слегка выступает за пределы этого диаметра. Толщина самой платы составляет 0.8 мм (1/32"), а
Рис П.20. Внешний вид LilyPad Arduino USB: a - вид сверху: б - вид снизу общая высота с учетом всех компонентов (самым высоким из которых является JST-разъем для подключения аккумулятора) — 6,5 мм (1/4"). Внешний вид платы представлен на рис. П.20 ONLINE ИНФОРМАЦИЯ Внешний вид LilyPad Arduino USB (вид сверху) Внешний вид LilyPoa Arduino USB (вид снизу) Характеристики платы LilyPad Arduino USB представлены в табл. П.28. Характеристики платы LilyPoa Arduino USB Таблица П.28 Параметр Значение Микраконтрсллер ATmega32u4 Рабочее напряжение В 3,3 Напряжение питания, В 3.8 .5 Цифровые входы/выходы 9
Таблица П 28 (окончание) Параметр Значение Каналы ШИМ 4 Аналоговые входы 4 Максимальный ток одного вывода, мА 40 Flash-память (из нее 4 Кбайт используются загрузчиком), Кбайт 32 (АТтедг32ил) SRAM, Кбайт 2,5 (ATmega32u4) EFPROM, Кбайт 1 (ATmega32u4) Тактовая частота, МГц 8 Схему и исходный проект можно посмотреть, перейдя по ссылке рядом. ONLINE ИНФОРМАЦИЯ Файлы EAGLE в архиве .zip Схема в формате .pdf Питание. LiJyPad Arduino USB может быть запитан как от 3,7 В LiPo аккумулятора (подключается к разъему JST на плате), так и от USB. При использовании других источников питания задействуется встроенный стабилизатор MIC5219, понижающий напряжение питания до необхо- димых 3,3 В. Для включения и выключения устройства на плате предусмотрен специальный переключатель: в позиции «ON» на микроконтроллер подается питание, и устройство включается, при переключении в пози- цию «CHG» питание отключается. ПРИМЕЧАНИЕ. Такое поведение устройства справедливо при питании платы от USB или от аккумулятора.
LilyPad Arduino USB также содержит микросхему MCP73831, управ- ляющую процессом заряда LiPo-аккумулятора. Процесс заряда активи- зируется при подключении устройства с установленным аккумулято- ром к USB-порту компьютера, о чем будет свидетельствовать светодиод над словом «CHG». Подзарядка аккумулятора осуществляется вне зави- симости от положения переключателя питания и автоматически пре- кращается, когда аккумулятор полностью заряжен. В табл. П.29 пере- числены выводы питания на плате. Выеодь. питания на плате Таблица П.29 Вывод Описание + Стабилизированное напряжение 3,3 В, используемое для питания микроконтроллера и других компонентов на плате. Поступает оз встроенного стабилизатора напряжения, вход которого может быть подключен либо к USB, либо к аккумулятору Напряжение на этом выводе пригутствует толью в том случае когда переключатель питания находится в положении «ON» - Вывод земли Память. Объем памяти программ микроконтроллера Al'mega32U4 составляет 32 Кбайт (из них 4 Кбайт отведены под загрузчик). Помимо этого, он имеет 2,5 Кбайт оперативной памяти SRAM и 1 Кбайт EEPROM (для взаимодействия с которой служит библиотека EEPROM). Входы и выходы. С использованием функ- ций pinMode(), digitalWri te() и digitalRead() каж- дый из 9 цифровых выводов LilyPad Arduino USB может работать в качестве входа или выхода. Уровень напряжения на выводах огра- ничен 3,3 В Максимальный ток, который может отдавать или потреблять один вывод, состав- ляет 40 мА Все выводы сопряжены с внутрен- ними подтягивающими резисторами (по умол- чанию отключенными) номиналом 20...50 кОм. Помимо этого, некоторые выводы Arduino могут выполнять дополнительные функции (табл. П.ЗО). По ссылке рядом смотрите соот- ветствие выводов Arduino и ATmega32u4. ONLINE ИНФОРМАЦИЯ Соответствие выводов Arduino и ATmega32u4 Дополнительные функции выводов платы LilyPaa Arduino USB Таблица П 30 Элемент схемы Выводы комментарии TWI 2 (SDA) и 3 (SCL) С использованием библиотеки Wire данные выводы позволяют осуществлять связь по интерфейсу TWI
Таблица П 30 (окончание) Элемент схем») Выводы Комментарии Внешние прерывания 2 и 3 Данные выводы могут быть сконфигурированы в качестве источников прерываний, возникающих при различных условиях: при низком уровне сигнала, по фронту, по спаду или при изменении сигнала ШИМ 3.9.10,11 и 13 С помощью функции dnaloyWriteQ moi у г выводить 8 битные аналоговые значения в виде ШИМ-сигнала Светодиод 13 Встроенный светодиод подсоединенный к выводу 13. При отправке значения HIGH светодиод включаемся, при отправке LOW - выключаемся Аналоговые входы А2 А5 В LilyPad Afduii.ii USB есть 4 анало-овых входа |А2-А5). каждый из которых может исполозоваться как обычный цифровой вывод. Каждый из входов может представить аналоговое напряжение в виде 1С-битного числа (102* различных значения). По умолчанию, измерение напряжения осущеовляется относительно диапазона от 0 до 3,3 Б. Однако, верхнюю границу этого диапазона можно изменить, используя вывод AREF и функцию ar.alogReferenceQ Связь. LilyPad Arduino USB предоставляет ряд возможностей для осуществления связи с компьютером, еще одним Arduino или другими микроконтроллерами. Микроконтроллер 32U4 поддерживает после- довательную (CDC) связь через USB и при подключении к компьютеру может определяться как виртуальный COM-порт. При этом микросхема использует стандартные USB-СОМ драйвера и может работать в режиме USB 2.0 Full Speed. На платформе Windows необходим только соответствующий .inf- файл. В пакет программного обеспечения Arduino . ходит специальная программа, позволяющая считывать и отправлять на Arduino про- стые текстовые данные. При передаче данных компьютеру через USB на плате будут мигать светодиоды RX и ТХ. Библиотека SoftwareSerial позволяет реализовать последовательную связь на любых цифровых выводах LilyPad. В LilyPad Arduino USB также реализована поддержка последователь- ного интерфейса I2C (TWI). В программное обеспечение Arduino входит библиотека Wire, позволяющая упростить работу с шиной 12С. LilyPad Arduino USB может определяться как обычная клавиатура или мышь, и с помошью библиотек Keyboard и Mouse может быть запро- граммирован на управление этими устройствами ввода. Программирование. LilyPad Arduino USB программируется с помощью программного обеспечения Arduino. Для этого из меню Tools > Board необходимо выбрать «LilyPad Arduino USB» с микрокон- троллером, соответствующим вашей плате.
ATmega32U4 в LilyPad Arduino USB выпускается с прошитым загрузчиком, позволяющим загружать в микроконтроллер новые про- граммы без необходимости использования внешнего программатора. Взаимодействие с ним осуществляется по протоколу AVR109. Тем не менее, микроконтроллер можно прошить и через кон- такты для внутрисхемного программирования ICSP (In-Circuit Serial Programming), не обращая внимания на загрузчик. Поскольку отвер- стия этих контактов слишком малы для подключения разъема, то для прошивки контроллера с помощью программатора можно поступить следующим образом: вставьте в ISP-разъем вашего программатора выводы типа «папа» и прижмите их к контактам ICSP на плате. Автоматический (программный) сброс и запуск загрузчика. Чтобы каждый раз перед загрузкой программы не требовалось нажи- мать кнопку сброса, LilyPad Arduino USB спроектирован так, что можно осуществлять его сброс программно с подключенного компьютера. Сброс срабатывает после закрытия виртуального COM-порта, который предварительно был открыт на скорости 1200 бод. При срабатывании этого условия процессор сбросится, разорвав USB соединение с компьютером (при этом виртуальный СОМ-порт исчезнет). После перезагрузки процессора, запускается загрузчик, оста- ваясь активным на протяжении приблизительно 8 секунд. Помимо этого, инициировать загрузчик можно двойным нажатием кнопки сброса на плате LilyPad Arduino USB. Однократное нажатие кнопки приведет к сбросу микроконтроллера и выполнению загружен- ной программы. ПРИМЕЧАНИЕ. При первом включении устройства вместо запуска за- грузчика, контроллер также перейдет к выполнению пользовательской программы (если таковая есть). Из-за особенностей механизма сброса LilyPad Arduino USB, реко- мендуется предоставлять программному обеспечению Arduino возмож- ность осуществить сброс перед загрузкой программы, особенно, если вы привыкли нажимать кнопку' сброса при прошивке других плат. Если же программное обеспечение не сможет сбросить устройство, вы всегда сможете запустить загрузчик вручную, дважды нажав кнопку сброса.
ARDUINO NANO Arduino Nano — это полнофункциональное миниатюрное устрой- ство на базе микроконтроллера ATmega328 (Arduino Nano 5.0) или ATmegal68 (Arduino Nano 2.x), адаптированное для использования с макетными платами По функциональности устройство похоже на Arduino Duemilanove, и отличается от него размерами, отсутствием разъема питания, а также другим типом (Mini-B) USB-кабеля. Arduino Nano разработано и выпускается фирмой Gravitech. Внешний вид платы представлен на рис. П.21. Рис П.21. Внешний вид Arduino Nano' а - вид сверху, б - вид снизу
ONLINE ИНФОРМАЦИЯ Внешний вид Arduino Nano (вид сверху) Внешний вид Arduino Nano (вид снизу) Характеристики платы Arduino Nano представлены в табл П.31. Характеристики платы Arduino Nano Таблица П 31 Параметр Значение Микроконтрс плер Atmel ATmegal68 или ATmega328 Рабочее напряжение (логический уровень). В 5 Напряжение питания (рекомендуемое) В 7...12 Напряжение питания (предельное; В 6 .20 Цифровые входы/выходы (из них 6 могут использоваться как ШИМ выходы) 14 Аналоговые входы 8 Максимальный гок одного вывода. мА 40 Flash-память (2 Кбайт используются загрузчиком). Кбайт 16 (Almegal68) или 32 (ATmega3?8) SRAM Кбайт 1 (ATmegal68) или 2 (ATmega328) EEPROM (ATmegal6S). байт 512 EEPROM (ATmeqa328), Кбайт 1 Тактовая частота, МГц 16 Размеры платы см 1,85 « 4.3 Схему и исходный проект можно посмотреть, перейдя по ссылке рядом. ПРИМЕЧАНИЕ. Печатная плата Arduino Nano 2.3 (ATmegal68) содер- жит 4 слоя, в то время как бесплатная версия Eogle позволяет работать только с двухслойными платами Поэтому для возможности работы со схемой в бес- платной версии, проект выложен без трассировки пе- чатной платы.
ONLINE ИНФОРМАЦИЯ Arduino Nano 3 0 (ATmego328)‘ файлы Eagle в архиве zip Arduino Nano 3.0 (ATmega328): схема формате .pdf Питание. Arduino Nano может быть запитан через кабель Mini-B USB, от внешнего источника питания с несгабилизированным напря- жением 6...20 В (через вывод 30) либо со стабилизированным напряже- нием 5 В (через вывод 27). Устройство автоматически выбирает источ- ник питания с наибольшим напряжением Напряжение на микросхему FTDI FT232RL подается только в случае питания Arduino Nano через USB. Поэтому при питании устройства от других внешних источников (не USB), выход 3,3 В (формируемый микро- схемой FTDI) будет неактивен. В результате этого светодиоды RX и ТХ могут мерцать при наличии высокого уровня сигнала на выводах 0 и 1. Память. Объем памяти программ микроконтроллера ATmegal68 составляет 16 Кбайт (из них 2 Кбайт используются загрузчиком); в ATmega328 — этот объем составляет 32 Кбайт (из которых 2 Кбайт также отведены под загрузчик). Помимо этого, ATmegal68 имеет 1 Кбайт оперативной памяти SRAM и 512 байт EEPROM (для взаимодействия с которой служит библиотека EEPROM); а микроконтроллер ATmega328 — 2 Кбайт SRAM и 1 Кбайт EEPROM. Входы и выходы. С использованием функций pinMode(), digitalWriteQ и digitalReadQ каждый из 14 цифровых выводов Arduino
Nano может работать в качестве входа или выхода. Рабочее напряжение выводов состав- ляет 5 В. Максимальный ток, который может отдавать или потреблять один вывод, состав- ляет 40 мА. Все выводы сопряжены с внутрен- ними подтягивающими резисторами (по умол- чанию отключенными) номиналом 20.. .50 кОм. Помимо основных, некоторые выводы Arduino могут выполнять дополнительные функции (табл. П.32). ONLINE ИНФОРМАЦИЯ Соответствие выводов Arduino и ATmegal68 Дополнительные функции выводов Arduino Nano Таблица П.32 Элемент схемы Вывод Комментарии Последовательный интерфейс 0 (RX) и 1 (ТХ) Используются для получения (RX) и передали (ГХ) данных по последовательному интерфейсу. Эти выводы соединены с соответствующими выводами микросхемы- преобразователя USB UART or FTDI Внешние прерывания 2 и 5 Данные вь воды мо'уг быть сконфигурированы в качестве источников прерываний, возникающих при различных условиях’ при низком уровне сигнала, по фронту, по спаду или при изменении сигнала. Для получения дополнительной информации см функцию attacninterruptO ШИМ 5. 5. 6,9.10 и 11 С помощью функции analcgwriteQ могут выводить S-битные аналоговые значения е виде ШИМ-сигнала Интерфейс SPI 10 (SS), 11 (MOSI), 12 MISO), 13 (SCK) Данные выводы позволяют осуществлять связь по интерфейсу SP1. В устройстве реализозача аппаратная поддержка SP1, однако на данный момент язык Arduino пока ее не поддерживает Светодиод 13 Встроенный светодиод, подсоединенный к цифровому выводу 13. При отправке значения HIGH светодиод включается, при отправке _OW -• выключае-ся I2C 4 (SDA) и 5 (SCL) С использованием библиотеки Wire (документация на веб-сайте Wring) даннь е выводы могу- осуществлять связь по интероейсу I2C (TWI). AREF Опорное напряжение для аналоговых входов Может задействоваться функцией analogReference(). Reset Формирование низкого уровня (LOW) на этом чывсде приведет к перезагрузке микроконтроллера Обычно это- вывод служит для функционирования кнопки сбэоса на платах расширения По QR-коду рядом смотрите соответствие выводов Arduino и ATmegal68,
Связь. Arduino Nano предоставляет ряд возможностей для осущест- вления связи с компьютером, еше одним Arduino или другими микро- контроллерами. В ATmegal68 и ATmega328 есть приемопередатчик UART, позволяющий осуществлять связь по последовательным интер- фейсам посредством цифровых выводов О (RX) и 1 (ТХ). Микросхема FTDI FT232RL обеспечивает связь приемопередатчика с USB-портом компьютера, и при подключении к ПК позволяет Arduino определяться как виртуальный COM-порт (драйвера FTD1 включены в пакет программного обеспечения Arduino). В пакет программного обе- спечения Arduino также входит специальная программа, позволяющая считывать и отправлять на Arduino простые текстовые данные. При передаче данных компьютеру через USB на плате будут мигать свето- диоды RX и ТХ. ПРИМЕЧАНИЕ. При последовательной передаче данных посредством выводов 0 и 1 данные светодиоды не задействуются. Библиотека SoftwareSerial позволяет реализовать последователь- ную связь на любых цифровых выводах Arduino Nano. В микроконтроллерах ATmega328 и ATinegal68 также реализована поддержка последовательных интерфейсов I2C (TW1) и SPI. В про- граммное обеспечение Arduino входит библиотека Wire, позволяющая упростить работу с шиной I2C. Программирование. Arduino Nano программируется с помо- щью программного обеспечения Arduino Для этого из меню Tools > Board необходимо выбрать «Arduino Diecimila, Duemilanove, or Nano w/ ATmegal68» или «Arduino Duemilanove or Nano w/ ATmega328» (в зависимости or микроконтроллера на вашей плате). ATmegal68 и ATmega328 в Arduino Nano выпускается с прошитым загрузчиком, позволяющим загружать в микроконтроллер новые про- граммы без необходимости использования внешнего программатора. Взаимодействие с ним осуществляется по оригинальному протоколу STK500. ПРИМЕЧАНИЕ. Микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In-Circuit Serial Programming), не обращая внимания но загрузчик
Автоматический (программный) сброс. Чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса, Arduino Nano спроектирован так, чтобы осуществлять его сброс программно с подключенного компьютера. Один из выводов микросхемы FT232RL, участвующий в управлении потоком данных (DTR), соединен с выво- дом RESET микроконтроллера ATmega 168 или ATmega328 через конден- сатор номиналом 100 нФ. Когда на линии DTR появляется ноль, вывод RESET также переходит в низкий уровень на время, достаточное для перезагрузки микроконтроллера. ПРИМЕЧАНИЕ. Данная особенность используется для того, чтобы можно было прошивать микроконтроллер всего одним нажатием кнопки в среде программирования Arduino. Такая архитектура позволяет уменьшить таймаут за- грузчика, поскольку процесс прошивки всегда синхрони- зирован со спадом сигнала на линии D1R. Однако эта система может приводить и к другим последствиям. При подключении Arduino Nano к компьютерам, работающим на Mac OS X или Linux, его микроконтроллер будет сбрасываться при каждом соеди- нении программного обеспечения с платой. После сброса на Arduino Nano активизируется загрузчик на время около полсекунды. Несмотря на то, что загрузчик запрограммирован игнорировать посторонние данные (т. е. все данные, не касающиеся процесса про- шивки новой программы), он может перехватить несколько первых байт данных из посылки, отправляемой плате сразу после установки соединения. СОВЕТ. Если в программе, работающей на Arduino, предусмо- трено получение от компьютера каких-либо настроек или других данных при первом запуске, убедитесь, что программное обеспечение, с которым взаимодействует Arduino, осуществляет отправку спустя секунду после установки соединения.
ARDUINO PRO MINI Arduino Pro Mini — это устройство на базе микроконтроллера ATmega328. В его состав входит: ♦ 14 цифровых входов/выходов (из них 6 могут использоваться в ка- честве ШИМ-выходов); ♦ 8 аналоговых входов; ♦ кварцевый резонатор; ♦ кнопка сброса; ♦ контактные площадки для впаивания разъемов. Шестиконтактный разъем может служить для питания и взаимо- действия с платой через USE посредством FTDI-переходника либо макетной платы Sparkfun. Arduino Pro Mini предназначен для полустациопарного монтажа в различное оборудование или установки. Плата специально постав- ляется без впаянных разъемов, что позволяет пользователю впаивать провода или использовать необходимые типы разъемов по своему усмотрению. По расположению выводов Arduino Mini Pro совместим Arduino Mini. Существует две версии Pro Mini: одна работает от 3,3 В при частоте 8 МГц, другая — от 5 В при 16 МГц. Arduino Pro Mini разработан и изго- товлен фирмой SparkFun Electronics. Внешний вид платы представлен на рис. П.22.
Рис. П. 22. Внешний вид Arduino Pro Mini: a - вид сверху; б - вид снизу ONLINE ИНФОРМАЦИЯ Внешний вид Arauirio Pro Mini (вид сверху) Внешний вид Arduino Pro Mini (вид снизу) Характеристики платы Arduino Pro Mini представлены в табл. П.ЗЗ. Характеристики платы Arduino Pro Mini ТаблицаП 55 Параметр Значение Микроконтроллер ATmegal68 или ATmega328 Рабочее напряжение. В 3,3 или 5 (в зависимости or модели) Напряжение питания. В 3,35...12 (для модели 3.3 В) или 5...12 (для модели 5 В) Цифровые входы/выходы (из них 6 могу’’ использоваться в качестве ШИМ-выходов) 14 Аналоговые входы 8 Максимальный ток одного зывода, мА 40 Flash-память (из которых 2 Кбайт используются загрузчиком), 16 Кбайт 16 SRAM, Кбайт 1 EEPROM. байт 512 Тактов;я частота, МГц 8 (для «одели 3,3 В) или 16 (в модели 5 В) Габаритные размеры печатной платы Arduino Pro Mini: 1,8 см х 3,3 см.
Питание. Arduino Рю Mini может быть запитан от различных источников: ♦ через макетную плату; ♦ через переходник FTDI, подсоединенный к шестиконтактному разъему; ♦ от стабилизированного источника питания с напряжением 3,3 В или 5 В (в зависимости от модели), подключенного к выводу Vcc. Кроме того, на плате есть встроенный стабилизатор напряжения, благодаря которому допускается подавать на плату напряжение пита- ния величиной до 12 В. Если для питания платы используется неста- билизированный источник питания, убедитесь, что он подсоединен к выводу «RAW», а не VCC. В табл. П.34 перечислены выводы питания, расположенные на плате. Выводы питания, расположенные на плате Arduino Pro Mini Таблица П.34 Вывод Назначение RAW Для гитания платы от нестабилизированного источника напряжения VCC Стабилизированное напряжение 3 3В или 5 В GNC Выводы земли Память. Объем флеш-памяти программ микроконтроллера ATmega328 составляет 32 Кбайт (из которых 2 Кбайт используются загрузчиком). Микроконтроллер также имеет 1 Кбайт памяти SRAM и 512 байт EEPROM (из которой можно считывать или записывать инфор- мацию с помощью библиотеки EEPROM). Входы и выходы. С использованием функций pinModeO, digitalWrite() и digita!Read() каждый из 14 цифровых выводов Pro Mini может работать в качестве входа или выхода. В зависимости от модели, уровень напряжения на выводах ограничен 3,3 В или 5 В. Максимальный ток, который может отдавать или потреблять один вывод, состав- ляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отключенными) номиналом 20 ..50 кОм. Помимо этого, некоторые выводы Arduino могут выполнять дополни- тельные функции (табл. П.35). В Arduino Pro Mini есть 6 аналоговых входов, каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 различных значения). Четыре из них выведены на контакты возле края платы; два остальных (входы 4 и 5) выведены на распаечные пло- щадки внутри платы. Измерение напряжения осуществляется относи-
тельно диапазона от 0 до VCC. Помимо этого, некоторые из аналого- вых входов имеют дополнительные функции, например, I2C: вывод Л4 (SDA) и вывод А5 (SCL). С использованием библиотеки Wire позволяют осуществлять связь по интерфейсу 12С. Дополнительные функции вывооов Arduino Pro Mini Таблица П.35 Элемент схемы Выводы Комментарии Последовательный интерфейс 0 (RX) и 1 (IX) Используются для получения (RX; и передачи (ТХ) данных по последовательному интерфейсу. Эти выводы соединены с линиями “ОСО и RX 1 шестиконтактного разъема Внешние прерывания 2 и 3 Данные выводы могут служить источниками прерываний, возникающих при различных условиях: при низком уровне сигнала, по фронту, по спаду или при изменении сигнала на этих выводах ШИМ 3.5,6 9.10 и 11 С помощью функции analogWnteC могут выводись 8битные аналоговые значения в виде ШИМ-сигнала Интерфейс SPI 10 (SS), 11 (MOSI) 12 (MISO), 13 (SCK) Данные выводы пизволяют осуществлять с вязь по интерфейсу 5Р| В устройстве реализована аппаратная поддержка SPI, однако на данный момент язык A'dulno пока ее не поддерживает Светодиод 13 Встроенный светодиод, подсоединенный к цифровому выводу 13. При отправке значения HIGH све-одиод включается, при отправке LOW - выключается Reset Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения По QR кодам рядом смотрите соответствие выводов Arduino и ATmega328, а также схему и исходный проект. ONLINE ИНФОРМАЦИЯ Соответствие выводов Arduino и АТтеда328 Схема в формате pdf Файлы EAGLE в архиве .zip Связь. Arduino Pro Mini предоставляет ряд возможностей для осуществления связи с компьютером, еще одним Arduino или дру- гими микроконтроллерами. В ATmega328 имеется приемопередатчик UART, позволяющий осуществлять последовательную связь посред-
ством цифровых выводов 0 (RX) и 1 (ТХ). В пакет программного обе- спечения Arduino входит специальная программа, позволяющая счи- тывать и отправлять на Arduino простые текстовые данные через USB- соединение. Библиотека SoftwareSerial позволяет реализовать последователь- ную связь на любых цифровых выводах Arduino Pro Mini. В микроконтроллере ATmega328 также реализована поддержка последовательных интерфейсов I2C (TWI) и SPI В программное обеспе- чение Arduino входит библиотека Wire, позволяющая упростить работу с шиной I2C. Программирование. Arduino Pro Mini программируется с помо- щью программного обеспечения Arduino. ATmega328 в Arduino Pro Mini выпускается с прошитым загрузчиком, позволяющим загружать в микроконтроллер новые программы без необходимости использова- ния внешнего программатора. Взаимодействие с ним осуществляется по оригинальному протоколу STK500. ПРИМЕЧАНИЕ. Микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In-Circuit Serial Programming), не обращая внимания на загрузчик. Автоматический (программный) сброс. Чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса, Arduino Pro Mini спроектирован так, что можно осуществлять его сброс программно с подключенного компьютера. Один из выводов шести- контактною разъема соединен с выводом RESET микроконтроллера ATmega328 через конденсатор номиналом 100 нФ. При подключении компьютеру этот вывод также связан с одной из линий, участвующих в аппаратном управлении потоком данных, идущих через преобразова- тель USB-Serial: ♦ при использовании кабеля FTDI — с линией RTS; ♦ при использовании макетной платы Sparkfun — с линией DTR. Когда на этой линии появляется ноль, вывод RESET, соответственно, также переходит в низкий уровень на время, достаточное для переза- грузки микроконтроллера. Данная особенность используется для того, чтобы можно было прошивать микроконтроллер всего одним нажатием кнопки в среде программирования Arduino.
ПРИМЕЧАНИЕ. Такая архитектура позволяет уменьшить таймаут за грузчика, поскольку процесс прошивки всегда синхрони- зирован со спадом сигнала наличии RESET. Однако эта система может приводить и к другим последствиям. При подключении Pro Mini к компьютерам, работающим на Mac OS X или Linux, его микроконтроллер будет сбрасываться при каждом соедине- нии программного обеспечения с платой. После сброса на Pro Mini акти- визируется загрузчик на время около полсекунды. Несмотря на то. что загрузчик запрограммирован игнорировать посторонние данные (т. е. все данные, не касающиеся процесса прошивки новой программы), он может перехватить несколько первых байт данных из посылки, отправ- ляемой плате сразу после установки соединения. Соответственно, если в программе, работающей на Arduino, предусмотрено получение от компьютера каких-либо настроек или других данных при первом запу- ске, убедитесь, что программное обеспечение, с которым взаимодей- ствует Arduino, осуществляет отправку спустя секунду после установки соединения. ONLINE ВИДЕО Arduino Pro Mini: установка в Arduino IDE Подключение Arduino Pro Mini Настройка и програм- мирование контроллеоа Arduino Pm mini + USBasp Как прошить arduino pro mini с автоматиче- ским нажатием Reset Как загрузить в Arduino Pro Mini загрузчик. Arduino ISP
ARDUINO PRO Arduino Pro — это устройство на базе микроконтроллера ATmegal68 или ATmega328. Arduino Pro разработано и изготовлено компанией SparkFun Electronics. Доступны две версии устройства — 3,3 В / 8 МГц или 5 В / 16 МГц. В состав Arduino Pro входит: ♦ 14 цифровых входов/выходов (из них 6 могут использоваться в ка- честве ШИМ-выходов); ♦ 6 аналоговых входов; ♦ разъем для подключения аккумулятора; ♦ переключатель питания; ♦ кнопка сброса; ♦ контактные площадки для впаивания разъема питания, ICSP- разъема для внутрисхемного программирования и внешних выво- дов платы. Шестиконтактный разъем может служить для питания и взаимо- действия с платой через USB посредством FTDI-кабеля либо макетной платы Sparkfun. Назначение. Плата Arduino Pro (рис. П23) предназначена для полу- стационарного монтажа в различное оборудование. Плата специально поставляется без впаянных разъемов, что позволяет пользователю припаивать провода или использовать необходимые типы разъемов по своему усмотрению. По расположению выводов Arduino Pro совместим со всеми платами расширения Arduino. Версия устройства с рабочим напряжением 3,3 В может работать от аккумулятора. С учетом шестиконтактного разъема и переключателя питания, выступающими за пределы платы, максимальная длина и ширина печатной платы Arduino Pro составляет 5,2 см на 5,4 см, соответственно, Четыре крепежных отверстия позволяют устанавливать плату в корпус или любую другую поверхность.
ВНИМАНИЕ. Расстояние между цифровыми выводами 7 и 8 не кратно традииионным 2,54 мм и составляет 4 мм. 3 2 Й f Т 1 0 9 8 , DIGITAL Power - a\F>lOG II 2 3 4 5 Рис. П 25. Внешний вид Arduino Pro ONLINE ИНФОРМАЦИЯ з.зи 5U 8 мн г 16MHZ 2ЭМнг> Arduino О ©J sparkfun.com о о, • — (SP ПНИН Внешний вид Arduino Pro О Характеристики платы Arduino Pro представлены в табл. П.36. Характеристики платы Arduino Pro Таблица П 36 Парамезр Значение Микроконтроллер ATmegal 68 или ATmega328 Рабочее напряжение в 3,3 или 5 Напряжение питания В 3.35...12 (для моделей 3 3 В) Напряжение питания, Б 5 „12 (для моделей 5 В) Цифровые входы/выходы (из них 6 могут использоваться в качестве ШИМ-выходов) 14 Аналоговые входы 6 Максимальный ток одного вывода, мА 40 Flash-памя’ь (из которых 2 Кбайт используются загрузчиком), Кбайт 16 (ATmeagl68) или 32 (ATriega328) SRAM, Кбайт 1 (ATmegal68) или 2 (ATmega328) EEPROM 512 байт (ATmegal68) или 1 Кбайт (ATmega328) Тактовая частота МГц 8 (для мсделей 3,3 В) или 16 (для моделей 5 В) По OR-кодам рядом смотрите соответствие выводов Arduino и ATmegal 68, а также схему и исходный проект.
ONLINE ИНФОРМАЦИЯ Питание. Плата Arduino Pro может быть запитана через USB- разъем, от аккумулятора либо от внешнего источника питания. Для под- ключения аккумулятора служит разъем JST. Для подключения внешнего источника питания на плату необходимо припаять соответствующий разъем питания В табл. П.37 перечислены выводы питания, располо- женные на плате Arduino Pro. Выводы питания, расположенные на плате Arduino Pro Таблица /7.37 Вывод Комментарии VIN Напряжение поступающее на Arduino от аккумуля-сра или внешнего источника питания (в соответствии с позицией переключателя). Через этот вывод можно как подавать внешнее питание так и потреблять ток. если устройство запитано от аккумулятора или внешнего источника питания VCC Стабилизированное напряжение питания на плате. Его источником может быть либо аккумулятор, либо стабилизатор напряжения внешнего источника питания, либо USB-Sci ial преобразователь GND Выесдь земли Память. Объем флеш-памяти программ микроконтроллера ATmegaloS составляет 16 Кбайт (из которых 2 Кбайт используются загрузчиком). Микроконтроллер также имеет 1 Кбайт памяти SRAM и 512 байт EEPROM (из которой можно считывать или записывать инфор- мацию с помощью библиотеки EEPROM). Микроконтроллер ATmega328 имеет 32 Кбайт флеш-памяти, 2 Кбайт SRAM и 1 Кбайт EEPROM. Входы и выходы. С использованием функций pinMode(), digitalWrite() и digitalRead() каждый из 14 цифровых выводов Pro может работать в качестве входа или выхода. Уровень напряжения на выво- дах ограничен 3, 3 В. Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отклю-
ченными) номиналом 20...50 кОм. Помимо этого, некоторые выводы Arduino могут выполнять дополнительные функции (табл. П.38). Дополнителоныв функции выводов Arduino Pro Mini Таблица П 38 Элемент схемы Выводы Комментарии Последователоный ижерфейс 0 (RX) и 1 (ТХ) Используются для получения (RX) и передачи (ТХ) данных по поспедова'елььому интерфейсу. Эти вывода, соединены с линиями ТХ-0 и RX-1 шестиконтактного разъема Внешние прерывания 2 и 3 Данные выводы могут служить источниками прерываний, возникающих при различных условиях: при низком уровне сигнала, по фронту, по спаду или при изменении сигнала на этих выводах ШИМ 3,5.6, 9,10 и 11 С помощью функции analoqWriteO могут выводить 8-битные аналоговые значения ь виде ШИМ-сигналэ Интерфейс SPI 10 (SS). 11 (MOSI). 12 (M'SO) 13 (SCK) Данные вывод™ позволяю- осудепвлять связь по интерфейсу SP1 В устройстве реализована аппаратная поддержка SPi, однако на дачный момент язык Arduino пока ее не поддерживает Светодиод 13 Встроенный свеюдиод, подсоединенный к цифровому выводу 13. При отправке значения HIGH светодиод включается, при отправке LOW - выключается AREF Опорное напряжение для аналоговых входов Може- задействоваться функцией analogReferenceQ Reset Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера. Обычно этот вывод служит для функционирования кнопки сброса на платах расширения Аналоговые входы. В Arduino Pro есть 6 аналоговых входов, каж- дый из которых может представить аналоговое напряжение в виде ] 0-битного чиста (1024 различных значения). По умолчанию, измерение напряжения осуществляется относительно диапазона от 0 до VCC Тем не менее, верхнюю границу этого диапазона можно изменить, используя вывод AREF и применив несколько низкоуровневых процедур. Помимо этого, некоторые из аналоговых входов имеют дополнительные функ- ции, например, I2C. вывод 4 (SDA) и вывод 5 (SCL). С использованием библиотеки Wire позволяют осуществлять связь по интерфейсу I2C. Сьязь. Arduino Pro предоставляет ряд возможностей для осущест- вления связи с компьютером, еще одним Arduino или другими микро- контроллерами. В ATmegal68 и ATmega328 имеется приемопередатчик UART, позволяюший осуществлять последовательную связь посред- ством цифровых выводов 0 (RX) и 1 (ТХ). В пакет программного обе- спечения Arduino входит специальная программа, позволяющая счи- тывать и отправлять на Arduino простые текстовые данные через USB- соединение.
Библиотека SoflwareSenal позволяет реализовать последователь- ную связь на любых цифровых выводах Arduino Pro. В микроконтроллерах ATmegal68 и ATmega328 также реализована поддержка последовательных интерфейсов 12С (TWI) и SPI. В про- граммное обеспечение Arduino входит библиотека Wire, позволяющая упростить работу с шиной I2C. Программирование. Arduino Pro программируется с помо- щью программного обеспечения Arduino. ATmegal68 или ATmega328 в Arduino Pro выпускается с прошитым загрузчиком, позволяющим загружать в микроконтроллер новые программы без необходимости использования внешнего программатора. Взаимодействие с ним осу- ществляется по оригинальному протоколу STK500. ПРИМЕЧАНИЕ. Микроконтроллер можно прошить и через разъем для внутрисхемного программирования ICSP (In Circuit Serial Programming), не обращая внимания на загрузчик; более подробно об этом см. соответствующие инструкции. Автоматический (программный) сброс. Чтобы каждый раз перед загрузкой программы не требовалось нажимать кнопку сброса, Arduino Pro спроектирован так, что можно осуществлять его сброс программно с подключенного компьютера. Один из выводов шестиконтактного разъема соединен с выводом RESET микроконтроллера ATmegal68 или ATmega328 через конденсатор номиналом 100 нФ. Во время подключения к компьютеру этот вывод также связан с одной из линий, участвующих в аппаратном управлении потоком дан- ных, идущих через преобразователь USB-Seriak ♦ при использовании кабеля FTDI — с линией RTS; ♦ при использовании макетной платы Sparkfun — с линией DTR. Когда на этой линии появ ляется ноль, вывод RESET, соответственно, также переходит в низкий уровень на время, достаточное для переза- грузки микроконтроллера. Данная особенность используется для того, чтобы можно было прошивать микроконтроллер всего одним нажатием кнопки в среде программирования Arduino. Такая архитектура позво- ляет уменьшить таймаут загрузчика, поскольку процесс прошивки всегда синхронизирован со спадом сигнала на линии RESET.
ARDUINO FIO Arduino Fio — это устройство на базе микроконтроллера ATmega328P, работающего на частоте 8 МГц от 3,3 В. Arduino Fio был разработан Shigeru Kobayashi и компанией SparkFun Electronics, зани- мающейся производством этих плат. Габаритные размеры печатной платы Arduino Fio: 2,8 см х 6,6 см. В состав Aiduino Fio входит: ♦ 14 цифровых входов/выходов (из них 6 могут использоваться в ка- честве ШИМ-выходов); ♦ 8 аналоговых входов; ♦ кварцевый резонатор; ♦ кнопка сброса; ♦ контактные площадки для впаивания разъемов. На плате предусмотрен разъем для подключения литий-полимер- ного аккумулятора, а также цепи для его подзарядки от USB. На обрат- ной стороне платы расположено гнездо для подключения модулей ХВее. Arduino Fio (рис. П.24) ориентирован на использование в задачах, использующих бес- проводную связь. Прошивка устройства осу- ществляется с помощью FTDl-кабеля или макетной платы SparkFun. Кроме того, с помо- щью специализированных адаптеров USB- ХВее (например, ХВее Explorer USB) устройство можно прошивать по беспроводному интер- фейсу. Плата специально поставляется без впа- янных разъемов, что позволяет пользователю впаивать провода или использовать необходи- мые типы разъемов по своему усмотрению. ONLINE ИНФОРМАЦИЯ Внешний вид Arduino Pro
Рис. П.24. Внешний вид Arduino Fio Характеристики платы Arduino Fio представлены в табл. П.39. Характеристики платы Arduino Fio Таблица П.59 Параметр Значение Микроконтроллер ATmega328P Рабочее напряжение В 3,3 Напряжение питания. В 3,35 12 Напряжение питания для подзарядки аккумулятора. В 3,7. .7 Цифровые входо1/выходы (из них 6 могут использоваться в качестве ШИМ выходов) 14 Аналоговые входы 8 Максимальный гок одного вывода. мА 40 Flash память (из которых 2 Кбайт используются загрузчиком) 32 SRAM. Кбайт 2 EEPROM, Кбайт 1 Тактовая частота МГц 8 Питание. Ardumo Fio может быть запитан от различных источников: ♦ через макетную плату или кабель FTDI, подсоединенный к шести- контакгному разъему (отмечен на обратной стороне платы), • от стабилизированного источника питания с напряжением 3,3 В, подключенного к выводу «3V3»; ♦ от литий-полимерного аккумулятора, подклю- Выводы питания расположенные на плате Arduino Fio Таблица П.40 ценного к выводам ВАТ. В табл. П.40 перечне- лены выводы питания, расположенные на плате Arduino Fio. Вывод Комментарии ВАТ Для питания платы от литий-полимерного аккумулятора 3V3 Стабилизированное напряжение 3,3В GMD Выводы земли
Память. Объем флеш-памяти программ микроконтроллера ATmega328P составляет 32 Кайта (из которых 2 Кайта используются загрузчиком). Микроконтроллер также имеет 2 Кайта памяти SRAM и 1 КБ EEPROM (из которой можно считывать или записывать информа- цию с помощью библиотеки EEPROM). По QR-кодам рядом смотрите соответствие выводов Arduino и ATmegal68, а также схему и исходный проект. ONLINE ИНФОРМАЦИЯ Входы и выходы. С использованием функций pinModeQ, digitalWrite() и digitalReadt) каждый из 14 цифровых выводов Arduino Fio может работать в качестве входа или выхода. Уровень напряжения на выводах ограничен 3,3 В Максимальный ток, который может отдавать или потреблять один вывод, составляет 40 мА. Все выводы сопряжены с внутренними подтягивающими резисторами (по умолчанию отклю- ченными) номиналом 20...50 кОм. Помимо этого, некоторые выводы Arduino могут выполнять дополнительные функции (табл. П.41). Выводы Arduinc, выполняющие дополнительные функции Таблица П.41 Элемент схемы Выводы Комментарии Последовательный интерфейс RXI (D0) и TXO (D1) Используются для получения (RX) и передачи (IX) данных по последовательному интерфейсу Эти выводы соединены с линиями DOUT и DIN разъема для ХВее модуля Внешние прерывания 2 и 3 Данные выгоды могу служит, источниками прерываний возникающих при различных условиях: при низком уровне сигнала, по фрон-у, пс с паду или при изменении сигнала на зтих выводах. Для получения дополнительной инфоомации см функцию attach 'nterruptO ШИМ 3,5,6,9,10 и 11 ' гомощью функции analoqWriteQ могут выводить 8-битные аналоговые значения в виде ШИМ сигнала
Таблица П.41 (окончание) Элемент схемы Выводы Комментарии Интерфейс SPI io ;ss),n (mosi), 12 (MISO). 13 (SCK) Данные выводы позволяют осущеггвля-ь связь по интерфейсу SPI. В ус-ройстве реализована аппаратная поддержка SPI, одна ко на данный момент язык Arduino пока ее не поддерживает. Светодиод 13 Встроенный светодиод, подсоединенный к цифровому выводу 13 При отправке значе^ит HIGH светодиод включается при отправке LOW - выключается AREF Опорное напряжение встроенного АЦП Задействуется с помощью функции analogReterenceQ DTR Формирование низкого уровня (LOW) на этом выводе приведет к перезагрузке микроконтроллера Обычно этот вывод служит для функционирования кнопки сброса на платах расширения В Arduino Fio есть 8 аналоговых входов, каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 раз- личных значения). Измерение напряжения осуществляется относи- тельно диапазона от 0 до VCC. Помимо этого, некоторые из аналоговых входов имеют дополнительные функции, например, I2C: вывод 4 (SDA) и вывод 5 (SCL). С использованием библиотеки Wire позволяют осу- ществлять связь по интерфейсу 12С. На плате Arduino Fio также присутствует 8 нераспаянных кон- тактных отверстий. ♦ ВАТ + и ВАТ Предназначены для подключения аккумулятора. Как правило, используются тогда, когда нет возможности подклю- чить аккумулятор к штатному разъему; ♦ CHG 5V и CHG -. Предназначены для подключения к зарядным клеммам Обычно используются для добавления внешнего разъ- ема для подзарядки; ♦ SW. Соединен с переключателем питания на плате. Как правило, используется для добавления внешнего переключателя; ♦ CTS. Соединен с выводом #CTS'I)1O7 разъема ХВее. Обычно ис- пользуется для управления спящим режимом ХВее-модуля; ♦ DTR. Соединен с выводом *DTR SLEEP RQ. D18 разъема ХВее. Обычно используется для управления спящим режимом ХВее-модуля. Связь. Arduino Fio предоставляет ряд возможностей для осущест- вления связи с компьютером, еще одним Arduino или другими микро- контроллерами. В ATmega328P имеется приемопередатчик UART, позво- ляющий осуществлять последовательную связь посредством цифровых выводов О (RX) и 1 (ТХ). В пакет программного обеспечения Arduino входит специальная программа, позволяющая считывать и отправлять на .Arduino простые текстовые данные через внешнее устройство, осу- ществляющее связь с компьютером по последовательному интерфейсу.
В качестве такою устройства рекомендуется использовать кабель FTD1 или FTDI Basic. Встроенный разъем mini-USB предназначен только для подзарядки аккумулятора и не осуществляет функцию передачи данных. Библиотека SoftwareSerial позволяет реализовать последователь- ную связь на любых цифровых выводах Arduino Fio. В микроконтроллере ATmega328P также реализована поддержка последовательных интерфейсов I2C (TWI) и SPI. В программное обеспе- чение Arduino входит библиотека Wire, позволяющая упростить работу с шиной 12С. ONLINE ВИДЕО Arduino Fio andAndtO’d Biuetootn Thermometer Arduino Fio Blink Sketch
ПЛАТА USB SERIAL LIGHT АДАПТЕР USB Serial Light адаптер преобразует USB-канал в последователь- ный RS-232 канал TTL уровня., который можно подключить непосред- ственно к Arduino Mini, Arduino Ethernet или другим платам Arduino, не имеющим своего USB адаптера. Обеспечивает указанным платам связь с компьютером и загрузку скетчи. Логика конвертора реализована на базе чипа Atmega8U2, запрограммированном как конвертер из USB в последовательный сигнал, такой же, как на Arduino Uno. Для Windows требуется файл .inf с драйверами. Плата (рис. П.25) имеет встроенный разъем мини-USB. Вы также можете использовать 5 выводов: RX (для приема данных с компьютера), ТХ (для передачи данных), 5V, Ground (общий провод) и Reset (Сброс). ПРИМЕЧАНИЕ. Имеются светодиодные индикаторы питания и актив- ности на линиях RX и ТХ. Рис. П 25. Внешний вид платы USB Serial Light адаптео
ПЛАТА РАСШИРЕНИЯ ARDUINO WI-FI Плата расширения Arduino Wi Fi (рис. П.26) позволяет контрол- лерам Arduino осуществлять сетевое соединение, используя беспровод- ную сеть формата 802 11. Плата построена на базе чипа HDG104 Wireless LAN 802.1 lb/g System in-Package Микроконтроллер Aimega 32UC3 обеспечивает поддержку сетевого стэка (IP) как для TCP, так и для UDP протокола. Плата Wi-Fi, как и боль- шинство плат расширения, соединяется с плат ой контроллера Arduino посредством контактных колодок, расположенных по краям платы. Размеры соответствуют контактам на контроллерах Arduino UNO и Arduino Mega2560. На плате Wi-Fi имеется слот для micro-SD карт, кото- рые могут быть использованы для хранения и передачи файлов по сети. ПРИМЕЧАНИЕ. Для подключения к Ардуино предусмотрен специальный разъем, представляющий собой металлические выводы («папа») с одной стороны платы и гнездо («мама») - с другой стороны. Такая конструкция позволяет подклю- чить к Ардуино сразу несколько плат расширения, раз- местив их одну над другой.
Рис. П 26. Внешний вид платы расширения Arduino Wi-Fi ONLINE ВИДЕО WI-FI модуль для Arduino Wi-Fi модуль для Arduino и IskraJS на чипе ESP8266
ПЛАТА РАСШИРЕНИЯ ARDUINO MOTOR Плата расширения Arduino Motor (управление моторами) изго- товлена на основе микросхемы L298 (рис. П.27). Данная микросхема является двойным полномостовым драйвером. Он разработан специ- ально для управления индуктивными нагрузками, такими как реле, соленоиды, двигатели постоянного тока и шаговые двигатели. Она позволяет управлять двумя двигателями постоянного тока с помощью вашей платы Arduino, независимо регулируя скорость и направление каждого из них. Кроме всего прочего, плата позволяет измерять ток, потребляемый каждым двигателем. Плата совместима с модулями TinkerKit. Если вашему двигателю требуется напряжение более 9 В, рекомен- дуется разделить шины питания платы расширения и платы Arduino, на которой плата расширения установлена. Это возможно, если удалить перемычку «Vin Соппес1»на обратной стороне платы. ПРИМЕЧАНИЕ. Чтобы избежать повреждения платы Arduino, на кото- рой установлено плата расширения, рекомендуется ис- пользовать внешний источник питания напряжением от 7 до 12 В- Абсолютный предел напряжения Vin на за- жимных контактах составляет 18 В
ONLINE ВИДЕО Motor Shield - подключаем моторы и шаговики к Arduino Motor Shield L293D подключение к Arduino Motor Shield vS. Управление шаговым двигателем Управление моторами с Arduino Собиоаем Arduino машинку но Motor Shield L293D и ИК пульте
ЗАКЛЮЧЕНИЕ НАСТАВЛЕНИЯ ОТ АВТОРА КНИГИ Теперь, когда вы прошли путь от понимания простых команд Arduino до построения полноценного олимпиадною робота, самое время сделать паузу и оглянуться назад. Эта книга была не просто набо- ром схем, примеров и рекомендаций. Она — результат многолетнего опыта, множества соревнований, ошибок и побед. В этом заключении я хочу поделиться с вами тем, что. возможно, не напишешь в коде и не отразишь на схеме, но что на самом деле важно. Делайте — не бойтесь ошибаться! Лучше один раз собрать что-то, что «не работает», чем десять раз прочитать про идеальные проекты. Ошибки — это ваш путь к настоящим открытиям. Каждый неработаю- щий робот — это шаг к тому, который точно поедет. Думайте — не про- сто повторяйте Понимание — ваш главный инструмент. Не просто копируйте чужие схемы и код. Разбирайтесь, как это устроено. Почему работает? А что будет, если поменять? Вопросы — двигатель развития. Спрашивайте и делитесь. Робототехника — это не одиночный спорт. Ищите сообщества, друзей, наставников Участвуйте в олимпиадах и хакатонах. Делитесь идеями, обсуждайте схемы, помогайте друг другу расти. Идите дальше! Эта книга — только начало. За Arduino — Raspberry Pi, STM32, ROS, ЗО-моделирование, машинное обучение, инженерные соревнования. Сегодня ты собираешь робота для участия в олимпиаде, а завтра — стро- ишь свою первую автономную систему. Спасибо, что прошли этот путь вместе со мной. Я верю, что каждый, кто держал в руках паяльник и писал первую строку кода для мотора, уже сделал большой шаг в будущее. Ваша задача — идти дальше и не терять интерес. Удачи, изобретатель. Автор книги, Мельников С.А.
/*НиТ \издательст^^^ Издательство «Наука и Техника» выпускает книги более 25 лет! Уважаемые авторы! Приглашаем к сотрудничеству по созданию книг по IT-технологиям, электронике, электротехнике, медицине, педагогике. Наши преимущества • являемся одним из ведущих технических издательств страны; • выпускаем книги большими тиражами, что положительно влияет на гонорар авторов; • регулярно переиздаем тиражи, автоматически выплачивая гонорар за каждый тираж, • применяем индивидуальный подход в работе с каждым автором. • работаем профессионально, от корректуры до авторских дизайн-проектов; • проводим политику доступной цены, • имеем собственные каналы сбыта: от федеральных сетей, крупнейших книжных магазинов РФ, ведущих маркетплейсов ОЗОН, Wildbernes, Яндекс-Маркет и др. до ведущих библиотек вузов, ссузов Ждем Ваши предложения: • тел. (812) 412-70-26 • эл. почта: nitmail@init.com.ru Будем рады сотрудничеству! Для заказа книг: > интернет-магазин nit.com.ru • более 3000 пунктов выдачи на территории РФ доставка 3-5 дней • более 300 пунктов выдачи в Санкт-Петербурге и Москве, доставка 1-2 дня • тел. (812) 412-70-26 • эл. почта nitmail(S,nit.ccm.ru > магазин издательства: г. Санкт-Петербург, пр. Обуховской обороны, д. 107 • метоо Елитэровгкая 200 м за ДК им Крупской • ежедневно с 10.00 ро 18.00 • справки и заказ: тел. (812) 412-70-26 > книжные сети и магазины • «Читай-город» - сеть магазине в • «Буквоед:, сеть маг азинов тел +7(495)424-84-44 тел +7 (812) Ь01-0-Ь01 Московский дом книги - сеть магазинов тел. + 7 (495) 789 35-91 ТД «Библиот лобус» «Ами таль» — сеть магази чов Дом книги, г. Екатеринбург Дом книги г. Нижний Новгород Приморский торговый Дом книги тел. +7 (495)781-19-12 тел. +7 (473) 223-00-02 тел.+7 (343) 289-4С45 тел. +7 (831)246-22-92 тел +7(423)263-10 54 > маркете л ейсы ОЗОН, Wildberries, Яндекс-Маркет, Myshop и др.
приглашает ос&аить РОБОТОТЕХНИКУ до Я УПРАВЛЕНИЕ МОДУЛЕМ ARDUINOnoWi-Fi С МОБИЛЬНЫХ УС1 “ОЙСТВ I Самоучитель с ОКкоддми дл* лтрахода х прмло*смиям и мкбяоммтм ресурсам Белов А.В. Робототехника Спортивные роботы Маши JTFWM — ywyrrmuquu Дус<Кьч^гт ISBN 979-5-907592-99-5 nit.com.ru nitbooks МС nitbooks Для заказа книг: (812; 412-70-26 Щ nitmail@n;t.com ru