Metainformationen zur Seite
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:arduino:ampelschaltung [2017/03/21 14:08] federl |
faecher:informatik:arduino:ampelschaltung [2020/01/20 12:20] (aktuell) m.lange |
||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
===== Erklärung ===== | ===== Erklärung ===== | ||
- | Man baut auf dem Breadboard des Arduinos eine Ampelschaltung, sprich Rot-Gelb-Grün, diese wollen wir gezielt mit einem kleinen Programm ansteuern, dazu benutzen wir den Arduino als einen Stromverteiler und sagen diesem wann er wieviel Strom an welche LED leiten soll. | + | Man baut auf dem Breadboard mit dem Arduino eine Ampelschaltung, sprich Rot-Gelb-Grün. Diese wollen wir gezielt mit einem kleinen Programm ansteuern. Dazu benutzen wir den Arduino als einen Stromverteiler und sagen diesem, wann er Strom an welche LED leiten soll. |
===== Materialien ===== | ===== Materialien ===== | ||
- | * 1x Arduino (in diesem Fall Arduino NANO) | + | * 1x Arduino |
* 1x Breadboard | * 1x Breadboard | ||
* 3x LEDs (Rot, Gelb, Grün) | * 3x LEDs (Rot, Gelb, Grün) | ||
* 4x Kabel | * 4x Kabel | ||
- | * 3x Widerstände | + | * 3x Widerstände 150 Ω (gelb) |
===== Aufbau ===== | ===== Aufbau ===== | ||
+ | {{:faecher:informatik:arduino:ampel-neu.png?600|}} | ||
- | {{:faecher:informatik:arduino:steckplan_arduino_ampel.jpg|}} | ||
===== Programmierung ===== | ===== Programmierung ===== | ||
- | In diesem Programmier Beispiel, werde ich zeigen, wie man dieses mit einer Variable, die wir jede Sekunde aktualieren und so einen Countdown "erschaffen". Wenn dieser Countdown abgelaufen ist, wird die Ampel auf Rot gesetzt und dann starten wir den Countdown neu, bis dieser dann auch abgelaufen ist und so die Ampel Grün wird. | + | In diesem Programm wird eine Ampelschaltung immer wiederholt. erst ist die Ampel 10 Sekunden rot, dann eine Sekunde rot-gelb, dann 10 Sekunden grün und zuletzt 3 Sekunden rot. |
+ | Danach wird die Folge erneut ausgeführt. | ||
- | <code> | + | <code cpp> |
- | int ledRed = 6; | + | int ledRot = 2; |
- | int ledYellow = 4; | + | int ledGelb = 4; |
- | int ledGreen = 2; | + | int ledGruen = 6; |
- | int seconds; // Diese Variable ist unsere besagte Countdown Variable. | + | void setup() { |
+ | pinMode(ledRot, OUTPUT); //Pins der LEDs als Ausgang definieren | ||
+ | pinMode(ledGelb, OUTPUT); | ||
+ | pinMode(ledGruen, OUTPUT); | ||
+ | } | ||
- | boolean green = false; // Dies ist eine Variable, die uns entwerder einen Wahrheits wert liefert oder | + | void loop() { |
- | // einen Falsch wert leifert. | + | digitalWrite(ledRot, HIGH); //Ampel Rot |
- | void setup() { // Wir setzten wie LED Pins normal auf, wie bereits gezeigt, mit der setup(); | + | digitalWrite(ledGelb, LOW); |
- | pinMode(ledRed, OUTPUT); // Methode. | + | digitalWrite(ledGruen, LOW); |
- | pinMode(ledYellow, OUTPUT); | + | delay(10000); //10 Sek. warten |
- | pinMode(ledGreen, OUTPUT); | + | |
+ | digitalWrite(ledRot, HIGH); //Ampel Rot-Gelb | ||
+ | digitalWrite(ledGelb, HIGH); | ||
+ | digitalWrite(ledGruen, LOW); | ||
+ | delay(1000); //1 Sek. warten | ||
+ | | ||
+ | digitalWrite(ledRot, LOW); //Ampel Grün | ||
+ | digitalWrite(ledGelb, LOW); | ||
+ | digitalWrite(ledGruen,HIGH); | ||
+ | delay(10000); //10 Sek. warten | ||
+ | | ||
+ | digitalWrite(ledRot, LOW); //Ampel Gelb | ||
+ | digitalWrite(ledGelb, HIGH); | ||
+ | digitalWrite(ledGruen, LOW); | ||
+ | delay(3000); //3 Sek. warten | ||
+ | } | ||
+ | </code> | ||
+ | ==== Programmierung mit eigener Funktion==== | ||
- | digitalWrite(ledRed, HIGH); | + | Um den Programmcode zu verkürzen, kann man eigene Funktionen erstellen, die dann mehrere Befehle ausführen. Hier schreiben wir eine Funktion, die alle drei LED gleichzeitig ansteuert. |
- | digitalWrite(ledYellow, LOW); | + | |
- | digitalWrite(ledGreen, LOW); | + | |
- | seconds = 10; // Hier legen wir fest, dass unser Countdown 10 Sekunden betragten soll. | + | <code cpp> |
+ | int ledRot = 2; | ||
+ | int ledGelb = 4; | ||
+ | int ledGruen = 6; | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(ledRot, OUTPUT); | ||
+ | pinMode(ledGelb, OUTPUT); | ||
+ | pinMode(ledGruen, OUTPUT); | ||
} | } | ||
void loop() { | void loop() { | ||
- | if(seconds == 0) { // Als erste Fragen wir ab, ob die Sekunden 0 sind | + | Phase(HIGH, LOW, LOW); |
- | if(isGreen) { // Wenn die Sekunden 0 sind, wird gefragt, ob es Grün ist, dies ist eine | + | delay(10000); |
- | newPhase(LOW, HIGH, LOW); // selbst bestimmte Methode, unten dazu mehr. | + | Phase(HIGH, HIGH, LOW); |
- | delay(1000); // mit delay(); können wir sagen, dass der darauffolgende Text verzögert | + | delay(1000); |
- | newPhase(HIGH, LOW, LOW); // abgefertigt werden soll. | + | Phase(LOW, LOW, HIGH); |
- | } else { // else heißt, dass wenn es nicht Grün ist, er das hier in {} aufrufen soll | + | delay(10000); |
- | newPhase(HIGH, HIGH, LOW); | + | Phase(LOW, HIGH, LOW); |
- | delay(1000); | + | delay(3000); |
- | newPhase(LOW, LOW, HIGH); | + | |
- | } | + | |
- | seconds = 10; // Hier setzen wir den Countdown wieder auf 10 | + | |
- | } | + | |
- | seconds--; // x--; heißt, dass wir den Aktuellen Wert der Variable nehmen und ihn um -1 | + | |
- | } // reduzieren, z.B.: x = 10; x--; -> dann ist x = 9. | + | |
- | + | ||
- | boolean isGreen() { // Diese selbst ausgedachte Methode liefer uns, ob die Ampel Grün ist oder | + | |
- | if(green) { // nicht, dass fragen wir einfach ab, ob "green" die Wahrheit entspricht, | + | |
- | return true; // falls das so ist, sagen wir return true; und damit wissen wir, dass Grün | + | |
- | } else { // wahr ist. | + | |
- | return false; | + | |
- | } | + | |
} | } | ||
- | void newPhase(int red, int yellow, int green) { // Dies ist ebenfalls eine selbst ausgedachte Methode, nur der | + | void Phase(int Rot, int Gelb, int Gruen) { |
- | digitalWrite(ledRed, red); // unterschied ist, dass wir hier keine Antwort der Methode | + | digitalWrite(ledRot, Rot); |
- | digitalWrite(ledYellow, yellow); // bekommen, sondern, diese erleichter uns nur die Arbeit, | + | digitalWrite(ledGelb, Gelb); |
- | digitalWrite(ledGreen, green); // weil wir den darin enthalten Auftrag nur einmal schreiben | + | digitalWrite(ledGruen, Gruen); |
- | } // müssen, und dann nur die Methode aufschreiben müssen, mit | + | } |
- | // den dazu gehörigen Informationen. | + | |
</code> | </code> | ||
+ | ===== Erweiterung ===== | ||
+ | Manche Ampeln wechseln nicht automatisch von Grün zu Rot. Vielmehr muss man das als Fußgänger per Tastendruck hervorrufen. Das nennt man eine Bedarfsampel.\\ | ||
+ | Kannst du dieses Projekt mit einem Taster erweitern, sodass die Ampel nur dann für eine kurze Zeit Rot wird, wenn man den Taster gerückt hat?\\ | ||
+ | Informiere dich noch einmal, wie das Projekt [[faecher:informatik:arduino:led_ueber_taster|LED über Taster]] aufgebaut war. | ||
==== Links ==== | ==== Links ==== | ||
- | [[faecher:informatik:arduino:led_ueber_taster|{{:faecher:informatik:arduino:rechts.png?100| }}]] | + | [[faecher:informatik:arduino:ampel_ueber_taster|{{ :faecher:informatik:arduino:links.png?100|}}]] |
+ | [[faecher:informatik:arduino:led_ueber_taster|{{:faecher:informatik:arduino:rechts.png?100|}}]] |