В этом проекте мы с помощью джойстика будем управлять лазерной указкой. В проекте используются два сервопривода, аналоговый пятиконтактный двухосный джойстик и корпус с поворотным устройством для наведения лазера.
Нам понадобится
- Плата Arduino Uno
- Макетная плата
- Перемычки
- 2 сервопривод Tower Pro9g SG90
- Аналоговый пятиконтактный двухосный джойстик
- Корпус с поворотным устройством
Требуемые библиотеки
- Servo

Принцип работы
Сервоприводы — это небольшие моторы, которые могут точно поворачивать свои рычаги в любое положение в диапазоне от 0 до 180 градусов. В этом проекте мы поместим сервоприводы в корпус с поворотным устройством (так называемый pan-and-tilt), который имеет две оси вращения. Такой корпус оправдывает затраты на него, так как значительно упрощает присоединение лазера к сервоприводу. В этом проекте используется лазерная указка, но вы можете легко сменить ее на веб-камеру или другое небольшое устройство. В цепи используются два сервопривода: один для движения влево и вправо, а другой для движения вверх и вниз. Как вы, возможно, помните, от сервопривода идут три провода; все они показаны на рис. 10.1: положительный питания (красный), отрицательный питания или заземления (черный или коричневый) и для передачи сигнала управления (обычно желтый, оранжевый или белый)

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

Потенциометры представляют собой переменные резисторы — своего рода датчики, выдающие напряжение в зависимости от поворота устройства вокруг своей оси. По мере перемещения джойстика вокруг своего центра его сопротивление — и, следовательно, вывод — изменяется. Выходы потенциометров являются аналоговыми, поэтому могут передавать значение только в диапазоне от 0 до 1023 при считывании аналоговым контактом платы Arduino. В соответствии с полученным значением на Arduino передается импульс, который, в свою очередь, определяет движение сервоприводов. (Более подробная информация о потенциометрах приведена в Проекте 2.)
Обычно джойстик имеет пять штырьковых контактов: VRx (сигнал по оси х), VRy (сигнал по оси у), SW (кнопка, которую мы не будем использовать в этом проекте), GND (заземление) и 5V (питание).
Когда джойстик перемещается влево или вправо (по оси х), соответствующий сервопривод перемещается в этом направлении; когда джойстик перемещается вверх или вниз (по оси у), другой сервопривод перемещается вверх или вниз.
Сборка
1. Подключите оба красных провода сервоприводов к шине 5V, а коричневые провода — к шине заземления макетной платы.
2. Подключите желтый провод сигнала управления одного из сервоприводов напрямую к контакту 9 платы Arduino, а второго — к контакту 10 платы Arduino, как показано на схеме на рис. 10.4

3. Подключите штырь GND модуля джойстика к шине заземления макетной платы, штырь 5V — к шине питания макетной платы. Подключите штырь VRx напрямую к контакту АО платы Arduino, a VRy — к контакту А1. Напомню, что штырь SW модуля джойстика в этом проекте не используется.

4. Подключите шины макетной платы к соответствующим контактам платы Arduino — GND и 5V. Затем убедитесь, что ваша цепь соответствует схеме, показанной на рис. 10.3. Загрузите в память Arduino код скетча, приведенный в разделе «Скетч» далее.

Установка лазера
В этом проекте мы поместили сервоприводы в корпус с поворотным устройством, имеющим две оси. Вы можете найти такой или аналогичный корпус за вменяемую цену на сайте типа Aliexpress, выполнив поиск "сервопривод Arduino pan and tilt kit". Возможно, вам придется собрать такой корпус самостоятельно, но если следовать инструкции, то это довольно просто.
Прикрепите лазерную указку к верхней части модуля; мы рекомендуем воспользоваться клеевым пистолетом для постоянного крепления, но вы можете использовать скотч, если планируете разобрать устройство в будущем. Теперь вы можете управлять лазером с помощью джойстика. Сервоприводы зафиксированы в корпусе с поворотным устройством, как показано на рис 10.4

Перемещение джойстика влево/вправо приведет к подаче питания на сервопривод оси х, а перемещение вверх/вниз — к подаче питания на сервопривод оси у. Общий вид конструкции показан на рис. 10.5.

Скетч
Сначала в скетче вызывается библиотека Servo, а затем определяются два сервопривода для наклона и поворота с именами tilt и pan соответственно. Штырь оси джойстика соединен с контактом А0 платы Arduino, а оси у — с контактом А1; они обеспечивают входные данные. Затем эти данные присваиваются в виде значений переменным движения по осям х и у. Сервопривод tilt подключен к контакту 9 платы Arduino, а сервопривод pan — к контакту 10. Оба контакта работают в режиме вывода. В процессе работы плата Arduino считывает поступающие от джойстика данные и передает полученные напряжения на выводы, заставляя сервоприводы двигаться в соответствии с заданным направлением.
#include <Servo.h>Servo tilt, pan; // Создание объекта servo int joyX = A0; // Аналоговый контакт, к которому подключен штырь VRx джойстика int joyY = A1; // Аналоговый контакт, к которому подключен штырь VRy джойстика int x, y; // Переменные для считываемых значений void setup(){ tilt.attach(9); // Подключение сервопривода tilt (наклона), подключенного к контакту 9, к объекту servo pan.attach(10); // Подключение сервопривода pan (поворота), подключенного к контакту 10, к объекту servo } void loop() { x = joyX;// Чтение значений перемещения по оси х (от 0 до 1023) y = joyY;// Чтение значений перемещения по оси у (от 0 до 1023) x = map(analogRead(joyX), 0, 1023, 900, 2100); //Шкалирование значений для применения к сервоприводам в виде значения в диапазоне от 900 до 2100 мкс y = map(analogRead(joyY), 0, 1023, 900, 2100); tilt.write(x); // Установка сервопривода в позицию, соответствующую шкалированному значению pan.write(y); delay(15); // Ожидание, пока сервоприводы занимают новое положение }
Теги: