Каталог

Конструктор машинка "Автобот Степан" с ДУ, совместимая с Arduino

Цена:

1200 р.
ожидается
Уже в корзине
Код товара: 11272
Оригинальное название:
DIY School education programmable constructor kit 2wd robot "Autobot Stepan"

Описание товара

Характеристики конструктора

  • Модель конструктора: электронный программируемый 2-колёсный робот "Автобот СТепан" для самостоятельной сборки (DIY)
  • Рекомендуемая возрастная категория: от 10 лет и старше
  • Методы монтажа, используемые в конструкторе:
    • простая пайка компонентов
    • беспаячная коммутация, прототипирование
    • ручная сборка механических узлов
  • Три базовые программы навигации и управления:
    • следование по полосе чёрного цвета
    • самостоятельное движение с автоматическим определением и обходом препятствий
    • управление из Bluetooth-приложения со смартфона / планшета
  • Дистанция беспроводной связи: до 10м
  • Совместимость с Android 5.0+
  • Электронная основа: Арудино-совместимая микроконтроллерная платформа
  • Компактный источник автономного 5-вольтового питания
  • Встроенное устройство заряда для интегрированной литиево-полимерной аккумуляторной батареи 3.7В
  • Высокая устойчивость робота:
    • два полноразмерных боковых ведущих колеса 42мм
    • две роликовые опоры, передняя и задняя
  • Параметры собранной модели
    • размеры (ДхШхВ): 148 х 120 х 125мм
    • вес: 320 гр

Ключевые особенности конструктора "Автобот Степан"

  • Привлекательный дизайн и максимальная доступность
  • Наименьшая сложность сборки конструкции
  • Область применения:
    • самостоятельное изучение и конструирование
    • лабораторные классы расширенного специализированного школьного или студенческого образования
    • ориентированно-направленные развивающие клубы, классы, кружки, или секции робототехнического проектирования и моделирования
  • Классический текстовый и визуальный стили программирования
  • Открытый исходный код программного обеспечения
  • Быстрая и лёгкая взаимозаменяемость компонентов
  • Совместимость со множеством существующих аналогов
  • Неограниченная возможность дальнейшего наращивания и модернизации

Комплектация набора

  • Акриловая круглая "верхняя" основа с перфорацией 120х120 мм - 1 шт
  • Акриловая круглая "нижняя" основа с перфорацией 120х120 мм - 1 шт
  • Мотор редукторный 3V N20 1:48 - 2 шт
  • Колесо ведущее пластиковое с резиновой шиной 42 х 19 мм - 2 шт
  • Колесо роликовое опорное mini 3PI N20 - 2 шт
  • Проставочная пластина под роликовое колесо 16 х 2.3 мм - 1 шт
  • Скоба крепления мотора N20 - 2 шт
  • Батарейный отсек 2 х АА пластиковый - 1 шт
  • Провод 26AWG красный / чёрный 15 см - 4 шт
  • Стойка латунная PCHSS-30 M3 30 мм HEX - 4 шт
  • Стойка латунная PCHSN-5 M3 5мм + 6мм HEX - 9 шт
  • Модуль c микроконтроллером ATmega328P (совместимый аналог Arduino UNO R3) - 1 шт
  • Модуль источника питания Power Shiled со встроенной батареей 3.7V LP804050 2750mAh - 1 шт
  • Модуль расширения Sensor Shield V5 - 1 шт
  • Модуль драйвера коллекторного двигателя L9110S двухканального - 1 шт
  • Модуль ультразвукового датчика расстояния US-026 / HC-SR04 - 1 шт
  • Держатель ультразвукового датчика пластиковый - 1 шт
  • Модуль РЧ-приёмопередатчика Bluetooth - 1 шт
  • Модуль с датчиком линии TCRT5000 - 2 шт
  • Модуль с инфракрасным датчиком препятствия - 2 шт
  • Провода соединительные Dupont Line 10 см - 1 комплект
  • Провода соединительные Dupont Line 20 см - 1 комплект
  • Шнур питания-передачи данных USB 2.0 AM-BM 30 см - 1 шт
  • Шурупы, винты, гайки крепления - 1 комплект
  • Стягивающие хомуты пластиковые - 4 шт

Обучающий электронный программируемый конструктор "Автобот СТепан" — это готовый набор для самостоятельной сборки подвижного радиоуправляемого робота, состоящего из перечня подобранных электронных и механических компонентов. Набор предназначен для изучения основ конструирования мобильной робототехники с программированием микроконтроллерной электроники. Сборочная модель робота является отличным базовым материалом для проведения исследовательских и лабораторных работ, для проведения опытных экспериментов. Автобот СТепан легко поддаётся сборке всем пользователям в возрастной категории от 10 лет и старше, хоть немного знакомым с тематикой конструктора. Пользователи моложе 10 лет могут собирать машинку с интеллектуальным управлением под наблюдением и с помощью взрослых.

Режимы управления

В программном обеспечении мобильного робота "Автобот СТепан" реализованы три наиболее популярных и массово распространённых способа управления движением. Подобранные варианты наилучшим образом раскрывают понимание методов взаимодействия и управления роботом. Невероятно огромное количество существующих современным автоматизированных систем, обладающих похожими узлами и механизмами для перемещения, своими корнями уходят в продемонстрированные роботом технологии. Все доступные алгоритмы управления роботом сведены в одну программу. Алгоритмы поведения скомбинированы в программе таким образом , чтобы при каждом включении только один режим оказывался действующим. Программа управления движением устанавливается до момента запуска системы питания робота. Исходный способ переключения режимов управления роботом построен на логических комбинациях с физическим замыканием перемычками двух значимых контактов в 3-контактных группах портов ввода/вывода.

Автобот СТепан движется по полосе

Полностью автономная роботизированная машинка "Автобот СТепан" программно обучена чёткому следованию по полосе чёрного цвета. Она способна правильно выстраивать маршрут по размеченной линии в любом произвольном направлении. Границы полосы считываются двумя настраиваемыми инфракрасными датчиками TCRT5000, с постоянно направленными в "пол" излучателем и приёмником. Как только машинка выезжает из зоны с чёрным цветом в область с белым, светочувствительные датчики сигнализируют управляющему контроллеру, и направление движения робота выравнивается. Ширина направляющей полосы, предназначенной для движения робота, должна быть на 3-5 мм больше величины расстояния между двумя датчиками слежения, иначе поведение робота в этом режиме будет не предсказуемым. Длину и форму полосы можно выбирать произвольно, однако не желательны какие-либо её пересечения или чрезвычайно резкие изгибы. Для изменения цвета реагирования с чёрного на белый потребуется внести несложные корректирующих изменения в текст программного обеспечения.

Автобот СТепан самостоятельно объезжает препятствия

"Автобот СТепан" великолепно справляется с определением препятствий, случайно или преднамеренно возникающих на пути следования, и может самостоятельно их объезжать. Чётче всего роботу удаётся "видеть" прямые вертикальные препятствия из твердых материалов, с хорошими отражающими характеристиками. Большинство мягких поверхностей, а также прозрачные и полупрозрачные материалы, частично поглощающие излучаемые роботом сигналы, немного снижают точность расчёта дистанции.

В передней части умного робота-машинки располагаются два разнообразных вида датчиков определения препятствий, выполняющие измерение расстояния. Установленный по центру ультразвуковой датчик-сонар со своими сетчатыми "глазами", по образу похожими на человеческие, при первом взгляде заставляет восхищённо улыбнутся при первом взгяде. "Глазастый" цифровой сонар излучает перед собой неслышимую ухом звуковую волну в ультра частотном диапазоне 40 кГц, и замеряет время, затраченное лучом на путешествие в обе стороны, до опознаваемого объекта, а затем до датчика. По боковым сторонам в передней части робота, под углом 45° от сонара, расставлены два вспомогательных инфракрасных датчика определения препятствия. Настраиваемые ИК-датчики служат отличным дополнением для робота. Именно они помогают Автоботу СТепану гораздо лучше понимать окружающую обстановку. Пока его ИК-датчики продолжают "видеть" правое или левое препятствие, робот будет принудительно отворачиваться в другую сторону.

Дистанционное беспроводное Bluetooth-управление автоботом СТепаном

Режим беспроводного управления Автоботом СТепаном соответствует самым современным, перспективным методам управления радиомоделями. Робот оснащён специальным Bluetooth-приёмопередатчиком 2.4ГГц, принимает и выполняет команды движения по каналам прозрачной передачи UART. Сигналы нажатия управляющих движением кнопок передаются со смартфона или планшета под управлением ОС Андроид 5+. Максимальная дистанция передачи радиокоманд движения вперёд, назад, влево, вправо, достигает 10 метров в открытом пространстве. Робот останавляивается, если не получает по РЧ-каналу одну из перечисленных команд.

Перед использованием приложения дистанционого управления, следует переключить робота в Bluetooth-режим, и затем включить его питание (подробнее смотри ниже). На Android-устройстве необходимо найти и выполнить сопряжение со встроенным в машинку Автобот СТепан приёмопередатчика ближнего действия через меню совместимых Bluetooth-устройств. После удачного завершения сопряжения, имя трансивера отобразиться в списке доступных к подключению устройств непосредственно из окна приложения CTSmartCarBluetoothRemote (по умолчанию: JDY-31-SPP).

Исходная версия приложения для Автобота СТепана разработана и скомпилирована инструментами открытой среды визуального программирования на веб-ресурсе онлайн-конструктора для ОС Android - MIT App Invertor https://appinventor.mit.edu/, относящегося к Массачусетскому Технологическому Институту в Кембридже. Используемый стиль визуального программирования подобен популярному Scratch, обладает достаточно широким набором возможностей, сокращает количество и одновременно упрощает этапы программирования.

Дизайн и вид окон Bluetooth-приложения, элементы управления:

 

 

К тому же возведённый на Arduino-совместимом контроллере UNO R3, Автобот СТепан задействует программно сформированный канал UART. Две аппаратные линии приёма (Rx) и передачи (Tx) информации UNO R3, занимаемые в аналогичных моделях под WiFi/Bluetooth-связь, намеронно оставлены свободными с целью вывода различных отладочных данных.

Система питания автобота

У Автобота СТепана современная, уникальная система питания, заключенная в едином силовом модуле расширения Arduino Power Shield. Модуль полностью самодостаточен и обладает совместимым с UNO R3 / MEGA R3 форматом. Кроме подключенной литий-полимерной аккумуляторной батареи с рабочим напряжением 3.7В и энергоёмкостью 2750мАч, плата расширения содержит в себе зарядный контроллер TP4056 с парой цветных индикаторов состояния заряда, зелёным и жёлтым. Приходящие через встроенный порт microUSB-BF привычные 5 вольт автоматически регулируются и опускаются до 4.2 вольта - максимальное напряжение, допустимое для заряда литиевых батарей. Порт microUSB не имеет других предназначений, и служит исключительно для питания и заряда батареи. Контроллер TP4056 потребляет и заряжает Li-Pol аккумулятор постоянным током величиной до 1000 мА. Дополнительно к литиевой батарее подключена микроплата балансировки, в задачу которой входит постоянный мониторинг актуального потенциала перезаряжаемого аккумулятора, с ограничением его работы за пределами безопасного диапазона напряжений.

