Szukaj kodu

Lekcja 13/31: Używanie joysticka XY z Arduino i włączanie brzęczyka ruchem joysticka | Robojax

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.

sunfounder-13-JoyStick-2

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
LB-LR0001_Dual-axis_XY_Joystick_Module

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ół.

Joystick-Module-Internal-Structure

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ń

sunfounder-13_xy_joystick_wiring_bb

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 GNDArduino GND (czarny przewód)
  • Joystick VCCArduino 5V (czerwony przewód)
  • Joystick VRXArduino A0 (żółty przewód)
  • Joystick VRYArduino A1 (zielony przewód)
  • Joystick SWArduino 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ŚCIE

Podstawowa 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

Obrazy

Sunfounder car assembled
Sunfounder car assembled
LB-LR0001_Dual-axis_XY_Joystick_Module
LB-LR0001_Dual-axis_XY_Joystick_Module
sunfounder-13-JoyStick-1
sunfounder-13-JoyStick-1
sunfounder-13-JoyStick-2
sunfounder-13-JoyStick-2
Joystick-Module-Internal-Structure
Joystick-Module-Internal-Structure
sunfounder-13_xy_joystick_wiring_bb
sunfounder-13_xy_joystick_wiring_bb
922-Lesson 13/31: How to read position and values of X-Y Joystick
Język: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Zasoby i odniesienia

Pliki📁

Biblioteki Arduino (zip)

Instrukcja obsługi