Straßenlaterne

Für das Modell einer Straßenlaterne verwenden wir einen AD-Wandler und einen analogen Lichtsensor, um die Helligkeit zu messen. GPIO 18 wird als Ausgang für eine Leuchtdiode benutzt.

Es müssen folgende Kabelverbindungen hergestellt werden:

Raspberry Pi Zero 3V3 von Pin 1 - PCF8591 AD-/DA-Wandler VCC
Raspberry Pi Zero GND von Pin 6 - PCF8591 AD-/DA-Wandler GND
Raspberry Pi Zero GPIO 2 - PCF8591 AD-/DA-Wandler SDA
Raspberry Pi Zero GPIO 3 - PCF8591 AD-/DA-Wandler SCL
Raspberry Pi Zero 3V3 von Pin 19 - Analoger Lichtsensor VCC
Raspberry Pi Zero GND von Pin 9 - Analoger Lichtsensor GND
Raspberry Pi Zero GND von Pin 14 - Dual Color LED GND
Raspberry Pi Zero GPIO 18 - Dual Color LED R
Analoger Lichtsensor SIG - PCF8591 AD-/DA-Wandler AIN1

Da beim Raspberry Pi die Anschlüsse SDA und SCL verwendet werden, muss man die I²C-Schnittstelle aktivieren (siehe I²C aktivieren), sonst tritt beim Ausführen des Programms ein Fehler auf.

Das Programm für die Straßenlaterne sieht so aus:

(definput sensors analog pcf-8591) #| sensors enthält die Messwerte |#

(defoutput lamp digital gpio-18) #| lamp steuert den digitalen Ausgang GPIO 18 |#

(defproc is-dark? ()
  (> (second sensors) 140)) #| Wenn der zweite Messwert größer als 140 ist, dann ist es dunkel. |#

(defproc is-light? ()
  (< (second sensors) 140)) #| Wenn der zweite Messwert kleiner als 140 ist, dann ist es hell. |#

(defproc off ()
  (progn
    (setq lamp nil) #| schaltet die LED aus |#
    (await-for-then is-dark? 3000 on))) #| Wenn es länger als 3 Sekunden dunkel ist, rufe on auf. |#

(defproc on ()
  (progn
    (setq lamp t) #| schaltet die LED ein |#
    (await-for-then is-light? 3000 off))) #| Wenn es länger als 3 Sekunden hell ist, rufe off auf. |#

(now off) #| jetzt off aufrufen |#

Mit der ersten Zeile werden die Messwerte des AD-Wandlers unter dem Namen sensors bekannt gemacht. Die zweite Zeile definiert GPIO 18 als Ausgang und gibt ihm den Namen lamp.

Die Straßenlaterne beginnt mit einem Aufruf der Prozedur off.

Die Prozedur off schaltet mit (setq lamp nil) den Ausgang GPIO 18 auf die Spannung von 0 V um. Dann wartet sie darauf, dass es mindestens 3 Sekunden lang dunkel ist und ruft die Prozedur on auf.

Die Prozedur on schaltet mit (setq lampe t) den Ausgang GPIO 18 auf die Spannung von 3.3 V um. Das bleibt so, bis es mindestens 3 Sekunden lang hell war. Dann wird wieder die Prozedur off aufgerufen.

Zum Ausführen des Programms siehe Circuit Lisp