Модуль питания Arduino Power Shield укомплектован повышающим DC-DC регулятором MicrOne ME2149. В электрической схеме Автобота СТепана, ШИМ-контроллер MicrOne ME2149 обеспечивает выработку стабилизированного напряжения питания, исходящее из встроенной аккумуляторной батареи. Всеь диапазон от наивысшего напряжения 4.2 вольта у предельно заряженной батареи, до наименьшего напряжения 2.7 вольта у почти полностью истощённого аккумулятора, повышаются регулятором до фиксированных 5 вольт, расходящихся затем по внутренним электроцепям робота. Силовой модуль Arduino Power Shield может с уверенностью похвастаться наличием бокового ползункового выключателя, дополнительной выходной 5-вольтовой линией, а также поддержкой функции измерения уровня напряжения батареи через один аналоговый вход ATMega328P.

Заряжайте модуль с аккумуляторной батареей от любого подходящего источника стабилизированного напряжения 5 вольт постоянного тока от 1000 мА (от 1А). Габариты Li-Pol батареи (ДШВ) составляют 50х40х8 мм. Аккумулятор легко меняется на новый при его отказе или истечения срока службы.

Программное обеспечение

  1. Скетч с кодом программы управления Автоботом СТепаном (файл .ino, ArduinoIDE)
  2. Приложение Bluetooth дистанционного управления Автоботом СТепаном (файл .apk, Android 5.0+)
  3. Исходный код проекта Bluetooth-приложения (файл .aia, MIT App Invertor)

Инструкция по сборке умной машины авто робота СТепана

Для тех, кто уже владеет базовыми знаниями и имеет начальный опыт, а также хочет почувствовать себя одновременно разработчиком и изобретателем, предлагается без обращения к текущей инструкции, от начала и до конца, попробовать пройти непростое испытание по самостоятельному конструированию и программированию передвижного радиоуправляемого робота! Инструкция может помочь в сборке иных, концептуально похожих наборов и конструкторов от разных производителей. Она покажет и разъяснит общий принцип крепления и коммутации элементов и компонентов мобильных платформ с с программируемым управлением, использованных в основе Arduino-совместимых умных автомашинах.

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

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

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

 

 

1. На первом этапе и лишь однажды потребуется обычный паяльник для припайки четырех проводов питания редукторных моторов N20. Используя припой с канифолью или иные аналогичные флюсы, прочно присоедините красный провод к плюсовому контакту "+" мотора, чёрный провод к минусовому контакту "-" мотора. Батарейный отсек 2хАА, входящий в комплектацию набора, отложите в сторону. В нашем варианте сборки он не понадобится. Несмотря на то, что приступать к конструированию можно с разных элементов, будем придерживаться общего курса "снизу-вверх".

2. Разместите два опорных роликовых колеса спереди и сзади на внешней плоскости нижнего яруса. Между акриловой основой и одним опорным колесом поместите проставочную пластину синего цвета. Она нужна для удаления эффекта "качания" платформы из-за небольшой присутствующей разницы высоты в точках опоры ведущих и роликовых колёс. Вкрученные в крышки роликовых колёс шурупы используйте для их крепления к основе.

3. На верхней плоскости нижнего яруса, с правой или левой стороны разместите один редукторный мотор N20 так, чтобы вал мотора находился в области выреза под колесо. Ранее припаянные провода положите во внутреннее пространство собираемой конструкции. Воспользовавшись пластиковой скобой с предварительно вставленными в пазы гайками, надёжно закрепите мотор винтами. Повторите те же самые действия с противоположной стороны, и установите второе ведущее колесо. Наденьте пластиковые колёса с резиновыми шинами на валы обоих моторов.

 

 

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

5. С помощью двух коротких 5-мм шестигранных стоек, винтов и гаек, расположите и закрепите модуль драйвера коллекторных моторов двухканального на микросхемах L9110S в "задней" части нижнего яруса. Теперь, когда все физические стороны "Автобота СТепана" определены, соедините провода питания моторов с платой драйвера. Плюсовой красный и минусовой чёрный провода левого мотора, зафиксируйте тонкой крестовой отвёрткой в винтовых клеммах секции MOTOR A драйвера, правого мотора — в клеммах секции MOTOR B с реверсивным подключением.

 

 

6. В передней части нижней основы, со стороны внутреннего пространства, разместите на максимально близком друг к другу расстоянии, и закрепите гайками две короткие 5-мм стойки. Стойки служат опорой для инфракрасных светоотражающих датчиков слежения за линией TCRT5000. Закрепите датчики на опорах насколько можно крепче (но не перестарайтесь), чтобы они при любом движении конструкции сохраняли неизменное положение. Если расстояние между датчиками по какой-то причине увеличится, ширины направляющей полосы может не хватить, что приведёт к неправильному движению робота. На этом шаге сборка нижнего яруса завершена.

 

 

7. Наступила очередь сборки верхнего яруса. Он состоит из гораздо большего количества Arduino-совместимых модулей с различной электроникой: платой с программируемым контроллером ATMega328 в формате Uno R3, платой источника питания со встроенным литиево-полимерным аккумулятором аккумулятором 3.7В 2750мАч, и платой коммутационного расширения Sensor Shield V5. Верхняя основа несёт на себе датчики определения препятствия — оптические инфракрасные и ультразвуковые модули. Присутствует двухсторонний монтаж!

Плата с контроллером ATMega328P Uno R3 обладает не симметричным дизайном крепёжных отверстий. Это условие совершенно не мешает ей беспрепятственно закрепиться на верхней пластине автобота Степана. Тут есть небольшая хитрость — плата программируемого микроконтроллера сможет держатся лишь на трёх стойках. Установите стойки по углам модуля Uno R3 с ATMega328P, затем зафиксируйте его гайками. Сторона с модулем ATMega328P Uno R3 будет определять верхнюю плоскость второй основы.

8. Винтами и гайками М2-М2.5 закрепите пластиковый держатель ультразвукового датчика в "лицевой" части акриловой основы. Поместите в специальное отверстие держателя УЗ-датчик US-026 (или HC-SR04) выводами вверх. Смотрящие в небо "ножки" сонара  в будущем упростят выполнение проводного соединения с контроллером. Закрепите ультразвуковой датчик US-026 приёмником и передатчиком "наружу". Так Автобот СТепан получит некое подобие человеческих глаз.

9. Объедините модуль автономного питания Arduino Power Shield с платой микроконтроллера ATMega328P. Количество контактных "ножек" перезаряжаемого источника электроэнергии полностью совпадает с количеством ответных разъёмов по всему периметру UNO R3. Расположите модуль аккумулятора поверх платы UNO R3, и простым нажатием соедините все контакты.

10. Аболютно таким же способом, как описан в предыдущем пункте, установите плату коммутационного расширения Sensor Shield V5 поверх модуля источника питания с полимерным 3.7-вольтовым аккумулятором ёмкостью 2750мАч. Составляя модули в "башню", следите за попаданием на места всех ножек, не допускайте их загибов. Плата расширения Sensor Shield задействована в роботе не случайно. По названию модуля можно догадаться, что плата предназначена для подключения нескольких сенсоров (датчков). Цифровые D0-D13 и аналогово-цифровые A0-A5 выводы контроллера ATMega328 разведены на плате в сочетании с линиями индивидуального питания сенсоров или датчиков. Большое количество таких "скомбинированных" выводов несомненно удобно при коммутации электроники робота.

 

 

11. У верхнего яруса (впрочем, как у нижнего) есть два ряда иной перфорации, отличающейся поворотом под угол 45° относительно положения других отверстий. Используйте их ориентацию, и установите на нижней стороне верхнего яруса два инфракрасных оптических датчика препятствия. Направьте оптические элементы датчиков наружу. 5-мм стойки, болты и гайки М3 помогут справиться с задачей. Закрепите датчики на опорах как можно туже, чтобы при любых движениях робота они сохраняли своё неизменное положение.

12. Последний элемент конструкции Автобота СТепана — это беспроводной приёмопередатчик Bluetooth. Радиус его действия достигает 10 метров в открытом пространстве. В силу отсутствия у радиочастотного модуля каких-либо монтажных отверстий, закрепите его двумя хомутами на боку составленного трёхэтажного "бутерброда". Проденьте хомуты скозь передние отверстия двух верхних плат — батарейного и коммутационного модулей, и застегните их вытягиванием хвостиков через петли.

 

 

13. Зарядите до полного заряда встроенную литиевую батарею автономного источника, предназначенную для питания системы Автобота СТепана. Переведите ползунковый переключатель средней платы Power Shield в состояние "Выключено". Подключите к порту MicroUSB-BF аккумуляторного модуля любое совместимое зарядное устройство от смартфона или планшета с выходными параметрами: напряжение +5В DC, ток 1А (желательно 2А). Дождитесь включения зелёного индикатора, уведомляющего об окончании процесса восполнения электроэнергии.

14. Отрегулируйте чувствительность инфракрасных датчиков определения препятствия. Датчики реагируют на отражение сигнала от препятствия с любым видом поверхности, встретившегося на пути луча. Полностью прозрачные материалы определяются не всегда. Используйте цветные провода Dupont длиною 20 см для соединения левого и правого датчиков с коммутационной платой Sensor Shield. Провода проденьте сквозь свободные отверстия в верхнем ярусе. Включите питание.

Подсказка. Старайтесь продевать и распределять провода в отверстиях верхего яруса, находящихся наиболее близко к электронным платам робота в хвостовой части. Это самые удобные монтажные отверстия, в каждом свободно поместится до 5-10 проводов.

Каждый датчик оснащён двумя персональными светодиодными индикаторами: питание и состояние. Первый светиться постоянно, пока поступает напряжение. Второй светодиод состояния зажигается в момент возникновения на пути невидимого луча какого-либо предмета, находящегося на установленном расстоянии. И гаснет, если предмет находится дальше или полностью отсутствует. Поставьте перед датчиком на расстоянии 20-25 см любой предмет. Поверните крестовину подстроечника в крайнее левое положение, определяющее наименьшую дистанцию. Очень медленно начните вращать крестовину вправо, пока не зажгётся индикатор состояния. Проверьте работу датчика по второму индикатору, отводя или приближая предметы. Схема соединения:

  • зелёный провод — S6 коммутационный модуль + OUT правый датчик препятствия
  • синий провод — G(ND)6 коммутационный модуль + GND правый датчик препятствия
  • фиолетовый провод — V(CC)6 коммутационный модуль + VCC правый датчик препятствия
  • серый провод — S7 коммутационный модуль + OUT левый датчик препятствия
  • белый провод — G(ND)7 коммутационный модуль + GND левый датчик препятствия
  • чёрный провод — V(CC)7 коммутационный модуль + VCC левый датчик препятствия
 

 

15. Отрегулируйте чувствительность датчиков слежения за линией TCRT5000. Датчики реагируют на уровень яркости инфракрасного луча, отражённого от светлой или тёмной поверхности. Недостаточная яркость окружающего освещения, а также отсутствие контрастирующих навигационных полос, приведут к неправильному поведению робота в режиме движения по полосе. Нарисуйте или распечатайте на бумаге А4 небольшой отрезок с линией черного цвета. Длина и изгибы (повороты) линии берутся произвольные, однако её ширина на любом участке должна быть на 3-5 мм больше промежутка между точками преломления лучей двух оптических датчиков TCRT5000. Поставьте на лист собранную нижнюю часть робота так, чтобы оба датчика смотрели на полосу. Используйте цветные провода Dupont длиною 20 см для соединения левого и правого датчиков TCRT5000 с коммутационной платой Sensor Shield. Провода проденьте сквозь свободные отверстия в верхнем ярусе. Не прикручивая к нижней основе, положите верхний ярус на каркасные стойки, и включите питание.

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

  • оранжевый провод — S8 коммутационный модуль + OUT правый датчик слежения за полосой TCRT5000
  • коричневый провод — G(ND)8 коммутационный модуль + GND правый датчик слежения за полосой TCRT5000
  • красный провод — V(CC)8 коммутационный модуль + VCC правый датчик слежения за полосой TCRT5000
  • жёлтый провод — S12 коммутационный модуль + OUT левый датчик слежения за полосой TCRT5000
  • синий провод — G(ND)12 коммутационный модуль + GND левый датчик слежения за полосой TCRT5000
  • зелёный провод — V(CC)12 коммутационный модуль + VCC левый датчик слежения за полосой TCRT5000
 

 

16. На предпоследнем шаге отключите питание и соедините плату двухканального драйвера коллекторных (щёточных) моторов L9110S с коммутационной платой Sensor Shield. Четырьмя цветными проводами Dupont 20 см попарно соедините входы управления моторами А и В. Отдельной парой подключите драйвер к общей шине питания робота с 5-вольтовом напряжением постоянного тока. Затем окончательно закрепите винтами верхний ярус на всех каркасных стойках. Схема подключения:

  • чёрный провод — S3 коммутационный модуль + A-IB вход мотора А драйвера L9110S
  • белый провод — S9 коммутационный модуль + A-IA вход мотора А драйвера L9110S
  • красный провод — V(CC)AREF коммутационный модуль + VCC драйвера L9110S
  • коричневый провод — G(ND)AREF коммутационный модуль + GND драйвера L9110S
  • фиолетовый провод — S10 коммутационный модуль + B-IB вход мотора B драйвера L9110S
  • белый провод — S11 коммутационный модуль + B-IA вход мотора B драйвера L9110S
 

 

17. В завершении остаётся присоединить два последних элемента - это ультразвуковой датчик расстояния и Bluetooth-модуль беспроводной связи для дистанционного управления роботом. Так как оба компонента находятся вверху конструкции, соедините их с коммутационной платой короткими, 10-сантиметровыми цветными проводами Dupont, соблюдая следующую схему подключения. После окончания сборки переходите к этапу программирования Arduino-совместимого микроконтроллера ATMega328P.

Ультразвуковой датчик расстояния

  • серый провод — S2 коммутационный модуль + ECHO УЗ-датчика US-026/HC-SR04
  • фиолетовый провод — S4 коммутационный модуль + TRIG УЗ-датчика US-026/HC-SR04
  • белый провод — V(CC)2 коммутационный модуль + VCC УЗ-датчика US-026/HC-SR04
  • чёрный провод — G(ND)2 коммутационный модуль + GND УЗ-датчика US-026/HC-SR04

Беспроводной Bluetoot-приёмопередатчик

  • зелёный провод — SA4 коммутационный модуль + RXD модуль Bluetooth
  • жёлтый провод — SA5 коммутационный модуль + TXD модуль Bluetooth
  • оранжевый провод — G(ND)A4 коммутационный модуль + GND модуль Bluetooth
  • красный провод— V(CC)A4 коммутационный модуль + VCC модуль Bluetooth
 

 

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

Программирование робота. Запись прошивки в память микроконтроллера ATMega328P

Переключение алгоритмов управления движением основано на обработке в коде программы логического состояния двух аналогово-цивровых контактов A0(D14) и A1(D15) Arduino-совместимого контроллера ATMega328. Состояние логической единцы приравнивается к уровню напряжения питания, состояние логического нуля - к нулевому значению напряжения. Перемычки выбора программы устанавливаются сверху на коммутационной плате Автобота СТепана, непосредственно до того, как включается питание робота. Считывание состояние контактов происходит один раз, на самом старте выполнения. Предусмотрено три возможных варианта:

  1. Режим движения по полосе чёрного цвета. Схема подключения:
    • коричневый провод-перемычка SA0 + G(ND)A0
    • синий провод-перемычка SA1 + G(ND)A1
  2. Режим движения с обходом препятствий. Навигация по датчикам расстояния. Схема подключения:
    • коричневый провод-перемычка SA0 + V(CC)A0
    • синий провод-перемычка SA1 + G(ND)A1
  3. Режим ручной дистанционной навигации с управлением по каналу радиосвязи Bluetooth. Режим сопровождается свечением индикатора P13 коммутационной платы робота. Схема подключения:
    • коричневый провод-перемычка SA0 + V(CC)A0
    • синий провод-перемычка SA1 + V(CC)A1
 

 

Микроконтроллерный модуль ATMega328 полностью совместим со средой программирования Arduino IDE. Плата содержит порт формата USB-BF, поддерживающий спецификацию USB 2.0. Порт предоставляет простые функции последовательной связи для прошивки контроллера или отладки, а также подачи 5-вольтового напряжения питания в распределительную систему модуля UNO R3. В схемоцепи между портом USB и ATMega328 значится чип преобразователя, конвертирующего входящие сигналы шины USB в понятные микроконтроллеру импульсы транзисторной логики, играющего роль простого USB/UART-TTL программатора. Преобразователь USB/UART-TTL выполяет конвертацию сигналов в обе стороны. С его помощью данные можно не только записывать в память контроллера, но и загружать или считывать рабочую информацию приложения, либо выводить отладочные уведомления в текстовом формате. Стандартного проводного соединения USB-портов настольного или портативного ПК и платы с программируемым контроллером ATMega328 вполне достаточно для эффективной работы. Используйте шнур с концевыми разъёмами USB-AM и USB-BF, входящий в комплект набора.

Загрузите со страницы WEB-ресурса https://www.arduino.cc/ и установите последнюю версию свободно распространяемой среды программирования Arduino IDE. Весь необходимый инструментарий для написания скетчей (здесь так называются тексты с программами), для финальной компиляции кода (преобразования текста в машинный код), для тестирования и отладки программы (консоль последовательной связи) предустановлен в среде. Подключаемые библиотеки, фигурирующие в скетче с программным обеспечением Автобота СТепана, уже входях в состав среды разработки приложений Arduino IDE. Необходимости в дополнительной дозагрузки данных нет.

Скетч с кодом программы для Arduino IDE:

// Добавление вспомогательной библиотеки с набором функций проводной связи
#include "SoftwareSerial.h"

// Распределение функций управления роботом на выводы ATMega328P платы Arduino Uno R3
// Сонар
#define pinEcho 2 // серый провод
#define pinTrig 4 // фиолетовый провод
// питание белый(VCC)-черный(GND)

// Драйвер моторов
#define MotorInput1 3 // Motor A-IB, черный продов
#define MotorInput2 9 // Motor A-IA, белый провод
#define MotorInput3 10 // Motor B-IB, фиолетовый провод
#define MotorInput4 11 // Motor B-IА, белый провод
// питание красный(VCC)-коричневый(GND)

// Трекеры слежения за полосой
#define RightTracker 8 // Оранжевый(S)-красный(VCC)-коричневый(GND)
#define LeftTracker 12 // Желтый(S)-зеленый(VCC)-синий(GND)

// Датчики препятствия
#define RightObstacle 6 // Зеленый(S)-фиолетовый(VCC)-синий(GND)
#define LeftObstacle 7 // Серый(S)-черный(VCC)-белый(GND)

// Селектор программы управления
#define ProgramSelect1 14 // Коричневый провод-перемычка
#define ProgramSelect2 15 // Синий провод-перемычка

// Программно формируемый канал UART для связи Arduino Uno с модулем Bluetooth
#define BT_RXpin 18 // Зеленый провод -> Bluetooth TX (Arudino UNO A4)
#define BT_TXpin 19 // Желтый провод -> Bluetooth RX (Arudino UNO A5)
// питание красный(VCC)-оранжевый(GND)
SoftwareSerial btSerial = SoftwareSerial (BT_RXpin, BT_TXpin); // RX, TX

// Символьные и строковые переменные для чтения буфера UART Bluetooth
char incomingByte;
String incomingString;
String GetBTCommand;

// Параметры
// Скорость движения робота = напряжение на моторах, диапазон 0-255
// Выбран 40% уровень напряжения питания моторов
byte MotorSpeed = 96;

// Длительность выполнения одного движения в мс
byte OneMovieTime = 3;

// Предельное прямое расстояние до объекта см
short LimitObjectDistance = 25;

// Текущее прямое расстояние до объекта см
short CurrentObjectDistance = 0;

// Режимные индикаторы
bool SonarMovie = false;
bool LineTracker = false;
bool BluetoothControl = false;

// Константы управления и сигнализации
#define FASTLEFT 0
#define FASTRIGHT 1
#define FORWARD 2
#define BACKWARD 3
#define RELEASE 4
#define TURNLEFT 5
#define TURNRIGHT 6
#define LeftTrackerAlarm 7
#define RightTrackerAlarm 8
#define AllTrackerAlarm 9
#define AllTrackerNormal 10

// Константы для расчета дистанции от ультразвукового сонара до объекта

// Скорость звука м/с в воздухе при t=20C
const float sound_speed = 343.1;

// Коэффициент преобразования скорости м/с -> см/мкс
// Грубый расчет по формуле 343 м/с = 0.0343 см/мкс (343.1*100/1000000) = 1/29.1 см/мкс, т.е. 29.1см за 1 мкс
// Результат умножается на 2, так как сигнал движется в обе стороны, от сонара до препятствия,
// и от препятствия до сонара.
// Итоговое значение коэффициента для исходной скорости звука 343,1 равно 58.2 см/мкс
const float k = (20000 / sound_speed);

// ================  переменные, процедуры и функции =====================


byte getTracker(byte RightValue, byte LeftValue) {
  // Проверка и возвращение состояния трекеров. HIGH - черный цвет, LOW - белый цвет

  // Нет сигналов с трекеров
  if (digitalRead(RightValue) == HIGH && digitalRead(LeftValue) == HIGH) return AllTrackerNormal;
  // Сигнал с левого трекера
  if (digitalRead(RightValue) == HIGH && digitalRead(LeftValue) == LOW) return LeftTrackerAlarm;
  // Сигнал с правого трекера
  if (digitalRead(RightValue) == LOW && digitalRead(LeftValue) == HIGH) return RightTrackerAlarm;
  // Сигнал с двух трекеров
  if (digitalRead(RightValue) == LOW && digitalRead(LeftValue) == LOW) return AllTrackerAlarm;
}

unsigned short getDistance(unsigned short maxDistance = 600) {
  // Функция определения расстояния от ультразвукового датчика до объекта
  // Возвращает -1, если превышен таймаут ожидания эхо
  // Необязательный параметр maxDistance задаёт максимальное измеряемое расстояние в сантиметрах
  unsigned long timeout = maxDistance * k;
  unsigned long previousMicros;
  unsigned int t;
  // Формирование импульса на входе Trig сонара длительностью 10мкс
  digitalWrite(pinTrig, LOW);
  delayMicroseconds(2);
  digitalWrite(pinTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pinTrig, LOW);

  // Ожидание состояния HIGH на выводе Echo
  previousMicros = micros();
  while (!digitalRead(pinEcho)) {
    if (micros() - previousMicros > 10000) return -1;
  }

  // Измерение длительности ответного импульса на выводе Echo сонара
  previousMicros = micros();
  while (digitalRead(pinEcho)) {
    if (micros() - previousMicros > timeout) return -1;
  }
  t = micros() - previousMicros;
  return (t / k);
}

void SetPatch(byte WayDirection, unsigned int MoveTime)
// Управление входами драйвера моторов
//in1 - HIGH + in2 - LOW = левый мотор назад
//in2 - HIGH + in1 - LOW = левый мотор вперед
//in3 - HIGH + in4 - LOW = правый мотор назад
//in4 - HIGH + in3 - LOW = правый мотор вперед

{
  switch (WayDirection) {
    case FASTLEFT: {
        // быстрый разворот влево
        Serial.println("FAST LEFT");        
        analogWrite(MotorInput1, MotorSpeed);
        digitalWrite(MotorInput2, LOW);
        digitalWrite(MotorInput3, LOW);
        analogWrite(MotorInput4, MotorSpeed);
        delay(MoveTime);
        break;
      }
    case FASTRIGHT: {
        // быстрый разворот влево
        Serial.println("FAST RIGHT");
        digitalWrite(MotorInput1, LOW);
        analogWrite(MotorInput2, MotorSpeed);
        analogWrite(MotorInput3, MotorSpeed);
        digitalWrite(MotorInput4, LOW);        
        delay(MoveTime);
        break;
      }      
    case FORWARD: {
        // двжижение вперед
        Serial.println("Forward");
        digitalWrite(MotorInput1, LOW);
        analogWrite(MotorInput2, MotorSpeed);
        digitalWrite(MotorInput3, LOW);
        analogWrite(MotorInput4, MotorSpeed);
        delay(MoveTime);
        break;
      }
    case BACKWARD: {
        // двжижение назад
        Serial.println("Backward");
        analogWrite(MotorInput1, MotorSpeed);
        digitalWrite(MotorInput2, LOW);
        analogWrite(MotorInput3, MotorSpeed);
        digitalWrite(MotorInput4, LOW);
        delay(MoveTime);
        break;
      }
    case TURNLEFT: {
        // поворот влево
        Serial.println("Left");
        digitalWrite(MotorInput1, LOW);
        digitalWrite(MotorInput2, LOW);
        digitalWrite(MotorInput3, LOW);
        analogWrite(MotorInput4, MotorSpeed);
        delay(MoveTime);
        break;
      }
    case TURNRIGHT: {
        // поворот вправо
        Serial.println("Right");
        digitalWrite(MotorInput1, LOW);
        analogWrite(MotorInput2, MotorSpeed);
        digitalWrite(MotorInput3, LOW);
        digitalWrite(MotorInput4, LOW);
        delay(MoveTime);
        break;
      }
    case RELEASE: {
        // остановка
        Serial.println("Release");
        digitalWrite(MotorInput1, LOW);
        digitalWrite(MotorInput2, LOW);
        digitalWrite(MotorInput3, LOW);
        digitalWrite(MotorInput4, LOW);
        break;
      }
  }
}

// ================  подготовительная процедура, выполняется один раз в момент включения =====================

void setup() {
  // Определение алгоритма управления
  pinMode(ProgramSelect1, INPUT);
  pinMode(ProgramSelect2, INPUT);
    
  if (digitalRead(ProgramSelect1) == HIGH && digitalRead(ProgramSelect2) == LOW) {
    // Алгоритм движение по сонару и боковым датчикам препятствия, SW1:HIGH, SW2: LOW
    // Инициализация выводов сонара
    pinMode(pinTrig, OUTPUT);
    pinMode(pinEcho, INPUT);
    SonarMovie = true;
    LineTracker = false;
    BluetoothControl = false;
  }
  
  else if (digitalRead(ProgramSelect1) == LOW && digitalRead(ProgramSelect2) == LOW)  {
    // Алгоритм слежения за полосой, SW1:LOW, SW2: LOW
    // Инициализация выводов трекеров
    pinMode(RightTracker, INPUT);
    pinMode(LeftTracker, INPUT);
    SonarMovie = false;
    LineTracker = true;
    BluetoothControl = false;
  }
  
  else if (digitalRead(ProgramSelect1) == HIGH && digitalRead(ProgramSelect2) == HIGH)  {
    // Алгоритм управления по Bluetooth, SW1:HIGH, SW2: HIGH
    // Включение индикатора D13
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    SonarMovie = false;
    LineTracker = false;
    BluetoothControl = true;
  } 
  
  else {
    // пропуск комбинации ProgramSelect1 == LOW и ProgramSelect2 == HIGH
  }
  
  // Инициализация выводов драйвера мотора
  pinMode(MotorInput1, OUTPUT);
  pinMode(MotorInput2, OUTPUT);
  pinMode(MotorInput3, OUTPUT);
  pinMode(MotorInput4, OUTPUT);

  // Запуск аппаратного канала последовательной связи Serial0 UART
  // для вывода отладочной информации через порт USB
  Serial.begin (9600);
  
  // Запуск программного канала последовательной связи Serial UART для модуля Bluetooth HC-05
  pinMode(BT_RXpin, INPUT);
  pinMode(BT_TXpin, OUTPUT);
  btSerial.begin (9600);
}

// ================  основной цикл =====================

void loop() {
  // Заголовок отладочной информации о направлении движения
  Serial.print("Move - ");
  // Выполнение алгоритмов управления и движения в соответствии с выбранной программой
  // Алгоритм движения по полосе
  if (LineTracker == true && SonarMovie == false && BluetoothControl == false) {
    switch (getTracker(RightTracker, LeftTracker)) {
      // сигнал от левого датчика, поворачиваем вправо
      case LeftTrackerAlarm: {
          SetPatch(TURNRIGHT, OneMovieTime);
          break;
        }
      // сигнал от правого датчика, поворачиваем влево
      case RightTrackerAlarm: {
          SetPatch(TURNLEFT, OneMovieTime);
          break;
        }
      // сигнал от левого и правого датчика, поворачиваем влево
      case AllTrackerAlarm: {
          SetPatch(FASTLEFT, OneMovieTime);
          break;
        }
      // нет сигналов от датчиков, движемся прямо
      case AllTrackerNormal: {
          SetPatch(FORWARD, OneMovieTime);
          break;
        }
    }
  }
  
  // Алгоритм движения по сонару и боковым датчикам препятствий
  if (LineTracker == false && SonarMovie == true && BluetoothControl == false) {
    // Измирение дистанции до объекта по сонару, датчики настраиваются вручную
    CurrentObjectDistance = getDistance();

    // Сигнализируют оба датчика препятствия, быстрый поворот вправо
    if (getTracker(RightObstacle, LeftObstacle) == AllTrackerAlarm) {
      SetPatch(FASTRIGHT, OneMovieTime);
      
    // Левый датчики препятствия сигнализирует, быстрый поворот вправо
    } else if (getTracker(RightObstacle, LeftObstacle) == LeftTrackerAlarm) {
      SetPatch(FASTRIGHT, OneMovieTime);
      
    // Правый датчики препятствия сигнализирует, быстрый поворот влево
    } else if (getTracker(RightObstacle, LeftObstacle) == RightTrackerAlarm) {
      SetPatch(FASTLEFT, OneMovieTime);
      
    // Текущая дистанция до препятствия по сонару меньше пороговой, боковые препятствия не регистрируются датчиками
    } else if (CurrentObjectDistance < LimitObjectDistance && getTracker(RightObstacle, LeftObstacle) == AllTrackerNormal) {
      SetPatch(FASTRIGHT, OneMovieTime);

    // Движение вперед
    } else {   
      SetPatch(FORWARD, OneMovieTime);
    }

    // Вывод отладочной информации о текущем расcтоянии от сонара до объекта
    Serial.print(LimitObjectDistance);
    Serial.print(" cm limit, current distance : ");
    Serial.println(CurrentObjectDistance);
  }
  
  // Алгоритм движения с управлением из Bluetooth-приложения
  if (LineTracker == false && SonarMovie == false && BluetoothControl == true) {

    // В буфере появились новые данные
    if (btSerial.available() > 0) {
      // Посимвольное считывание до ключевого знака "0"
      incomingByte = btSerial.read();
      // Составление команды из нескольких символов
      incomingString += incomingByte;
      // Считываение ключевого знака "0" завершает формирование команды
      if (incomingByte == '0') {
        GetBTCommand = incomingString;
        // имя входящей команды в отладочный порт
        Serial.println(GetBTCommand);
        // очистка строки
        incomingString = "";
      }
    } 
    // Считывание из буфера данных и распознавание новой команды
    if (GetBTCommand == "FWD0") {
      SetPatch(FORWARD, OneMovieTime); // команда движения вперед
    } else if (GetBTCommand == "BWD0") {
      SetPatch(BACKWARD, OneMovieTime); // команда движения назад
    } else if (GetBTCommand == "RGT0") {
      SetPatch(TURNRIGHT, OneMovieTime); // команда движения вправо
    } else if (GetBTCommand == "LFT0") {
      SetPatch(TURNLEFT, OneMovieTime); // команда движения влево
    } else if (GetBTCommand == "RLS0") {
      SetPatch(RELEASE, OneMovieTime); // команда остановки движения
    } else {
      // Сброс строки при несовпадении с командой управления
      GetBTCommand = "";
    }
  }
}

 

Скопируйте скетч или загрузите его из файла в разделе программного обеспечения. Перед записью прошивки, в окне ArduinoIDE выполните настройки совместимости с микроконтроллерной платой, выбрав "Плата: Arduino Uno", "Порт: COMx". Суффикс x может принимать различные цифровые значения, определяющие имя последовательного порта (например, COM1, COM2, СOM11, и т.д.). Затем в меню "Скетч" ArduinoIDE проверьте/скомпилируйте программу, и, если программная среда не обнаружит ошибок, воспользуйтесь "Загрузкой" для обновления ПО контроллера ATMega328.

Создание мобильного APK-приложения для дистанционного управления автоботом Степаном

Внимание! Веб-ресурс MIT App Invertor требует обязательную регистрацию с указанием персональных данных. Сайт АПП-инвертор предоставляет способ визуального программирования функционального приложения любого уровня сложности для ОС Android.

Пример дизайнерского оформления однооконного приложения, с расположением ключевых элементов простейшего, интуитивно-понятного интерфейса. Визуальные компоненты, видимые на экране виртуального смартфона/планшета, добавляются в список поочерёдно, сверху вниз. Невизуальные (не видимые на экране) компоненты помещаются внизу под изображением гаджета. Иерархическое расположение добавленных компонентов выстраивается в области Components рабочего окна. Ниже перечислен перечень всех компонентов, задействованных в настоящем приложении:

  • линия состояния (статус-линия)
  • список доступных bluetooth-устройств (для их отображения на экране, в устройстве должна быть включена связь bluetooth)
  • кнопка отключения (разрыва соединения)
  • текстовое окно "Управление..."
  • двукнопочное горизонтальное выравнивание с кнопками "Вперед" и "Назад"
  • двукнопочное горизонтальное выравнивание с кнопками "Влево" и "Вправо"
  • пустое текстовое поле (применяется для увеличения пространства между нопками)
  • кнопка закрытия приложения
  • невизуальный Bluetooth-клиент

Облачный конструктор MIT App Invertor содержит в своих справочниках подсказки и обучающие материалы для каждого визуального/невизуального компонента. Графический интерфейс редактора MIT App Invertor не позволяет переносить текст программы в буфер памяти ПК или в другое место. Чтобы открыть проект приложения дистанционного управления Автоботом Степаном в окне своего браузера для редактирования, воспользуйтесь инструментом импортирования проектов. Кроме кода самой программы, в файле проекта включены множественные характеристики и настройки для всех взаимосвязаных элементов приложения, которые также доступны для редактирования в области Properties рабочего окна. Исходный код проекта CTSmartCarBluetoothRemote в открытом доступе опубликован в разделе программного обеспечения. Скомпилировованный вариант программы можно найти там же.

 

 

Текст программы приложения дистанционного управления, выстроенный в окне блоков облачного интерпретатора-компилятора:

 

 

footer shadow
Контакты

г. Москва, Пятницкое ш. д. 18, пав. 566

zakaz@compacttool.ru

8-495-752-55-22

compacttool logoadaptive site

accepted payment systems

Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !

© Все права защищены 2015 - 2024г https://compacttool.ru