- Платы Ардуино
- Обучение Ардуино
- Мой блог
- Уроки
- Урок № 1 "Пишем свой первый скетч"
- Урок № 2 "Подключение фоторезистора"
- Урок № 3 "Подключение пищалки(BUZZER)
- Урок № 7 "Модуль часов RTC DS3231"
- Урок № 8 - "Шаговый двигатель 28BYJ-48"
- Урок № 10 - "ИК пульт на Ардуино"
- Урок № 11- "Сканер отпечатка пальца"
- Урок № 12- "Датчик наклона SW-200D"
- Урок № 13- "Гирлянда светодиодная WS2812b"
- Книги
- Мой YOUTUBE
Подключение джойстика к Arduino Управление сервоприводами.
Подключение джойстика к Arduino Управление сервоприводами.
В видео рассказано как подключить джойстик к Ардуино и управлять движением 2-х сервомоторов. Управление сервомоторами будет по двум осям. По горизонтали и по вертикали. Управление джойстиком самый удобный способ управлять серво приводом. Подключение джойстика к arduino к аналоговым входам даёт интервал в 1024 градации, которые можно перевести в 180 градусов.
Сегодня мой рассказ будет как подключить модуль джойстика к Ардуино.
Этот пример можно использовать для поворотной панели, на которую можно установить камеру или лазер. В этом случае получится лазерный прицел. Так же можно управлять движением робота или машины и многое другое.
В одном из следующих видео я покажу как добавить в этот пример модули NRF24 и управлять устройствами удалённо, без проводов. Если вы не знаете что это за модули, то можете посмотреть примеры использования такого модуля.
В видео будет представлено 2 примера.
Первый это просто движение сервомоторов вверх и вниз и вправо и влево. Движение будет пока ручка джойстика отклонена от центральной точки. После того как отпустили джойстик сервомоторы вернутся в изначальное положение. Движение возможно по двум осям. Горизонтальной и вертикальной.
Второй пример – это движение с памятью. По окончании движения положение сервомотора будет запоминаться, сохраняться в переменную, а после того как отпустили ручку управления джойстика сервомотор останется в той точке где он прекратил движение. Если снова переместить джойстик, то положение мотора продолжится из последней точки.
Этот пример мы более подробно рассмотрим дальше в видео.
А ещё на джойстике есть кнопка. Я буду использовать её для зажигания светодиода, ну а вы можете придумать что-то более полезное. Главное что в скетче уже есть код управления кнопкой, а что включать изменяется всего одной строчкой кода.
Теперь давайте рассмотрим сам модуль джойстика.
Устройство джойстика.
Из модуля выходят 5 проводов.
- Два из которых питание. Джойстик работает от 5 вольт.
- Ещё два — это оси x и y. Эти контакты подключаются к аналоговым входам и имеют значение от 0 до 1023. Средняя точка установлена на заводе и имеет значение примерно 510. Правда имеется небольшой разброс. Поэтому лучше сначала проверить какое значение по центру.
- И последний вывод это кнопка. В игрушках её можно использовать для выстрела, а при работе с фотокамерой можно сделать нажатие на спуск фотоаппарата.
Давайте посмотрим схему подключения.
- Землю джойстика подключаем к земле, а питание подключаем к выходу +5 вольт Ардуино.
- Ось X подключаем к аналоговому входу А1, а Ось Y подключаем к аналоговому входу А2.
- Кнопку подключаем к цифровому входу D4.
Сервомоторы желательно питать от отдельного источника напряжения +5 вольт. Земли обоих источников должны быть соединены вместе.
Нижняя серва которая отвечает за движение по оси Х подключается к цифровому выходу D2, а верхняя которая движется вверх и вниз подключаем к цифровому выходу D3.
Светодиод в примере используется параллельно тому, что распаян на плате, то есть на цифровом выходе D13.
Вот и вся схема. Она довольно простая.
Конструкцию поворотного механизма можно купить, можно сделать на 3д принтере, а можно просто разместить друг на друге. Получится не очень красиво, зато бесплатно и просто. И можно сделать буквально за 5 минут.
Теперь давайте подробнее посмотрим как это всё работает.
Начнём с определения координат центральной точки. Для этого запускаем скетч Joystick_Servo. Подробно как и что, я расскажу дальше. Здесь нас всего лишь интересуют вот эти строчки. Чтобы он не мельтишили я вставил паузу в полсекунды.
Как видите при центральном положении джойстика мы получаем координаты по оси х 91 градус, а по осу Y 87 градусов. Это нам пригодиться в следующем примере. Теперь отклоним ручку сервера по оси y до конца и получим 179 градусов, теперь в другую сторону и получим 0. Тоже самое проделаем с осью х.
Теперь загружаем следующий скетч и остановимся на нём более подробно.
В начале нам надо подключить библиотеку Servo. Думаю, что с этим проблем быть не должно. Создаём 2 класса для двух сервомоторов. Это классы MyServo1 и MyServo2.
Переменные a и b нужны для хранения текущего положения по осям x и y сервомоторов.
Переменным X и Y будут присвоены считанные значения с джойстика и переведённые в градусы. Это будут значения от 0 до 180 градусов.
Здесь указываем к каким контактам будет подключен джойстик, кнопка и в моём случае светодиод.
Переменная флаг нужна для работы с кнопкой на модуле.
В setup указываем, что все контакты работают как входы. Кнопка подключена с внутренней подтяжкой, чтобы не устанавливать дополнительный резистор. Светодиод как выход.
В цикле loop мы постоянно считываем текущее положение с обоих сервомоторов и присваиваем их переменным a и b. А здесь мы принимаем положение ручки джойстика. Так как джойстик подключён к аналоговому входу, то он может иметь значение от 0 до 1023.
Функция map преобразует их в интервал от 0 до 180. Так мы получаем градусы. Например для сервомотора по оси Y можно уменьшить этот интервал и сделать от 45 до 135 этим мы уменьшим повороты мотора.
Рассмотрим ось X. В начале мы определили, что при центральном положении джойстика оно было равно 91. Делаем небольшой зазор. Если его не сделать, или он будет маленьким, то у вас при включении джойстик будет двигаться непрерывно в какую-нибудь сторону. Так, что этот интервал придётся подобрать самостоятельно.
Теперь если положение выше центрального, то уменьшаем его с шагом 1, а если ниже, то увеличиваем.
Отправляем значение на сервомотор и он перемещает свой вал в эту позицию. Это небольшая пауза, что бы мотор успел переместиться. Чем меньше это значение, тем быстрее и более плавно будет двигаться мотор, но тяжелее остановить в определённом месте. Он будет его проскакивать.
Ось Y мы рассматривать не будем, здесь всё тоже самое что и по оси х. Единственное что центр у нас был в позиции 87.
Теперь остался кусок кода отвечающий за нажатие кнопки.
Здесь тоже ничего сложного. Если кнопка нажата и флаг равен 0, то включаем светодиод, ну или то что вы сами захотите сюда вставить. Изменяем флаг на 1 и делаем задержку в полсекунды, чтобы увидеть, что светодиод загорелся. Затем выключаем гасим светодиод.
Это условие будет верно если кнопка не нажата и флаг равен 1, то меняем значение флага на 0.
И теперь если снова нажать на кнопку то первое условие будет верно и светодиод опять загорится.
Ну я думаю, что всё понятно объяснил. Если нет, то спрашивайте. По возможности отвечу.