Текст
                    Гордон МакКомб
Робот на Arduino
1/5


Gordon McComb How to Make a Robot Maker Media, Inc. San Francisco 2/5
Гордон МакКомб Робот на Arduino Москва, 2018 3/5
УДК 004.896:621.865 ББК 32.816 М15 МакКомб Г. М15 Робот на Arduino / пер. с анг. Н. Чередниченко. – М.: ДМК Пресс, 2018. – 52 с.: ил. ISBN 978-5 -97060 -656-8 В издании простым языком рассказывается, как создать робота своими руками на базе наборов Arduino. Вы сможете сконструировать робота с пятью основными функциями: • запрограммированный набор движений; • ориентация в пространстве; • обнаружение препятствий; • дистанционное управление; • движение по заданной траектории. Книга будет интересна всем, кто увлекается робототехникой и хочет получить практические навыки роботостроения. УДК 004.896:621.865 ББК 32.816 Authorized Russian translation of the English edition of Make:Robots, ISBN: 9781680455175. This translation is published and sold by permission of Maker Media, Inc, Inc. , which owns or controls all rights to publish and sell the same. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было сред- ствами без письменного разрешения правообладателей. ISBN 978-1 -680 -45469-7 (анг.) Copyright © 2018 Maker Media, Inc. ISBN 978-5 -97060-656-8 (рус.) © Перевод, оформление, издание – ДМК Пресс, 2018 4/5
5 Давайте построим робота! Вот как можно создать настоящего робота, который будет выполнять ваши команды. Мы назовем его Мake:Bot. Постройте его с нуля, используя часто встречающиеся электронные запчасти (список приведен на стр. 52) плюс инструменты и материалы, которые можно найти в местном промторге или магазине электроники. Мake:Bot использует программируемое микропроцессорное управляющее устройство Arduino, чтобы сделать робота разумным. Arduino – недорогое, простое в использовании устройство. Ваш Мake:Bot на самом деле является пятью роботами, совмещенными в одном, каждый из которых будет выполнять одну из пяти основных функций роботов: y тайчи-бот повторяет запрограммированный набор движений; y тактильный бот использует свои «усики» для ориентации в пространстве; y бэт-бот распространяет звуковые волны для обнаружения препятствий; y бот дистанционного управления позволяет контролировать его с помощью пульта от телевизора; y линейный бот движется по начерченной на доске линии. Желательно, чтобы вы имели соответствующие навыки в пайке, также вам следует освежить свои навыки программирования процессора Arduino. Кроме этого, вам не требуется никакого предыдущего опыта для создания Мake:Bot. Внимательно прочтите каждый раздел перед началом работы. А теперь – на старт! Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
6 Необходимые инструменты Клеевой пистолет и клей-карандаш (синтетический термостойкий клей «Хай Темп») Кусачки Острогубцы Припой Малая крестообразная отвертка Линейка Паяльник Защитные очки Нож-мультитул Инструмент для снятия изоляции Дополнительно В Н И М А Н И Е С т р о и т е л ь н ы е н о ж и о ч е н ь о с т р ы е ! И с п о л ь з у й т е т о л ь к о с з а щ и т н о й п о л о - с к о й . Н а р е ж ь т е к у с о ч е к к а р т о н а д л я з а щ и т ы п о в е р х н о с т е й . В с е г д а и с п о л ь - з у й т е з а щ и т н ы е о ч к и . 1/5
7 Проект 0 Основы моторики роботов Способность передвигаться из точки А в точку Б обязательна для роботов. Обычно такую возможность обеспечивают электрические двигатели. Напряжение заставляет мотор крутиться, приводя его в действие. Батарейный блок выступает источником питания для мотора. Чтобы изменить вектор вращения мотора, достаточно всего лишь поменять местами анод и катод. 2/5
8 Важнейшие аспекты работы двигателя – скорость и крутящий момент. Под скоростью подразумевается скорость вращения мотора. Обычно она исчисляется количеством оборотов в минуту. Под крутящим моментом подразумевается производимое мотором механическое усилие. Поворачивается примерно в 4 раза быстрее Лучший способ увеличить скорость и крутящий момент – добавить еще батарей. Вставьте четыре батареи в четырехкамерную кассетницу, убедитесь, что аноды и катоды подсоединены правильно. Подключите двигатель к кассетнице. Что происходит? Мотор крутится в четыре раза быстрее благодаря тому, что напряжение увеличилось в четыре раза. Увеличивается крутящий момент. Дополнительный крутящий момент нужен для того, чтобы робот двигался быстрее. ВНИМАНИЕ Не подключайте мотор напрямую к процессору, иначе он сломается. Щелочная кассетница (1,5 В на штуку) Никель-металлогидридная батарея (1,2 В) Щелочная батарея производит 1,5 В. Набор из четырех батарей, последовательно подсоединенных, производит 6 В. Подзаряжаемые батареи, такие как никель - металлогидридные, производят по 1,2 В, соответственно четыре – 4,8 В. При использовании подзаряжаемой батареи постепенное снижение напряжения заставляет мотор робота вращаться медленнее. 6В 4,8 В 3/5
9 Мake:Bot использует специальный мотор – сервопривод, который применяется в моделях с дистанционным управлением и игрушках. В отличие от традиционных приводов дистанционного управления, которые вращаются только в рамках дуги на 90 градусов (приблизительно), сервоприводы для роботов свободно вращаются в любом направлении. Цветные провода Terminal connector Картер двигателя Н а п р а в л е н и е к о н т р о л я и м п у л ь с о в 2 , 0 м с 1 , 5 м с 1 , 0 м с О с т а н о - в и л с я Ось колеса ВНИМАНИЕ Никогда, ни при каких условиях не изменяйте полярность батареи при подсоединении к сервоприводу, иначе вы его повредите. Функционирование мотора обеспечивается серией электрических импульсов различной продолжительности от 1 до 2 миллисекунд. Контролирующий сигнал создается с помощью процессора Arduino (см. проект 4). Основным достоинством двигателей с дистанционным управлением является возможность контроля со стороны процессора Arduino, без необходимости создания дополнительных электросхем. К сервоприводам с дистанционным управлением легче прикреплять колеса и крепить их к самому роботу. Общее кодирование цветовой схемы сервопривода – + сигнал – + сигнал 4/5
10 Проект 1 Установка процессора Arduino Микропроцессор Arduino управляет всеми действиями Мake:Bot. Программное обеспечение процессора Arduino определяет действия робота. Интерфейс ввода/вывода общего назначения обеспечивает связь с аппаратным обеспечением вашего робота. Отдельные электросоединения позволяют передавать напряжение компонентам, которые вы подсоединяете. Arduino доступен во многих моделях разных компаний. Я использую Arduino UNO. На стр. 52 приведен полный список деталей Make:Bot. Размещение компонентов на Arduino может варьироваться в зависимости от модели. Ваша плата может немного отличаться от изображенной на рисунке, но это нормально, если она совместима с UNO. Разъем USB может различаться на разных платах. Не забудьте найти подходящий кабель для вашего Arduino и компьютера! Arduino программируется с вашего компьютера с использованием кабеля USB. Также кабель подает напряжение в процессор при выключенных батареях. Программное обеспечение для Arduino предоставляется в рамках ОС Windows, Macintosh и Linux. Получите копию на www.arduino.cc и следуйте указаниям по загрузке и установке. Замена платы Светодиодные индикаторы Цифровые контакты Разъемы питания (2,1 мм) Силовые контакты Аналоговые выводы Автоматическое регулирование напряжения Подача напряжения к светодиоду USB-порт Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
11 Прежде чем конструировать собственного робота, подключите и протестируйте микроконтроллер Arduino, посмотрите, как он работает. Если вы еще этого не сделали, зайдите на сайт www.arduino.cc и загрузите программу установки Arduino для своей операционной системы. СОВЕТ. При отсутствии иных инструкций установите программное обеспечение перед подключением устройства Arduino. Установите программное обеспечение и следуйте появляющимся указаниям. Возможно, вам также потребуется установить один или несколько драйверов. Используйте USB-кабель, чтобы подключить Arduino к компьютеру. Должен загореться индикатор активации Arduino On. Откройте программное обеспечение Arduino и введите скрипт, который вы видите ниже. Обязательно введите его ТОЧНО! 1 3 4 2 void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(250); digitalWrite(LED_BUILTIN, LOW); delay(250); } Прежде чем запрограммировать свой Arduino, вы должны загрузить и установить программное обеспечение Arduino для настольных компьютеров IDE (IDE означает интегрированную среду разработки). Используйте среду IDE для создания управляющих программ робота (скриптов). 1/5
12 Нажмите кнопку Сохранить и назовите скрипт MyFirstSketch. Нажмите кнопку Проверить, чтобы проверить свой эскиз на наличие ошибок. Если сообщается об ошибке, дважды проверьте свой ввод. Нажмите кнопку Загрузить в программе IDE. Это компилирует, затем загружает эскиз в память Arduino. Во время загрузки убедитесь, что все работает, наблюдая за вспышкой TX и RX. Когда загрузка будет завершена, замигает индикатор L. 5 6 7 8 9 С м . с т р а н и ц у « Н а ч а л о р а б о т ы » н а в е б - с а й т е A r d u i n o д л я п о л у ч е н и я в а ж н ы х с о в е т о в п о п е р в о й у с т а н о в к е и п о л е з н ы х р е с у р с о в д л я и с п о л ь з о в а н и я с р е д ы I D E . Иконки IDE, которые вы должны знать: Сохранить Проверить Загрузить Если вы получили ошибку вместо успешной загрузки, нужно найти. Для начала проверьте следующее: y подключен ли кабель USB; y правильно ли выбран порт; y правильно ли выбрана плата. При использовании IDE до загрузки скрипта убедитесь, что порт и модель платы Arduino выбраны правильно. В противном случае может возникнуть ошибка. 2/5
13 Проект 2 Создание моторизованной базы робота Для корпуса Make:Bot понадобится обычная пенопластовая доска толщиной 1/4 дюйма. Отрежьте пенопласт обычным ножом. Для сборки понадобится клей клей из расплава, двусторонний скотч и липучка (или другой крепеж с крючком и петлей). В Н И М А Н И Е В ы р е з а й т е с о с о б о й о с т о р о ж - н о с т ь ю ! И с п о л ь з у й т е н о в о е , о с т р о е л е з в и е , ч т о б ы н е б ы л о н е а к к у р а т н ы х к р а е в . Н а д е в а й т е з а щ и т у д л я г л а з ! 1 Используйте строительный нож, чтобы разрезать пенопластовую доску размером 1/4 дюйма. СОВЕТ. Используйте кусок картона в качестве режущего коврика. РЕЖЬТЕ ОСТОРОЖНО! 1/4” пенопластовой доски 1/4” пенопластовой доски С д е л а й т е п о 2 к а ж д о г о 3 3/4” 1 1/4” 4 1/2” 3 3/4” 3/5
14 2 3 Сборка верхней и нижней базы. Для лучшей прочности я рекомендую использовать высокотемпературный термоплавкий клей и пистолет для клея. Нанесите шарик горячего клея на меньшую доску. Сдавите доски вместе, выровняв края. Повторите для второго набора кусков. Используя собранную базовую деталь, нанесите S-образную полоску из клея на центр доски. Поместите пробку с деревянным отверстием, прижмите и держите в течение 5 секунд. Сделайте это только для одного набора из двух пар деталей. Прикрепить хвостовик. Деревянная заглушка с круглым верхом. Диаметр: от 3/4” до 1”. Высота: от 3/8” до 1/2” . ВНИМАНИЕ При нанесении клея не забывайте надевать защитные очки и помните, что клей очень горячий! 4/5
15 Верхняя основа Нижняя фронтальная часть Верхняя сторона Задняя часть Передняя часть 4 5 У вас теперь должно получиться две основы — нижняя с деревяной заглушкой и верхняя без ничего. Установите сервоприводы постоянного тока на верхней основе. Нанесите расплавленный клей на нижнюю часть каждого сервопривода. Аккуратно прижмите сервоприводы этой стороной к основе. Make:Bot состоит из двух основ: нижней (с моторами и батареями) и верхней (с процессором Arduino и прочей электроникой). Все это соединяется с помощью расплавленного клея и двустороннего скотча для несъемных деталей. Двусторонние липучки используются для съемных деталей. Во время приклеивания сервоприводов убедитесь, что: y крепления находятся вровень с краями основы; y белая ось ближе к задней части основы (к деревянной заглушке). Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
16 6 7 8 Н и ж н я я ч а с т ь б а т а р е и н е д о л ж н а в ы х о д и т ь з а п е р е д н и й к р а й ! Прикрепите защелку аккумулятора с коаксиальным разъемом питания (питание для Arduino) к батарее 9 В, проложив провода, как показано на рисунке. Отклейте 1-дюймовый язычок липучки. Поместите вкладку равномерно между сервоприводами. Прижмите батарею 9 В на липучку. Батарея 9 В Снимите покрытие с 1-дюймового язычка липучки. Поместите язычок на нижнюю сторону держателя батареи AA. Плотно прижмите держатель батареи к нижнему основанию, чтобы его задний край был вровень с задней частью основания робота. Снимите покрытия с двух 1-дюймовых язычков липучки. Прикрепите язычки на сервоприводы. Осторожно расположите верхнее основание над сервоприводами, чтобы его края были на одном уровне с нижним основанием. Плотно прижмите, чтобы аккуратно закрепить его на липучке. Держатель батареи AA, 4 шт. 1/5
17 Плата поставляется с двумя съемными шинопроводами электропитания. Вы будете использовать только один шинопровод электропитания. Сдвиньте указанный шинопровод и отложите его на хранение. Удалить Сохранить 9 Плата для бе спаечного макетирования Arduino Плата для беспаечного макетирования поставля- ется с двусторонним скотчем в комплекте. Снимите защитную пленку со скотча. Прикрепите плату на верхнюю часть верхней основы. Плата должна быть вровень с передним краем верхней основы. Нанесите двухстороннго скотча на нижнюю сторону Arduino. Прикрепите Arduino к верхнему основанию, чтобы его край был примерно на 1/8 дюйма от платы и правой стороны верхней базы. В Н И М А Н И Е И з б е г а й т е с н я т и я дв у с т оро н н е го с к о т - ч а с п л а т ы , и н а ч е п л а т а м ож е т б ы т ь п овр е жд е н а . Е с ли н е об х оди м о у д а ли т ь с к о т ч , и с п оль з у й т е с к р е бо к , а н е т я н и т е л е н т у . 2/5
18 Для каждого сервопривода поместите резиновую шину на колесо. Это плотная посадка. Используя прилагаемый винт, установите колесо и шину на сервопривод. Колесо и серводвигатель зашлицеваны для обеспечения хорошей посадки. Не затягивайте винт слишком туго. На этом этапе ваш Make:Bot будет выглядеть так: Ваш Make:Bot почти завершен. Мои поздравления! Чтобы сделать его полностью работоспособным, нужно подключить батареи, сервоприводы и Arduino. Это будет следующим этапом, а сейчас подходящее время для проверки вашей работы. Убедитесь, нет ли потерянных деталей, и устраните возможные проблемы прямо сейчас! 10 3/5
19 Проект 3 Разводка моторов и батарей робота Цветовая маркировка проводов для питания и сервоприводов чрезвычайно важно! Провод заземления (черный) всегда находится на правой стороне разъема. 1 2 3 Снимите изоляцию с 5-дюймового соединительного провода Отрежьте кусочки длиной по 1/2 дюйма Снимите изоляцию с 5-дюймового соединительного провода с твердой проволокой. Отрежьте кусочки длиной по 1/2 дюйма, чтобы сделать 8 коротких соединительных проводов. ВНИМАНИЕ Обязательно соблюдайте правильную полярность всех соединений! В противном случае сервоприводы могут быть необратимо повреждены! Левый сервопривод Правый сервопривод Пальчиковая батарейка Используйте плоскогубцы, чтобы вставить короткие соединительные провода в разъемы держателя для сервоприводов и пальчиковой батареи. Подсоедините разъемы для подключения сервопривода и пальчиковой батареи к плате. Дважды проверьте свою работу, когда закончите! Левый сервопривод Пальчиковая батарейка Перемычка сервопреобразователя Перемычка сервопреобразователя Gnd (–) Правый сервопривод 4/5
20 Соедините четыре перемычки между проводами. Рекомендации по цветовой маркировке: Левый сервопривод: белый (цифровой контакт Arduino 10 на мачте A2) Правый сервопривод: желтый (цифровой контакт Arduino 9 на мачте A27) Gnd (земля): черный (Arduino GND на малый рельс) Переключатель сервопреобразователя: серый (плата A8-A11 или A8-A130) 4 5 Используйте перемычку для подключения пальчиковых батарей для сервоприводов. Отключайте, если не используете сервоприводы. Перемычка сервопреобразователя: ВЫКЛ Перемычка сервопреобразователя: ВКЛ Включите сервоприводы, подсоединив сервопривод блока батареек к источнику питания (соблюдайте правильную полярность). Вставьте вилку 9V в гнездо питания Arduino. Отключите аккумуляторную батарею 9 В, когда вы не используете Make:Bot! Правый сервопривод Цифровой вход/выход Левый сервопривод Servo power 4xAA Make:Bot использует две батареи: аккумулятор 9 В, который управляет Arduino, и 4 пальчиковые батареи (4,8 или 6 В) для сервоприводов. На этой схеме показан принцип подключения. Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
21 Проект 4 Программирование робота на повторение шагов Дайте Make:Bot команду повторить основные движения — первый шаг в создании автономного робота. #include <Servo.h> Servo servoRight; Servo servoLeft; void setup() { servoRight.attach(9); servoLeft.attach(10); } void loop() { servoRight.write(0); // Вперед servoLeft.write(180); delay(2000); servoRight.write(180); // Назад servoLeft.write(0); delay(2000); servoRight.write(180); // Вправо servoLeft.write(180); delay(2000); servoRight.write(0); // Влево servoLeft.write(0); delay(2000); } Программирование Arduino основано на объектах. Объекты расширяют функциональность Arduino. Этот код создает два сервообъекта и дает им уникальные имена. Сервоприводы контролируются путем указания направления (в градусах): либо 0, либо 180. Путем чередования направления робот перемещается вперед и назад и поворачивается. Все скрипты Arduino имеют функцию setup(). Код здесь запускается один раз – при первом включении Arduino. Код сообщает Arduino, что у вас есть два сервопривода, подключенные к контактам 9 и 10. Все скрипты имеют функцию loop(). Код повторяется во время работы Arduino. // – комментарий, примечание только для вас. Ардуино игнорирует эту часть ПО. Функция delay(2000) приостанавливает выполнение скрипта в течение 2000 мс (2 секунд). Язык программирования Arduino чувствителен к регистру. При использовании неправильной заглавной буквы произойдет ошибка. Попробуйте ввести этот скрипт самостоятельно! 1. Введите скрипт в IDE Arduino и назовите его ServoTest. 2. Переместите перемычку сервопривода в положение ВЫКЛ. 3. Загрузите эскиз в Arduino, затем переведите сервопривод в положение ВКЛ. 4. Держите робота в руках и наблюдайте за изменением направления сервопривода! ServoTest 1/5
22 С еще большим количеством кода вы можете расширить функциональность базового скрипта ServoTest. ServoTaiChi реорганизует часть кода и делает скрипт более гибким! Скрипт доступен на сайте поддержки Make:Bot (см. стр. 52 для получения дополнительной информации). #include <Servo.h> Servo servoRight; // Определите правый сервопривод Servo servoLeft; // Определите левый сервопривод void setup() { servoRight.attach(9); // Контакт правого сервопривода 9 servoLeft.attach(10); // Контакт левого сервопривода 10 } void loop() { goForward(); delay(2000); goReverse(); delay(2000); goRight(); delay(2000); goLeft(); delay(2000); allStop(); delay (2000); } // Порядок движений: вперед, назад, поворот, остановка void goForward() { servoRight.write(0); servoLeft.write(180); } void goReverse() { servoRight.write(180); servoLeft.write(0); } void goRight() { servoRight.write(180); servoLeft.write(180); } void goLeft() { servoRight.write(0); servoLeft.write(0); } void allStop() { servoRight.write(90); servoLeft.write(90); } ServoTaiChi ServoTaiChi (продолжение) 1. Загрузите скрипт, затем извлеките USB-кабель от Arduino. 2. Подключите питание 9 В Arduino и переместите перемычку серво- усилителя в положение ВКЛ. 3. Нажмите кнопку Сброс, поместите Make:Bot на пол (лучше исполь- зовать дерево или линолеум) и отпустите кнопку Сброс. Когда вы закончите экспериментировать, обязательно отключите питание Arduino. Переместите перемычку сервоусилителя в положение ВЫКЛ. Если ваш робот медленно движется, когда он должен остановиться, может потребоваться калибровка одного или обоих сервоприводов. См. «Часто задаваемые вопросы» на стр. 49 для получения дополнительной информации. Точка с запятой – это ограничитель оператора. Символы { и } образуют блок, который является частью синтаксиса кодирования Arduino. Блоки содержат несколько операторов и рассматриваются как единое целое. Многие операторы могут содержаться в определенной пользователем функции. Методы – это специальный тип оператора, который использует объект, например сервопривод. Методы состоят из имени объекта, периода и действия для выполнения. Заявления – это команды, которые сообщают Arduino, что делать. Обычно в одной строке есть один оператор. Вызов функции ссылается на пользовательскую функцию и может использоваться несколько раз. 2/5
23 Проект 5 Создайте тактильный бот-бампер С добавлением всего лишь двух переключателей ваш Make:Bot может исследовать окружающую среду. Если робот столкнется с чем-то, переключатели обнаружат столкновение. Робот остановится, вернется назад, поворнется и найдет другое направление! Тактильная функция основана на кнопочных переключателях. Лист представляет собой метал- лический штырь, который действует как усы кошки. Перемычки под- ключаются к циф- ровым контактам Arduino 2, 3 и 4. После установки отметьте карандашом направляющую линию для склеивания. Расположите два переключателя мгновенного действия на нижней стороне нижнего основания, с фронтальной стороны. Наклоните переключатели так, чтобы углы были вровень с передним и боковым краями основания. Концы металлических штифтов должны быть приблизительно впереди колес. 1 2 3 Выберите три 6-дюймовых соединительных провода «штырь- гнездо», цвет которых показан слева. Для каждого провода: 1. Отрежьте гнездо. 2. Удалите 1/4 дюйма изоляции с обрезанного конца и заверните. 3. Используйте паяльник, чтобы припаять оголенные концы провода к переключателю НР (нормально разомкнутый) и общим клеммам. 4. Соедините два общих контакта переключателей с 3-дюймовым проводом. 5. Проложите провода под правую сторону робота за колесом и подключите к Arduino. Закрепите провода с помощью изоленты. Приклейте переключатели на нижнюю часть нижней основы. Нормально разомкнутый разъем Общая клемма 3/5
24 Чтобы понять, как Make:Bot обнаруживает столкновения, нужно знать немного о коммутаторах. Arduino – это небольшой компьютер, который может подключаться к внешнему миру. Соединение выполняется со штырьками разъема ввода/вывода. Переключатели являются примером входящих данных, которые поступают в Arduino. Коммутаторы представляют собой цифровые входы, то есть они имеют только два состояния: высокое напряжение (или 0) и низкое напряжение (или 1). Цепь открыта, свет выключен Цепь закрыта, свет горит Arduino UNO также имеет шесть аналоговых соединений ввода/вывода вдоль нижнего края. Вы узнаете больше об этом в проекте 9. На Arduino UNO цифровые соединения ввода/вывода расположены вдоль верхней части платы. Они нумеруются от 0 до 13. Для связи между Arduino и ПК используются контакты 0 и 1, поэтому не используйте их. Переключатели – это простые механические устройства, состоящие из кнопки или рычага. Нажатие этой кнопки закрывает контакты внутри коммутатора, что завершает схему. Низкое напряжение Высокое напряжение 4/5
25 Проверьте Make:Bot и новомодные бамперы Bot’s с помощью скрипта SwitchTest. Встроенный светодиодный индикатор Arduino загорается, если один из переключателей нажат. Встроенные нагрузочные резисторы Arduino переводят коммутатор на высокое напряжение, когда он не нажат; на низкое, когда нажат! void setup() { pinMode(LED_BUILTIN, OUTPUT); pinMode(2, INPUT); // Правый переключатель pinMode(3, INPUT); // Левый переключатель pinMode(4, OUTPUT); // Заземление для переключателей digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, LOW); // Настроено на 0 В } void loop() { if ((digitalRead(2) == LOW) || (digitalRead(3) == LOW)) digitalWrite(LED_BUILTIN, HIGH); else digitalWrite(LED_BUILTIN, LOW); delay (100); } SwitchTest Установите контакт 13 (встроенный светодиод) для вывода. Установите контакт 4 LOW (0 В) для использования в качестве заземления. Включите внутренние нагрузочные резисторы Arduino для контактов вывода. Проверьте, переключился ли контакт 2 или контакт 3 на низкий уровень (0 вольт). Если это так, включите встроенный светодиод на контакте 13. Установите контакты коммутаторов (2, 3) в качестве ввода. Установите контакт 4 в качестве выхода, чтобы его можно было использовать в качестве удобного заземления. Нагрузочный резистор предотвращает «плавающий» ввод, когда коммутатор открыт. Напряжение высокое, когда переключатель не нажат. Напряжние низкое, когда переключатель нажат. Коммутатор Коммутатор Встроенный нагрузочный резистор Встроенный нагрузочный резистор Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
26 BumperBot блуждает по комнате и меняет направление, когда наталкивается на препятствия. Загрузив скрипт, установите робота на пол и нажмите любой переключатель, чтобы начать движение. З а г р у з и т е с к р и п т B u m p er B ot с с а й т а п о д д е р ж к и ( с м . с т р . 5 2 ). #include <Servo.h> Servo servoRight; Servo servoLeft; volatile int pbLeft = LOW; // Индикатор для левого переключателя volatile int pbRight = LOW; // Индикатор для правого переключателя boolean started = false; // Действует после первой активации void setup() { // Настройте режимы работы контактов pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, OUTPUT); // Настройте внутренние подтягивающие резисторы для переключателей digitalWrite(2, HIGH); // Правый переключатель digitalWrite(3, HIGH); // Левый переключатель digitalWrite(4, LOW); // Контакт 4 в качестве заземления servoRight.attach(9); // Правый сервопривод к контакту 9 servoLeft.attach(10); // Левый сервопривод к контакту 10 // Настройте программа обработки прерывания attachInterrupt(0, hitRight, FALLING); attachInterrupt(1, hitLeft, FALLING); started = true; // Начинайте передвижения } BumperBot Этот оператор #include сообщает Arduino, что вы хотите работать с сервоприводами. Переменные используются для хранения информации, которая изменяется при выполнении скрипта. Переменные pbLeft/pbRight контролируют правый и левый переключатели бампера. Левый и правый коммутаторы подключаются к контактам 2, 3 и 4. Контакты 2 и 3 определяются для ввода от коммутаторов. Контакт 4 определяется для вывода. Он обеспечивает напряжение 0 В (заземление) к коммутатору. Входящий контакт требует цифрового состояния по умолчанию. Arduino имеет встроенные нагрузочные резисторы, которые удерживают контакт под напряжением до тех пор, пока переключатель не будет активирован. Мы не хотим, чтобы Make:Bot выполнял какие-либо действия, пока не будет запущен весь код setup (). Начальная перемен- ная приводится в действие, только когда все будет готово. Make:Bot использует функцию аппаратного прерывания Arduino, которая позволяет Arduino сразу же ощущать, когда переключатель пдвергается воздействию. 1/5
27 Для экономии места здесь не показаны процедуры движения (goForward и т. д.). Возьмите их из скрипта ServoTaiChi на стр. 22. void loop() { if (pbLeft == HIGH) { // Если левый переключатель натолкнется на препятствие goReverse(); // Обратный ход в течении 1/2 с delay(500); goRight(); // Оборот 1 с delay(1000); goForward(); // Вперед pbLeft = LOW; // Переключенный индикатор показывает "hit" } if (pbRight == HIGH) { // Если правый переключатель натолкнется на препятствие goReverse(); delay(500); goLeft(); delay(1000); goForward(); pbRight = LOW; } } // Программа обработки прерывания void hitLeft() { if (started) // Только если робот завелся pbLeft = HIGH; } void hitRight() { if (started) // Как и левый переключатель pbRight = HIGH; } // Добавте скрипты движений ServoTaiChi BumperBot Когда активирован левый переключатель бампера, Make:Bot направляется вокруг препятствия, создавая резервную копию в течение 500 миллисекунд (мс), вращается вправо на 1000 мс и снова направляется вперед. То же, что и выше, но это происходит, когда активирован правый переключатель бампера. Arduino немедленно прерывается при активации любого из переключателей. Код просто устанавливает для переменной pbLeft или pbRight значение HIGH, что означает «переключатель был поражен!». Эта переменная впоследствии проверяется внутри функции loop(). 2/5
28 Проект 6 Постройте ультразвуковой Bat Bot! Недорогой ультразвуковой датчик позволит вашему Make:Bot фактически «видеть» свою среду, используя серию высокочастотных звуков, точно так же , как летучая мышь! Если вы сами не летучая мышь, вы ничего не услышите! Bat Bot использует ультразвуковой датчик, который способен обнару- живать объекты с помощью звуковых волн. 1 Вставьте ультразвуковой датчик в передний ряд платы. Самый левый вывод (обозначенный VCC) входит в гнездо J12. Ультразвуковые датчики измеряют временную задержку между коротким высокочастотным пиканьем и его возвратным эхом. Время возврата эха измеряется в микросекундах (мкс, миллионная доля секунды). Для более близкого объекта эхо возвращается быстрее. 3/5
29 2 Проверьте ультразвуковой датчик, чтобы убедиться, что он работает. Скрипт BatBotTest считывает датчик и отображает результат в окне Serial Monitor Arduino (см. стр. 30). #define Trigger 7 #define Echo 8 void setup(){ Serial.begin(9600); pinMode(Echo, INPUT); pinMode(Trigger, OUTPUT); } void loop(){ digitalWrite(Trigger, LOW); delayMicroseconds(2); digitalWrite(Trigger, HIGH); delayMicroseconds(10); digitalWrite(Trigger, LOW); int distance = pulseIn(Echo, HIGH); distance = distance / 74 / 2; Serial.println(distance); delay(100); } BatBotTest Звук перемещается на расстояние в 1 дюйм примерно за 74 микро- секунды. Время возврата эха всегда уменьшается вдвое, чтобы рассчитать расстояние в оба конца. Пример: эхо, которое возвра- щается за 750 мкс, находится на расстоянии примерно 5 дюймов. 5 = 750/74/2 (результат округляется). Настройте соединения с Arduino:Trig (триггер) для контакта 7. Сигнал эха передается на контакт 8 Определите «направление» контактов: Echo (контакт 8) – это вход, триггер (контакт 7) – это выход Сбросьте триггер, не подавая напряжния (0 В) в течение 2 мкс (микросекунд) Отправьте сигнал, подав высокое напряжение (5 В) на 10 мкс Измерьте время, пока эхо-сигнал не изменится на HIGH (получено эхо) Преобразование времени возврата эха в зависимости от расстояния – в дюймах Установите связь с последовательным монитором Подождите 100 мс, прежде чем делать это снова Добавьте проводку для подключения датчика к Arduino. Датчик Arduino VCC 5V Эхо-контакт 8 Trig Pin 7 Базовое (монтажная напряжение плата) Имеющаяся в наличии проводка выделена серым цветом 4/5
30 #include <Servo.h> Servo servoRight; Servo servoLeft; #define Trigger 7 #define Echo 8 void setup() { servoRight.attach(9); servoLeft.attach(10); pinMode(Echo, INPUT); pinMode(Trigger, OUTPUT); randomSeed(analogRead(3)); delay(200); goForward(); } void loop() { int distance = doPing(); if (distance <= 2) goReverse(); delay(500); if (random(2) == 0) goRight(); else goLeft(); ... BatBotWander (только частично) Теперь давайте объединим перемещение Make:Bot с поиском объектов с помощью ультразвукового датчика! З а г р у з и т е с к р и п т B a t B o t W a n d e r с с а й т а п о д д е р ж к и ( с м . д о п о л - н и т е л ь н у ю и н ф о р м а ц и ю ) . BatBotTest использует серийный монитор Arduino для отображения результатов дистанции. Чтобы открыть монитор последовательного интерфейса: 1) загрузите скрипт; 2) после завершения загрузки щелкните значок «монитор последовательного интерфейса»; 3) проверьте эти настройки: Автопрокрутка: проверено. Линия завершена: нет конца линии Бод: 9600 бод Поместите руку перед датчиком и подвигайте ею назад и вперед. Следите за изменениями в мониторе последовательного интерфейса в зависимости от расстояния. П р и м е ч а н и е . Д е р ж и т е к а б е л ь U S B п о д к л ю ч е н н ы м м е ж д у в а ш и м к о м п ь ю т е р о м и A r d u i n o . Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
31 Проект 7 Создайте робот с дистанционным управлением Управляйте роботом прямо из своего кресла! Remote Bot использует обычный пульт дистанционного управления телевизором и недорогой инфракрасный датчик. Датчик передает расстояние. Используйте небольшие плоскогубцы, чтобы согнуть провода. Округлая «лампа» датчика должна быть обращена в противоположную сторону от конца изогнутых проводов. Remote Bot использует готовый к работе датчик, который подключается непосредственно к Arduino. Сенсор чувствителен к инфракрас- ному свету с пульта телевизора. С лампочкой датчика, смотрящей вверх, вставьте разъемы в аналоговые контакты 0, 1 и 2. НЕ подключайте в обратном порядке! Штыри ввода/вывода напрямую обеспечивают питание и заземление датчика. Это нормально, потому что датчик требует очень низкого напряжения, и его не нужно подключать к контактам питания 5 В и без напряжения. 1 2 Осторожно согните под прямым углом 1/4” 3/8” Согнуть здесь Отрезать здесь 1/5
32 Скомпилируйте и загрузите скрипт IRTest на Arduino. Откройте окно монитора последовательного интерфейса и убедитесь, что настройки такие же, как на стр. 30. Проверьте работоспособность пульта, нажав цифровые кнопки. 5 Стоп Поворот налево Поворот направо Вращение вправо Движение вперед Движение назад Вращение влево Программируйте универсальный пульт дистанционного управления для управления телевизором Sony. Вам необходимо найти SONY TV в руководстве по эксплуатации пульта дистанционного управления и ввести соответствующий код. Попробуйте разные коды Sony TV, пока не найдете тот, который работает со скриптом IRTest. 3 4 Добавьте библиотеку кодов сторонних разработчиков IRremote. В библиотеке собраны все скрипты для роботов дистанционного управления, представленные на сайте Make:Bot Support. 1. Загрузите скрипт IRTest и разархивируйте его в папку скрипта Arduino. 2. В IDE Arduino выберите Sketch → Include Library → Add. ZIP Library. 3. Перейдите в папку, содер- жащую скрипт IRTest, который вы разместили на шаге 1. 4. Выберите файл IRremote.zip, нажмите «ОК», чтобы добавить его в свою среду IDE. 5. Выйдите из среды IDE и перезапустите ее. 2/5
33 Когда инфракрасный датчик установлен и протестирован, пришло время запрограммировать удаленный бот. Используйте цифровые кнопки на пульте дистанционного управления, чтобы управлять движением робота по комнате. Если бот столкнется с препятствием, он автоматически начнет двигаться в новом направлении! if (irrecv.decode(&results)) { switch (results.value) { case 0x10: Serial.println("1"); // Поверните влево и вперед turnLeftFwd(); break; ... irrecv.resume(); // Получение следующего значения delay(2); void goForward() { servoRight.write(0); servoLeft.write(180); } void goReverse() { servoRight.write(180); servoLeft.write(0); } void goSpinRight() { servoRight.write(180); ... RemoteBot (показано частично, основано на BumperBot) RemoteBot (продолжение) Обнаруживает нажатие кнопок с 1 по 9 на пульте дистанционного управления и выполняет соответствующее действие (например, поворот влево – для кнопки «1»). Затем сбрасывает процесс IRremote и ждет 2 мс перед повторением. З а г р у з и т е э с к и з R e m o t e B o t с с а й т а п о д д е р ж к и ( с м . с т р . 5 2 ) . Непрерывная петля: процессор реагирует на левый или правый переключатель. Процедуры движения для управления роботом. RemoteBot использует дополнительные пользовательские функции, кроме тех, что указаны в скрипте BumperBot. #include <IRremote.h> int RECV_PIN = A0; // Аналоговый 0 IRrecv irrecv(RECV_PIN); decode_results results; pinMode(A1, OUTPUT); // Мощность сопротивления изоляции, контакты заземления pinMode(A2, OUTPUT); digitalWrite(A1, LOW); // Мощность сопротивления изоляции; аналоговый контакт 1 digitalWrite(A2, HIGH); // Мощность сопротивления изоляции; аналоговый контакт 2 ... irrecv.enableIRIn(); // Запустить приемник void loop() { if (pbLeft == HIGH) { // Соприкосновения левого бампера goReverse(); delay(500); ... if (pbRight == HIGH) { // Соприкосновения правого бампера goReverse(); delay(500); Добавьте библиотеку IRremote в Arduino IDE. (Помните, что вы ДОЛЖНЫ установить эту библиотеку, прежде чем использовать этот скрипт, см . стр. 32 .) Поворачивайте контакты A1 и A2 для питания и заземления для исполь- зования инфракрасного датчика, а затем запускайте процесс IRremote. 3/5
34 Глава 8 Создайте робота, который следит за линией С помощью всего лишь пары недорогих датчиков, которые обнаруживают отраженный инфракрасный свет, ваш Make:Bot может покорно следовать по черной линии, которую вы нарисовали на плакате, белой бумаге, кухонном полу или любой другой белой поверхности! Два миниатюрных светоотражающих датчика позволяют Make:Bot следить за черной линией на белом плакате. 1 ВНИМАНИЕ Держите пальцы подальше от ножа во время вырезания. Используйте дере- вянную или металлическую линейку, чтобы держать небольшую пенопла- стовую доску на месте! 3/8” 3/4” 1/4” пенопластовой доски Используйте инструментарный нож, чтобы вырезать два ИК-датчика на 3/8” и на 3/4”. Точный размер не является критическим, но подушечки должны располагаться между двумя переключателями на нижней стороне Make:Bot. Склейте две прокладки вместе, чтобы сделать стек. Затем приклейте набор прокладок к нижней стороне нижней палубы. Прокладки должны быть центрированы на основании и почти вровень с передним краем. 2 Отметить центры и выровнять С д е л а т ь д в а 4/5
35 3 Плоскогубцами оборвите набор 3-штифтовых разъемов. Разъемы включите в датчик. Сделайте два набора 3-штифтовых разъемов (по одному для каждого датчика). 4 5 Расположите датчик так, чтобы оптика излучателя/ приемника была направлена вверх. Это нижняя часть датчика. Вставьте штифты в три отверстия так, чтобы их короткая сторона выходила из дна датчика. Припаивайте наконечники штифтов на место. После пайки используйте увеличительное стекло, чтобы убедиться, что паянные соединения закончены и что три клеммы не соприкасаются друг с другом каплями избыточного припоя! Фронтальная часть Фронтальная часть Правый сенсор Левый сенсор Черный Красный Желтый Зеленый Оранжевый Белый Подключите шесть штифтов к разъемам, используя указанные цвета. Оставьте другие концы соединительных проводов отключенными на данном этапе. Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
36 7 6 Фронтальная часть Отрежьте кусочек двухстороннего скотча, чтобы он соответствовал прокладкам инфракрасных датчиков. Прикрепите скотч к прокладкам, затем прижмите датчики к нему. Расположите датчики так, чтобы разъемы были заподлицо с передней частью робота. Используйте разъемы как ручку, пока вы выстраиваете их поверх скотча. Датчики должны быть на расстоянии 1/8–1/4” от плакатной доски. При необходимости отрегулируйте. Центрируйте датчики над отметкой на основах ПЕРЕВОД Подключите шесть штырьковых переключателей от датчиков к макету. 4 дюйма соедини- тельного провода с твердой проволокой Существующая проводка, окрашенная в серый цвет 6 дюймов переход- ников 1/5
37 Проверьте два инфракрасных датчика, используя скрипт LineSensorsTest. Загрузите скрипт как обычно, а затем откройте окно монитора последовательного интерфейса Arduino. Проведите рукой прямо перед датчиками. Показания должны измениться. Ожидаемые значения: 0–1023. #define lineLeft A4 #define lineRight A5 int irReflectL = 0; int irReflectR = 0; Serial.print ("Left:"); Serial.print ("\t"); // Создает табуляцию Serial.print (irReflectL); // Вставите значение для левого сервопривода Serial.print ("\t"); Serial.print ("Right:"); Serial.println (irReflectR); // Введите значение для правого сервопривода delay(100); // Начинает новую строчку } LineSensorsTest (продолжение) LineSensorsTest void setup() { Serial.begin (9600); } void loop() { irReflectL = analogRead(lineLeft); irReflectR = analogRead(lineRight); Скрипт устанавливает переменные (временное хранилище данных) для использования в других частях скрипта. #define – для удобства кодирования. Названия представляют собой соединения ввода/вывода, подключенные к отражающим датчикам. Скрипт подготавливает монитор последовательного интерфейса, чтобы вы могли видеть значения. Числовые значения датчиков печатаются в окне «Монитор последовательного интерфейса». Чтобы просмотреть результаты, загрузите скрипт и откройте монитор последовательного интерфейса (см. стр. 30). Мгновенное значение правого и левого датчиков считывается и сохраняется в переменных. Значения, которые находятся в диапазоне от 0 до 1023, представляют собой аналоговое (непрерывно изменяемое) напряжение от 0 до 5 В. Значение 1023 означает, что датчик обнаруживает чистый черный цвет (без отражения света); 0 означает белый, полностью отраженный свет. Убедитесь, что проводка инфракрасного датчика выглядит так. Оберните провода изолентой, чтобы собрать их вместе и закрепить их между ультразвуковыми сенсорными элементами. 2/5
38 Создайте полосу для прокладывания курса робота с использованием белой плакатной доски размером 22×28 дюймов и 3/4-дюймовой черной изоленты. Лучше использовать качественную изоленту – дешевый материал может смяться со временем. Также можно использовать белый ватман и даже полностью белый линолеум на полу! Используйте карандаш, чтобы обозначить границу не менее чем в 3 дюймах от края доски. Начните в любом месте и прикрепите изоленту, плотно прижимая ее к основе. Не переусердствуйте. Сотрите маркировку карандаша, когда закончите. Попробуйте эти подходы: y сделайте несколько дорожек разной формы. Используйте только одну сторону плаката; y устройте гонки с другом, который создал свой собственный Make:Bot; y при использовании ультразвукового датчика отодвиньте шесть соединительных проводов к датчикам слежения за линией. Когда дела идут плохо: y если ваш бот слишком «сходит с рельсов», попробуйте другой курс с более простыми поворотами. Убедитесь, что датчики чистые и правильно выровнены; y соблюдайте расстояние от датчика до плаката около 1/8 дюйма и 1/4 дюйма; y попробуйте получить более низкое пороговое значение в скрипте LineFollow, если робот не может оставаться на линии; y изолента может деформироваться от времени и влажности. Разгладьте или замените ее. Сохраняйте 3-дюймовый отступ 3/4-дюймовая черная изолента Доска 22×28 дюймов Избегайте очень крутых поворотов прямых углов пересечений 3/5
39 В ходе гонок пришло время пройтись по линиям! Загрузите скрипт LineFollow. Нажмите на кнопку перезагрузки процессора Arduino во время установки своего робота на гоночную полосу. Отпустите кнопку и – на старт, внимание, марш! ... int thresh = 500; LineFollow (частично) LineFollow (продолжение) Граничные переменные определяют граничное значение для выявления, находятся ли отражающие сенсоры над линией. Вы можете поэкспериментировать с этими значениями, чтобы найти оптимальное. Попробуйте меньшее значение, если ваш бот крутится на месте. Серия условных тестов диагностирует состояние сенсоров и определяет, следует робот по черной линии или отклоняется вправо или влево. Код irReflectL >= thresh && irReflectR >= thresh сравнивает значения сенсоров с граничными значениями. Если они превышают граничные значения, сенсоры «видят» черное, значит, робот на черной линии. Другие условные тесты определяют, отклоняется ли робот вправо или влево, чтобы сделать поправку на погрешность курса. Мгновенные значения двух сенсоров просчитываются заново при каждом выполнении данного скрипта. Пользовательские функции обеспечивают рулевое управление роботом. void loop() { irReflectL = analogRead(lineLeft); irReflectR = analogRead(lineRight); if (irReflectL >= thresh && irReflectR >= thresh) { line_forward(); // Онлайн } if (irReflectL >= thresh && irReflectR <= thresh) { line_slipLeft(); // Отклонение вправо delay(4); } if (irReflectL <= thresh && irReflectR >= thresh) { line_slipRight(); // Отклонение влево delay(4); } if (irReflectL < thresh && irReflectR < thresh) { line_spinRight(); // Попытка отследить линию при ее потере delay(20); } } void line_forward() { servoRight.write(0); servoLeft.write(180); } void line_slipRight() { servoRight.write(90); servoLeft.write(180); } void line_slipLeft() { servoRight.write(0); servoLeft.write(90); } ... 4/5
40 Глава 9 Узнайте о цифровых и аналоговых сигналах ВНИМАНИЕ При подаче сигнала на Arduino Uno убедитесь, что сигнал не превышает 5В! Роботы – это прежде всего подключенные к ним датчики. Без датчиков ваше творение будет глухим и слепым. Датчики подключаются к Arduino посредством контактов ввода/вывода и общаются с ним посредством цифровых или аналоговых сигналов. Тип сигнала важен: он определяет, какие контакты ввода/вывода Arduino вы можете использовать. Цифровые сигналы подключаются к любому контакту ввода/вывода; аналоговые сигналы могут подклю- чаться только к контактам с маркировкой Analog In. Аналоговые сигналы непрерывно изменяются в пределах от 0 до 5 В. Внутри Arduino эти напряжения преобразуются в числа от 0 до 1023. Цифровые сигналы имеют только два состояния: 0Volts=LOW,или0 5В=HIGH,или1 Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
41 Что смотреть Откройте монитор последовательного интерфейса (см. стр. 30), нажмите на левый тактильный сенсор. Проверьте следующие значения: Статус сенсора Значение Открытое состояние 1 (есть напряжение) Закрытое состояние 0 (отсутствует напряжение) Переключатель 1 (есть напряжение), если он не активирован, потому что он подключен к нагрузочному резистору внутри Arduino. Закрытие переключателя приводит к его заземлению, поэтому идет сигнал 0 (нет напряжения). Что смотреть Откройте монитор последовательного интерфейса и проведите пальцем по линейным датчикам. Значения находятся в диапазоне от 0 до 1023. Значение Напряжение 0 0 1–1022 от 0,1 до 4,9 1023 5 Из-за технологии датчиков более высокие значения = меньше света, отражающегося в датчике. Используйте один из тактильных сенсоров, подключенных к Make:Bot, чтобы проверить считывание цифрового сигнала. Используйте один из следующих датчиков, подключенных к Make:Bot, чтобы проверить считывание аналогового сигнала. #define SWITCH 3 // Переключите контакт 3 (влево) int swValue; // Значение переменной void setup() { pinMode(SWITCH, INPUT); // Ввод команд для левого переключателя pinMode(4, OUTPUT); // Заземление для переключателей digitalWrite(SWITCH, HIGH); // Настройте внутреннее нагрузочное напряжение Serial.begin (9600); // Активируйте монитор последовательного интерфейса } void loop() { swValue = digitalRead(SWITCH); // Считывание значения переключателя Serial.println (swValue); // Значение на дисплее delay(250); // Подождите 1/4 с } #define SENSOR A5 // Аналоговый контакт правого привода A5 int sValue = 0; // Значение переменной void setup() { Serial.begin (9600); // Активируйте монитор последовательного интерфейса } void loop() { sValue = analogRead(SENSOR); // Считывание значения сенсора Serial.println (sValue); // Значение на дисплее delay(250); // Подождите 1/4 секунд } DigitalTest AnalogTest 1/5
42 Проект 10 Добавьте мигающие индикаторы к вашему Make:Bot! Индикаторы – это простой способ общения Make:Bot с вами. Они дешевы и легко добавляются: только светодиод (LED) и резистор. В этом проекте рассказывается, как добавить один светодиод, который светится или мигает двумя цветами. 1 2 3 Вид сверху Вид сбоку Анод Катод Найдите катод светодиодного индикатора. Он на плоской стороне и немного короче. Припаивайте тщательно! 1/4” 3/8” 3/8” Подсоедините контакт катода светодиодного индикатора до 1/4 дюйма. (Лучше сделать его более длинным, чем слишком коротким.) Подсоедините один из концов токоограничивающего резистора к участку 3/8 дюйма. Важно! Припаивайте светодиод и резистор не более 3 секунд. В противном случае можно повредить компоненты. Отрежьте нижние выводы светодиода и резистора на 3/8 дюйма. Вставьте в контакты Arduino 11 и 12. Концы резистора ввинчиваются в контакт 11. 2/5
43 Светодиоды – это своего рода полупроводник, созданный для испускания света. Многие светодиоды имеют один цвет. Светодиод Make:Bot имеет особое значение – он создает два цвета: красный или зеленый. Цвет, который вы видите, определяется полярностью +/– контактов светодиодов и может управляться Arduino. Светодиоды используются с резистором, который ограничивает ток, проходящий через полупроводник. Резисторы имеют цветовую кодировку с использованием полос. Полосы указывают количество сопротивления в омах, обеспечиваемое резистором. Нередким является значение резистора для использования со светодиодами – 330 Ом. Символ одноцветного светодиода Символ двуцветного светодиода Значение: 330 Ом Цвета: оранжево-оранжево- коричневый Символ, обозначающий резистор или Обозначение резистентности (серебристого или золотистого оттенка) ВНИМАНИЕ НИКОГДА не используйте светодиод без токоограничивающего резистора, иначе он сгорит за считанные секунды. Цветовая кодировка (10 Ом/10%) Четыре полосы Цвет 1 полоса 2 полоса Мульти- пликатор Допуск 3/5
44 #define LED_GREEN 11 #define LED_RED 12 BlinkyTest BlinkyColors Arduino имеет встроенный светодиод, перманентно подсоеди- ненный к контакту 13. Вы можете управлять светодиодом с помощью любого контакта, указав его номер. Операторы #define связывают внешний светодиод с контактами 11 и 12. Контакты 11 и 12 являются выводами и установлены на заземление (0 В). При контакте 12 (LED_RED) не изменяется и служит заземлением (0 В). #define и setup() выполняют те же функции, что и BlinkTest. Функция loop() состоит из сигналов двум пользовательским функциям (ниже), которые заставляют светодиоды мигать зеленым или красным цветом. Красный и зеленый цвета определяются полярностью светодиодов. Pin 12 Pin 11 Color LOW LOW Нет цвета HIGH LOW Красный LOW HIGH Зеленый HIGH HIGH Нет цвета Функция loop() постоянно передает на контакты LED_GREEN (контакт 11), что заставляет светодиод мигать зеленым цветом. void loop() { red_blink(); green_blink(); } BlinkyTest мигает светодиодным индикатором через контакты 11 и 12. Из-за 5 вольт напряжения, направляемых на катод светодиода (контакт 11), он мигает зеленым цветом. BlinkyColors мигает светодиодом между красным и зеленым цветами путем переключения полярности (с и без напряжения) контактов 11 и 12. void setup() { pinMode(LED_RED, OUTPUT); pinMode(LED_GREEN, OUTPUT); digitalWrite(LED_RED, LOW); digitalWrite(LED_GREEN, LOW); } void loop() { digitalWrite(LED_GREEN, HIGH); delay(250); digitalWrite(LED_GREEN, LOW); delay(250); } void red_blink() { digitalWrite(LED_RED, HIGH); delay(250); digitalWrite(LED_RED, LOW); delay(250); } void green_blink() { digitalWrite(LED_GREEN, HIGH); delay(250); digitalWrite(LED_GREEN, LOW); delay(250); } 4/5
45 ... boolean started = false; #define LED_GREEN 11 #define LED_RED 12 void setup() { ... started = true; pinMode(LED_GREEN, OUTPUT); pinMode(LED_RED, OUTPUT); digitalWrite(LED_GREEN, LOW); digitalWrite(LED_GREEN, LOW); } void goRight() { servoLeft.write(180); servoRight.write(180); led_off(); } void goLeft() { servoLeft.write(0); servoRight.write(0); led_off(); } BumperBotLights BumperBotLights (продолжение) Добавьте строки, выделенные красным цветом; уже существующие строчки скрипта BumperBot выделены серым. Выключите светодиод для поворотов. Установите полярность напряжение/заземление для зеленого и красного цветов. Установите оба контакта 11 и 12 на заземление, чтобы отключить светодиод. Пусть светодиод мигает зеленым, когда робот движется вперед; пусть мигает красным, когда он движется назад. Светодиодный индикатор может помочь вам подтвердить эту операцию: вы знаете, что все функционирует, по свечению светодиода. Можно усовершенствовать скрипт BumperBot, добавив зеленых/красных сигналов при движении робота вперед или назад. void goForward() { servoRight.write(0); servoLeft.write(180); led_green(); } void goReverse() { servoRight.write(180); servoLeft.write(0); led_red(); } void led_green() { digitalWrite(LED_GREEN, HIGH); digitalWrite(LED_RED, LOW); } void led_red() { digitalWrite(LED_GREEN, LOW); digitalWrite(LED_RED, HIGH); } void led_off() { digitalWrite(LED_GREEN, LOW); digitalWrite(LED_RED, LOW); } Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
46 Проект 11 Создавайте звуки с помощью вашего Make:Bot Ваш Make:Bot может издавать простейшие роботоподобные звуки с помощью недорогого пьезоэлектрического преобразователя. Arduino производит сигналы, которые звучат как простое шипение и бибиканье. 1 Включите пьезоэлектрический преобразователь в разъемы платы J26 и J29. Плюсовой контакт входит в разъем J26. На трансдьюсере есть наклейка, на которой написано: «Снимите наклейку после смывания». Не смывайте водой! Наклейка должна применяться для автосборки аппаратов. 2 Существующая проводка показана серым цветом Миниатюрный пьезоэлектрический преобразователь производит простейшие звуки и не требует усилителя. Воспользуйтесь соединительным проводом без изоляции между разъемами платы E29–F29. Это соединение заземления для трансдьюсера. Воспользуйтесь оранжевым разъемом шестидюймового соединительного провода между цифровым контактом Arduino No 5 и разъемом платы F26. 1/5
47 #define SPKR 5 boolean started = false; #define NOTE_B3 247 #define NOTE_C3 131 #define NOTE_C4 262 #define NOTE_D6 1175 #define SPKR 5 SoundTest RemoteBotSound Он определяет контакт 5 Arduino, подключенный к плюсовой клемме пьезоэлектрического преобразователя (терминал подключен к земле). Добавлены строки красного цвета; существующие строки из RemoteBot в сером цвете. Определяются музыкальные ноты и соответствующие им частоты. Эти #defines являются удобными для кодирования. Добавляется последовательность тонов при нажатии переключателей. Воспроизведение звука с использованием оператора тона Arduino. Тон создается с помощью преобразователя. Частота 247 Гц, длительность 300 миллисекунд. Затем скрипт останавливается на 200 миллисекунд. Он производит дополнительные тоны на разных частотах, также с длительностью 300 мс. Скрипт останавливается между каждым звуком в течение 200 мс. Тоны повторяются. SoundTest подтверждает, что пьезоэлектрический преобразователь соответствующим образом прикрепляется к Arduino. Он повторяет набор из трех тональностей. RemoteBotSound добавляет тоны к скрипту RemoteBot. При нажатии левого или правого переключателя воспроизводятся разные тональные сигналы. void setup() { // sфункция setup() намеренно оставлена пустой } void loop() { tone(SPKR, 247, 300); delay(200); tone(SPKR, 131, 300); delay(200); tone(SPKR, 1175, 300); delay(200); } if (pbLeft == HIGH) { goReverse(); makeSound (NOTE_B3, 200); makeSound (NOTE_C3, 200); makeSound (NOTE_D6, 200); ... if (pbRight == HIGH) { goReverse(); makeSound (NOTE_D6, 200); makeSound (NOTE_C4, 200); void makeSound(int frequency, int duration) { tone(SPKR, frequency, duration); delay(100); } 2/5
48 Make:Bot сверху донизу Make:Bot – это «двухпалубный» робот, состоящий из нижней и верхней досок. Палубы разделены аккумуляторными батареями и двигателями. На этих рисунках показаны основные компоненты Make:Bot. Вид сверху Вид снизу Вид между досками Ультразвуковой датчик (обнаружение объекта) Пьезодатчик (звуковой) Беспаечный макет (электронное прототипирование) Двухцветный светодиод и резистор (визуальная обратная связь) Батарея 9 В (питание Arduino) Два переключателя мгновенного действия (обнаружение объекта) Два датчика (друг напротив друга) Серводвигатель (2 шт.) Колеса с резиновой шиной (2 шт.) Нижнее основание Нижнее основание Распорка нижнего основания Круглая заглушка (высокая) Четыре батареи АА (питание двигателя) Инфракрасный приемник 38 кГц (пульт дистанцион- ного управления) Микроконтроллер Arduino 3/5
49 Часто задаваемые вопросы У всех могут возникнуть вопросы. Вот некоторые часто задаваемые вопросы и ответы на них. Если вы новичок в Arduino, ознакомьтесь со справочной информацией на сайте www.arduino.cc. Могу ли я применять плату Arduino, не использующую UNO? Это может сработать, но не рекомендуется. Платы Arduino могут различаться по требованиям к напряжению, функциям штыря и др. Заменяйте, только если вы уже знаете существующие проблемы. Как заставить IDE распознать мою плату Arduino? Попробуйте подключить USB-кабель и перезапустить IDE. См. также страницу «Начало работы» на сайте www.arduino.cc для получения дополнительных вариантов устранению неполадок. Почему мои сервоприводы поворачиваются, когда робот должен остановиться? Возможно, требуется калибровка сервоприводов. Загрузите скрипт Calibrate с сайта MakeBot: Support на свой Arduino. Используйте небольшую крестообразную отвертку, чтобы отрегулировать ручку сбоку от сервомоторов. Сервоприводы калибруются при остановленном двигателе. Почему мои скрипты не компилируются и не загружаются? Наиболее распространенная причина: неправильный синтаксис программного языка. Проверьте наличие опечаток, правильную капитализацию и точки с запятой в конце строк выписок. Некоторые скрипты Make:Bot требуют дополнительных сторонних библиотек. См. текст. Могу ли я использовать батарею на 9 В для запуска Make:Bot? Нет. В батарее 9 В недостаточно мощности для работы сервомоторов. Почему мой робот только крутится на месте? Проверьте проводку сервопривода. Убедитесь, что провода питания, заземления и сигналов подключены правильно. Как насчет использования одного батарейного блока вместо двух? Не рекомендуется. Arduino требует не менее 7 В, но большинство сервоприводов сделано всего на 4,8 –6 В. И не рекомендуется запускать сервоприводы с регулируемого питания Arduino в 5 В. Почему робот не перемещается после загрузки скрипта? Убедитесь, что соединительный провод сервопривода находится в положении ВКЛ. Проверьте, не нужно ли заменить батареи. Какие типы поверхностей лучше всего подходят для Make:Bot? Столешницы, деревянные полы, плитка и ковры с очень низким ворсом. Почему мой светодиод светится красным, когда должен светиться зеленым? Анодные и катодные соединения светодиода меняются на противоположные. Просто поверните светодиод относительно контактов. 4/5
50 Монтажная схема Make:Bot 5V GND GND GND Левый линейный датчик Инфра- красный датчик Правый линейный датчик (Используется USB-кабель) * * * (Используется внутренний светодиод) – – – + + + Питание двигателя АА (4 шт.) Левый переключатель Левый двигатель Заземление Сигнал 5В 4,8–6 В (сервоприводы) Нет соединения * Питание или зазем- ление предусмотрено Arduino Есть соединение Правый двигатель Описание: Ультразвук Двуцветный светодиод Резистор 330 Ом Правый переключатель Пьезо Out Sig (1) Gnd (2) V+ (3) Vсс Trig Echo Signal Signal Gnd Out Vin Vin Arduino D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 A0 A1 A2 A3 A4 A5 А н а л о г о в ы е в х о д ы / в ы х о д ы Ц и ф р о в ы е в х о д ы / в ы х о д ы Po we r edbyTCPDF ( www . t cpd f . o r g ) 5/5
51 Ресурсы для создания лучших ботов Стань спецом по роботам с этими доступными книгами и наборами! Эти – в числе моих любимых! Все доступно на сайте www.makershed.com. Изучите электронику с Arduino Culkin & Hagen Нет опыта работы с электроникой или Arduino? Нет проблем! Здесь описано все, что вам нужно знать. Включает быстрые практические проекты. Цветные издания с кучей иллюстраций. Комплект для пайки Стань мастером пай- ки с помощью этого удобного комплекта — поставляется с паяль- ником и припоем. В комплект входят инструменты для очистки. Отличный практический проект! Простой комплект для занятия электроникой! Изучите электронику, не взорвав свой мозг! В комплект входят запчасти и буклет проекта, написанный гуру электроники Чарльзом Платтом. И более! Начало работы с Arduino, издание третье, авторы Banzi & Shiloh. Начало работы с пайкой, автор de Vinck. 1/2
52 Список запчастей Найдите эти детали в Интернете по адресу: www.jameco.com. Запчасть Код Кол-во Jameco Arduino Microcontroller UNO R3 2163840 1 USB-A кабель для подключения к USB-B* 222010 1 400-точечная паяльная плита 20601 1 9-вольтная аккумуляторная батарея 2207056 1 с цилиндрической штепсельной вилкой Держатель батареи 4xAA с проводным 105858 1 разъемом Гибкие соединительные провода 2260738 1 «папа-папа» (40 шт.) Гибкие соединительные провода 2260754 1 «папа-мама» (40 шт.) Комплект проволочных перемычек 22127718 1 из цельной проволоки (70 шт.) Сервопривод непрерывного вращения 283039 2 Комплект колес/шин 2109624 2 Пьезопреобразователь 2098523 1 Переключатель мгновенного действия 187805 2 Ультразвуковой датчик расстояния HC-SR05 2245407 1 Инфракрасный детектор 38 кГц 2229351 1 Датчик отражения QTR-1A (2 шт.) 2229343 1 Светодиод двухцветный зеленый/красный 94553 10 Резистор 330 Ом 1/4 Вт 690742 10 3M Электрический ленточный виниловый винт 285587 1 Найдите эти материалы в местном хозяйственном магазине Запчасть Кол-во 1/4” Пенопласт, 20”×30” 1 Двусторонний скотч, 1” , круглый 5 или квадратный Двусторонняя пенопластовая лента (1”) 1 Белая плакатная доска, 22×280 1 Круглая деревянная заглушка, диаметр от 3/4” до 1”, 1 высота от 3/8” до 1/2” (пример: Cindoco # F34B) Это можно купить где угодно: Батареи AA, щелочные или NiMH 4 9-В щелочная батарея 1 Универсальный пульт (совместим с телевизором Sony) 1 Экономьте время! Экономьте деньги! Получите комплект всех частей электроники от makershed.com/products/make-how-to-make-a-robot. Получите программные коды! Все примеры кода доступны в Интернете для вашего удобства. Получить код можно с сайта Make:Bot Support: www.robotoid.com/make-bot 1. Нажмите на файл кода, который вы хотите загрузить и сохранить на свой компьютер. 2. Все примеры заархивированы в формате zip. Распакуйте в свой каталог скриптов Arduino. 3. Откройте пример в программе Arduino IDE для использования с вашим Arduino. Для получения дополнительной информации см. раздел «Начало работы» на сайте www.arduino.cc . * USB-кабель, который вы получаете, зависит от разъемов USB на вашем компьютере и Arduino. См. стр. 8 . О т р а ж е н ы м и н и м а л ь н ы е п о т р е б н о с т и в к о л и ч е с т в е Po we r edbyTCPDF ( www . t cpd f . o r g ) 2/2