Zum Inhalt springen
Zähneputz-Timer mit Arduino

Zähneputz-Timer mit Arduino und sechs LEDs

    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.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    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

    Zähneputz-Timer mit Arduino

    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


    2 Gedanken zu „Zähneputz-Timer mit Arduino und sechs LEDs“

      1. 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

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

     

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.