- Необхідний матеріал
- Кругова діаграма
- Модуль джойстика
- Код та пояснення
- Керування світлодіодами за допомогою джойстика з Arduino
Перше, що спадає нам на думку слухаючи слово Джойстик - це ігровий контролер. Так, це абсолютно однаково і може бути використано для ігрових цілей. Окрім ігор, він має безліч інших застосувань в електроніці DIY. Цей джойстик - не що інше, як поєднання двох потенціометрів для площини X та Y відповідно. Він зчитує напругу через потенціометр і надає аналогове значення Arduino, а аналогове значення змінюється під час переміщення валу джойстика (що є просто покажчиком потенціометра).
У цій схемі ми взаємодіємо джойстик з Arduino, просто керуючи чотирма світлодіодами відповідно до руху джойстика. Ми розмістили 4 світлодіоди таким чином, щоб він представляв напрямок руху валу джойстика. Цей джойстик також має кнопку, яку можна використовувати для різних цілей або не використовувати. Також до перемикача джойстика прикріплюється один світлодіод, оскільки натиснута кнопка джойстика, цей окремий світлодіод увімкнеться.
Необхідний матеріал
- Arduino UNO
- Модуль джойстика
- Світлодіоди-5
- Резистор: 100 Ом-3
- Підключення проводів
- Макет
Кругова діаграма
Модуль джойстика
Джойстики доступні різних форм і розмірів. Типовий модуль джойстика показаний на малюнку нижче. Цей модуль джойстика зазвичай забезпечує аналогові виходи, а вихідні напруги, що забезпечуються цим модулем, постійно змінюються відповідно до напрямку, в якому ми його рухаємо. І ми можемо отримати напрямок руху, інтерпретуючи ці зміни напруги за допомогою якогось мікроконтролера. Раніше ми поєднували джойстик з AVR і Raspberry Pi.
Цей модуль джойстика має дві осі, як ви можете бачити. Вони бувають віссю X та Y. Кожна вісь JOYSTICK прикріплена до потенціометра або каструлі. Середини цих горщиків вибиваються як Rx та Ry. Отже, Rx та Ry є змінними точками до цих горщиків. Коли джойстик знаходиться в режимі очікування, Rx та Ry діють як дільник напруги.
Коли джойстик переміщується вздовж горизонтальної осі, напруга на штифті Rx змінюється. Подібним чином, коли він переміщується по вертикальній осі, напруга на штифті Ry змінюється. Отже, ми маємо чотири напрямки джойстика на двох виходах АЦП. Коли ручку переміщують, напруга на кожному штифті падає високо або низько залежно від напрямку.
Тут ми підключаємо цей модуль джойстика до Arduino UNO, який постачається із вбудованим механізмом АЦП (аналого-цифровий перетворювач), як показано у відео в кінці. Дізнайтеся більше про використання АЦП Arduino тут.
Код та пояснення
Повний код Arduino згадується в кінці.
У наведеному нижче коді ми визначили вісь X та Y модуля джойстика для аналогових штифтів A0 та A1 відповідно.
#define joyX A0 #define joyY A1
Тепер, у наведеному нижче коді, ми ініціалізуємо PIN 2 Arduino для комутатора (кнопка) модуля джойстика, і значення buttontate і buttontate1 буде 0 на початку.
кнопка int = 2; int buttonState = 0; int buttonState1 = 0;
У наведеному нижче коді ми встановлюємо швидкість передачі даних до 9600 і визначаємо Pin 7 як вихідний штифт, а pin - як вхідний. Спочатку штифт кнопки залишатиметься високим, доки перемикач не натисне.
void setup () {pinMode (7, OUTPUT); pinMode (кнопка, INPUT); digitalWrite (кнопка, HIGH); Serial.begin (9600); }
Тут у цьому коді ми зчитуємо значення з аналогових штифтів A0 та A1 і друкуємо послідовно.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); Serial.print (xValue); Serial.print ("\ t"); Serial.println (yValue);
Умови вмикання та вимикання світлодіодів відповідно до руху валу джойстика визначені в коді нижче. Тут ми просто беремо аналогові значення напруги на виводах A0 та A1 Arduino. Ці аналогові значення будуть змінюватися під час переміщення джойстика, а світлодіод світиться відповідно до руху джойстика.
Ця умова є для переміщення валу джойстика у напрямку осі -Y
if (xValue> = 0 && yValue <= 10) {digitalWrite (10, HIGH); } else {digitalWrite (10, LOW);}
Ця умова є для переміщення валу джойстика у напрямку осі -X
якщо (xValue <= 10 && yValue> = 500) {digitalWrite (11, HIGH); } else {digitalWrite (11, LOW);}
Ця умова є для переміщення валу джойстика в напрямку осі + X.
якщо (xValue> = 1020 && yValue> = 500) {digitalWrite (9, HIGH); } else {digitalWrite (9, LOW);}
Ця умова є для переміщення валу джойстика в напрямку осі + Y
якщо (xValue> = 500 && yValue> = 1020) {digitalWrite (8, HIGH); } else {digitalWrite (8, LOW);}
Коли ми переміщаємо вал джойстика по діагоналі, виникає одне положення, коли аналогові значення X та Y становитимуть 1023 та 1023 відповідно, і індикатор Pin 9, і Pin 8 будуть світитися. Тому що він задовольняє умові світлодіода. Отже, для усунення цієї невідповідності ми поставили умову, згідно з якою, якщо значення (X, Y) дорівнює (1023, 1023), тоді обидва світлодіоди залишаються в стані OFF
if (xValue> = 1020 && yValue> = 1020) {digitalWrite (9, LOW); digitalWrite (8, LOW); }
Наведена нижче умова використовується для роботи світлодіода, підключеного до кнопкового перемикача. Коли ми натискаємо перемикач джойстика, світлодіод увімкнеться і зафіксується, доки кнопка не відпуститься. Необов’язково використовувати кнопковий перемикач на модулі джойстика.
якщо (buttonState == LOW) {Serial.println ("Switch = High"); digitalWrite (7, HIGH); } else {digitalWrite (7, LOW);}
Керування світлодіодами за допомогою джойстика з Arduino
Після завантаження коду в Arduino та підключення компонентів відповідно до принципової схеми, тепер ми можемо керувати світлодіодами за допомогою джойстика. Ми можемо увімкнути чотири світлодіоди в кожному напрямку відповідно до руху вала джойстика. Джойстик має два потенціометри всередині, один призначений для переміщення по осі X, а інший - для переміщення по осі Y. Кожен потенціометр отримує 5v від Arduino. Отож, коли ми рухаємо джойстик, значення напруги змінюватиметься, а аналогове значення на аналогових штифтах A0 та A1 також змінюватиметься.
Отже, з Arduino ми зчитуємо аналогове значення для осей X та Y та вмикаємо світлодіоди відповідно до руху осі джойстика. Кнопковий перемикач на модулі джойстика використовується для управління окремим світлодіодом в ланцюзі, як показано на відео нижче.