Lekcja 13/31: Używanie joysticka XY z Arduino i włączanie brzęczyka ruchem joysticka | Robojax
W tej lekcji przyjrzymy się modułowi joysticka XY oraz sposobowi jego podłączenia do Arduino w celu wykrywania ruchu kierunkowego i naciśnięć przycisków. To wszechstronne urządzenie wejściowe zawiera dwa potencjometry (jeden dla osi X i jeden dla osi Y) oraz przycisk chwilowy, co pozwala na rejestrowanie pełnego zakresu ruchu 360 stopni wraz z akcją kliknięcia. Oprócz zwykłego odczytywania surowych wartości pokażemy, jak wyzwalać akcje—takie jak włączenie brzęczyka—gdy joystick zostanie przesunięty w określone położenie. Ta zasada stanowi fundament dla niezliczonych projektów interaktywnych.
Ten przewodnik jest idealny do budowy:
- Dwuwiosłowego pilota do robota jeżdżącego lub uchwytu kamery z funkcją obrotu i pochylania.
- Własnego kontrolera gier dla komputera PC lub urządzenia mobilnego.
- Systemu nawigacji po menu dla wyświetlacza LCD lub OLED.
- Precyzyjnego kontrolera prędkości i kierunku silnika do zastosowań przemysłowych lub hobbystycznych.
- Interaktywnego systemu alarmowego, w którym określone położenie joysticka aktywuje syrenę lub alert.
Sprzęt i komponenty
Aby śledzić ten projekt, będziesz potrzebować następujących komponentów. Zestaw użyty w filmie to SunFounder 3-in-1 Arduino kit, ale te części są powszechnie dostępne pojedynczo.
- Arduino Uno (lub dowolna kompatybilna płyta)
- Moduł joysticka XY
- Brzęczyk pasywny
- Przewody połączeniowe
- Kabel USB do programowania i zasilania
Zrozumienie modułu joysticka XY
Joystick XY to samodzielne urządzenie wejściowe. Jak wyjaśniono w filmie (w filmie o 01:20), łączy on dwa potencjometry 10k omów ułożone prostopadle. Przesunięcie drążka wzdłuż osi X obraca jeden potencjometr, a przesunięcie wzdłuż osi Y obraca drugi. Dzięki temu Arduino może odczytać napięcie analogowe dla każdej osi, reprezentujące dokładne położenie drążka. Moduł zawiera również przycisk chwilowy, który jest aktywowany po naciśnięciu drążka prosto w dół.
Oto opis jego pinów:
- GND: Łączy się z masą (0V) Arduino.
- VCC: Łączy się z zasilaniem 5V Arduino.
- VRX: Wyjście analogowe dla położenia osi X.
- VRY: Wyjście analogowe dla położenia osi Y.
- SW: Wyjście cyfrowe dla przycisku (aktywne w stanie niskim).
Film pokazuje również, że dwa wewnętrzne potencjometry są połączone równolegle między VCC a GND, co daje całkowitą rezystancję około 5k omów, co jest normalnym odczytem dla tego modułu (w filmie o 04:30).
Schemat połączeń
Okablowanie dla tego projektu jest proste. Film pokazuje schemat połączeń z dokumentacji SunFounder, ale my podłączymy joystick bezpośrednio do pinów Arduino, jak opisano. Brzęczyk jest dodany do części projektu związanej z akcją.
Oto połączenia ustalone w filmie (w filmie o 06:24):
- Joystick GND → Arduino GND (czarny przewód)
- Joystick VCC → Arduino 5V (czerwony przewód)
- Joystick VRX → Arduino A0 (żółty przewód)
- Joystick VRY → Arduino A1 (zielony przewód)
- Joystick SW → Arduino Pin 8 (niebieski przewód)
- Brzęczyk dodatni (długa nóżka) → Arduino Pin 2
- Brzęczyk ujemny (krótka nóżka) → Arduino GND
Wyjaśnienie kodu
Dostarczony kod jest zaprojektowany do odczytywania położenia joysticka i aktywowania brzęczyka, gdy spełniony jest określony warunek. Kluczowe części, które możesz skonfigurować, znajdują się na górze szkicu.
Najpierw ustawiane są definicje pinów. Możesz je zmienić, aby dopasować do własnego okablowania:
const int xPin = A0; //do którego podłączony jest VRX
const int yPin = A1; //do którego podłączony jest VRY
const int swPin = 8; //do którego podłączony jest SW
const int alarmPin=2;//do brzęczyka
Następnie deklarowane są zmienne globalne do przechowywania stanu joysticka. Są one aktualizowane za każdym razem, gdy wywoływana jest funkcja readJoystick().
int xValue;//do przechowywania wartości x
int yValue;//do przechowywania wartości y
int swValue;//do przechowywania wartości przełącznika
W funkcji setup() pin przełącznika jest skonfigurowany z wewnętrznym rezystorem podciągającym. To kluczowy krok, ponieważ eliminuje potrzebę zewnętrznego rezystora. Ustawiając go na INPUT_PULLUP, pin będzie domyślnie odczytywał HIGH i przejdzie do LOW po naciśnięciu przycisku.
pinMode(swPin, INPUT_PULLUP); //ustaw pin SW jako WEJŚCIEPodstawowa logika znajduje się w loop(). Wywołuje ona niestandardową funkcję readJoystick(), aby uzyskać świeże dane. Następnie sprawdza warunek: jeśli wartość osi X jest większa niż 600, a wartość osi Y mniejsza niż 300, włączany jest brzęczyk. Możesz zmodyfikować te wartości progowe, aby zdefiniować inną „strefę aktywną” dla joysticka. alarmPin jest ustawiany na HIGH, aby aktywować brzęczyk, a na monitorze szeregowym drukowany jest komunikat.
if(xValue >600 && yValue <300)
{
digitalWrite(alarmPin, HIGH);
Serial.print("Alarm X:");
Serial.print(xValue);
Serial.print(" Y:");
Serial.println(yValue);
}else{
digitalWrite(alarmPin, LOW);
// ... kod do drukowania wartości, gdy alarm jest wyłączony
}
Na koniec definiowana jest niestandardowa funkcja readJoystick(). Funkcja ta odczytuje wartości analogowe z pinów X i Y oraz stan cyfrowy przełącznika, zapisując je w zmiennych globalnych. To modułowe podejście utrzymuje główną pętlę w czystości i porządku.
void readJoystick()
{
xValue =analogRead(xPin);//odczytaj wartość pinu x
yValue =analogRead(yPin);//odczytaj yPin
swValue =digitalRead(swPin);//odczytaj przełącznik
}
Projekt na żywo i demonstracja
Po przesłaniu kodu można otworzyć monitor szeregowy, aby obserwować surowe wartości. Początkowo, przy wyśrodkowanym joysticku, wartości X i Y będą wynosić około 512, co stanowi punkt środkowy zakresu 0-1023. Naciśnięcie joysticka spowoduje zmianę wartości przełącznika z 1 na 0 (na filmie w czasie 10:15).
Przesunięcie joysticka do skrajnych pozycji pokaże pełny zakres: przesunięcie go maksymalnie w prawo pokaże wartość X równą 1023, a maksymalnie w lewo – 0. Podobnie przesuwanie go w górę i w dół zmieni wartość Y między 0 a 1023 (na filmie w czasie 10:37).
Demonstracja pokazuje następnie część projektu związaną z działaniem. Gdy joystick zostanie przesunięty do prawego górnego rogu (gdzie X > 600 i Y < 300), brzęczyk wyda dźwięk, a monitor szeregowy wydrukuje komunikat „Alarm”. Przesunięcie go poza tę strefę wyłączy brzęczyk. Dowodzi to, że można używać pozycji joysticka do sterowania urządzeniem wyjściowym, co można rozszerzyć o sterowanie przekaźnikami, diodami LED lub silnikami w różnych zastosowaniach.
Rozdziały
- [00:00] Wprowadzenie do projektu joysticka XY
- [01:20] Zrozumienie sprzętu i elementów wewnętrznych
- [03:33] Schemat modułu i pomiar rezystancji
- [05:51] Podłączanie joysticka do Arduino
- [07:00] Konfiguracja kodu i włączenie rezystora podciągającego
- [09:23] Przesyłanie kodu i testowanie surowych wartości
- [12:21] Działanie: sterowanie brzęczykiem pozycją joysticka
- [16:02] Demonstracja na żywo systemu alarmowego
This code has not been parsed yet. Please return to the admin panel to parse it.
Common Course Links
Common Course Files
Rzeczy, których możesz potrzebować
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Zasoby i odniesienia
-
DokumentacjaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ZewnętrznyPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Pliki📁
Biblioteki Arduino (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB
Instrukcja obsługi
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB