Arduino + 2 серводвигателя + джойстик для управления

В проекте реализовано управление двумя серводвигателями с использованием джойстика и Arduino.

Управление джойстиком очень удобное и интуитивно понятное. Особенно для подобных проектов с двумя степенями свободы. Более детально с особенностями настройки и управлением джойстиком вы можете в соответствующей статье на Arduino-diy.com.

Необходимые материалы

  • Плата Arduino (в данным случае используется Arduino Uno Rev 3).
  • 2 сервы Parallax.
  • Джойстик - тоже от Parallax.
  • Маленькая монтажная плата.
  • Коннекторы для подключения.
  • Что-то для отслеживания перемещений серводвигателей (например, здесь используются поломанная веб-камера и кубики от лего. Детально в статье эти узлы не рассматриваются, но на фото видно).

Проект в собранном виде показан на рисунке ниже:

Cерводвигатели с управлением от джойстика

Подключаем серводвигатели

Начнем с подключения двух серводвигателей (для предварительного макета используется монтажная плата. В последствии можно сваять отдельный шилд).

На рисунке ниже представлена исчерпывающая информация про подключение.

Подключение серводвигателей к Arduino

Красный кабель двигателей (питание) - к пину 5V на Arduino

Черный кабель двигателей (земля) - к пину GND на Arduino

Желтый кабель от двигателя Right & Left (на некоторых моделях он белого цвета) - к пину 11.

Желтый кабель от двигателя Up & Down (на некоторых моделях он белого цвета) - к пину 4.

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

Подключаем джойстик

Представленная на рисунке ниже схема подключения может вас немного смутить. Но поверьте, все не так сложно как кажется на первый взгляд. Опять таки для подключения используем монтажную плату.

Подключение джойстика к Arduino

1. На модуле джойстика один выход U/R+ и один L/R+. Это выходы для подключения питания. Эти выходы подключаются к пину 5V на Arduino.

2. Также есть два разъема L/R и два разъема U/D. Они подключаются к аналоговым входам А3 и А4.

3. Земля на джойстике подключается к земле на Arduino.

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

Скетч для Arduino

Основные пояснения к скетчу приведены в комментариях. Приведенный ниже код достаточно скопировать и вставить в Arduino IDE. После загрузки скетча на плату, сервопривода не должны двигаться, пока вы не используете джойстик.

#include <Servo.h>

const int servo1 = 3; // первая серва

const int servo2 = 10; // вторая серва

const int joyH = 3; // выход L/R джойстика Parallax

const int joyV = 4; // выход U/D джойстика Parallax

int servoVal; // переменная для хранения данных с аналогового пина

Servo myservo1; // создаем объект Servo для управления первой сервой

Servo myservo2; // создаем объект Servo для управления второй сервой

void setup() {

// Servo

myservo1.attach(servo1); // подключаем серву

myservo2.attach(servo2); // подключаем серву

// Инициализация серийного протокола связи

Serial.begin(9600);

}

void loop(){

// отображаем значения с джойстика с использованием серийного монитора

outputJoystick();

// считываем значение с джойстика по горизонтали (значение между 0 и 1023)

servoVal = analogRead(joyH);

servoVal = map(servoVal, 0, 1023, 0, 180); // масштабируем полученное значение для использования с серводвигателем (результат возвращается в диапазоне от 0 до 180)

myservo2.write(servoVal); // выводим ротор сервы в положение в соответствии с полученным масштабированным значением

// считываем значение джойстика вдоль вертикальной оси (значение от 0 до 1023)

servoVal = analogRead(joyV);

servoVal = map(servoVal, 0, 1023, 70, 180); //масштабируем полученное значение для использования с сервой (диапазон: от 70 до 180)

myservo1.write(servoVal); // выводим ротор второй сервы в соответствии с полученным масштабированным значением

delay(15); // ждем, пока серва обеспечит заданное положение

}

/**

* отображаем значения джойстика

*/

void outputJoystick(){

Serial.print(analogRead(joyH));

Serial.print ("---");

Serial.print(analogRead(joyV));

Serial.println ("----------------");

}

Результат представлен на видео ниже:

Возможные проблемы и их решение

1. Сервы не двигаются.

Проверьте подключение. Не забывайте, что для подключения серв используются ШИМ выходы, а для джойстика - аналоговые.

2. После загрузки скетча на Arduino, сервы начинают вибрировать.

Скорее всего, неправильно подключены пины U/D+ L/R+. Очень внимательно проверьте подключение. Перед проверкой контактов и подключения, обязательно отключите Arduino от персонального компьютера, чтобы случайно не спалить привода или плату.

3. Я внимательно проверил подключение, но серводвигатели все равно не двигаются.

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

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!