Оглавление:

UCL Embedded - B0B The Linefollower: 9 шагов
UCL Embedded - B0B The Linefollower: 9 шагов

Видео: UCL Embedded - B0B The Linefollower: 9 шагов

Видео: UCL Embedded - B0B The Linefollower: 9 шагов
Видео: Human vs Robot | Artificial Intelligence 2024, Июль
Anonim
Встроенный UCL - B0B The Linefollower
Встроенный UCL - B0B The Linefollower

Это B0B. *

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

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

В отличие от многих других роботов, следующих за линией, B0B также собирает данные и отправляет их через Wi-Fi.

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

Это также включает в себя гнев на различную электронику за то, что она не работает так, как мы хотели, и шаги, которые мы предприняли для преодоления этих трудностей (я смотрю на вас ESP 8266-01).

Есть 2 кода, чтобы проект заработал. Первый код предназначен для модуля ESP8266, который мы используем Arduino в качестве программиста, а второй код будет запускаться на Arduino.

Шаг 1: Компоненты

Для этого проекта вам понадобятся:

Аппаратное обеспечение:

• 1x автомобильный радиоконтроллер (должен иметь ESC и сервопривод рулевого управления).

Мы использовали в основном стандартный Traxxas 1/16 E-Revo VXL, в основном потому, что он у нас был, и были вполне уверены, что сможем управлять им с помощью Arduino. Кроме того, поскольку в конечном итоге он будет иметь немалое количество дополнительного оборудования, мы были уверены, что это не будет проблемой для E-Revo 1/16.

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

• Тонна изоленты.

Цвет должен максимально контрастировать с полом. В нашей тестовой среде мы использовали белую ленту на темном полу.

• 1x Arduino Mega 2560.

Меньшие Arduino, вероятно, тоже подойдут, но вам будут нужны контакты.

• 1x большая макетная доска.

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

• 1x аналоговый ИК-датчик TCRT5000 (используется для предотвращения столкновений).

Точная марка / модель не имеет значения, если она совместима с Arduino и измеряет расстояние. Выполните поиск по таким ключевым словам, как «Расстояние», «датчик препятствий». Технически цифровой датчик также будет работать с небольшими изменениями кода, но мы используем аналоговый.

• 1x или 2x Gravity: аналоговый датчик градаций серого, версия 2

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

• 1 х ESP 8266-01.

Доступно множество версий ESP 8266. У нас есть опыт работы только с 8266-01, и мы не можем гарантировать, что код ESP будет работать с другой версией.

• 1 экран Wi-Fi ESP8266-01.

Технически необязательно, но если вы не используете его, все, что связано с модулем Wi-Fi, станет намного сложнее. Однако в руководстве предполагается, что он у вас есть (если нет, найдите в Интернете руководства по правильному подключению ESP-01 к Arduino), поскольку выполнение этого неправильного действия может и, вероятно, приведет к повреждению модуля.

• Аккумуляторы для самого автомобиля и аккумуляторы для питания дополнительной электроники.

Мы использовали пару аккумуляторов Lipo емкостью 2,2 Ач и 7,4 В параллельно, чтобы привести все в действие. У вас должна быть возможность использовать любые батареи, которые вы обычно используете с выбранным вами автомобилем. Если напряжение выше 5 В, но ниже 20 В, емкость важнее номинального напряжения.

• Множество соединительных кабелей.

Я перестал считать их точное количество. Если вы думаете, что у вас достаточно, скорее всего, нет.

• Наконец, чтобы прикрепить все, вам нужно будет установить Arduino, датчики, макетную плату и модуль Wi-Fi на выбранный вами автомобиль. Ваш результат будет зависеть от того, что вы используете в качестве основы и какие материалы доступны.

Мы использовали:

• Застежки-молнии.

• Немного суперклея.

• Небольшие кусочки макулатуры / полимерной трубки подходящего диаметра.

• Старая пластина из масонита от рамки для фотографий, обрезанная по размеру.

