Click here to load reader

Raspberry Pi: Schnittstellen und Erweiterungen · Raspberry Pi: Schnittstellen und Erweiterungen Die zentrale Schnittstelle für das Messen, Steuern und Regeln von angeschlossenen

  • View
    224

  • Download
    3

Embed Size (px)

Text of Raspberry Pi: Schnittstellen und Erweiterungen · Raspberry Pi: Schnittstellen und Erweiterungen...

  • Raspberry Pi: Schnittstellen und Erweiterungen

    Die zentrale Schnittstelle fr das Messen, Steuern und Regeln von angeschlossenen Schaltern, Sensoren und Aktoren ist die GPIO-Schnittstelle (General Purpose Input/ Output) des Raspberry Pi. Mit dieser Schnittstelle sind Sie fr smtliche Dinge in diesem Buch gerstet hier erweitern Sie den Raspberry Pi mit Schaltungen und Funktionen auf dem Steckboard, die spter per Ltkolben in ein festes Platinen-design berfhrt werden knnen. Neben den Sensor- und Schaltungslsungen Marke Eigenbau knnen Sie auch auf die mittlerweile zahlreichen zustzlich zu erwerbenden Steck- und Erweiterungsboards zurckgreifen, wie beispielsweise das Embedded-Pi- und das GertDuino-Board oder das umfangreich bestckte Erweite-rungsboard Gertboard, und sie fr eigene Sensorikzwecke nutzen.

  • 1 Raspberry Pi: Schnittstellen und Erweiterungen

    12

    Bild 1.1: Grundstzlicher Aufbau des Raspberry Pi und der GPIO-Pinleiste Model B, Revision 2.

    (Grafik: raspberrypi.org)

    1.1 Raspberry Pi fr Hardwareprojekte konfigurieren

    Egal ob Sie selbst fr die vielen verschiedenen Sensoren am Markt eine passende Schaltung im Eigenbau entwickeln oder eine Hilfsplatine wie das PiFace oder das Gertboard nutzen mchten, das A und O ist der Zugriff per Software auf die Schnitt-stelle bzw. die Funktionen der einzelnen GPIO-Pins. Dafr stehen zahlreiche Mglich-keiten, viel Zubehr und Erweiterungsboards zur Verfgung, die in den nachfolgenden Kapiteln Schritt fr Schritt erklrt und eingesetzt werden. Doch diese technischen Hilfsmittel sind oft wertlos, wenn das Grundsystem nicht stimmt zunchst mssen Sie fr ein aktuelles Betriebssystem und Treiber sowie fr die Installation der notwen-digen Tools und Hilfsmittel sorgen, damit der Umgang mit den Sensoren aller Art auf dem Raspberry Pi von Anfang an erfolgreich ist.

  • 1.1 Raspberry Pi fr Hardwareprojekte konfigurieren

    13

    Alles fr ein frisches und knackiges Raspbian

    Unabhngig davon, ob es sich um einen normalen Computer mit Windows, Linux oder Mac OS X oder um einen kleinen Raspberry Pi handelt, ein topaktuelles System ist immer empfehlenswert. Der Vorteil eines frisch aktualisierten Systems besteht vor allem darin, dass Sie hier etwaigen Fehlern schon im Vorfeld aus dem Weg gehen. Dank der Prfung mglicher Abhngigkeiten bleiben Pakete aktuell, auch wenn sie nicht explizit zum Aktualisieren ausgewhlt werden.

    Wenn Sie unsicher sind, welcher Kernel beispielsweise im Moment im Einsatz ist, nutzen Sie dafr das uname-Kommando:

    uname -a

    Einen alten bzw. veralteten Kernel knnen Sie upgraden und brauchen nicht von vorne zu starten, indem Sie die Raspbian-Imagedatei installieren. Stattdessen nutzen Sie bei einem bestehenden System den Befehl:

    sudo apt-get update

    Erst nach einem update ist das upgrade wirklich sinnvoll, da erst mit dem apt-get update-Kommando die lokale Paketdatenbank auf den aktuellsten Stand gebracht wird. Mit dem Befehl

    sudo apt-get upgrade

    aktualisieren Sie das installierte Raspbian, bei einem notwendigen Kernel-Upgrade verwenden Sie nach einem etwaigen Neustart per sudo reboot anschlieend dieses dazugehrige Kommando:

    sudo apt-get dist-upgrade

    sudo reboot

    Whrend sich das apt-get upgrade primr um Anwendungen und Treiber kmmert, sorgt apt-get dist-upgrade fr den aktuellen Kernel und installiert dessen Updates. Hat das Installationsprogramm hier nderungen durchgefhrt, sollten Sie den Raspberry Pi neu starten und den Neustart live mitverfolgen. Nur dann haben Sie die Gewissheit, dass bei der Kernel-Aktualisierung alles gut gegangen ist und alle Dienste wieder starten.

    Ungenutzte Tools und Pakete entrmpeln

    Je nach Einsatzzweck des Raspberry Pi ist es oftmals, und nicht nur aus Speicher-platzgrnden, sinnvoll, nicht bentigte Tools und Pakete zu deinstallieren. Wer etwa den Raspberry Pi ausschlielich als berwachungsserver fr diverse Sensoren im Heimnetz betreiben mchte, bentigt Dinge wie beispielsweise den grafischen Desktop samt dazugehriger Tools nicht. Entfernen Sie diese, schaffen Sie zudem auch Platz auf der SD-Karte.

    apt-get purge --auto-remove scratch debian-reference-en dillo idle3

    python3-tk idle python-pygame python-tk lightdm gnome-themes-standard

  • 1 Raspberry Pi: Schnittstellen und Erweiterungen

    14

    gnome-icon-theme raspberrypi-artwork gvfs-backends gvfs-fuse desktop-base

    lxpolkit netsurf-gtk zenity xdg-utils mupdf gtk2-engines alsa-utils lxde

    lxtask menu-xdg gksu midori xserver-xorg xinit xserver-xorg-video-fbdev

    libraspberrypi-dev libraspberrypi-doc dbus-x11 libx11-6 libx11-data libx11-

    xcb1 x11-common x11-utils lxde-icon-theme gconf-service gconf2-common

    iceweasel

    Das Entfernen obiger Pakete hat in diesem Beispiel mehrere Hundert MB Speicher-platz freigerumt, was sich gerade beim Einsatz einer klein dimensionierten SD-Karte auszahlt.

    apt-get autoremove

    sudo apt-get update

    sudo apt-get upgrade

    sudo reboot

    Nach dem Entrmpeln sollten Sie sicherheitshalber die Abhngigkeiten prfen und anschlieend das System auf den aktuellen Stand bringen, bevor Sie mit dem reboot-Kommando den Raspberry Pi neu starten.

    Fernzugriff und Remotedesktop

    Wenn Sie den Raspberry Pi in das Heimnetz und ins Internet bringen mchten, muss er ber ein Kabel an den Verteiler, also den Router, angeschlossen werden. Sie knnen auch eine Netzwerkverbindung per Funk anlegen. Dazu bentigen Sie nur einen passenden WLAN-Adapter fr den Raspberry Pi. Egal welche Netzwerkschnitt-stelle Sie im Endeffekt nutzen, standardmig ist auf dem Raspberry Pi ein DHCP-Client aktiv, der seine Netzwerkparameter vom DHCP-Server (Dynamic Host Configuration Protocol) in Ihrem Heimnetz bezieht.

    Bekanntlich liefert DHCP nicht nur die IP-Adresse, sondern es lassen sich auch Einstellungen zum DNS-Server, dem Gateway, der Netzmaske, der Domne und weiterem mithilfe von Optionen automatisch ttigen. Die IP-Adresse des Raspberry Pi kann statisch, aber in Abhngigkeit von der MAC-Adresse des Rechners, oder dynamisch zugewiesen werden. Kurzum: Der Raspberry Pi bekommt seine IP-Adresse und die dazugehrigen Netzwerkeinstellungen automatisch zugewiesen. Wer nicht immer direkt vor dem Raspberry Pi sitzen, sondern diesen aus der Ferne steuern mchte, der nutzt auf der Kommandozeile den SSH-Zugriff.

    Einmal eingerichtet, knnen Sie benutzerabhngig nahezu nach Belieben auf die System- und Nutzerdaten auf dem Zielcomputer zugreifen, Daten hin- und herkopieren und vieles mehr. Manche Lsungen in diesem Buch, wie beispielsweise die Nutzung der Arduino-Software fr das Gertboard, GertDuino oder das Embedded-Pi-Board, bentigen die grafische Benutzeroberflche lxde. Dafr brauchen Sie im Heimnetz je nach Computer nicht nur ein Programm wie Remotedesktop, VNC etc. und eventuell noch zustzliche Tools, sondern auch die sichere SSH-Verbindung muss entsprechend eingerichtet werden.

  • 1.1 Raspberry Pi fr Hardwareprojekte konfigurieren

    15

    Kommandozeilenadministration mit der Allzweckwaffe SSH

    Wer den Raspberry Pi mit installiertem Linux ohne Tastatur, Maus und eigenen Bild-schirm betreiben mchte, ihn aber dennoch vom Schreibtisch oder der Elektronik-werkstatt aus bequem steuern und programmieren will, der bentigt einen Fern- bzw. Remotezugriff auf das Gert. Damit nutzen Sie die entfernte Kommandozeile auf dem lokalen Rechner, egal ob es sich bei Ihrem Arbeitsplatz-PC um einen Linux, Mac- oder Windows-Rechner handelt.

    Bild 1.2: Grundvoraussetzung fr den SSH-Zugriff ist selbstverstndlich ein installierter SSH-

    Client auf dem Computer sowie ein installierter und konfigurierter SSH-Server auf dem

    Raspberry Pi. Bei den neueren raspi-config-Versionen ist der Konfigurationsdialog von SSH

    in das Men Advanced Options verschoben worden.

    Ist der Raspberry Pi frisch mit dem Raspbian-Betriebssystem installiert, richten Sie diesen mit dem Kommando raspi-config ein, whlen dort im Hauptmen den Advanced Options-Eintrag und anschlieend den SSH-Meneintrag aus. Besttigen Sie die Frage Would you like the SSH server enabled or disabled? des Assistenten mit der [Enter]-Taste, nachdem Sie mit den Pfeiltasten auf die Enable-Schaltflche gewechselt sind. Damit aktivieren Sie den automatischen Start des eingebauten SSH-Servers.

    Je nach verwendeter Version erscheint dieser Konfigurationsdialog, in dem sich der Start des SSH-Servers festzurren lsst, damit dieser nach jedem Einschalten zur Ver-fgung steht, beim erstmaligen Einschalten des Raspberry Pi automatisch. Anschlie-end knnen Sie den Raspberry Pi ohne Bildschirm, Maus und Tastatur betreiben und sich ber das Netzwerk mit jedem beliebigen Client ber das sichere SSH-Protokoll mit dem Raspberry Pi verbinden.

  • 1 Raspberry Pi: Schnittstellen und Erweiterungen

    16

    IP-Adresse des Raspberry Pi im Heimnetz herausfinden

    Ist das Netzwerkkabel in den Raspberry Pi eingesteckt und ist dieser gestartet, ist es anfangs noch nicht ganz klar, ob bzw. mit welcher IP-Adresse der Raspberry Pi im Heimnetz berhaupt erreichbar ist. Hier behelfen Sie sich am schnellsten mit dem Start des Konfigurationsmens des heimischen WLAN-DSL-Routers und prfen dort im Bereich Netzwerk oder DHCP-Server bei den Namen und IP-Adressen, ob dort ein neuer Hostname raspberrypi vorhanden ist oder nicht.

    Standardmig bezieht der Raspberry Pi seine IP-Adresse automatisch per DHCP, sofern im Heimnetz ein DHCP-Server zur Verfgung steht. Haben Sie im Heimnetz bereits einen Linux/Unix-Computer im Einsatz, knnen Sie die IP-Adresse auch ber den nmap-Terminalbefehl herausfinden, der allerdings erst installiert werden muss. Dies holen Sie gegebenenfalls mit dem Kommando

    sudo apt-get install nmap

    nach. Anschlieend scannen Sie mit dem nmap-Kommando das heimische Netzwerk nach verfgbaren Computern. Dafr bentigen Sie den Adressbereich des Heimnet-zes (hier 192.168.123.0), der in Ihrem Fall jedoch ganz anders lauten kann. Diesen finden Sie per Eingabe des ifconfig/ipconfig-Kommandos in ein Terminalfenster an Ihrem Computer heraus. Wenn Sie anschlieend das nmap-Kommando

    nmap 192.168.123.0/24

    starten, kann es je nach Netzwerk etwas lnger dauern, bis das komplette Netzwerk durchsucht ist und nmap dann auf die Suche gehen kann.

    Bild 1.3: Mit dem nmap-Kommando durchsuchen Sie das heimische Netzwerk nach IP-

    Adressen, die auch einen geffneten SSH-Port 22 zur Verfgung stellen.

  • 1.1 Raspberry Pi fr Hardwareprojekte konfigurieren

    17

    Besser ist es, die Suche von vornherein einzuschrnken und sich nur Computer anzei-gen zu lassen, die auch einen geffneten Port 22 (fr SSH ntig) im Heimnetz anbie-ten.

    nmap -p 22 --open -sV 192.168.123.0/24

    Alternativ knnen Sie das Ergebnis in eine Datei (hier ssh-homenet.txt) schreiben:

    nmap -p 22 --open -sV 192.168.123.0/24 >> ssh-homenet.txt

    Ist nun die IP-Adresse bekannt, verbinden Sie sich mit dem Raspberry Pi unter Win-dows steht Ihnen das kostenlose PuTTY-Werkzeug (http://bit.ly/1jsQjnt) zur Verf-gung, unter Linux und Mac OS nutzen Sie das eingebaute Terminal.

    Einrichten einer statischen IP-Adresse

    Wie bereits erwhnt, sind die Netzwerkeinstellungen des Raspberry Pi auf DHCP konfiguriert. Soll der Raspberry Pi hingegen immer eine feste, statische IP-Adresse verwenden, tragen Sie diese in die Konfigurationsdatei /etc/network/interfaces ein. Dafr ndern Sie sie wie folgt:

    sudo /etc/network/interfaces

    und ndern die Zeile mit den Standardeinstellungen von:

    iface eth0 inet dhcp

    in:

    iface eth0 inet static

    address 192.168.123.45

    network 192.168.123.0

    netmask 255.255.255.0

    broadcast 192.168.123.255

    gateway 192.168.123.199

    Die Parameter mssen natrlich zu Ihrem eigenen Netzwerk passen. In diesem Fall verwendet das Netzwerk den Bereich 192.168.123.X. Erst nach dem Speichern der Datei /etc/network/interfaces und dem notwendigen Neustart per sudo reboot-Kommando werden die nderungen wirksam.

    Remotedesktop fr den entfernten Zugriff einrichten

    Nicht jeder hat an dem Raspberry Pi einen Bildschirm, eine Maus und eine Tastatur angeschlossen. Manche Programme bentigen auf dem Raspberry Pi jedoch eine grafische Benutzeroberflche, damit das Programm berhaupt eingerichtet und genutzt werden kann. Die Rettung fr das genannte Problem ist die Installation des Remote Desktop Protocol (RDP), mit dem Sie nicht nur von Mac OS X und Linux, sondern auch von Windows-PCs aus direkt auf die grafische Oberflche des Raspberry Pi zugreifen knnen. Voraussetzung dafr ist jedoch eine aktive grafische

  • 1 Raspberry Pi: Schnittstellen und Erweiterungen

    18

    Benutzeroberflche auf dem Raspberry Pi, die Sie mit dem Systemwerkzeug sudo raspi-config einschalten.

    Bild 1.4: Mit dem Systemwerkzeug raspi-config initiieren Sie den Start der grafischen

    Benutzeroberflche ber den Eintrag Enable Boot to Desktop.

    Anschlieend besttigen Sie die Nachfrage bei Should we boot straight to desktop? mit Yes und starten das System neu. Nach dem Neustart installieren Sie noch das xrdp-Paket, das die Remotedesktopfunktionen auf dem X-Server des Raspberry Pi zur Verfgung stellt:

    sudo -i

    apt-get install xrdp

    Nach einem kurzen Moment ist das Paket installiert und der entsprechende Dienst gestartet. Nun starten Sie auf dem Windows-Computer das Programm Remotedesk-topverbindung und tragen im Verbindungsfenster die IP-Adresse des Raspberry Pi ein.

    Bild 1.5: Nach dem Start des unter Windows standardmig verfgbaren Remotedesktop

    klicken Sie den Sicherheitshinweis zunchst weg.

  • 1.1 Raspberry Pi fr Hardwareprojekte konfigurieren

    19

    Dann erscheint der Log-in-Bildschirm der grafischen Benutzeroberflche des Raspberry Pi auf dem Windows-Bildschirm. Hier nutzen Sie unter username den Benutzer pi samt dem dazugehrigen Passwort, um sich einzuloggen.

    Bild 1.6: Etwas Geduld bitte: Bis die Daten geladen sind und entsprechend dargestellt werden,

    dauert es wenige Sekunden.

    Erscheint hingegen nach dem Start von xrdp und dem Log-in-Versuch eine Fehler-meldung mit dem Text

    connecting to 127.0.0.1 5910

    error problem connecting

    ist der installierte notwendige tigntvncserver-Dienst mglicherweise defekt. Dann deinstallieren Sie zunchst das xrdp- und das tightvncserver-Programm und instal-lieren dann beide erneut.

    sudo apt-get remove xrdp -y

    sudo apt-get remove tigntvncserver -y

    sudo apt-get install tigntvncserver -y

    sudo apt-get install xrdp -y

    Was jetzt noch fehlt, ist die eigentliche Software installieren Sie diese auf dem gewohnten Weg ber sudo apt-get PAKETNAME install nach.

    Remotedesktop-Alternative: xming ber SSH nutzen

    Wer hingegen Mac OS X oder Linux im Einsatz hat, installiert entweder die Remote-desktopverbindung fr dieses Betriebssystem nach oder verwendet statt des Remote Desktop Protocol (RDP) das kostenlose XMing (http://bit.ly/1iVhjvl), das mit dem verbreiteten VNC-Protokoll arbeitet.

  • 1 Raspberry Pi: Schnittstellen und Erweiterungen

    20

    Bild 1.7: Bei dem

    gespeicherten PuTTY-

    Profil fr den Raspberry Pi

    mssen erst die X11

    forwarding-Einstellungen

    konfiguriert werden.

    Bekanntlich verwendet der Raspberry Pi eine X-11-Benutzeroberflche zur grafischen Darstellung der Fenster. Mit dem sicheren SSH-Protokoll verbinden Sie sich per Kon-sole mit dem Raspberry Pi und passen die SSH-Verbindungsparameter entsprechend an. Dann kann sogar per SSH mit dem Werkzeug xming auf einem Windows-PC auch die X-Server-Benutzeroberflche angezeigt werden.

    Prfen Sie zunchst auf dem Raspberry Pi in der Datei /etc/ssh/sshd_config, ob dort X-11-Forwarding aktiviert ist falls nicht, schalten Sie es ein. Nach der Installa-tion des X-Servers Xming von SourceForge (http://bit.ly/1iViBq5) auf dem Windows-PC knnen Sie nach einem kleinen Eingriff in das PuTTY-Profil der SSH-Verbindung zum Raspberry Pi die grafische Oberflche auf den Windows-PC zaubern.

    Dann laden Sie unter PuTTY das Verbindungsprofil und setzen in der Kategorie Con-nection unter SSH bei X11 das Hkchen bei Enable X11 forwarding. Nun bauen Sie eine Verbindung ber ssh auf, loggen sich ein und geben das Kommando startlxde ein, um die grafische Oberflche zu starten. Soll das PuTTY-Konsolenfenster weiterhin zur Verfgung stehen, whrend die grafische Oberflche lxde luft, fgen Sie dem Kommando das &-Zeichen hinzu.

    startlxde &

    Wie auch immer: Welche Lsung Sie einsetzen, um die grafische Oberflche des Raspberry Pi auf den PC-Desktop zu transportieren, ist letztendlich Geschmacks-sache. Fr den Hausgebrauch knnen Sie auch einen Mini-LCD-Bildschirm direkt am Raspberry Pi betreiben, der gerade fr kleine Statusmeldungen, Temperaturanzeigen und dergleichen ganz praktisch sein kann.

  • Hren, sehen und fhlen mit Sensoren

    Der Raspberry Pi bietet dank der zahlreichen GPIO-Anschlsse und den beiden Span-nungspins 3.3V und 5V bekanntlich auch die Mglichkeit, Aktoren und Sensoren aus der Arduino-Ecke oder aus dem Fachhandel fr Kommunikations- und Steuerungs-systeme zu nutzen. Die meisten Sensormodule und Aktoren fr den Raspberry Pi finden Sie fr kleines Geld auf den einschlgigen Auktions- und Kaufhausseiten im Netz. Meist sitzen die Lieferanten solcher Arduino- und Raspberry-Pi-tauglichen Billigmodule in China oder Hongkong, was in Sachen Lieferzeit bis zu drei Wochen und manchmal lnger bedeuten kann. Als Dankeschn fr die Wartezeit winken gnstige Preise soll es schneller gehen, bieten hiesige Anbieter die gleichen Module mit einem Aufschlag an und sind damit im Vergleich deutlich teurer.

    Sensor Bemerkung/Modellbezeich-

    nung

    Bezugsquelle(n)

    Abstands-

    sensor

    Abstandsmessung mit

    HC-SR04 (Ultra-

    schallsensor) oder

    QTR-1A (Pololu Ab-

    standssensor)

    Diverse China-/Hongkong-

    Hndler

  • 2 Hren, sehen und fhlen mit Sensoren

    118

    Sensor Bemerkung/Modellbezeich-

    nung

    Bezugsquelle(n)

    Akustiksensor Akustiksensor Diverse China-/Hongkong-

    Hndler

    Barometer-

    sensor

    BMP085, Suchmaschine:

    SKU: SKU039532

    Diverse China-/Hongkong-

    Hndler

    Bewegungs-

    sensor

    PIR Diverse China-/Hongkong-

    Hndler

    Feuchtig-

    keitssensor

    Unterschiedliche auf

    Basis des LM393-IC

    Diverse China-/Hongkong-

    Hndler

    Gassensor MQ-2 Gas/Luftsensor Diverse China-/Hongkong-

    Hndler, Fachhandel

    Touch-/

    Drucksensor

    MPR121 Capacitive

    Touch Keypad

    Diverse China-/Hongkong-

    Hndler, Fachhandel

    Temperatur-

    sensor

    LM35 (analog)

    DS18B20 (digital)

    www.farnell.com, Fachhandel

    Gyroskop

    (Kreiselin-

    strument)

    MPU-6050 (Gyro, Be-

    schleunigungssensor)

    Fachhandel

    Gyroskop

    (Kreiselin-

    strument)

    AltIMU-10 (Gyro, Be-

    schleunigungssensor,

    Compass und Altimeter

    (L3GD20, LSM303DLHC,

    LPS331AP Carrier)

    www.pololu.com/catalog/

    product/1269, Fachhandel

    Farbsensor TCS34725 www.adafruit.com/products/

    1334

    Infrarot-

    sensor

    QTR-8RC-

    Reflektorsensor von

    Pololu

    www.pololu.com/product/961

    Kamerasensor Raspberry-Pi-Kamera

    oder beliebige USB-

    Webcam

    www.farnell.com, Fachhandel

    Lichtsensor LDR www.farnell.com, Fachhandel

    Lichtsensor APDS-9002, 1142 Hersteller, Fachhandel

    Motortreiber Pololu A4988 www.pololu.com/product/1183

    Tilt-/

    Neigungssen-

    sor

    SW-520D China-/Hongkong-Hndler

  • 2.1 Aktive vs. passive Sensoren

    119

    Auf den nachfolgenden Seiten werden die wichtigsten praxisnahen Sensoren im Raspberry-Pi-Umfeld und ihre Inbetriebnahme beschrieben, damit Sie diese direkt mit dem Steckboard oder einer Platine bzw. direkt mit der GPIO-Leiste des Raspberry Pi koppeln und nutzen knnen.

    2.1 Aktive vs. passive Sensoren

    Grundstzlich ist in den Datenblttern auch von analogen und digitalen Sensoren die Rede hier ist weniger der Sensor selbst als vielmehr die Ausgabe gemeint, die entweder als Analog- oder als Digitalwert bermittelt werden kann. Analogwerte sind typischerweise Spannung bzw. Spannungsunterschiede, mit denen die Zustands-nderung an einem Sensor gemessen wird. Digitalsensoren liefern hingegen Nullen oder Einsen stellt beispielsweise ein Abstandssensor oder Bewegungsmelder ein Signal fest, wird der Wert 1 gemeldet, ansonsten bleibt er auf 0.

    Bei vielen Sensoren kommt das LM393-IC-Modul zum Einsatz. Der LM393 ist eine Komparatorschaltung, um das analoge Messsignal beispielsweise von einem Sensor zu digitalisieren, also in einen Wert 0 oder 1 zu berfhren. Paart man dies mit einer Bedingung beispielsweise wird nur dann der Wert 1 geschrieben, wenn der Sensor auch eine Bewegung erkannt hat oder die Temperatur ber dem festgelegten Schwellenwert liegt , haben Sie einen digitalen Sensor im Einsatz.

    Analoge Sensoren auf Basis des LM393-IC sind im Heimelektronikbereich hufig anzutreffen: Eine typische Anwendung ist ein Akustiksensor, der auf seiner Platine mit einem Mikrofon zusammenarbeitet. Ist dieses aktiviert, informiert das digitale Messergebnis anhand des Werts 0 oder 1, ob ein Gerusch erkannt wurde oder nicht. In der Regel ist in Kombination mit dem LM393-IC auch ein Potenziometer verbaut, um die Empfindlichkeit des angeschlossenen Sensors also die Eingangs-spannung in das LM393 zu regeln.

    Egal ob Sie jetzt einen Wasserstandssensor, einen Bewegungsmelder, einen Farb-/ Fototransistor oder hnliche Sensoren verwenden das grundstzliche Prinzip ist immer dasselbe.

    In der Literatur wird manchmal auch zwischen aktiven und passiven Sensoren unter-schieden: Einfach ausgedrckt, sind Sensoren immer genau dann aktiv, wenn sie durch Anlegen einer Versorgungsspannung eingeschaltet werden, interne verstrkende oder signalformende Bauelemente (beispielsweise Potenziometer etc.) verwenden und erst dann auch ein analoger oder digitaler Messwert am Ausgang generiert wird.

    Ein Sensor ist hingegen passiv, wenn er ohne zustzliche Versorgungsspannung eine Zustandsnderung feststellen kann. Zum Auslesen des Messwerts eines passi-ven Sensors ist wieder eine Versorgungsspannung notwendig. Im weiteren Verlauf dieses Buchs wird nicht mehr explizit auf den Unterschied aktiv/passiv eingegangen, da ohnehin fr die Verarbeitung der Messwerte eine Versorgungsspannung anliegen muss.

  • 2 Hren, sehen und fhlen mit Sensoren

    120

    2.2 Licht- und Farbsensoren im Raspberry-Pi-

    Einsatz

    Gegenber Licht- und Farbsensoren ist das menschliche Auge in Sachen Lichtintensi-tt zwar weniger empfindlich, doch es nimmt ein breiteres Spektrum wahr. Das menschliche Auge passt sich vom Sternenlicht bei 50 Mikrolux bis hin zu 100.000 Lux bei starkem Sonnenschein automatisch an. Gnstige Licht-/Farbsensoren arbeiten je nach Bauweise im Spektrum 1 bis 1000 Lux. Je nach verwendetem Sensor beruht die Messung der Lichtstrke im einfachsten Fall auf folgender Vorgehens-weise: Zunchst wird die Beleuchtung/LED eingeschaltet, und eine Messung wird durchgefhrt. Nach dem Ausschalten der Beleuchtung/LED wird nochmals eine Messung durchgefhrt, die anschlieend vom ersten Messwert abgezogen wird. Die berechnete Differenz stellt somit den Rohwert des Sensors dar. Kombinieren Sie diese Vorgehensweise mit einem Zeitstempel und messen Sie die Unterschiede in einer festen Zeiteinheit. Durch dieses feste Intervall stellt das Ergebnis dann eine bestimmte Frequenz dar, die Sie elektronisch auswerten knnen.

    Bild 2.1: Infrarot bzw.

    Lichtwellenlnge in

    nm vs. Lichterkennung

    des menschlichen

    Auges. (Abbildung:

    Datenblatt APDS-

    9002 light sensor)

    LDR-Lichtsensorschaltung auf dem Steckboard

    Die einfachste Messung der einfachste Sensor zum Feststellen einer Helligkeits-nderung besteht im Einsatz eines lichtabhngigen Widerstands (LDR, Light Depend-ent Resistor). Grundstzlich wandeln Lichtsensoren Licht in eine Spannung, Strom oder eine Frequenznderung um, die anschlieend ber den Raspberry Pi weiterver-arbeitet werden kann. Fr das grundstzliche Verstndnis eines solchen LDR reicht hier eine einfache Steckboardschaltung mit einem Elko (Elektrolyt-Kondensator) und LDR-Lichtsensor aus.

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    121

    LDR-Licht-

    sensor

    1 uF Elko 2.2-k -Wi-

    derstand

    Bemerkung Raspberry-Pi-

    Bezeichnung

    Raspberr

    y-Pi-Pin

    Wiring Pi

    A1 - - 3.3V 3.3V 1 -

    C- - Masse GND 6 -

    A2 C+ R1 - - - -

    - - R1 GPIO-18 GPIO-18 12 1

    Zunchst verbinden Sie den Masse-Anschluss und die 3,3-V-Spannungsversorgung des Raspberry Pi mit dem Steckboard. Die Masse-Leitung wird mit dem negativen C-Anschluss des Elkos gekoppelt. Das andere Beinchen des Elkos (C+) wird mit einem Anschluss des LDR-Widerstands und dem GPIO-Anschluss verbunden. Der zweite Anschluss des LDR-Widerstands wird anschlieend an den 2,2-k -Widerstand und von dort aus an die 3,3-V-Spannungsversorgung gefhrt.

    Bild 2.2: Beim Anschluss des 1-uF-Elektrolytkondensators achten Sie darauf, dass das mit

    einem Minuszeichen bezeichnete Beinchen mit dem Masse-Anschluss (GND) auf dem

    Steckboard verbunden wird.

  • 2 Hren, sehen und fhlen mit Sensoren

    122

    Grundstzlich beruht der Kniff in der Schaltung darauf, festzustellen, wie lange die vorliegende Schaltung bentigt wird, bis am Anschluss GPIO18 ein HIGH-Signalpegel anliegt. Der Schwellenwert dafr liegt bei etwas ber 1,9 V, was ca. 58 % der Aus-gangsspannung von 3,3 V entspricht. Verwenden Sie fr die Berechnung der bentigten Zeit diese Formel:

    t = R * C

    Hier entspricht R dem Widerstandswert in (Ohm) und C der verwendeten Kapazitt des Elkos in Farad die Messeinheit des Kondensators. Die Zeit ist also analog zu dem Messwert, den die Schaltung bentigt, wenn der GPIO-Eingang vom LOW- in den HIGH-Zustand bergeht. Im nchsten Schritt nehmen Sie die Steckboard-schaltung mit dem Raspberry Pi und einem kleinen Python-Programm in Betrieb.

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    # -----------------------------------------------------------------------

    # Sensoren am Raspberry Pi

    # E.F.Engelhardt, Franzis Verlag, 2014

    # -----------------------------------------------------------------------

    # ldr-lichtsensor.py

    # Pfad: /LDRtime

    #

    import RPi.GPIO as GPIO

    import os

    import time

    LDR_GPIO = 18

    # ---------------------------------------------------------------------

    def init():

    GPIO.setmode(GPIO.BCM)

    os.system('clear')

    print "[LDR-Lichtsensor] Messung wird gestartet.\n"

    # ---------------------------------------------------------------------

    def main():

    init()

    i = 0

    try:

    while True:

    # LDR-Timing mit GPIO-Pin 18

    print "[LDR-Lichtsensor] [",i,"] LDR-Timing: ", LDRtime(LDR_GPIO), "

    in ms"

    i = i + 1

    except KeyboardInterrupt:

    # Strg-C gedrueckt

    # Reset GPIO

    print "[LDR-Lichtsensor] Messung abgebrochen."

    GPIO.cleanup() # Aufraeumen !

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    123

    # ---------------------------------------------------------------------

    def LDRtime(GPIOpin):

    ldrtime = 0

    GPIO.setup(LDR_GPIO, GPIO.OUT)

    GPIO.output(GPIOpin, GPIO.LOW) # Elko entladen

    time.sleep(0.1)

    GPIO.setup(GPIOpin, GPIO.IN) # Strom wird eingeschaltet

    # -> Messung: Je Durchlauf ca. 1ms .> proportional zu Widerstand des LDR

    while (GPIO.input(GPIOpin) == GPIO.LOW):

    ldrtime += 1

    return ldrtime

    # ---------------------------------------------------------------------

    if __name__ == '__main__':

    main()

    sys.exit(0)

    # -----------------------------------------------------------------------

    Fr eine einfache und schnelle Schaltung, um beispielsweise Helligkeitsunterschiede festzustellen, reicht obige Beispielschaltung sowie der dargestellte Python-Code vllig aus.

    Bild 2.3: LDR-Sensor im Einsatz:

    Je dunkler die Umgebung, desto

    grer ist der angezeigte

    Timing-Wert.

    Soll der Sensor hingegen Farben oder die Farbintensitt messen, nutzen Sie eigens fr diesen Zweck gebaute Sensoren, wie beispielsweise den nachfolgend vorgestellten TCS34725-Farbsensor.

  • 2 Hren, sehen und fhlen mit Sensoren

    124

    TCS34725-Farbsensor installieren und einsetzen

    Grundstzlich erfassen Farbsensoren die Farbe einer Oberflche. Je nach Bauweise des Sensors wirft dieser Licht (Rot, Blau, Grn) auf das Objekt und berechnet aus der reflektierten Strahlung die Farbwertanteile. Sind Referenzfarbwerte gespeichert, knnen diese mit der Messung verglichen werden, und entsprechend wird dann das Ergebnis der Messung ausgegeben. In diesem Projekt kommt der fr den Hausge-brauch vllig ausreichende TCS34725-Farbsensor zum Einsatz, der sich dank der verfgbaren I2C-Schnittstelle unkompliziert mit dem Raspberry Pi verbinden lsst.

    Zunchst ist das Studieren des Datenblatts des TCS34725-Farbsensors (erhltlich unter www.ams.com/eng/content/download/319364/1117183/287875) notwendig, um die Arbeitsweise des Sensors in etwa nachzuvollziehen und die Belegung der Pins fr den Anschluss an den Raspberry Pi herauszufinden. Die sieben verfgbaren Pins des TCS34725-Farbsensors lassen sich wie in der nachstehenden Tabelle zusammenge-fasst mit dem Raspberry Pi koppeln optional ist der Anschluss des LED-Pins, der in diesem Projekt nicht beschaltet wurde.

    Dafr lsst sich Pin 1 auf dem TAOS TCS34725 dem LED-Anschluss des Sensors mit einem GPIO-Pin des Raspberry Pi verbinden. In diesem Fall wird der GPIO-Pin als Ausgang genutzt, damit die LED auf dem Sensor vom Raspberry Pi geschaltet werden kann.

    TAOS TCS34725-

    Pin

    TAOS

    TCS34725

    Bemerkung Raspberry-Pi-Be-

    zeichnung

    Raspberry

    Pi-Pin

    Wiring Pi

    1 LED - - -

    2 INT Inter-

    rupt

    - - -

    3 SDA GPIO 0 (SDA) 3 8

    4 SCL GPIO 1 (SCL) 5 9

    5 VDD Spannung 3.3V 1 -

    6 GND Masse Masse 6 -

    7 VIN - - -

    Nach dem Verkabeln der vier Anschlsse und dem Einschalten des Raspberry Pi leuchtet die auf der Platine vorhandene LED auf. Egal ob Sie nun die LED steuern mchten oder nicht Sie legen unabhngig davon ein Projektverzeichnis (hier \color_tcs34725) sowie die Programmdatei color_tcs34725-step1.py an, um da-mit auf die Messwerte des Sensors bzw. die Registerinhalte zuzugreifen und diese auszugeben.

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    125

    mkdir color_tcs34725

    cd color_tcs34725

    nano color_tcs34725-step1.py

    Die Messwerte der Grundfarben Rot, Grn und Blau werden wie auch die Klarlicht-daten jeweils als 16-Bit-Wert in den dazugehrigen Registern des Sensors abgelegt. Dafr ist ber die I2C-Schnittstelle ein Zwei-Byte-Lesezugriff gepaart mit dem Setzen des Protokollbits im Befehlsregister notwendig, damit die beiden Bytes (Lower- und Upper-Byteanteil) korrekt ausgelesen und einander zugeordnet werden knnen. Damit steht fr jede Farbe ein Low-Byte und High-Byte und jeweils ein Register zur Verfgung, wie im Datenblatt auf Seite 13 beschrieben. Im nachstehend dargestellten Quellcode sind die Register bzw. die Registerbezeichnung des Datenblatts als Kon-stanten definiert, was fr eine einfachere Zuordnung der Register und ein besseres Verstndnis des Codes sorgt.

    #!/usr/bin/python

    # -*- coding: utf-8 -*-

    # -----------------------------------------------------------------------

    # Sensoren am Raspberry Pi

    # E.F.Engelhardt, Franzis Verlag, 2014

    # -----------------------------------------------------------------------

    # color_tcs34725-step1.py in der Schleife

    # Pfad: /color_tcs34725

    import time

    import smbus

    import os

    # -----------------------------------------------------------------------

    # I2C Addresse vorher pruefen . hier: 0x29

    I2C_TCS34725_ADDRESS = 0x29

    i2cbus = smbus.SMBus(1) # Raspberry Pi Revision 2 !!

    #

    # Definitionen aus Datenblatt

    # http://www.ams.com/eng/content/download/319364/1117183/287875

    # data sheet page 13

    TAOS_COMMAND_BIT = 0x80

    TAOS_ENABLE = 0x00 # Enables states and interrupts

    TAOS_ATIME = 0x01 # A time 0xFF

    TAOS_WTIME = 0x03 # W time 0xFF

    TAOS_AILTL = 0x04 # interrupt low threshold

    TAOS_AILTH = 0x05 # interrupt low threshold

    TAOS_AIHTL = 0x06 # interrupt high threshold

    TAOS_AIHTH = 0x07 # interrupt high threshold

    TAOS_PERS = 0x0C # persistence filter 0x00

    TAOS_CONFIG = 0x0D # 0x00

    TAOS_CONTROL = 0x0F # 0x00

    TAOS_VERSION = 0x12 # ID -> 0x44 = TCS34721/TCS34725, 0x4D =

    TCS34723/TCS34727

  • 2 Hren, sehen und fhlen mit Sensoren

    126

    TAOS_STATUS = 0x13 # status 0x00

    TAOS_CDATAL = 0x14 # data low byte clear data

    TAOS_CDATAH = 0x15 # data high byte

    TAOS_RDATAL = 0x16 # data low byte red data

    TAOS_RDATAH = 0x17 # data high byte

    TAOS_GDATAL = 0x18 # data low byte green data

    TAOS_GDATAH = 0x19 # data high byte

    TAOS_BDATAL = 0x1A # data low byte blue data

    TAOS_BDATAH = 0x1B # data high byte

    # data sheet page 15 !

    TAOS_REGISTER_ADDRESS = 0x80

    TAOS_POWER_ON = 0x01

    TOS_RGB_ENABLE = 0x02 # RGBC enable. This bit actives the two-channel ADC.

    # Writing a 1 (binaer) activates the RGBC. Writing a 0

    disables the RGBC

    TOS_WEN = 0x08 # wait enable 1000 0x00 disable

    #

    # -----------------------------------------------------------------------

    def main ():

    # Register TAOS_VERSION 0x12 has device version

    # Register addresses must be OR'ed with 0x80 (TAOS_COMMAND_BIT)

    i2cbus.write_byte(I2C_TCS34725_ADDRESS,TAOS_COMMAND_BIT|TAOS_VERSION) #

    ID

    ver = i2cbus.read_byte(I2C_TCS34725_ADDRESS)

    # version # should be 0x44

    os.system('clear')

    if ver == 0x44: # = TCS34725

    print "[TCS34725] Farbsensor angeschlossen\n"

    i2cbus.write_byte(I2C_TCS34725_ADDRESS, TAOS_COMMAND_BIT|TAOS_ENABLE) #

    0x00 = ENABLE register

    i2cbus.write_byte(I2C_TCS34725_ADDRESS, TAOS_ATIME|TOS_RGB_ENABLE) #

    0x01 = Power on, 0x02 RGB sensors enabled

    i2cbus.write_byte(I2C_TCS34725_ADDRESS, TAOS_COMMAND_BIT|TAOS_CDATAL) #

    Reading results start register 14, LSB then MSB

    while True:

    # read values of register

    data = i2cbus.read_i2c_block_data(I2C_TCS34725_ADDRESS, 0)

    clear = clear = data[1] green)):

    #print "[TCS34725] Farbe: Rot erkannt."

    col= "[TCS34725] Farbe: Rot erkannt."

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    127

    elif((green>blue) and (green>red)):

    #print "[TCS34725] Farbe: Gruen erkannt."

    col="[TCS34725] Farbe: Gruen erkannt."

    elif((blue>red) and (blue>green)):

    #print "[TCS34725] Farbe: Blau erkannt."

    col="[TCS34725] Farbe: Blau erkannt."

    else:

    #print "[TCS34725] Farbe konnte nicht spezifiziert werden."

    col="[TCS34725] Farbe konnte nicht spezifiziert werden."

    #--------------------------------------------------------------------------

    crgb = "RAW: Clear: %s, Red: %s, Green: %s, Blue: %s | %s\n" % (clear,

    red, green, blue, col)

    print crgb

    time.sleep(1)

    else:

    print "[TCS34725] Kein TCS34725-Geraet gefunden!\n"

    return

    if __name__ == '__main__':

    main()

    sys.exit(0)

    # -----------------------------------------------------------------------

    Die Farbunterscheidung bzw. die Farbzuordnung im dargestellten if-Konstrukt erfolgt einfach durch den Grenvergleich der Registerwerte. Damit kann das Pro-gramm nun eine Aussage darber treffen, ob der Rot-, Grn- oder Blauanteil ber-wiegt. Zur Laufzeit wirft das dargestellte Programm die Rohwerte der Farbregister aus.

  • 2 Hren, sehen und fhlen mit Sensoren

    128

    Bild 2.4: Rot, Grn oder Blau: Eine einfache Zuordnung der Farben anhand der Registerwerte

    ist mit wenig Aufwand mglich.

    Fr eine einfache automatisierte Farbunterscheidung reicht das oben genannte Ver-fahren vllig aus. Diese Messwerte lassen sich jedoch auch weiterverwenden und in gewhnliche Farbstandards bertragen.

    Wie Farbstandards wie Farbtemperatur, CIE und dergleichen definiert sind, steht in den Datenblttern oder den passenden Whitepapers, beispielsweise im praktischen Dokument der Herren Javier Hernndez-Andrs, Raymond L. Lee, Jr. und Javier Romero mit dem Titel Calculating correlated color temperatures across the entire gamut of daylight and skylight chromaticities (http://1.usa.gov/1haPsD4), in dem die mathematischen Grundlagen dazu beschrieben sind.

    CCT (Farbtemperatur) und CIE-Werte bestimmen

    Um die Messwerte des TCS34725-Farbsensors fr weitere Zwecke zu verwenden beispielsweise um damit eine bequemere Steuerung bzw. flexiblere Zuordnung der Farben zu erreichen , ist die Umrechnung der Ergebnisse zur Laufzeit in ein anderes Format sinnvoll. In diesem Beispiel (Datei: color_tcs34725-step2.py) werden die ausgelesenen Sensorwerte zunchst in das CCT-Format gebracht, um die sogenannte Farbtemperatur des Messwerts zu bestimmen. Die zweite Funktion (Datei: color_ tcs34725-step3.py) errechnet die sogenannten CIE-Werte, die Sie unter anderem auch bei der Steuerung von den derzeit beliebten farbigen LED-Lampen Philips Hue verwenden knnen. Aus Platzgrnden wurden hier jeweils nur die entsprechenden

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    129

    Funktionen fr die Umwandlung der Rohwerte dargestellt. Die vollstndigen, lauffhigen Beispieldateien finden Sie im Projektverzeichnis (/color_tcs34725).

    def tcs34725CCT(r,g,b):

    # 1. Map RGB values to their XYZ counterparts.

    # Based on 6500K fluorescent, 3000K fluorescent

    # and 60W incandescent values for a wide range.

    # Note: Y = Illuminance or lux

    X = (-.14282 * r) + (1.54924 * g) + (-.95641 * b)

    Y = (-.32466 * r) + (1.57837 * g) + (-.73191 * b)

    Z = (-.68202 * r) + (.77073 * g) + ( .56332 * b)

    # 2. Calculate the chromaticity co-ordinates

    xc = (X) / (X + Y + Z)

    yc = (Y) / (X + Y + Z)

    # 3. Use McCamy's formula to determine the CCT

    # http://www.usna.edu/Users/oceano/raylee/papers/RLee_AO_CCTpaper.pdf

    n = (xc .3320) / (.1858 yc)

    # calculate the final CCT

    # Return the results in degrees Kelvin

    cct = (449.0 * (n ** 3.0)) + (3525.0 *(n ** 2.0)) + (6823.3 * n) +

    5520.33

    return int(cct)

    Die Ausgabe der Werte wurde im Vergleich zum ersten Beispiel dahin gehend ange-passt, dass hier zustzlich zu den Rohwerten und der Farbbestimmung nun auch zur Laufzeit die Farbtemperatur errechnet und dargestellt wird.

  • 2 Hren, sehen und fhlen mit Sensoren

    130

    Bild 2.5: Die Rohwerte der Clear-, Rot-, Grn-, Blau-Register und die Zuordnung der Werte zu

    einer Farbe sowie die dazugehrige Farbtemperatur werden in Schritt 2 des Sensorbeispiels

    ausgegeben.

    Analog zum obigen Beispiel zur Berechnung der Farbtemperatur werden die Rohwerte der Farben Rot, Grn und Blau zur Darstellung in CIE-Farbraumkoordinaten (entspricht der Bezeichnung Yxy-Farbraum oder CIE-Yxy) an die entsprechende Funktion (hier tcs34725CIE) bergeben. Zunchst werden die RGB-Werte anhand der drei Formeln in die Werte X, Y und Z umgerechnet. Hier bezeichnet X virtuelles Rot, Y virtuelles Grn und Z virtuelles Blau.

    Da es in der Theorie und in der Praxis etwas unpraktisch ist, mit diesen Dreieckskoor-dinaten zu rechnen, werden diese Werte durch mathematische Transformation in ein rechtwinkliges Koordinatensystem umgewandelt die sogenannte CIE-Normfarb-tafel. Diese geht davon aus, dass die Summe aller Farben gleich dem Wert 1 ist. In diesem Fall werden die drei RGB-Farben in Rot/Grn-Farbanteile (x, y) sowie die dazugehrige Helligkeit (Y) berfhrt.

    #Step 3:

    def tcs34725CIE(r,g,b):

    #CIE-Werte xyY errechnen aus o.g. Naeherung

    X = (-.14282 * r) + (1.54924 * g) + (-.95641 * b)

    Y = (-.32466 * r) + (1.57837 * g) + (-.73191 * b)

    Z = (-.68202 * r) + (.77073 * g) + ( .56332 * b)

    sum = X + Y + Z

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    131

    if (sum > 0):

    chroma_x = X / (X + Y + Z) #x

    chroma_y = Y / (X + Y + Z) #y

    else:

    chroma_x = 0

    chroma_y = 0

    brightness = int(math.floor(Y / 100 * MAX_BRIGHT)) # Y bestimmt die Hel-

    ligkeit der konvertierten Farbe

    xyY= {}

    xyY["x"] = chroma_x

    xyY["y"] = chroma_y

    xyY["Y"] = brightness

    # print "xyY:" + str(chroma_x) + " , " + str(chroma_y) + " , " +

    str(brightness)

    return xyY

    Fr die Umrechnung der Farben in andere Systeme gibt es viele unterschiedliche Herangehensweisen und Programmbeispiele. Recht praktische CIE-Beispiele dazu finden Sie auf der Webseite http://bit.ly/1fdoo9K. Die obige Funktion zur Berechnung der CIE-Werte der Messwerte stellt sich zur Laufzeit des Beispielprogramms color_tcs34725-step3.py wie folgt dar:

    Bild 2.6: Farberkennung und berfhrung in den CIE-Farbraum: Die yxY-Werte lassen sich fr

    weitere Zwecke und zur Automatisierung von Vorgngen weiterverwenden.

    Fr viele Anwendungszwecke ist der Einsatz des Farbsensors sowie die berfhrung in CIE-Farbwerte recht praktisch gerade in der Hausautomation , da Sie mithilfe

  • 2 Hren, sehen und fhlen mit Sensoren

    132

    von LED-Lampen verschiedene Stimmungsbilder mit dem Raspberry Pi steuern knnen.

    Die technische Umsetzung sprengt hier den Rahmen, ist jedoch in einem eigenen Kapitel in der 3. Auflage des Buchs Hausautomation mit Raspberry Pi (ISBN: 978-3645603133) ausfhrlich beschrieben. Fernab dieser Lichttherapie Marke Eigenbau ist es oftmals in einem Projekt vllig ausreichend, nicht die Farben, sondern nur die Helligkeit zu berwachen. Dafr ist der Farbsensor total berdimensioniert, hier reicht ein einfacher Lichtsensor aus, um festzustellen, ob es hell oder dunkel ist.

    APDS-9002-Lichtsensor mit MCP3008 nutzen

    In diesem Beispiel ist der Schaltungsaufbau bereits wie im Abschnitt MCP3008 auf dem Steckboard nutzen (Seite 62) umgesetzt, lediglich an den MCP3008-Pin-Eingngen 2 bis 4 wurden noch drei zustzliche kostengnstige analoge Lichtsenso-ren vom Typ APDS-9002 verbaut, der sich auf Breakout-Boards verschiedener Her-steller befindet. In diesem Projekt wurden drei Lichtsensoren (Modell 1142) des Herstellers Phidgets (Phidgets Lichtsensor 1000 lux) verwendet. Hier erfolgt der Anschluss eines Lichtsensors am Steckboard ohne Ltarbeiten, da sich der kleine APDS-9002-Sensor in SMD-Bauweise bereits auf einer kleinen Platine befindet, die per Jumperkabel angezapft werden kann.

    Bild 2.7: Fr die Berechnung des Messwerts in Lux liefert der Hersteller mit den Variablen m

    und b individuelle Kalibrierwerte fr den Sensor mit, die auf dem Aufkleber an der Rckseite

    des Breakout-Boards aufgedruckt sind.

    Laut Datenblatt bentigen die Lichtsensoren eine Eingangsspannung von 5 V, die direkt vom 5V-Pin ebenso wie die Masse (Pin 6) des Raspberry Pi zugefhrt wird. Der analoge Anschluss der drei Lichtsensoren wird hingegen am Steckboard in die

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    133

    Eingnge 2, 3 und 4 des MCP3008-IC gesteckt. Damit sind insgesamt vier analoge Eingnge des MCP3008-IC bestckt.

    MCP3008-

    Pin

    MCP3008 Poti-Pin

    10 k

    Lichtsensor

    1142/APDS-

    9002

    Raspberry-Pi-Be-

    zeichnung

    Raspberry

    -Pi-Pin

    Wiring

    Pi

    1 CH0 3 - - - -

    2 CH1 - Analog-In-

    put

    - - -

    3 CH2 - Analog-In-

    put

    - - -

    4 CH3 - Analog-In-

    put

    - - -

    - - - 5V 5V 2 -

    16 VDD 2 - 3.3V 1 -

    15 VREF - - 3.3V 1 -

    16 VDD - - 3.3V 1 -

    11 DIN - - GPIO10/SPI

    MOSI

    19 12

    12 DOUT - - GPIO9/SPI

    MISO

    21 13

    13 CLK - - GPIO11/SPI0_

    SCLK

    23 14

    10 CS/SHDN - - GPIO8/SPI0_C

    E0_N

    24 10

    9 DGND - Masse Masse 6 -

    14 AGND 1 Masse Masse 6 -

    Im nchsten Schritt aktivieren Sie die SPI-Schnittstelle des Raspberry Pi, um Zugriff auf das angeschlossene MCP3008-IC-Modul zu erhalten.

    SPI-Schnittstelle aktivieren

    Das Serial Peripheral Interface (kurz SPI) ist ein einfaches, serielles Protokoll, das die Kommunikation zwischen dem Raspberry Pi und dem MCP3008-IC bernimmt. Hier steuert der Master (Raspberry Pi) die Kommunikation, und der Slave (MCP3008-IC) fhrt die Befehle aus. Fr die Kommunikation werden einfache Byte-Befehlscodes verwendet, die als Spannungsgre codiert bertragen werden.

  • 2 Hren, sehen und fhlen mit Sensoren

    134

    SPI Name der Signale/

    Leitungen auf Master

    Name der Signale/

    Leitungen auf Slave

    Taktleitung/Clock CLK, SCLK, SCK CLK, SCLK, SCK

    Daten vom Master zum

    Slave (Schreiboperation)

    MOSI, SIMO Dateneingang eines

    Bauteils: SDI, DI,

    SI, IN

    Daten vom Slave zum

    Master (Leseoperation)

    MISO, SOMI Datenausgang eines

    Bauteils: SDO, DO,

    SO, OUT

    Slave-Ansprache/-Auswahl SS (Slave Select),

    CS (Chip Select)

    -

    Der Raspberry Pi besitzt zwei Slave-Anschlsse (CE0 und CE1, Raspberry-Pi-Pin 24 und 26), mit denen zwei SPI-Gerte bei einer maximalen Taktrate von 32 MHz gleichzeitig verwendet werden knnen. Ist der Raspberry Pi gestartet, prfen Sie in der Datei /etc/modprobe.d/raspi-blacklist.conf die Zeile, die das Modul spi-bcm2708 blacklistet. Hier achten Sie darauf, dass sich vor der genannten Zeile das Lattenzaunsymbol # befindet, um die Anweisung auszukommentieren.

    Bild 2.8: Mit dem Kommando sudo nano /etc/modprobe.d/raspi-blacklist.conf

    starten Sie den nano-Editor und fgen am Anfang der Zeile, in der sich das spi-bcm2708-

    Modul befindet, ein #-Symbol ein.

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    135

    Nach der nderung speichern Sie mit der Befehlsfolge [Strg]+[X], dann [Y] und schlielich der [Enter]-Taste die Datei und starten mit dem reboot-Kommando den Raspberry Pi neu, damit die nderung aktiv wird.

    Bild 2.9: Nach dem Reboot mittels sudo reboot-Kommando prfen Sie, ob nun das

    notwendige Modul automatisch gestartet worden ist.

    Um herauszufinden, ob das Modul betriebsbereit zur Verfgung steht, nutzen Sie diesen Befehl:

    lsmod | grep spi_bcm2708

    Anschlieend sollte der Eintrag spi_bcm2708 in der Bildschirmausgabe erscheinen. Wenn nicht, nutzen Sie den Befehl sudo insmod spi_bcm2708, um das Modul manuell zu starten. Ist es ordnungsgem geladen, installieren Sie im nchsten Schritt die SPI-Erweiterung fr den bequemen Zugriff auf die SPI-Schnittstelle mit Python.

    SPI-Nutzung ohne Umwege: py-spidev-Modul installieren

    Warum das Rad neu erfinden, wenn dafr bereits sinnvolle und praktische Alternati-ven zur Verfgung stehen? Das trifft auch auf die GPIO-Schnittstelle und Erweiterun-gen zu, hier existieren viele verschiedene Module und Bibliotheken, die vor allem eines gemeinsam haben:

    Sie sind kostenlos ber github.com oder sourceforge.net erhltlich und stellen einfach zu nutzende Funktionen zur Verfgung, um die wichtigsten Funktionen und Schnitt-stellen zu nutzen. So existiert auch fr den SPI-Bus (Serial Peripheral Interface Bus) eine praktische Erweiterung, die Sie in dem Python-Skript und umgehend auf dem Raspberry Pi einsetzen knnen.

  • 2 Hren, sehen und fhlen mit Sensoren

    136

    Bild 2.10: Fr Einsteiger deutlich bequemer als eine selbst programmierte Logik fr den Zugriff

    auf die SPI-Schnittstelle ist das spidev-Paket.

    Fr die Einrichtung sind folgende Befehle notwendig (die py-spidev-Erweiterung wird zunchst in das eigene Verzeichnis /home/pi/py-spidev heruntergeladen und anschlieend per Python-Installationsskript installiert):

    cd ~

    mkdir py-spidev

    cd py-spidev

    wget https://raw.github.com/doceme/py-spidev/master/setup.py

    wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c

    Alternativ klonen Sie mit git das komplette Paket in das Home-Verzeichnis des Users pi:

    cd ~

    git clone git://github.com/doceme/py-spidev

    Installiert wird in beiden Fllen mit dem Kommando:

    sudo python setup.py install

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    137

    Damit ist die Installation erledigt, und das Modul kann direkt per import-Kommando in einem Python-Skript verwendet werden.

    Mehrere Analogsensoren ber py-spidev verarbeiten

    Die Vorteile des py-spidev-Moduls zeigen sich gerade beim Einsatz mehrerer analo-ger Sensoren an dem MCP3008-IC. Hier mssen Sie sich nicht mehr auf die Bit-Ebene begeben, um an die Messwerte der an den analogen Eingngen anliegenden Spannung zu gelangen. Stattdessen nutzen Sie in dem Beispiel mcp3008-step3.py eine eigene Funktion (def getadcChannel(channel):), der Sie als bergabepara-meter die zu prfende Kanalnummer (Wert von 0 bis 7) am MCP3008-IC mit dem altbekannten [Strg]+[C] bergeben. Dies erfolgt in einer Dauerschleife, die Sie mit dem Tastenkrzel abbrechen knnen. Der Zugriff selbst auf das SPI-Objekt erfolgt ber diese beiden Zeilen:

    spi = spidev.SpiDev()

    spi.open(0,0) # open spi port 0, device (CS) 0 Pin 24

    Nutzen Sie den zweiten Kanal (Cable Select 1), verwenden Sie stattdessen das Kommando:

    spi.open(0,1) # open spi port 0, device (CS) 1 Pin 26

    Fr die Umrechnung des Messwerts in die aktuelle Spannung sorgt die Funktion convertVolts, die die Berechnung auf Basis der verwendeten 10-Bit-Einheit vor-nimmt.

    # -*- coding: utf-8 -*-

    #!/usr/bin/python

    #------------------------------------------------------------------------

    # Sensoren am Raspberry Pi

    # E.F.Engelhardt, Franzis Verlag, 2014

    # -----------------------------------------------------------------------

    # Das Skript nutzt die Analog-Eingaenge des MCP3008 IC

    # und liest diese ueber SPI-Bus aus

    # Datei mcp3008-step3.py

    # -----------------------------------------------------------------------

    import spidev

    # wget https://raw.github.com/doceme/py-spidev/master/setup.py

    # wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c

    import time

    import os

    # SPI Objekt erstellen

    spi = spidev.SpiDev()

    spi.open(0,0)

    # Funktion, um Daten aus dem MCP3008 IC zu lesen

    # Kanalzaehlung von 0-7

  • 2 Hren, sehen und fhlen mit Sensoren

    138

    def getadcChannel(channel):

    # Nur Kanal 0-7 erlaubt

    if ((channel > 7) or (channel < 0)):

    return -1

    # Start Bit senden

    # Send start bit, sgl/diff, odd/sign, MSBF

    # channel = 0 sends 0000 0001 1000 0000 0000 0000

    # channel = 1 sends 0000 0001 1100 0000 0000 0000

    # sgl/diff = 1; odd/sign = channel; MSBF = 0

    rdata = spi.xfer2([1,(8+channel)

  • 2.2 Licht- und Farbsensoren im Raspberry-Pi-Einsatz

    139

    light1_level = getadcChannel(light1_channel)

    light1_volts = convertVolts(light1_level, places)

    light1_luminosity = (m1 * light1_level) + b1

    # Lese den ersten Lichtsensor an Kanalanschluss 2

    light2_level = getadcChannel(light2_channel)

    light2_volts = convertVolts(light2_level, places)

    light2_luminosity = (m2 * light2_level) + b2

    # Lese den ersten Lichtsensor an Kanalanschluss 3

    light3_level = getadcChannel(light3_channel)

    light3_volts = convertVolts(light3_level, places)

    light3_luminosity = (m3 * light3_level) + b3

    # Datenausgabe

    print "--------------------------------------------"

    print("Potentiometer : {} ({}V)".format(poti_level,poti_volts))

    print("Lichtsensor : {} ({}V) entspricht {}

    Lux".format(light1_level,light1_volts, light1_luminosity))

    print("Lichtsensor : {} ({}V) entspricht {}

    Lux".format(light2_level,light2_volts, light2_luminosity))

    print("Lichtsensor : {} ({}V) entspricht {}

    Lux".format(light3_level,light3_volts, light3_luminosity))

    # und warten bis zur naechsten Messung

    time.sleep(delay)

    except KeyboardInterrupt:

    # CTRL-C gedrueckt

    print "[Lichtsensor] Messung abgebrochen."

    # ----------------------- EOF ---------------------------

    Auch der tatschlich vorhandene Helligkeits- bzw. Luxwert lsst sich anhand des gemessenen Spannungsunterschieds bestimmen. Im Datenblatt des Lichtsensors liefert der Hersteller folgende Umrechnungsformel mit:

    Helligkeit in Lux = (m * Sensorwert) + b

    Hier geben die Variablen m und b individuelle Kalibrierwerte fr den Sensor an, die auf dem Aufkleber an der Unterseite des Breakout-Boards des Sensors aufgedruckt sind. Sind hier keine Angaben zu finden, starten Sie mit den Mittelwerten m = 1.478777 und b = 33.67076, um zum Ziel zu gelangen. In diesem Beispiel bekommt jeder Sensor seine eigenen Kalibrierwerte in eigenen Variablen (m1, m2, m3, b1, b2, b3) spendiert, bei der spteren Ausgabe der Sensoren werden somit reale Lux-Werte ausgegeben.