In diesem Projekt zeige ich dir, wie du deinen eigenen mit Arduino gesteuerten Zähneputz-Timer bauen kannst.
Zähneputzen macht Spaß, wenn man die wertvollen Beißer nur nicht immer aus Versehen zu lange putzen würde. Wäre es nicht schön, einen Zähneputz-Timer zu haben, der einem sagt, wann man aufhören soll, zu putzen?
Los jetzt: Sechs LEDs repräsentieren jeweils dreißig Sekunden, was zusammen drei Minuten ergibt. Drückt man einen Button, geht es los. Die erste LED blinkt für 30 Sekunden, bleibt dann leuchten und übergibt an die zweite LED, die losblinkt. Nach drei Minuten leuchten alle sechs LEDs. Zum Abschluss blinken sie noch für 10 Sekunden alle zusammen auf.
Verwendete Bauteile
- 1x Arduino-Starterkit oder:
- Breadboard, Arduino, Kabel
- 6x LED rot
- 6x Widerstand 220 Ohm
- 1x Pushbutton
Schaltplan mit 6 LEDs und einem Button
Jede der sechs LEDs ist jeweils mit dem kurzen Beinchen (Kathode) über einem Widerstand mit dem GND verbunden. Das lange Beinchen der LED (Anode) ist an einem digitalen Pin des Arduino-Boards angeschlossen. So sind alle LEDs einzeln steuerbar. Darüber hinaus ist ein Taster (Pushbutton) ebenfalls mit einem digitalen Pin des Arduinos verbunden. Die andere Seite des Tasters ist am GND angeschlossen. Wir verwenden den internen Pullup des Arduino-Boards (INPUT_PULLUP). Das bedeutet, dass am digitalen Pin ein LOW anliegt, wenn der Taster geschlossen wird, und ein HIGH, wenn der Taster offen ist.
Arduino-Code und Erläuterungen für den Zähneputz-Timer
const int ledPins[] = {7, 8, 9, 10, 11, 12}; const int buttonPin = 2; long myTimer = -200000; void setup() { for (int i = 0; i < 6; i++) { pinMode(ledPins[i], OUTPUT); } pinMode(buttonPin, INPUT_PULLUP); Serial.begin(9600); for (int i = 0; i < 6; i++) { digitalWrite(ledPins[i], LOW); } } void loop() { if (digitalRead(buttonPin) == LOW) { myTimer = millis(); } if (millis() - myTimer < (30000)) { // 30 Sekunden digitalWrite(ledPins[0], ((millis() - myTimer) % 1000) > 500); } else if (millis() - myTimer < (60000)) { // 60 Sekunden digitalWrite(ledPins[1], ((millis() - myTimer) % 1000) > 500); } else if (millis() - myTimer < (90000)) { // 90 Sekunden digitalWrite(ledPins[2], ((millis() - myTimer) % 1000) > 500); } else if (millis() - myTimer < (120000)) { // 120 Sekunden digitalWrite(ledPins[3], ((millis() - myTimer) % 1000) > 500); } else if (millis() - myTimer < (150000)) { // 150 Sekunden digitalWrite(ledPins[4], ((millis() - myTimer) % 1000) > 500); } else if (millis() - myTimer < (180000)) { // 180 Sekunden digitalWrite(ledPins[5], ((millis() - myTimer) % 1000) > 500); } else if (millis() - myTimer < (190000)) { // nach 180 Sekunden for (int i = 0; i < 6; i++) { digitalWrite(ledPins[i], ((millis() - myTimer) % 1000) < 500); } } else { for (int i = 0; i < 6; i++) { digitalWrite(ledPins[i], LOW); } } delay(10); }
Wir deklarieren alle benötigten LED-Pins des Arduino-Boards in einem Array:
const int ledPins[] = {7, 8, 9, 10, 11, 12};
Dadurch können wir mit einer einfachen for-Schleife alle Pins als Outputs deklarieren:
for (int i = 0; i < 6; i++) { digitalWrite(ledPins[i], LOW); }
Als Steuerungsinstrument dient die Variable myTimer. Sie zählt Millisekunden, ab dem Moment ab dem der Taster gedrückt wird:
if (digitalRead(buttonPin) == LOW) { myTimer = millis(); }
Nun lässt sich jeweils prüfen, wie »spät« es im Programm ist, denn die Formel
millis() – myTimer
ergibt immer die Millisekunden, ab dem Startzeitpunkt. Nun kann man einfach prüfen, ob man sich z. B. in den ersten 30 Sekunden befindet:
if (millis() - myTimer < (30000)) { // 30 Sekunden
Um nun die LED im Sekundentakt blinken zu lassen (ein- und ausschalten = 1 Sekunde) kann man die Modulo-Funktion verwenden (%):
(millis() - myTimer) % 1000
Sie teilt einen Wert und liefert nur den Rest. Dieser liegt im Beispiel zwischen 0 und 1000. Prüfen wir also genau die Mitte ab (500). Das ergibt die Hälfte der Zeit 0, die andere Hälfte der Zeit 1. Diesen Wert können wir direkt an die Funktion digitalWrite übergeben:
digitalWrite(ledPins[0], ((millis() - myTimer) % 1000) > 500);
Ich hoffe, das Projekt gefällt dir. Wenn das der Fall ist, drück gern auf den Like-Button und hinterlasse mir gern einen Kommentar.
Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!
- Die beliebtesten Arduino-Projekte von StartHardware
- Inklusive Schaltplan, Beschreibung und Code
- Arduino-Schnellstart-Kapitel
- Kompakter Programmierkurs
Tolles Projekt!
Dass auf der Zeichnung aber 7 Dioden sind, weißt Du?
VG Hardy
Haha! Ist noch keinem aufgefallen – mir auch nicht :-D
Vielen Dank für den Hinweis. Ich glaube, ich lass das so und guck mal, wem das noch auffällt ;-)
Liebe Grüße
Stefan