• Еще немного клейкой ленты.

• Любые инструменты, необходимые для работы с выбранным вами радиоуправляемым автомобилем.

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

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

• Узел-красный

Важная часть сбора данных.

• Сервер MQTT.

Посредник между нашей машиной и Красным Узлом. Изначально для тестирования мы использовали test.mosquitto.org

Позже мы использовали:

• CloudMQTT.com

Это было намного надежнее, что более чем компенсировало его сложность в настройке.

• WampServer.

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

Шаг 2: электрическая схема

Электрическая схема
Электрическая схема

Шаг 3: Физическая конструкция

Физическая конструкция
Физическая конструкция
Физическая конструкция
Физическая конструкция
Физическая конструкция
Физическая конструкция

В нашем решении есть прямой подход к физической сборке.

Оригинальный приемник и его водонепроницаемый корпус были сняты с радиоуправляемой машины, так как в нем нет необходимости.

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

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

Пластина из масонита (задняя пластина от старой рамы для картин) сверху имеет небольшие отрезки трубы из бумаги / смолы, вырезанные по размеру и приклеенные к нижней части. Они совпадают с креплениями для стоек корпуса и просто сидят сверху, надежно удерживая все. Предполагая, что клей, прикрепляющий трубу к пластине, держится и не наклоняется слишком сильно, он останется на месте. Также стоит отметить, что пластина находится в защитной сфере колес и бамперов. Arduino Mega и две макетные платы были прикреплены к пластине либо с помощью двухсторонней ленты, либо с помощью петли изоленты, обмотанной петлей, приклеенной.

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

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

Шаг 4: Модуль ESP8266

Модуль ESP8266
Модуль ESP8266
Модуль ESP8266
Модуль ESP8266

Модуль WiFi, ESP8266, требует установки двух разных контактов. Одна установка должна использоваться при прошивке модуля новой программой и использовании Arduino Mega 2560 в качестве программатора. Другая настройка предназначена для модуля, когда он используется и отправляет информацию брокеру MQTT.

Используя Arduino IDE для загрузки кода в модуль ESP8266, вам потребуется установить менеджер плат и дополнительный менеджер плат.

Под менеджером платы установите менеджер платы esp8266. Его легко найти, выполнив поиск по запросу "esp". Очень важно установить версию 2.5.0, не более старую и не более новую.

В настройках в URL-адресах дополнительных досок скопируйте в этой строке:

arduino.esp8266.com/stable/package_esp8266c…

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

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

Код, который будет записан на модуль ESP8266, устанавливает соединение с WiFi и брокером MQTT, в данном случае с именем пользователя и паролем, но его можно обойтись без внесения необходимых изменений, описанных в комментариях к коду. Для этого проекта нашему брокеру потребовались имя пользователя и пароль для работы. Модуль считывает входящие сообщения с последовательного порта, к которому он подключен. Он будет читать каждую новую строку, созданную кодом Arduino, расшифровывать сообщение и воссоздавать сообщение. После этого он отправляет сообщение брокеру MQTT, указанному в коде. Код для модуля ESP8266:

Шаг 5: Arduino

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

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

Детектор предотвращения столкновений добавлен к передней части радиоуправляемого автомобиля, чтобы определять, свободен ли путь впереди или нет. Если он заблокирован, радиоуправляемая машина остановится, пока препятствие не исчезнет / не будет устранено. Аналоговый сигнал от детектора используется для определения того, блокирует ли что-то путь, и является критерием способности двигаться вперед, а также остановки.

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

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

Код для Arduino Mega 2560:

Шаг 6: база данных MySQL

WampServer - это среда веб-разработки для Windows, которая позволяет нам создавать приложения с использованием PHP и базы данных MySQL. PhpMyAdmin позволяет нам легко управлять нашими базами данных.

Для начала перейдите по адресу:

В этом проекте мы используем версию 3.17 x64 бит для Windows. После установки убедитесь, что все службы работают, что означает, что маленький значок станет зеленым, а не красным или оранжевым. Если значок зеленый, вы можете получить доступ к PhpMyAdmin для управления своей базой данных MySQL.

Получите доступ к MySQL с помощью PhpMyAdmin и создайте новую базу данных. Назовите его как-нибудь подходящее, что вы можете вспомнить, в этом проекте он назывался «line_follow_log». После создания базы данных вы должны создать таблицу в базе данных. Убедитесь, что количество столбцов подходит. В проекте мы используем 4 столбца. Один столбец предназначен для метки времени, а последние три используются для хранения данных с автомобиля. Используйте правильный тип данных для каждого столбца. Мы использовали «длинный текст» для столбца отметок времени и «средний текст» для остальных.

Это должно быть все, что вам нужно сделать в PhpMyAdmin и MySQL. Запомните вашу базу данных и таблицу для раздела о Node-Red.

Шаг 7: красный узел

Для обработки сбора данных мы будем использовать довольно простой поток в Node-red. Он подключается к нашему серверу MQTT и записывает в нашу базу данных MYSQL.

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

Перво-наперво. Нам понадобятся следующие поддоны.

Node-red-contrib-mqtt-broker: это соединение с нашим брокером MQTT.

Node-red-dashboard: наша информационная панель, необходимая для визуального представления собранных данных.

Node-red-node-mysql: наше подключение к базе данных SQL.

Это не является полноценным руководством по Node-red, но я объясню, что делает поток Node-red.

Вначале у нас были проблемы с нашим выбранным сервером MQTT, умирающим / отключающимся, по-видимому, случайным образом, что делало внесение любых изменений разочаровывающим усилием, поскольку было неясно, были ли изменения полезными или нет, когда мы не могли видеть результат. Итак, кнопка "Сервер умер?" вводит «Нет», следующий блок вводит его на наш сервер MQTT. Если он не мертв, в окне отладки появится «Нет». Это делается не только для тестирования, но и для того, чтобы заставить Node-red попытаться повторно подключиться к серверу MQTT.

«Тестовая строка» отправляет строку стоимости брокеру MQTT. Мы отформатировали эту строку, чтобы она была похожа на то, что мы получили бы от Arduino. Это было сделано для того, чтобы упростить настройку сети, которая декодирует сообщения, без необходимости запуска проекта и сбора данных.

Последний поток в рабочей области можно разделить на два сегмента. Нижняя ветвь просто считывает входящие сообщения, отправляет их в окно отладки и сохраняет на SQL-сервере.

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

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

Например, «препятствие», как и все остальные, - это двоичный выбор: ехать либо ясно, либо нет. Таким образом, он получит 0 или 1. 0 будет отправлен в ветвь 'clear', 1 будет отправлен в ветвь 'Obstructed'. Переключатели «Очистить», «Заблокирован», если они активированы, будут выводить что-то конкретное, «Очистить» или «заблокировано» соответственно. Зеленые блоки продолжения будут размещены в окне отладки, синие - в нашей панели инструментов.

Ветви «статус» и «местоположение» работают точно так же.

Шаг 8: брокер MQTT

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

Для этого проекта мы создали брокера MQTT с помощью службы CloudMQTT с бесплатной подпиской на версию «Cute Cat». У него есть свои ограничения, но мы не превышаем их в этом проекте. Модуль Wi-Fi может подключаться к брокеру, и брокер затем направляет сообщения соответствующему целевому клиенту. В данном случае клиент - наш Node-Red. Сервис CloudMQTT устанавливает имя пользователя и пароль для своего сервера, поэтому нам гарантируется более высокий уровень безопасности. В основном это означает, что только те, у кого есть имя пользователя и пароль, могут получить доступ к этой конкретной службе CloudMQTT. Имя пользователя и пароль имеют решающее значение при настройке соединения с кодом ESP8266, а также с Node-Red.

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

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

