Für warme Momente: der Teemann

Der Teemann

Es war in der Vorweihnachtszeit. Draußen ist es nass und kalt und zum Aufwärmen trinke ich öfter mal einen Tee. Tee bin ich nicht gewohnt, weshalb ich gut auf die Zeit des Ziehens achte. Zieht der Tee nämlich zu lange, bringt er mich zum einschlafen. Ich habe mich dabei an denn Teehasen “Teeodohr” erinnert. Das war mal ein Projekt aus der Zeitschrift Make, in dem ein 3D-gedruckter Hase mit seinem Ohr den Teebeutel nach bestimmter Zeit aus der Tasse zieht. Nach langer Pause war das eine schöne Idee für ein eigenes kleines Projekt. Nur gab es einige Tücken. Ich besitze keinen 3D-Drucker und bin auch nicht erfahren mit der Laubsäge. Überhaupt passt ein Hase nicht recht in die Vorweihnachtszeit. Wenn es auch im Rheinland eher selten schneit, so ist es mehr die Jahreszeit für einen Schneemann. Das ist es, ich baue einen Teemann!

Die Technik

Das Rad brauchte ich nicht neu erfinden. Die Make hat bereits vorgearbeitet: Ein Servomotor senkt und hebt den Teebeutel. Zwei Tasten ermöglichen die Bedienung, wobei der eine Taster die Zieh-Zeit auswählt und der zweite den Vorgang startet oder auch vorzeitig unterbricht. Zudem sind LEDs als Status vorgesehen. Sie signalisieren insbesondere die laufende Zeit.

Diese Konfiguration empfinde ich allerdings als zu eingeschränkt, denn es gibt nur zwei vorgegebene Zieh-Zeiten. Es macht aber einen Unterschied, ob ich einen schwarzen Tee drei Minuten oder einen grünen zwei Minuten ziehen lasse. Der Kräutertee darf auch gerne länger im Wasserbad verweilen. Ich beschloss deshalb, die Ursprüngliche Steuerung etwas zu modifizieren. Eine Taste ist weiterhin für die Zeit zuständig. Sie wird in Schritten von jeweils einer Minute herauf gezählt, bis die neun erreicht ist. Dann beginnt das Zählen wieder von vorn. Die Anzahl der zu ziehenden Minuten ist somit einstellig und einfach mit einer 7-Segment-Anzeige darstellbar. Der Punkt der Anzeige blinkt, wenn der Tee zieht.

Zwei Taster, ein Servo-Motor, eine 7-Segment-Anzeige und ein Signalgeber, der den fertigen Tee verkündet, dafür hat ein Arduino noch immer ausreichend Anschlüsse.

Die rote 7-Segment-Anzeige ist direkt am Arduino angeschlossen, wobei Diode noch einen 220 Ohm Widerstand spendiert bekommt.  Die Anschlüsse sind D2 für Segment “a”, D3 für “b” bis D9 für den Punkt. An D10 hängt der Tongeber und D11 ist für den Servo-Motor gedacht. Die beiden Taster sind mit den analogen Eingängen A1 für die Zeit und A2 für Start/Stop verbunden.

Die konkrete Wahl der Ausgänge ist einmal der Funktion geschuldet. Die Ansteuerung des Signalgeber und des Servo-Motor erfordert Pulsweitenmodulation (PWM). Für die Anzeige liegen die Ausgänge direkt nebeneinander, so das die Verbindung mit einer Anzeige-Platine und die Ansteuerung einfach ist (siehe unten).

Das Programm des Teemann

Das zugehörige Programm ist auf Githup zu finden. Es basiert auf der Make-Vorlage zu Teeodohr. Einige Schlenker des Servo-Motors, habe ich allerdings entfallen lassen. Sie könnten den schlichte Aufbau des Teemanns sonst in Mitleidenschaft ziehen.

Neu ist die Ansteuerung der 7-Segment-Anzeige. Der anzuzeigende Wert steht in einer globalen Variable time. Er wird durch den Minuten-Schalter erhöht, bis zum Wert neun und anschließend wieder auf eins gesetzt. Während des Ziehens, reduziert sich der Wert im Minutentakt.

Bei der eigentlichen Ansteuerung hilf ein konstantes Bytefeld z wie Ziffer. Die Bits eines Bytes steht für den Zustand eines Segments: an oder aus. Die Position des Bytes im Feld ist der Index für die darzustellende Ziffer. Angenommen es verbleiben noch zwei Minuten zu ziehen, dann gibt z[time] das dritte Byte im Feld zurück, den die Indizierung beginnt mit Null.

Dieses Byte bekommt die Prozedur segmente für die Ansteuerung. Darin ist eine Schleife, die für die anzusteuernden Ausgänge von 2 bis 9 läuft. In der Schleife wird für den aktuellen Ausgang dieser ein oder aus geschaltet, abhängig vom vordersten Bit des Parameters. Nachdem ein Bit für die Ansteuerung gesorgt hat, schiebt das Programm alle Bits um eine Stelle nach links. Das zuvor betrachtete Bit entfällt und das nächste kann zur Steuerung herangezogen werden.

Die Ansteuerung des Punktes erfolgt unabhängig davon in der Zählschleife des Ziehens. Das Timing erfolgt mit delay-Anweisungen, wodurch die Zeitnahme etwas ungenau ist. Die paar Millisekunden wird ein Tee aber durchaus ertragen.

Der Aufbau

Praktisch und Mechanisch ungeübt ist das für mich der härteste Teil. Die Elektronik ist freischwebend auf zwei Lockraster-Platinen verlötet. Eine Platine mit dem Arduino Nano und die zweite für die Anzeige, die auch die Widerstände enthält. Die Verbindungen sind alle über Stecker auch wieder zu lösen.

Der Teemann selbst bekommt aus eine Basisplatte aus einem Postkartenbrettchen. Durch ein mittiges Loch kommt eine M3 Gewindestange, die mit Scheibe und Mutter beidseitig fest verschraubt wird. Die Mutter auf der Unterseite landet dabei in dem Abschnitt, der für die Postkarte bestimmt ist, so dass sie versenkt ist und das Brett gerade aufliegt.

Auf die Stange kommen hohle Styropor Kugeln. Sie sind mit einem scharfen Messer gut zu bearbeiten. In die untere Kugel gibt es einen Abschnitt für das Panel, welches ich mit der Laubsäge erstellt habe. In die obere Kugel wird seitlich der Servo-Motor eingelassen. Die Kabel passen durch kleine Löscher in den Kugeln.

Last but nut least bekommt der Teemann einen Kopf aus einer kleineren, massiven Styropor-Kugel, die auf das Ende der Gewindestange gesteckt wird.

Der Servo bewegt die Teebeutel mit Hilfe eines stärkeren Drahtes, der per Heißkleber an den Servo und mit einer kleinen Klammer versehen ist.

Mach mal Tee man

Es ist Zeit für einen Testlauf. Das ganze funktioniert nicht schlecht, doch wie man sieht ist etwas Tuning notwendig:

Teemann_bekleckert

Die Winkel für den Servo-Motor habe ich aus dem Teeodohr-Projekt übernommen. Die gehen offensichtlich ziemlich auf den Latz. Hier liegt ein Vorteil der Stromversorgung über den Arduino-USB-Anschluss. Dies ist auch gleichzeitig der Programmierzugang und nach einer Anpassung funktioniert das dann ganze dann auch wie gewünscht.

Teemann_in_aktion

Winterprojekt: Die Anzeige der Digitaluhr

Das neue Jahr hat begonnen und es kann mit der Anzeige weitergehen. Dieser Beitrag beschreibt insbesondere die Hardware, also den Aufbau und die Verdrahtung. Für den Test gibt es ein erstes kleines Programm.

Die eigentliche Anzeige

Eine digitale Uhr benötigt jeweils zwei Ziffern für die Stunden und die Minuten. Die Anzeige besteht demnach aus vier 7-Segment-Anzeigen. in einer ersten Hochrechnung sind folglich für die Ansteuerung 7 x 4 = 28 digitale Ausgänge erforderlich. So viele Ausgänge besitzt der Arduino allerdings nicht. Deshalb erfolgt die Ansteuerung multiplex.

Das Multiplex-Prinzip

Bei Bildschirmen oder Fernsehern gibt es immer eine Frequenzangabe, Die Angabe von beispielsweise 50 Hertz (Hz) bedeutet, dass fünfzig mal in der Sekunde das Bild erneuert wird. Unser Auge ist träge, deshalb sind schnelle, einzelne Bilder nicht mehr zu unterscheiden. Entsprechend verschmelzen sie zu einer laufenden Bewegung.

Mit den Ziffern der Uhr funktioniert es genauso. Eigentlich zeigen die 7-Segment-Anzeigen nacheinander ihre Ziffern an. Erfolgt der Wechsel allerdings schnell genug, so sehen unsere Augen vier leuchtende Ziffern.

Für die Ansteuerung benötigt dieses Verfahren sieben Ausgänge gleichzeitig für alle vier Segmente. Vier weitere Ausgänge steuern jeweils den gemeinsamen Gegenpol der Segmente und wählen die jeweils anzuzeigende Ziffer aus. Die Anzahl der benötigten Ausgänge reduziert sich immerhin von 28 auf 11 und die kann der Arduino ansteuern.

Unter Strom

Mit den Strom einer einzelne Leuchtdiode kann der Arduino umgehen. An den gemeinsamen Gegenpol geben beispielsweise für die Ziffer Acht immerhin sieben Dioden Strom ab. In Foren liest man häufiger der Arduino kann bis zu 50 mA liefern. Laut Datenblatt sind es allerdings nur 40 mA. Da die blauen Dioden sehr hell sind, könnten größere Vorwiderstände gewählt werden, beispielsweise 1 Kiloohm. Von 5 Volt fallen 2,8 Volt Spannung an der Diode ab und folglich verbleiben 2,2 Volt am Widerstand. Geteilt durch 1000 Ohm mal 7 Segmente = 15,4 mA, das funktioniert. Bei einem Experiment ergab sich allerdings das die Ausgänge meines Arduino unterschiedlich viel Strom liefern, so dass ein Segment deutlich dunkler war als die anderen. Nach einem Tausch war es wieder das Segment dieses Ausgangs, das dunkler war. Das ist unschön, deshalb habe ich den Strom mit Hilfe von Transistoren geschaltet.

Der Transistor als Schalter

In der Restekiste habe ich noch BC 547C Transistoren. Die Verstärkung (das “C”) ist für diese Anwendung eigentlich übertrieben, trotzdem erfüllen sie ihren Zweck. Sie können mit einem kleinen Strom einen großen schalten. Bei den von mir verwendeten 220 Ohm Widerständen ist das 7 x (2,2/220) = ca. 70 mA. Meine kleine Testschaltung sieht wie folgt aus:

Schalten mit dem Transistor

Auf diesem Video habe ich das Schalten durch den Arduino durch einen Taster simuliert. Diese Schaltung kann ich dementsprechend auf den gemeinsamen Pol aller 7-Segement-Anzeigen anwenden.

Der Schaltplan für die Anzeige insgesamt ist

Schaltung Anzeige

Testprogamme

Die Funktion ziffer(int) aus dem letzten Beitrag sowie das Feld mit den Ansteuerungscodes benutze ich genauso wie im letzten Beitrag. Die Initialisierungsschleife des Setup nimmt zudem vier weiteren Ausgänge 3 bis 6 auf, die ebenfalls als Ausgang eingestellt werden. Die Werte für die darzustellenden Ziffern enthält das Feld

int ausgabe[] = { 4, 3, 2, 1};

Im Loop rufe ich zunächst nur eine Prozedur  doAusgabe() auf, in der eine Schleife die nächste Ziffer schaltet.

for(int z=0; z<4; z++) {
  selectZiffer(z);
  ziffer(ausgabe[z]);
  delay(5);
}

Sie selektiert zunächst das zu schaltende Segment, steuert anschließend die Segmente entsprechend der zugehörigen Ziffer an und wartet. Die Prozedur selectZiffer(int) schaltet alle außer dem angeben Segment ein.

void selectZiffer(int z) {
  for(int i=0; i<4; i++) {
    if(i==z) digitalWrite(6-i, HIGH);
    else digitalWrite(6-i, LOW);
  }
}

Die Verzögerung in doAusgabe() definiert im Moment für die maximale Wiederholrate. Ist die Wartezeit zu lang, so flimmert die Anzeige oder extremer, der Wechsel ist erkennbar. Für den Funktionstest ist das allerdings so gewollt. So lässt sich der Ablauf schließlich auf gut verfolgen.

Resumee

Technisch funktioniert die Anzeige nun. Ein kleines Programm existiert bereits, doch das ist ausbaufähig. Die “softe” Seite der Anzeige ist Thema des nächsten Beitrags.

Bisherige Beiträge zum Winterprojekt