Zum Inhalt springen
Tee Timer mit Arduino

Tee-Timer mit Arduino

    Vielleicht kennst du das ja. Da arbeitet man konzentriert an einer Sache und schon ist der Tee bitter, weil er wieder zu lange gezogen hat. Abhilfe schafft da der Tee-Timer mit Arduino. Hier kannst du einfach deine Teetasse drauf stellen, auf den richtigen Knopf drücken und nach einer eingestellten Zeit erinnert dich eine blinkende LED daran, dass der Tee fertig ist.

    Drei Button können zur Auswahl von Schwarzem, Grünen, Früchte- und Kräutertee verwendet werden. Die Zieh-Zeiten habe ich übrigens von hier.

    Bauteile

    • Arduino, Breadboard, Kabel
    • Widerstand 220 Ohm (rot-rot-braun oder rot-rot-schwarz-schwarz)
    • LED – Farbe deiner Wahl
    • 4x Taster
    • 2x Taster als Grundfläche für die Teetasse

    Schaltplan

    Vier Taster sind mit digitalen Pins des Arduinos verbunden. Auf einem davon steht die Teetasse, die anderen sind für die Auswahl der Tee-Zeiten vorgesehen. Eine LED ist in Reihe mit einem Widerstand zwischen einem PWM-Pin (Pin 11) und dem GND geschaltet. Die zwei nicht angeschlossenen Taster dienen als Auflagefläche für die Teetasse. Da kann man natürlich auch was anderes drunter packen. Wichtig ist nur, dass genügend Gewicht der Tasse auf den Button ausgeübt wird.


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


    Funktionsweise des Programmes

    Das Programm sieht erstmal komplex aus, basiert aber im Grunde auf einer State-Machine, die aus vier States besteht.

    switch (myState) {
        case 0: // keine Tasse auf dem Untersetzer
      break;
        case 1: // Tasse auf Untersetzer, warte auf Eingabe
      break;
        case 2: // Ziehzeit läuft
      break;
        case 3: // Ziehzeit abgelaufen
      break;
    }

    State 0 bedeutet, dass keine Tasse auf dem Untersetzer (also auf den Buttons) steht. Hier müssen wir also nur gucken, ob der Button, auf dem die Tasse stehen soll, irgendwann gedrückt wird. Dann wechseln wir in den nächsten State. Die Tasse ist auf dem Untersetzer und wir warten auf Eingabe. Dazu lassen wir noch die LED ungeduldig blinken. Wird einer der drei Buttons für die Teesorte gedrückt, merken wir uns die mit ihm verknüpfte Zieh-Zeit:

    myTimeout = time2;

    Nun befinden wir uns im Ziehzeit-State und warten einfach, bis die Zeit abgelaufen ist. Wie ein Timer funktioniert, kannst du übrigens hier nachlesen. Zusätzlich faden wir die LED langsam ein und aus.

    Ist die Zeit abgelaufen, springen wir in den letzten State, in dem wir einfach die LED blinken lassen. Nimmt man nun die Tasse hoch, springt das Programm wieder an den Anfang. Das ist es auch schon.

    Code für den Tee-Timer mit Arduino

    const int ledPin1 =  11;
    const int buttonPin1 = 8;   // schwarzer Tee
    const int buttonPin2 = 6;   // grüner Tee
    const int buttonPin3 = 4;   // Kräuter- und Früchtetee
    const int buttonPinTasse = 12; // hier steht die Tasse drauf
    
    const long time1 = 180000; // 3 Minuten für schwarzen Tee
    const long time2 = 240000; // 4 Minuten für grünen Tee
    const long time3 = 480000; // 8 Minuten für Kräuter- und Früchtetee
    
    int myState = 0;
    long myTimeout = 0;
    long myStartTime = 0;
    
    void setup() {
      pinMode(buttonPinTasse, INPUT_PULLUP);
      pinMode(buttonPin1, INPUT_PULLUP);
      pinMode(buttonPin2, INPUT_PULLUP);
      pinMode(buttonPin3, INPUT_PULLUP);
      Serial.begin(9600);
    }
    
    void loop() {
      switch (myState) {
        case 0:  // keine Tasse auf dem Untersetzer
          analogWrite(ledPin1, 0);
          if (digitalRead(buttonPinTasse) == 0) myState = 1;
          break;
        case 1: // Tasse auf Untersetzer, warte auf Eingabe
          blinkSlow(); // LED Ausgabe langsames Blinken
          if (digitalRead(buttonPin1) == 0) {
            blinkIndikator(1);
            myState = 2;
            myTimeout = time1;
            myStartTime = millis();
          }
          if (digitalRead(buttonPin2) == 0) {
            blinkIndikator(2);
            myState = 2;
            myTimeout = time2;
            myStartTime = millis();
          }
          if (digitalRead(buttonPin3) == 0) {
            blinkIndikator(3);
            myState = 2;
            myTimeout = time3;
            myStartTime = millis();
          }
          break;
        case 2: // Ziehzeit läuft
          // Reset, wenn alle drei Buttons gleichzeitig gedrückt werden
          if ((digitalRead(buttonPin1) == 0) && (digitalRead(buttonPin1) == 0) && (digitalRead(buttonPin1) == 0)) {
            resetIndication(); // LED Ausgabe langes Leuchten
            myState = 0;
          }
          breath(); // LED Ausgabe langsames faden
          
          if (millis() - myStartTime > myTimeout) myState = 3; // dann ist der Tee fertig :-)
          break;
        case 3: // Ziehzeit abgelaufen
          blinkFast();
          if (digitalRead(buttonPinTasse) == 1) myState = 0;
          break;
      }
    }
    
    void blinkFast(){
      if (millis() % 200 > 100) analogWrite(ledPin1, 155);
      else analogWrite(ledPin1, 0);
    }
    
    void resetIndication() {
      analogWrite(ledPin1, 255);
      delay(3000);
      analogWrite(ledPin1, 0);
      delay(10);
    }
    
    void blinkSlow() {
      if (millis() % 2000 > 1000) analogWrite(ledPin1, 255);
      else analogWrite(ledPin1, 0);
    }
    
    void breath() {
      int myValue = (millis() / 10) % 1020;
      if (myValue < 512) analogWrite(ledPin1, (myValue/2));
      else analogWrite(ledPin1, 255 - ((myValue/2) - 255));
    }
    
    void blinkIndikator(int wiederholungen) {
      analogWrite(ledPin1, 0);
      delay(500);
      for (int i=0; i<wiederholungen; i++){
        analogWrite(ledPin1, 255);
        delay(80);
        analogWrite(ledPin1, 0);
        delay(80);
      }
    };

    Ich hoffe, das Projekt hat dir gefallen und du hast was gelernt. Lass mir gern einen Kommentar da :-)

    User-Gallery


    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


    14 Gedanken zu „Tee-Timer mit Arduino“

    1. Pingback: Stoppuhr mit Arduino und Segmentanzeige – Arduino+TM1637

    2. Pingback: Arduino millis() – Arduino Tutorial

    3. Hallo Stefan,

      Ich bin ziemlich neu im Arduino-Game und versuche mich an diesem Projekt. Kann ich den Taster auch einfach ersetzten durch einen “vier-Beinigen-Taster” (Wie den zur Ablage der Tasse)? Und wäre es einfach möglich einen Servo Motor einzubauen, um den Teebeutel auch aus der Tasse heraus nehmen zu lassen?

      Vielen Danke und Liebe Grüße

      1. Hi Pia,

        ja klar kannst du einen vierbeinigen Taster verwenden. Der hat zwar vier Beine, aber zwei davon sind jeweils im inneren mit einander verbunden (einfach ausprobieren, welche). Die Servo-Idee ist super! Klar kann man das machen. Muss man ja nur in case 2 und case 3 noch ein Servo-Ziel angeben. Probier es mal aus und schick mir den Code. Dann packe ich den mit auf die Seite :-)

        Liebe Grüße

        Stefan

    4. Hallo wie kann ich den qellcode c Teekocher in den Arduiner copieren.
      und von dieser Seite weg copieren.

      Bitte schreiben sie es mir.
      Mfg.gattermann

    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.