3D-Drucker

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 Tee-Tasse. 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.

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 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 Button 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 und über einen Daumen nach oben freue ich mich immer!

Willst du noch mehr über Arduino erfahren, damit du so richtig durchstarten kannst?
Oder suchst du spannende Projekte zum Nachbauen?
Dann sieh' dir unbedingt die E-Books von StartHardware an.


Bevor du gehst, würdest du mir helfen, diese Website besser zu machen, indem du ganz kurz an einer Umfrage teilnimmst? Sind nur zehn Fragen und das würde mir sehr viel bedeuten.

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

8 thoughts on “Tee-Timer mit Arduino

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