"Вы читаете о роботах и программировании и думаете: «Было бы здорово сделать что-то подобное самому!» Теми, кем эта идея овладевает чуть больше просто мыслей смотрят кто и как делал своего робота. Читают статьи, смотрят видео. На картинках все понятно. В видеороликах тоже обычно показываются уже готовые продукты, а также сжато показываются технологии их изготовления. И вроде бы то же всё понятно: отпилил, прикрутил, припаял, соединил, запрограммировал вон на той программе вот этим кодом."

вторник, 16 марта 2021 г.

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

 Управление сервоприводом с помощью джойстика на Ардуино

Джойстики – отличный источник входных данных для проекта по робототехнике. 

 

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

Этот модуль производит на выходе около 2,5 В от X и Y, когда он находится в положение покоя. Перемещение джойстика приведет к изменению выходного сигнала от 0 В до 5 В в зависимости от его направления. Если вы подключите этот модуль к микроконтроллеру, вы можете ожидать, что значение будет около 512 в положении покоя.

Схема подключения двух сервоприводов к Ардуино с джойстиком

 Для того чтобы сделать управление сервомотора с помощью джойстика, необходимо первым делом подключить к аналоговым входам платы Arduino модуль ky-023. Это необходимо, чтобы АЦП микроконтроллера получало данные о положении джойстика по координатам X и Y в режиме реального времени. Затем, с помощью строчек кода, эти данные мы преобразуем в соответствующее положение микро сервопривода.

Джойстик представляет собой два потенциометра, которые меняют сопротивление в электрической цепи при изменении положения ручки. Поэтому на аналоговых входах Ардуино, куда мы подключим джойстик, будут цифровые значения от 0 до 1023, т.е. АЦП микроконтроллера преобразует значения напряжения от 0 до 5 Вольт в цифровые значения. Именно эти значения мы будем использовать для управления серво.

#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);                      // поворачиваем второй серво
}