код для машинки на ардуино
Bluetooth машинка на arduino
Привет самоделкины! Так вот в данной статье мы рассмотрим, как сделать машинку на bluetooth управлении. В роли пульта управления будет смартфон.
Также прикрепляю ссылки на некоторые компоненты
Для данной самоделки нам понадобится:
1. Мотор-редуктор 4 шт. ссылка
2. Деревянная доска (платформа)
3. Холдер для аккумуляторов 18650 ссылка
4. Аккумуляторы 18650 ссылка
5. Провода для соединения модулей ссылка
6. Arduino uno ссылка
7. Драйвер для моторов ссылка
8. Bluetoth модуль ссылка
9. Колёса для моторов 4 шт. ссылка
Из инструментов нам также понадобится:
1. Дрель
2. Отвёртка
3. Паяльник
4. Карандаш
Первым шагом нужно при помощи клея закрепить моторы на нашей платформе.
Далее припаиваем провода к нашим моторам.
Сверлим отверстия в платформе и при помощи болтов и гаек прикручиваем плату ардуино и драйвер для двигателей
Приклеиваем Bluetooth модуль и соединяем всё проводами.
Паяем провода к слоту для аккумуляторов и одеваем колеса на вал моторов
Готово! Подключаем ардуино к компьютеру и через программу загружаем код. Скачиваем приложение на смартфон и погнали!
Вот видео от автора с подробной сборкой:
Робот на Ардуино и машинка на Bluetooth своими руками
Робот – машинка на Ардуино становятся одним из самым популярных инженерных проектов в школьной робототехнике. Именно с таких устройств, автономных или управляемых со смартфона и bluetooth, начинается путь в робототехнику “после Lego”. К счастью, сегодня можно без труда купить все необходимые компоненты и достаточно быстро создать своего первого робота для езды по линии или объезда препятствий. В этой статье вы найдете подробную видео инструкцию как сделать продвинутый автомобиль Arduino Car своими руками, с питанием, датчиками линии, расстояния и управлении через bluetooth.
Робот на ардуино своими руками
В отличие от других проектов, создание робота – автомобиля (Arduino Car) требует понимания и навыков работы сразу с несколькими важными компонентами, поэтому не стоит приступать к созданию машинок без получения базовых навыков работы с платформой Arduino. В любом случае, вам нужно будет но только подключить готовые модули, но и собрать конструкцию, шасси с двигателями, обеспечить правильное питание и управление. Все это потребует определенного терпения.
Робот машина на Ардуино
Вот список ключевых компонентов, которые обязательно встретятся в проекте.
Контроллер Ардуино
Куда уж без него, если мы говорим о проектах на этой платформе. Как правило, роботы машины делают на базе плат Arduino Uno и Nano. Mega будут слишком большие, Pro Mini сложнее подключать к компьютеру и соединять с остальными компонентами, а Leonardo требуют дополнительных навыков в программировании, они дороже и их основное преимущество (тесная интеграция с компьютером в качестве периферийного устройства) в данном случае не слишком востребована.
Есть еще вариант использования плат ESP8266 или ESP32, тогда в проекте появляется возможность управления машиной через WiFi. Но и сами платы и их программирование требует определенных навыков, в этой статье мы будем говорить преимущественно об Uno или Nano.
Конструкция, шасси и двигатели робота на Ардуино
Для того, чтобы что-то поехало или стало перемещаться, надо снабдить “это” колесами, гусеницами или манипуляторами-ногами. Вот тут выбор совершенно не ограничен, можно использовать совершенно любые комбинации и сочетания платформ. Как правило, в качестве начального варианта берутся уже готовые наборы платформ с Алиэкспресс.
Двигатель, шасси и колеса машинки на ардуино
Если работать со стандартными наборами вам не интересно, можно создать платформу своими руками. Например, разобрать игрушечные радиоуправляемые машинки или любые двигатели на 5-12 вольт, с редукторами или без. Колеса можно создать и самим, что тоже является интересной задачей.
Драйвер двигателей
Ардуино – достаточно ранимое устройство, не терпящее больших нагрузок по току. Соединяя его с “брутальными” мощными двигателями, не избежать беды. Поэтому для нормальной совместной работы нам нужно будет включить в схему робота компонент, отвечающий за управление двигателями – подающий и отключающий ток на их обмотки. Речь идет о микросхеме или готовом модуле, которые называют драйвером двигателя. На нашем сайте есть статьи, посвященные драйверам, построенным на схеме H-моста. Если вы покупаете готовые шасси, то обязательно предусмотрите возможность размещения на них подходящего драйвера.
Красивый корпус
Как правило, вся конструкция автомобиля строится вокруг его шасси. Если посмотреть примеры готовых проектов, то они часто выглядят как “провода на колесиках” – внешний вид их изобилует пучками соединительных проводов, ведущих от восседающего на троне контроллера Ардуино к драйверам, моторам и датчикам. Между тем, красивый и функциональный корпус не только вызывает правильные эстетические чувства и помогает выделить вашу модель от остальных. Хороший корпус может превратить игрушку в реальное устройство, помогает привить навыки конструирования и промышленного дизайна, что важно для инженеров любого возраста.
Питание робота
Обеспечение правильной схемы питания – это то, что очень часто оказывается на последнем месте в списке приоритетов начинающих ардуинщиков. Между тем, именно ошибки в схеме электропитания становятся основными причинами проблем, возникающих в процессе работы умных устройств на Ардуино. Создавая ардуино-машинку нужно предусмотреть питание контроллера, двигателей, драйвера и датчиков. У всех них есть свои ограничения и особенности работы, требуется создать оптимальное по весу и сложности решение, позволяющее учесть все эти ограничения.
Питание робота на Ардуино
Создавая по-настоящему автономное устройство робота, нужно побеспокоиться и о времени его работы, и о возможности быстрой подзарядки или смены батареек. Как правило, выбираются решения из следующих вариантов:
Каким бы ни был источник питания, нужно обеспечить его надежное крепление, удобное расположение, защиту от воздействия недружелюбной окружающей среды. Если вы подключаете к одному источнику и контролер, и двигатели, и датчики, то нужно позаботиться о правильной схеме, включающей, например, надежную связь “по земле” всех устройств.
Где купить платформу и запчасти
Все, о чем говорится в этой статье, можно без проблем купить на всем известном сайте. К сожалению, подавляющее большинство предложений основываются на стандартной платформе 4WD автомобиля с двумя несущими планками, не очень надежными двигателями и колесами, любящими ездить в “развалочку”. Но эти варианты относительно не дороги и вполне подойдут для начала работы.
Полноприводная машинка на основе Ардуино и RoboRoverM1
Проект полноприводной машинки на основе микроконтроллера Arduino Uno, сенсора HC-SR04 и на базе шасси RoboRoverM1.
Комплектующие
Для нашего транспорта понадобится приличное количество деталей. Полный список вы можете найти ниже.
Вам не нужно покупать перечисленные выше аппаратные компоненты, если вы будете использовать шасси RoboRover M1. Это шасси имеет все необходимые компоненты:
А драйвером двигателя является L298N с 4 двигателями (2 двигателя с каждой стороны, соединенные параллельно). Робот поворачивается как танк, меняя скорость вращения правого и левого колес.
И, конечно, из программного обеспечения нам нужна Arduino IDE для работы с нашим кодом.
Робота
Шасси
Очень простой проект, который демонстрирует основы сборки машинки/автомобиля Arduino. По этой причине мы используем шасси RoboRoverM1, но вы можете создать свой собственный автомобиль Arduino, используя свои комплектующие, так как важна идея. Для урока мы будем использовать свое собственное роботизированное шасси RoboRover M1, полноприводное шасси из пластика 4 мм.
Робот RoboRover M1 со всей установленной электроникой ниже. Также был сделан большой зеленый корпус для робота, чтобы защитить всю электронику внутри.
В собранном виде это выглядит таким образом.
Электроника
На фото ниже вы можете увидеть все датчики этого роботизированного автомобиля. Думаю, достаточно изучить основы роботизированного автомобильного движения:
Моторы
Чтобы заставить робота двигаться, нам нужны моторы, поэтому мы используем 4 желтых мотора DAGU 1:48 (передаточное число) 5V. Если вы делаете свою собственную машинку, вы можете использовать 2 мотора.
Для управления моторами мы используем моторный привод L298N, не самый лучший, потому что он использует много пинов ввода/вывода автомобиля Arduino, но это руководство для начинающих. Позже вы сможете обновить автомобиль с помощью I2C привода.
Питание машинки-робота
Чтобы позволить роботу двигаться, нам нужно использовать батарею. Рекомендуем использовать 7,4 В Li-Po 2S батарею, думаем, что это лучшее решение для такого типа робота. Не используйте батарейки типа АА или ААА, это плохой выбор.
Для Li-Po аккумулятора необходимо использовать специальное зарядное устройство и контроллер напряжения, но это того стоит.
Это зарядная станция, но вы можете найти разные модели. Самым дешевым является USB-зарядное устройство, но оно очень медленное.
Используйте небольшой тестер напряжения во время работы робота. Он покажет вам время, когда нужно начать заряжать аккумулятор. Эта мелочь поможет вам не разряжать батарею, потому что, если батарея Li-Po чрезмерно разряжена, она перестает правильно функционировать.
Подключение драйвера L298N
Припаиваем все двигатели через небольшой конденсатор и устанавливаем их.
Для правого двигателя один провод подключите к OUT3, а второй провод подключите к OUT4. Таким же образом подключите второй правый мотор.
Для левого двигателя один провод соединяется с OUT2, а второй провод соединяется с OUT1. Таким же образом подключите второй левый мотор.
Если вы сделали неправильное соединение, после загрузки программы тестирования, просто поменяйте провода так, как необходимо.
Сделайте такого рода разъем. Используйте двухпозиционный переключатель (для включения и выключения двигателей и сервопривода робота). Я думаю, вы знаете как паять. Красный разъем для батареи, проверьте, какой тип разъема установлен в вашей батарее. Рекомендуем использовать T-штекер.
Схема соединения источника питания.
Т-образный разъем. Слева разъем батареи (мама), справа (папа) разъем робота.
Не соединяйте Т-образные разъемы сейчас. Сделайте это после того, как все соединения завершены, на последнем шаге.
Затем установите всё на свой автомобиль. Если вы используете другое собственное шасси, монтаж шасси может быть другим.
Красный провод подключается к крайнему левому разъему + 12В 3-контактного разъема на драйвере L298N.
Два черных провода подключаются к среднему разъему GND 3-контактного разъема на L298N.
Затем возьмите 6 длинных проводов длиной 30-40 см и подключите их к контактам ENA, IN1, IN2, IN3, IN4, ENB на автомобильном приводе L298N.
Провод № 7 подключите к среднему разъему GND 3-контактного разъема на драйвере L298N (туда же, куда вы подключали предыдущие черные провода).
В конце концов, ваше соединение должно выглядеть так.
Если вы хотите использовать сервопривод в своем автомобиле-роботе, убедитесь, что он совместим с напряжением 7,4 В. Затем вы можете извлечь красный провод из разъема сервомеханизма и подключить провод к крайнему левому разъему + 12 В 3-контактного разъема на приводе L298N (там же, куда вы ранее подключали красный провод).
Сначала проверьте напряжение сервопривода! Если это не совместимо, просто подключите сервопривод к датчику шилда без каких-либо изменений. В моем случае сервопривод MG995R (MG995) совместим с 7,4 В, к сожалению, на фото мы забыли подключить сервопривод.
Подключение сенсорного шилда к Arduino Uno
Драйвер двигателя
Провод от автомобильного привода, который необходимо подключить к цифровым контактам на шилде:
Линейные датчики
Линейный датчик является цифровым, но мы можем использовать аналоговые входы Arduino Uno для считывания цифровых сигналов. Мы подключаем вывод GND датчика к выводу GND на экране, вывод VCC датчика к выводу VCC на шилде 5V.
Сигналы линейных датчиков мы подключаем к аналоговым контактам на шилде:
Инфракрасные датчики
Мы подключаем вывод GND датчика к выводу GND на шилде, вывод VCC датчика к выводу VCC на шилде 5V.
Сигналы инфракрасных датчиков мы подключаем к аналоговым контактам шилда:
Ультразвуковой датчик и сервопривод
Ультразвуковой датчик подключается к следующим контактам:
Другие контакты мы подключаем к цифровым входам шилда.
Сервопривод подключается к следующим контактам:
Сигнальный провод (желтый, белый или оранжевый) подключите к цифровому выводу D9.
Поздравляем! Ваш робот готов!
Вы можете подключить черный разъем к Arduino, чтобы включить его.
Подключите аккумулятор с помощью Т-образного разъема (или любого другого). Включите двигатели с помощью этого переключателя.
Код проекта
Целиком код и все библиотеки вы можете скачать ниже в ZIP-архивах. Также ниже даются некоторые объяснения по программе для робота-машинки Ардуино.
Установка библиотек
Были созданы библиотеки для этого робота, чтобы изучение программирования было легким и увлекательным. Сделаны свои пользовательские библиотеки для следующих модулей: сервопривод, драйвер, инфракрасный датчик расстояния, ультразвуковой датчик расстояния.
Всё это сделано для тех, кто не является экспертом Arduino. Вы можете смотреть комментарии в библиотеках, чтобы лучше понять, как они работают. Перед тем, как работать с кодом, установите все библиотеки. Вы можете установить их так же, как и все обычные библиотеки Arduino.
Примеры кода
Ниже приведены несколько примеров кода. Пожалуйста, внимательно читайте комментарии в коде.
Тест моторов
Сначала тестим ваши моторы, если они вращаются неправильно, просто поменяйте местами провода.
Загрузите программу, включите Arduino Uno и включите моторы, нажмите кнопку RESET на плате Arduino, чтобы запустить код с самого начала.
Тест инфракрасного датчики расстояния
Проверяем инфракрасные датчики, чтобы понять, правильно ли они работают. Вся информация пойдет на последовательный порт.
Загрузите программу и откройте последовательный порт в Arduino IDE, чтобы увидеть измерения расстояния.
Радар ультразвукового датчик расстояния
Этот код проверяет ультразвуковой датчик и проверяет вращение сервопривода. Это простой радар. Сервопривод вращается влево, вправо или в среднее положение, ультразвуковой датчик измеряет расстояние.
Загрузите программу, откройте последовательный порт в Arduino IDE, включите Arduino Uno и включите моторы, нажмите кнопку RESET на плате Arduino, чтобы запустить код с самого начала.
Тестируем линейные сенсоры
Уклонение робота от препятствий с помощью инфракрасных датчиков расстояния
Эта программа позволит роботу избегать препятствия с помощью инфракрасных датчиков расстояния.
Загрузите программу, включите Arduino Uno и включите моторы, нажмите кнопку RESET на плате Arduino, чтобы запустить код с самого начала. Робот начнет двигаться и избегать препятствий!
Движение робота по линии следования
Эта программа позволит роботу следить за линией, используя линейные датчики. Сделайте небольшой трек с черной линией.
Загрузите программу, включите Arduino Uno и включите моторы, нажмите кнопку RESET на плате Arduino, чтобы запустить код с самого начала. Робот начнет следовать за черной линией, если он обнаружен датчиками линии.
Машинка на Arduino, управляемая Android-устройством по Bluetooth, — полный цикл (часть 1)
Введение
Подробная история того, как из трех двигателей была собрана машина на Arduino, управляемая Android-устройством по Bluetooth. В нескольких десятках абзацев постараюсь максимально пошагово изложить, куда подключить каждый из проводов, как написать фирменное приложение и на каких детских граблях пришлось попрыгать больше недели.
Немного об уровне, авторе и предостережения
Я, автор, пацан 16-17 лет с подмосковной деревни, специализируюсь на написании android-приложений (а там сложнее что-то сжечь), поэтому ответственность за оптимальный подход к решению задач с себя снимаю.
Практически каждый из нижеописанных этапов занимал у меня больше, чем стоило бы, времени. Наверно, именно по этой причине хочу поделиться опытом. И при этом буду очень рад, если поругаете за ошибки и подскажите за оптимизацию.
Задача
Понадобится
Основа конструкции
За основу была взята машина Lego Outdoor Challenger (в реальности выглядит менее пафосно). Все, что от нее осталось: корпус (все элементы украшения сняты) и три двигателя.
У машинки была своя плата, но одна из задач подразумевала универсальность: это сделал я, это смогут повторить другие. Мозги вынул, поставил Arduino Uno.
Установка Arduino
Создатели почему-то не предусмотрели места для Arduino, потому крепил на шурупы, просверлив пластик. Под плату подложил фанеру, чтобы ничего не закоротило. Под шурупы лучше подсунуть что-то пластиковое (кусочек бутылки), ибо плата от железный болтов не защищена.
Поверх платы сразу поставил две motor shiled, так надо. Чтобы управлять второй, придется прокинуть один провод с любого digital порта на H1 (направление) и второй с пина с поддержкой шима (помечены знаком «
», обычно 10, 11) на E1 (скорость).
Определение угла поворота
За поворот машинки отвечает на удивление не сервопривод, а обычный двигатель. Встает проблема: хорошо бы было его не сжечь, ведь угол поворота ограничен, а крутиться двигатель может сколько угодно.
Вариант с методом тыка отпадает, так как при разном уровне батареи количество тока, подаваемое на двигатель, будет изменяться, что приведет к постоянно меняющемуся углу. Крутить до упора тоже нельзя, рано или поздно рассыплются шестеренки.
Решение проблемы: отслеживать угол через замыкание. На фото продемонстрирована небольшая штучка, которая крепится недалеко от поворотного механизма. На часть, которая крутится вместе с колесами влево/вправо двигателем, прикрепляется гребешок с железными контактами.
Принцип работы: к каждой линии припаивается провод (всего их четыре), нижний подключается к плюсу (он зажат гребешком всегда, см. картинку), остальные провода уходят на минус. Когда зубик гребешка попадает и на нижний ряд, и на, допустим, третий, происходит замыкание, ток течет, это замечает Arduino.
Благодаря различным комбинациям трех полос, можно определить до семи углов. Например, когда ток есть на всех линиях, колеса повернуты в крайнее правое положение, когда ток есть только на верхней, колеса повернуты максимально влево. В таблице предоставлены все варианты.
Подключение угла и код
Для каждого уровня был выбран свой цвет: нижний – зеленый, первый снизу – красный, второй – черный, третий – белый. На начальном этапе использовались breadboard и светодиоды для визуальной отладки.
Схема подключения показана на рисунке. Плюс тянем к зеленому, остальные протягиваем к минусу. Через резистор, установленный для устранения помех и отсутствия КЗ, подключаем провода к выходам A0-A2. Выбраны они просто из экономии остальных портов.
Код дан с комментариями. Подключаем пины и опрашиваем их через digitarRead(). Если напряжение есть, вернется значение true. Далее смотрим, если результат означает, что колеса в крайних положениях, запрещаем дальнейший поворот в эту сторону.
Небольшая хитрость: поскольку выходы на 5В и 3.3В понадобятся в будущем, можно поставить плюс на один из digital-пинов. Перед каждой проверкой угла выдавать ток через digitalWrite(whitePin), потом проверять угол и убирать ток.
Распараллеливание ходовых колес
Изначально два ходовых двигателя соединены вместе. Их рассоединил по двум причинам: поворот эффективней, если колеса крутятся в разные стороны, и два мощных двигателя одна плата не вытянет.
Проблема: у motor shield два выхода, каждый из которых выдает до 2 ампер. Каждый двигатель ест по 0,7А. Вроде меньше, но не при максимальных нагрузках. Допустим, машинка застряла в песке или уперлась, ток возрастает выше ампера. Не критично, но потенциально опасно.
А вот критичным оказалось то, что плата греется. Через минуты полторы после заезда, motor shield нагревалась и начинала работать безобразно: токи подаются не те, колеса не крутятся и прочее.
Решение обоих проблем: один двигатель подключил к одной motor shield, второй – к другой. Как ни странно, помогло. Температура упала, перегрев отсутствует. Можно было поставить радиатор, но крепить тяжело.
Подключение Bluetooth
Я использовал модель HC-05, что сыграло роковую шутку. Подключаются все блютузы одинаково: один провод на 3.3В (иногда начинал работать только от 5В), второй на минус, еще два на порт 0 и 1 (чтение и отправка соответственно). Провод, подписанный RXD на bluetooth, втыкается в TXD ардуино, а TXD в RXD (если перепутаете, то данных не увидите).
Есть оговорка: порты 0 и 1 по умолчанию используются Serial, через который заливает скетч. То есть, пока воткнут блютуз, скетч не зальется. Есть два выхода: вынимать блютуз на время заливки или переназначить входы и выходы блютуза. Второй вариант осуществляется двумя строчками
Подводный камень, съевший у меня трое суток работы – скорость общения. По привычке установил 9600 и пошел пробовать. То данные не приходили, то была каша символов. И в конце концов ответ – модель HC-05 общается на 38400! Очень сильно обратите внимание на то, что в Setup() я выполню BTSerial.begin(39400), хотя Serial.begin(9600).
Система отправки команд
Статья становится слишком длинной, поэтому рассмотрение кода Arduino и Android вынесу в отдельную вторую часть, а сейчас опишу принцип.
После установки сокета данные отправляются в следующем формате: @скорость#*угол#. @ — говорит о том, что следующие цифры содержат скорость, # — извещает об окончании значения скорости, * — начало значения угла, # — закончить запись угла. Цикл бесконечен, команды отправляются каждые 100 миллисекунд (цифра подобрана оптимальная). Если ничего не нажато на андроиде, то ничего и не отправляется.
Алгоритм приема данных подробно описан в коде скетча. Он не раз переписывался и, как по мне, работает идеально.
Заключение первой части
В этой статье я попытался раскрыть все, что касается физической части машинки. Вероятнее всего, что-то упустил, так что обязательно спрашивайте.
Но самое интересное, как по мне, осталось на второе – программа Arduino и приложение на Android, там творится настоящая магия, по крайней мере, для молодого меня.