Как подключить джойстик к Ардуино

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

Подключение джойстика к Arduino позволит сделать дистанционное управление с помощью джойстика машинкой или роботом на Ардуино. Рассмотрим в статье, как подключить джойстик шилд самостоятельно и сделать управление сервоприводом с помощью джойстика на Ардуино. Представим несколько скетчей и дадим схему подключения джойстика к микроконтроллеру Arduino Nano или Arduino Uno.

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

Аналоговый джойстик представляет собой ручку, которая крепится на шарнире с двумя потенциометрами, определяющими положение джойстика по оси X и Y, и кнопкой Z. Наклон ручки вращает потенциометры и изменяет выходное напряжение, позволяя отследить степень отклонения ручки от центральной точки. При отпускании ручки джойстика, она плавно возвращается в центральное (нулевое) положение.

Как подключить джойстик к Arduino
Как подключить джойстик к Arduino Nano и Arduino Uno

У модуля джойстика KY-023 есть свои недостатки. Дело в том, что ручка джойстика не всегда точно возвращается в центральное положение, поэтому следует учитывать в программе центральное положение ручки, как некоторый диапазон значений, а не точное значение. То есть, при положении ручки джойстика в центре, значение X и Y координат может находиться в диапазоне от 490 до 530, вместо 512.

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

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno;
  • модуль джойстика ky-023;
  • USB-кабель;
  • 2 светодиода и 2 резистора;
  • макетная плата;
  • провода «папа-мама», «папа-папа».
Схема подключения аналогового джойстика к Ардуино
Схема подключения аналогового джойстика к Ардуино Уно

Подключение джойстика к Ардуино

После подключения к Ардуино джойстика, загрузите следующий скетч. В данном примере на монитор порта будут выводиться данные с джойстика, а при нажатии кнопки будет выключаться светодиод на плате, подключенный параллельно к Pin 13. Скачать скетч для джойстика ky-023 можно одним архивом по прямой ссылке здесь.

#define pinX    A2  // ось X джойстика
#define pinY    A1  // ось Y джойстика
#define swPin    2  // кнопка джойстика
#define ledPin  13  // светодиод на Pin 13

void setup() {
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT);
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
  
  pinMode(swPin, INPUT);
  digitalWrite(swPin, HIGH);
}
 
void loop() {
  boolean ledState = digitalRead(swPin); // считываем состояние кнопки
  digitalWrite(ledPin, ledState);        // вкл./выкл. светодиод

  int X = analogRead(pinX);              // считываем значение оси Х
  int Y = analogRead(pinY);              // считываем значение оси Y

  Serial.print(X);                       // выводим в Serial Monitor
  Serial.print("\t");                    // табуляция
  Serial.println(Y);
}

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

Теперь можно усложнить схему, сделав плавное включение светодиода, управляемое от джойстика. Для этого подключите два светодиода через резистор к аналоговым портам 5 и 6. В следующем скетче, с помощью функции map(), переменные X и Y преобразуются из диапазона чисел от 0 до 1023 в диапазон чисел от 0 до 255.

#define pinX    A2  // ось X джойстика
#define pinY    A1  // ось Y джойстика
#define swPin    2  // кнопка джойстика
#define ledPin  13  // светодиод на Pin 13
#define ledX     5  // светодиод на Pin 5
#define ledY     6  // светодиод на Pin 6

void setup() {
  pinMode(ledX, OUTPUT);
  pinMode(ledY, OUTPUT);
 
  pinMode(ledPin, OUTPUT);
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
  
  pinMode(swPin, INPUT);
  digitalWrite(swPin, HIGH);
}
 
void loop() {
  boolean ledState = digitalRead(swPin); // считываем состояние кнопки
  digitalWrite(ledPin, ledState);        // вкл./выкл. светодиод

  int X = analogRead(pinX);    // считываем значение оси Х
  int Y = analogRead(pinY);    // считываем значение оси Y

  X = map(X, 0, 1023, 0, 255); // преобразуем значение X в другой диапазон
  Y = map(Y, 0, 1023, 0, 255); // преобразуем значение Y в другой диапазон
  
  analogWrite(ledX, X);        // включаем светодиоды с разной яркостью
  analogWrite(ledY, Y);
}

На что обратить внимание:

  1. С помощью функции map() можно задать любой, в том числе, обратный диапазон чисел. Также можно использовать отрицательные значения.

Задание для самостоятельного выполнения:

  1. Выведите на монитор порта переменную X до преобразования и после преобразования в новый диапазон чисел.

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 5,00 out of 5)
Загрузка...

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *