Inhaltsverzeichnis
Für dieses Projekt benötigst du
Einen Joystick am Arduino verwenden
Aufgabe 1: Die Position des Joystick-Moduls auslesen und LEDs ansteuern
In dieser Aufgabe möchten wir die Position des Joystick-Moduls mit einem Arduino Mikrocontroller auslesen. Die Messwerte werden genutzt, um LEDs anzusteuern.
Auf den ersten Blick fällt auf, dass das Modul fünf Anschlüsse(Pins) besitzt.
GND – Ground Pin, anzuschließen an den GND Pin des Arduinos.
+5V – Pin für die Stromversorgung, anzuschließen am 5V Pin des Arduinos.
VRx – Pin für die x-Achse des Joystick-Moduls, anzuschließen am Pin A0.
VRy – Pin für die y-Achse des Joystick-Moduls, anzuschließen am PIN A1.
SW – Pin für den sogenannten „Switch“. Der Pin wird in diesem Sketch nicht verwendet. Das Joystick-Modul besitzt einen Taster, der durch einen Druck senkrecht auf den Joystick aktiviert wird.
Das Joystick-Modul besitzt an der x- und y-Achse ein herkömmliches Potentiometer. Je nach Position des Joysticks variiert die Ausgangsspannung für beide Achsen (also an den Pins VRx und VRy) zwischen 0V und 5V. Diese Spannung wird über die analogen Eingänge des Arduino Mikrocontrollers ausgelesen und verarbeitet. Dementsprechend speichert der Mikrocontroller die Lage des Joysticks als Zahlenwert zwischen 0 – 1023 ab.
Wenn man das Modul an den Endanschlag auf der linken Seite bewegt, so registriert der Mikrocontroller den Zahlenwert 1023 auf der x-Achse.
Bewegt man den Joystick nun auf die andere Seite, so registriert der Mikrocontroller den Zahlenwert 0 auf der x-Achse.
Ähnlich verhält es sich bei den Anschlägen oben (1023) und unten (0) auf der y-Achse.
Um die Funktion des Joystickmoduls zu prüfen, könnten die Werte von „x“ und „y“ über den seriellen Monitor angezeigt werden. In diesem Beispiel werden wir jedoch die Endanschläge von x- und y-Achse direkt durch das Aufleuchten von je einer LED visualisieren.
Schaltplan
Sketch
Wie im Schaltplan zu erkennen ist, definieren wir die LEDs im Sketch wie folgt:
- LED für den Anschlag „oben“ an Pin 6
- LED für den Anschlag „unten“ an Pin 7
- LED für den Anschlag „links“ an Pin 8
- LED für den Anschlag „rechts“ an Pin 9
int ledUnten = 6;
int ledOben = 7;
int ledLinks = 8;
int ledRechts = 9;
int SensorWert = 0; // Festlegen der Variablen
void setup()
{
pinMode(ledUnten, OUTPUT); // Definieren der LEDs
pinMode(ledOben, OUTPUT);
pinMode(ledLinks, OUTPUT);
pinMode(ledRechts, OUTPUT);
Serial.begin(9600);
}
void loop()
{
SensorWert = analogRead(A0); // Auslesen des Wertes, der an A0 anliegt. Hier : VRx - X-Achse
Serial.print("X:"); // Darstellung des Wertes im Seriellen Monitor
Serial.print(SensorWert, DEC); // Darstellung des Wertes als Dezimalzahl
if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
{
digitalWrite(ledLinks, HIGH); // ...soll ledLinks leuchten
}
if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
{
digitalWrite(ledLinks, LOW); // ...soll ledLinks nicht mehr leuchten
}
if (SensorWert < 20 ) // Wenn der Wert größer als 20 ist, dann...
{
digitalWrite(ledRechts, HIGH); // ...soll ledRechts leuchten
}
if (SensorWert > 20) // Wenn der Wert kleiner als 20 ist, dann...
{
digitalWrite(ledRechts, LOW); // ...soll ledRechts nicht mehr leuchten
}
SensorWert = analogRead(1); // Auslesen des Wertes, der an A1 anliegt. Hier : VRy - Y-Achse
Serial.print(" |Y:");
Serial.print(SensorWert, DEC);
if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
{
digitalWrite(ledOben, HIGH); // ...soll ledOben leuchten
}
if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
{
digitalWrite(ledOben, LOW); // ...soll ledOben nicht mehr leuchten
}
if (SensorWert > 20) // Wenn der Wert größer als 20 ist, dann...
{
digitalWrite(ledUnten, LOW); // ...soll ledUnten leuchten
}
if (SensorWert < 20) // Wenn der Wert kleiner als 20 ist, dann...
{
digitalWrite(ledUnten, HIGH); // ...soll ledUnten nicht mehr leuchten
}
}
Aufgabe 2: Position des Joystick-Moduls auslesen und LEDs ansteuern. Zusätzlich soll durch die Betätigung des integrierten Tasters ein Ton erzeugt werden.
Das Joystick-Modul besitzt einen integrierten Taster, der durch einen Druck senkrecht auf den Joystick aktiviert wird. Den Status des Tasters (An / Aus) möchten wir nun auslesen und in Form einer Tonausgabe darstellen. Dazu schließen wir zusätzlich einen Piezospeaker am Pin 5 des Arduino Mikrocontrollers an.
Eine Besonderheit des Joystickmoduls liegt darin, dass es permanent eine Spannung von ca. 2V an dem Pin „SW“ ausgibt. Sobald der Taster gedrückt wird, liegt auf dem Pin „SW“ keine Spannung mehr an (GND). Aus diesem Grund kann der Taster nicht mit einem digitalen Pin ausgelesen werden, da hierfür die Spannung von 2V im unbetätigten Zustand nicht ausreicht.
Den Ausgabe-Pin des Tasters am Joystickmodul (Pin SW) schließen wir am analogen Pin A2 des Arduino Mikrocontrollers an. Betätigt man jetzt den Taster, registriert der Mikrocontroller den Zahlenwert 0. Im unbetätigten Zustand beträgt dieser Wert ca. 400, welches der dauerhaften Ausgangsspannung von ca. 2V entspricht.
Der vorhergehende Sketch wird nun durch eine if/else (wenn … dann/sonst …) Bedingung erweitert.
Schaltplan
Sketch
int piezo=5; // Hier wird festgelegt, dass der Piezospeaker an Pin 5 angeschlossen wird
int ledUnten = 6;
int ledOben = 7;
int ledLinks = 8;
int ledRechts = 9;
int SensorWert = 0; // Festlegen der Variablen
void setup()
{
pinMode(piezo, OUTPUT); // Definieren des Speakers als Ausgang
pinMode(ledUnten, OUTPUT); // Definieren der LEDs
pinMode(ledOben, OUTPUT);
pinMode(ledLinks, OUTPUT);
pinMode(ledRechts, OUTPUT);
Serial.begin(9600);
}
void loop()
{
SensorWert = analogRead(0); // Auslesen des Wertes, der an A0 anliegt. Hier : VRx - X-Achse
Serial.print("X:"); // Darstellung des Wertes im Seriellen Monitor
Serial.print(SensorWert, DEC); // Darstellung des Wertes als Dezimalzahl
if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
{
digitalWrite(ledLinks, HIGH); // ...soll ledLinks leuchten
}
if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
{
digitalWrite(ledLinks, LOW); // ...soll ledLinks nicht mehr leuchten
}
if (SensorWert < 20 ) // Wenn der Wert größer als 20 ist, dann...
{
digitalWrite(ledRechts, HIGH); // ...soll ledRechts leuchten
}
if (SensorWert > 20) // Wenn der Wert kleiner als 20 ist, dann...
{
digitalWrite(ledRechts, LOW); // ...soll ledRechts nicht mehr leuchten
}
SensorWert = analogRead(1); // Auslesen des Wertes, der an A1 anliegt. Hier : VRy - Y-Achse
Serial.print(" |Y:");
Serial.print(SensorWert, DEC);
if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
{
digitalWrite(ledOben, HIGH); // ...soll ledOben leuchten
}
if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
{
digitalWrite(ledOben, LOW); // ...soll ledOben nicht mehr leuchten
}
if (SensorWert > 20) // Wenn der Wert größer als 20 ist, dann...
{
digitalWrite(ledUnten, LOW); // ...soll ledUnten leuchten
}
if (SensorWert < 20) // Wenn der Wert kleiner als 20 ist, dann...
{
digitalWrite(ledUnten, HIGH); // ...soll ledUnten nicht mehr leuchten
}
SensorWert = analogRead(2); // Auslesen des Wertes, der an A2 anliegt. Hier : Switch(Taster) des Joystick Moduls
Serial.print(" |Taster:");
Serial.println(SensorWert,DEC);
if (SensorWert < 20) // Wenn der Wert kleiner als 20 ist, dann...
{
digitalWrite(piezo,HIGH); // ...soll ein Ton ausgegeben werden...
}
else // ...sollte die Bedingung (Sensorwert kleiner 20) nicht erfüllt sein...
{
digitalWrite(piezo,LOW); // ...soll der Ton nicht mehr ausgegeben werden
}
}
Funduino - Dein Onlineshop für Mikroelektronik
-
Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
-
Mehr als 3.500 Artikel sofort verfügbar!
-
Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.