СОДЕРЖАНИЕ ►
Как подключить к Ардуино сервопривод с джойстиком и написать программу для управления сервоприводом джойстиком от Arduino Uno рассмотрим в этом обзоре. Мы уже рассказывали, как управлять светодиодами с помощью модуля джойстика ky-023 и в данном примере скетч для микроконтроллера будет практически таким же, за одним небольшим исключением. А что изменилось в программе — читайте далее.
Управление сервоприводом джойстиком Ардуино
Для того, чтобы сделать управление сервомотора с помощью джойстика, необходимо первым делом подключить к аналоговым входам платы Arduino модуль ky-023. Это необходимо, чтобы АЦП микроконтроллера получало данные о положении джойстика по координатам X и Y в режиме реального времени. Затем, с помощью строчек кода, эти данные мы преобразуем в соответствующее положение микро сервопривода.
Джойстик представляет собой два потенциометра, которые меняют сопротивление в электрической цепи при изменении положения ручки. Поэтому на аналоговых входах Ардуино, куда мы подключим джойстик, будут цифровые значения от 0 до 1023, т.е. АЦП микроконтроллера преобразует значения напряжения от 0 до 5 Вольт в цифровые значения. Именно эти значения мы будем использовать для управления серво.
Как подключить к Ардуино серво с джойстиком
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- микро сервопривод;
- джойстик ky-023;
- провода «папа-папа», «папа-мама».

Подключите к плате Ардуино сервомотор и джойстик, согласно схеме, изображенной на картинке выше. И загрузите следующий скетч в микроконтроллер, позволяющий сделать плавное управление сервоприводом с помощью джойстика на Ардуино. В программе мы используем функцию map(), которая преобразует числовой диапазон значений 0-1023, в новый диапазон чисел 0-180 (угол поворота серво).
Скетч. Управление сервоприводом с помощью джойстика
#define pinX A1 // ось X джойстика #include <Servo.h> // подключаем библиотеку для серво Servo servo1; // объявляем объект servo1 void setup() { pinMode(pinX, INPUT); // указываем пин для джойстика servo1.attach(9); // указываем пин для микро серво } void loop() { int X = analogRead(pinX); // считываем значение оси X X = map(X, 0, 1023, 0, 180); // переводим значение X в новый диапазон servo1.write(X); // поворачиваем серво от джойстика }
Пояснения к коду:
- с помощью map() можно задать любой диапазон чисел, в том числе обратный;
- обратите внимание, что у разных производителей распиновка джойстика может отличаться, от представленной выше схемы подключения модуля к плате.

Скетч. Управление двумя серво с помощью джойстика
#define pinX A1 // ось X джойстика #define pinY A0 // ось Y джойстика #include <Servo.h> // подключаем библиотеку для серво Servo servo1; // объявляем объект servo1 Servo servo2; // объявляем объект servo2 void setup() { pinMode(pinX, INPUT); // указываем пин для джойстика pinMode(pinY, INPUT); // указываем пин для джойстика servo1.attach(9); // указываем пин для первого серво servo2.attach(11); // указываем пин для второго серво } void loop() { int X = analogRead(pinX); // считываем значение оси X int Y = analogRead(pinY); // считываем значение оси Y X = map(X, 0, 1023, 0, 180); // переводим значение X в новый диапазон Y = map(Y, 0, 1023, 0, 180); // переводим значение Y в новый диапазон servo1.write(X); // поворачиваем первый серво servo2.write(Y); // поворачиваем второй серво }
Пояснения к коду:
- в данной программе мы лишь добавили новую локальную переменную
int Y;для значений оси Y джойстика, чтобы управлять вторым серво.
Заключение. Таким образом, мы подробно рассмотрели, как используется Ардуино джойстик в управлении одним и двумя сервоприводами. Полученную информацию вы можете использовать для создания простых мини роботов на Arduino или машинок с дистанционным управлением от джойстика. Если у вас остались еще вопросы по рассмотренной теме — вы можете оставить их в комментариях под этой записью.










а как подключить всё это к ардуино без макетной платы?
и ещё, как называются разъемы для перемычек в виде прямоугольника?
С помощью коннекторов «папа-мама»
Проверьте распиновку джойстика. На диаграмме у вас подразумевается +,X,Y,SW,GND. А, например, в моем джойстике и у вас на самом первом изображении (под заголовком) — распиновка другая: GND, +, X, Y, SW.
как подключать провода, которые стыкуются на схеме?
Используйте макетную плату
после поворота джойстика сервопривод поворачивается но повернуть несколько раз тогда контрольный светодиод на плате мигнет несколько раз быстро и погаснет и тогда сервопривод перестанет отвечать на движения джойстика через секунду тот же светодиод снова мигнет и загорится и все заработает и так постоянно
По описанию похоже на то, что не хватает питания для серво и Ардуино перезагружается. Используйте отдельный источник питания для серво
у меня всё работает несколько секунд, и замирает.
Питания для серво не хватает, скорее всего
Не в питании дело. Автор определяет переменную pinx через define. Если же точно определить переменную с указанием типа данных int то думаю заработает
Имя порта, переменная, константа. Вы все в кашу перемешали
А можно пример управления сервомотром с функцией памяти, т.е я задаю с помощью джостика ему угол и когда я отпускаю джостик серво продолжает удерживать этот угол
А можно мне задонатить за это?
У меня одного он не двигается, а дергается сам по себе.
куда вставлять провода к джостику если правода придется рвать
если хочешь то могу скинуть тебе в телеграм схему для этого кода
он тоже у меня дергается поможешь?
Всё работает! Автору респект
а как соединить провода на макетной плате?