Шаг 9: электроника для хобби

Прежде чем начать, мы знали из прошлого проекта, что штатным сервоприводом рулевого управления можно управлять с Arduino с помощью сигнала ШИМ, имеющего аналогичную проводку и подключенного к разным каналам на одном и том же стандартном радиоприемнике, мы предположили наличие электронного управления скоростью (ESC из теперь дальше), который управляет двигателем, аналогичным образом можно было бы управлять через PWM от Arduino.

Чтобы проверить эту теорию, мы создадим небольшой скетч Arduino. Скетч считывает аналоговый вход от потенциометра, переназначает значение с 0, 1024 на 0, 255 и выводит полученное значение на вывод PWM, используя analogWrite (), в то время как пульт дистанционного управления был на маленькой коробке и имел колеса сняты.

После прохождения диапазона на потенциометре ESC, казалось, «просыпается», и мы могли регулировать его вверх и вниз, мы также заставили Arduino распечатать значения в последовательном соединении, чтобы мы могли их отслеживать.

ESC, казалось, не нравились значения ниже определенного порога, в данном случае 128. Он видел сигнал 191 как нейтральный дроссель, а 255 был максимальным дросселем.

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

Однако обход потенциометра и установка фиксированного значения в код не помогли. Штатный ESC просто мигал и не раскручивал мотор, «отрегулируйте триммер дроссельной заслонки» согласно инструкции.

Неистовое устранение неполадок, использование различных значений, использование разных проводов и даже эксперименты с изменением частоты ШИМ, которую использует Arduino, - все это привело к еще большей странности.

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

Чем отличалась установка с потенциометром или штатными передатчиком и приемником, и версия, которая обеспечивала фиксированные значения?

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

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

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

Более низкие диапазоны, однако, все же не понравились ESC. Оказывается, это результат рабочих циклов ШИМ.

Либо по конструкции, либо по техническим причинам, как сервопривод рулевого управления, так и ESC игнорируют сигналы ниже 50% рабочего цикла. Это может произойти в том случае, если приемник / передатчик перестанет работать или разрядится, модель вернется в нейтральное положение и не улетит вдаль при полном открытии дроссельной заслонки. Точно так же сервопривод вращается только на 180 градусов, и ему не нужен полный диапазон.

С этими новыми знаниями был создан новый скетч Arduino. Первоначальная версия принимает строки, введенные в последовательный монитор, преобразует их в целое число и перемещает на вывод ШИМ, используя библиотеку серво и write () *. Если в монитор последовательного порта вводится новое значение, значение write () обновляется.

Во время тестирования штатный Traxxas ESC был заменен на Mtroniks G2 Micro, однако они должны работать одинаково, хотя точные значения могут немного отличаться.

Эта библиотека рассматривает ESC как сервопривод, очевидно, это нормально. Функция write () из библиотеки Servo.h изменяется от 0 до 180, ожидаемый сигнал постановки на охрану будет примерно посередине.

G2 Micro активирует запись () в диапазоне значений около 90, однако это было трудно определить, поскольку он, кажется, «помнит», когда был включен.

Ожидается, что Traxxas VXL-s3 активируется при значении write () 91.

После сигнала постановки на охрану любой ESC с радостью принимает сигналы ШИМ, независимо от функций Arduino, вызываемых для их генерации, и соответственно управляет двигателем.

Кстати о функциях; стандартные analogWrite (), а также write () и writeMicroseconds () из библиотеки Servo.h могут использоваться взаимозаменяемо, просто имейте в виду, что и что делает, и в конечном итоге ничего, кроме рабочего цикла, не имеет значения. WriteMicroseconds () можно использовать, если требуется более высокая степень детализации, просто имейте в виду, что диапазон здесь составляет от 1000 до 2000, с постановкой на охрану или «нейтралью» ожидается 1500. Со стандартным analogWrite () можно использовать диапазон быть от 128 до 255, около 191 - нейтрально.

Рекомендуемые: