Servod erstellt einen recht einfach zu bedienenden Gerätetreiber, den Sie via echo ansteuern (Listing 6, Zeile 5). Mit dem Parameter 2=140 weisen Sie dem Servo 2 den Wert 140 zu, was beim Aufbau in etwa der Mittelposition entspricht. Bei den verwendeten Servos variiert der Wert zwischen 90 bis 190, was ungefähr einem Winkel von 120 Grad entspricht. Jeder Servo-Typ verhält sich etwas anders; daher gilt es, etwas mit den Werten zu spielen.
Um alle Servos in die Ladeposition zu bekommen, kommt das Skript Load.pl aus dem Ordner kalender/servo/ zum Einsatz. Dort liegt (wie schon bei den LEDs) für jeden Tag ein Skript. Um Servoblaster wieder anzuhalten, beenden Sie alle servod-Prozesse mittels des Kommandos killall (Listing 6, Zeile 6).
Schrittmotor und Taster
Zur Anzeige des aktuellen Datums kommt eine runde Scheibe zum Einsatz, die ein Schrittmotor auf den passenden Tag dreht. Nach einiger Recherche beschloss der Autor, dass es sich nicht lohnt, die Steuerung für einen Schrittmotor selbst zu bauen. Deswegen verwendete er ein Modul TB6560 (Abbildung 5).

Abbildung 5: Die Schrittmotorsteuerung sorgt dafür, dass sich der Motor jeden Tag nur um wenige Grad dreht und damit das jeweils aktuelle Datum anzeigt.
Der Schrittmotor (siehe Kasten “Step by step”) selbst stammt aus einem alten Drucker, auch Floppy-Laufwerke eignen sich hervorragend als Spender dafür. Der im Projekt verbaute Motor vollzieht eine Umdrehung in 48 Vollschritten, was beim Adventskalender entsprechend zwei Schritte pro Tag erfordert. Da die Steuerung galvanisch getrennte Steuereingänge besitzt, schlossen wir sie direkt an den Raspberry an; die Verkabelung zeigt der Schaltplan Stepper.sch auf der Heft-DVD. Mit Gpio können Sie ausprobieren, ob das Ansteuern klappt (Listing 7).
Listing 7
$ gpio mode 11 out $ gpio write 11 1 $ gpio write 11 0
Step by step
Wie der Name schon sagt, positionieren Schrittmotoren den angetriebenen Anker schrittweise und eignen sich damit bestens für das genaue Positionieren. Als Rotor dient in der Regel ein Permanentmagnet, der Stator besteht aus mehreren in festen Winkeln angeordneten Wicklungen. Erzeugen die Spulen ein Magnetfeld, richtet sich der Stator entsprechend aus und der Motor beginnt, sich zu bewegen. Für einen ruhigen Rundlauf erzeugen die Spulen ein rotierendes Magnetfeld.
Ein geschickter Aufbau der Spulen und das Verwenden mehrerer Permanentmagneten ermöglicht, den Motor auf den Bruchteil eines Winkelgrads genau zu positionieren. Eine bestimmte Anzahl von Schritten entspricht immer einem definierten Winkel. Je nachdem, welche Mechanik der Motor einsetzt, entspricht jeder Schritt einem bestimmten Weg. Der Schrittmotor muss erst einmal in eine definierte Startposition fahren, von der aus man dann die Schritte zählt. Diesen Startpunkt definiert meist eine Lichtschranke oder ein Endschalter.
Das Ansteuern eines Schrittmotors ist nicht ganz trivial. Daher gibt es speziell für diesen Zweck entwickelte Halbleiter, wie etwa den im Adventskalender-Projekt eingesetzten TB6560AHQ. Er unterstützt verschiedene Betriebsmodi, unter anderem auch Halb- und Viertelschritt. Weiterhin verfügt er über eine Stromüberwachung, um einen sicheren Betrieb zu gewährleisten.
Beim Taster, der die Ausgabe des Geschenks auslöst, gilt es lediglich zu beachten, dass die GPIO-Schnittstelle des Raspberry nur 3,3 Volt verträgt. Sie finden den Taster im Schaltplan Stepper.sch; seine Funktion testen Sie mit gpio readall.
Mastermind
Damit alle Komponenten zusammenarbeiten, benötigen Sie eine Steuerungsinstanz. Primär muss diese warten, bis jemand den Taster drückt, und dann die Programme und Skripte für das aktuelle Datum starten.
Einige Komponenten, wie etwa der Audioplayer, müssen asynchron starten, also als eigener Prozess. Andere Abläufe erledigt das Master-Skript direkt, wie das Ansteuern des Schrittmotors. Listing 8 zeigt das Skript mcp.pl, das Sie auch auf der Heft-DVD finden.
Listing 8
do {
$tag=(localtime(time))[3];
$tag = $tag < 10 ? $tag = "0".$tag : $tag;
print "Warte auf Taster";
do {
open($t,"gpio read 10 |");
$i=<$t>;sleep 1;
} while($i=~m/0/);
print "Aktueller Tag: $tag\n";
system ("nohup ogg123 ./musik/$tag* &");
print "Musik gertartet\n";
system ("gpio write 11 1");
system ("gpio write 11 0");
system ("gpio write 11 1");
system ("gpio write 11 0");
print "Tag eingestellt\n";
system ("nohup perl ./led/$tag.pl &");
sleep 25;
system ("perl ./servo/$tag*");
sleep 1000;
} while($tag<=24);
Einmal gestartet, läuft das Skript 24 Tage durch. In einer SSH-Shell starten Sie es mittels nohup perl mcp.pl &. Alle zur Initialisierung der Hardware nötigen Schritte finden Sie noch einmal im Extraskript init.pl, das Sie beispielsweise nach einem Reboot ausführen.
Festlicher Chic
Technisch gesehen, ist damit nun alles im Lot. Auf Ästheten mag die Lattenkonstruktion des RasPi-Adventskalenders zugegeben etwas unweihnachtlich wirken (Abbildung 6). Mit etwas Krepp und ein paar Christbaumkugeln verleihen Sie ihr aber schnell festlichen Eleganz.

Abbildung 6: Eine Schönheit ist der Adventskalender noch nicht gerade, aber mit der passenden Verzierung bekommt er im Handumdrehen ein weihnachtliches Outfit.
Infos
- Reichelt Elektronik: http://reichelt.de
- Raspbian: http://www.raspbian.org





