Aus Raspberry Pi Geek 06/2016

Mit dem Raspberry Pi einen Weihnachtskalender ansteuern (Seite 3)

Zum Ablauf benötigen Sie zwei Skripte. Das erste (Listing 5) startet um 23:45 Uhr und prüft, ob noch ob ein calendar.sh-Prozess vom Vortag läuft. Falls ja – etwa weil der Besitzer vergessen hat, den Kalender zu bedienen –, wirft das Skript das Päckchen kommentarlos aus und löscht den Prozess.

Listing 5

 

## Datei clean.sh
#!/bin/bash
outps=($(/bin/ps -ef | /bin/grep calendar | /usr/bin/wc))
echo ${outps[0]}
if [ ${outps[0]} -gt 2 ]; then
  # move gift outside
  echo Move
  /bin/echo 0=100 > /dev/servoblaster
  /bin/sleep 1
  /bin/echo 0=140 > /dev/servoblaster
fi
/usr/bin/killall servod
/usr/bin/killall calendar.sh

Das zweite Skript (Listing 6) startet um 00:05 Uhr und setzt zuerst das Datum im Display auf den aktuellen Wert. Danach wartet es darauf, dass jemand den Taster betätigt. Sobald das erfolgt, spielt es den für diesen Tag vorgesehenen Sound ab und schiebt das Päckchen aus. Danach beendet sich das Programm selbst.

Listing 6

 

## Datei calendar.sh
#!/bin/bash
# init
/usr/local/bin/gpio load i2c
/usr/local/bin/gpio mode 1 in
/usr/bin/amixer cset numid=3 1
/home/pi/calendar/servod --p1pins=11 --pcm
# get day
day=($(/bin/date))
day=${day[2]}
# write 7Seg
/usr/sbin/i2cset -y 1 0x3f 0x$day
# wait for Button
while [ "$(/usr/local/bin/gpio read 1)" != 1 ]; do
  /bin/sleep 0.5
done
# play sound
/usr/bin/nohup /usr/bin/play /home/pi/calendar/sound/$day* &
# move gift outside
/bin/sleep 10
/bin/echo 0=100 > /dev/servoblaster
/bin/sleep 1
/bin/echo 0=140 > /dev/servoblaster

Damit die Skripte zur richtigen Zeit ihren Dienst verrichten, ergänzen Sie die Datei /etc/crontab um die Zeilen aus Listing 7. Achten Sie darauf, dass die Einträge in der Crontab von root stehen müssen, da das Starten und Stoppen von Servoblaster administrative Rechte erfordert. Falls der Kalender fehlerhaft arbeitet, prüfen Sie mit date, ob das Datum und die Uhrzeit auf dem RasPi stimmen.

Listing 7

 

55 23 * * * /bin/bash /home/pi/calendar/clean.sh
05 00 * * * /bin/bash /home/pi/calendar/calendar.sh

Da die genannten Skripte Ausführrechte benötigen, setzen Sie diese mit dem Befehl chmod 775 *.sh. Eine wichtige Sache gilt es noch zu beachten: Der servod muss sich im Verzeichnis der Skripte befinden.

Frohe Weihnachten

Fertig dekoriert macht der raffinierte Adventskalender auch optisch einiges her (Abbildung 4). Falls er Ihnen so noch zu langweilig wirkt, passen Sie ihn optisch nach Ihren eigenen Vorstellungen an – nur die Fantasie setzt dabei Grenzen.

Abbildung 4: Der dekorierte Adventskalender sieht in dieser Version schon recht ansehnlich aus.

Abbildung 4: Der dekorierte Adventskalender sieht in dieser Version schon recht ansehnlich aus.

Das einfach gehaltene Steuerprogramm lässt sich sicherlich noch um die eine oder andere Raffinesse erweitern. Auch die Verbindung zwischen Servo und Schubstange funktioniert, lässt sich aber noch optimieren.

Autor und Redaktion wünschen Ihnen viel Spaß beim Nachbauen dieses vorweihnachtlichen RasPi-Projekts und Ihrer ganzen Familie schon einmal ein frohes Weihnachtsfest! 

Infos

  1. WiringPi: http://wiringpi.com
  2. Cron und At verwenden: Heike Jurzik, “Punktlandung”, LU 02/2006, S. 94, http://linux-community.de/9812
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben