Arduino машинку собрать своими руками достаточно просто и в интернете есть много примеров с исходными материалами и с инструкций по сборке. Я также собирал машинку с радио управлением на Arduino. Подробнее читайте тут.
Сегодня речь пойдет про Arduino машину, которую просто собрать при относительно небольшой стоимости комплектующих. Для управления будем использовать ни bluetooth и ни Wi-Fi, а обычную проводную связь. В качестве пульта будет выступать джойстик. Давайте рассмотрим подробнее этапы сборки и программирования машинки на Arduino.
Машинку можно собрать на базе «робоплатформы на ардуино», которую можно купить тут. Или самостоятельно напечатать на 3D принтере раму. Исходные материалы вы можете скачать внизу статьи в разделе «Файлы для скачивания».
В связи с тем, что робоплатформу использовал уже в предыдущем проекте. А часть схемы оставили без изменения. Поэтому останавливаться на описании не буду. Вы можете купить готовую робоплатформу, чтобы не думать о том, как её сделать или собрать. В данном разделе статьи рассмотрим схему питания и драйвер l298n.
Драйвер L298N используется для управления двигателями постоянного тока. Схема модуля, состоящая из двух H-мостов, позволяет подключать к нему два щёточных двигателя постоянного тока. При этом есть возможность изменять скорость и направление вращения моторов.
В связи с тем, что на борту драйвера есть стабилизатор на 5 В. Записать Arduino UNO можно от драйвера.
Также нам понадобиться подключить джойстик по схеме, которую рассмотрим ниже. Провода сделал самодельные. Если у вас нет Dupont разъёмов, можно провода припаять к джойстику и Arduino.
Всю электронику робо машины на Ардуино подключаем по следующей схеме. Красным с пунктиром, который отмечен проводник, подключает питание драйвера L298n от аккумулятора 18650. Красным проводником обозначено питание 5В.
У драйвера убираем перемычки, что позволяет плавно регулировать скорость вращения и подключаем 6 проводов управления драйвером L298n к Arduino. Но в связи с тем, что ход перемещения джойстика не большой, плавное регулирование скорости практически не заметно. Поэтому подключить можно и по 4 провода и использовать другие драйвера, например L9110S.
Для управления подключаем джойстик по 4 проводам. Пятый контакт на джойстике нужен для получения сигнала нажатия на джойстик. Данную функцию использовать не будем. Поэтому достаточно 4 провода для подключения.
Если вы раньше не работали с Arduino, рекомендую прочитать статьи:
А также ознакомиться с уроками для начинающих.
В связи с тем, что машинка делалась по принципу как можно проще. Код также получился небольшой и простой. При желании его можно изменить или дополнить. Например, убрать изменение скорости вращения двигателя. Оставить просто включение или выключение вращение двигателя в нужном направлении.
Первым делом в скетче управления машинкой на Arduino инициализируем пины подключения джойстика. Подключаем к 2 аналоговым входам A0, A1.
#define pinX A0 // Горизонтальное положение джойстика (аналоговый пин) #define pinY A1 // Вертикальное положение джойстика (аналоговый пин)
Затем инициализируем пины подключения драйвера L298n. Можно подключить и к другим драйверам по 4 проводам. В таком случае не нужно подключаться к выводам ENA и ENB, вернув перемычки на место. При таком подключении не будет плавного изменения скорости вращения двигателя.
int ENA = 9; // Включение 1 движка (цифровой пин ШИМ) int in1 = 7;// Поворот 1 движка (цифровой пин) int in2 = 8; // Поворот 1 движка (цифровой пин) int ENB = 10; // Включение 2 движка (цифровой пин ШИМ) int in3 = 5; // Поворот 2 движка (цифровой пин) int in4 = 6;// Поворот 2 движка (цифровой пин)
Затем добавим 4 переменные необходимые для определения центрального положения джойстика для авто калибровки и выделения зоны чувствительности джойстика.
int x_min; //нижняя граница нейтрали по оси x int x_max; //верхняя граница нейтрали по оси x int y_min; //нижняя граница нейтрали по оси y int y_max; //верхняя граница нейтрали по оси y
В блоке setup() инициализируем пины подключения драйвера как выход.
int x_min; //нижняя граница нейтрали по оси x int x_max; //верхняя граница нейтрали по оси x int y_min; //нижняя граница нейтрали по оси y int y_max; //верхняя граница нейтрали по оси y
Затем считываем значения с джойстикаи сохраняем в созданные ранее переменные с увеличением и уменьшением полученного значения на 30. Тем самым определим рабочие зоны для каждой оси.
int x = analogRead(pinX); int y = analogRead(pinY); x_min = x - 30; x_max = x + 30; y_min = y - 30; y_max = y + 30;
Также необходимо создать небольшую функцию Motor(), которая позволит управлять двумя моторами постоянного тока.
void Motor(byte enb, bool n1,bool n2, bool n3, bool n4) { analogWrite(ENA, enb); digitalWrite(in1, n1); digitalWrite(in2, n2); analogWrite(ENB, enb); digitalWrite(in3, n3); digitalWrite(in4, n4); }
В основном цикле loop() считываем положение джойстика и определяем ШИМ сигнал, приводим полученное значению к диапазону от 0 до 255. Что позволяет плавно изменить скорость двигателей.
int x = analogRead(pinX); // считываем положение джойстика int y = analogRead(pinY); if (y < y_min ) { int sh = map(y, y_min, 0, 0, 255); Motor(sh, HIGH, LOW, HIGH, LOW); } else if (y > y_max ) { int sh = map(y, y_max, 1024, 0, 255); Motor(sh, LOW, HIGH, LOW, HIGH); }
В зависимости от положения джойстика по оси Y двигателя вращаются вперёд или назад.
При изменение положения по оси X вращаем двигатели на встречу друг другу, что позволяет производить поворот машины на Arduino влево и вправо.
else if (x < x_min ) { int sh = map(x, x_min, 0, 0, 255); Motor(sh, HIGH, LOW, LOW, HIGH); } else if (x > x_max ) { int sh = map(x, x_max, 1024, 0, 255); Motor(sh, LOW, HIGH, HIGH, LOW); }
Внимание! Если у вас машина поворачивает не в том направлении, переверните провода подключения одного из моторов. Если стало работать, но в зеркальном отражении переверните у обоих двигателей провода.
И последние строки кода отключают двигатели машинки при расположении джойстика в центральном положении.
else { Motor(0, LOW, LOW, LOW, LOW); }
Скетч прост и его можно доработать или дополнить по вашему желанию.
В связи с тем, что машинка планировалась как бюджетная модель с минимальными возможностями и простотой схемой подключении, которую можно легко повторить. Это привело к ряду минусов:
Но благодаря этому есть и преимущества которые оценят новички впервые решившие сделать машинку на Arduino:
Если вас интересуют более сложные реализации машин на радиоуправлении или беспроводном управлении, смотрите предыдущие проекты:
Понравился проект Arduino машинка своими руками. Управление с помощью джойстика? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
![]() |
Робоплатформы на ардуино файлы для печати на 3d принтере.zip | 590 Kb | 1056 | Скачать |
![]() |
Код Arduino машинки.ino | 2 Kb | 1559 | Скачать |
Вот бы мне в детстве такую машину. Эх не было ни чего подобного. как все развивается. сейчас каждый может собрать себе дома мини робота.
Arduino проекты
4 августа , 2021
Комментариев:1
Файлов для скачивания:2
Фото:7
Понравилась статья? Нажми
Виджеты для Easy HMI
Читайте также
Мы в соц сетях
Комментарии