CODING WORLD RASP JP PFLANZE Instructions [de]

Page 1
Jugend Programmiert
Die
Schlaue Pflanze
www.codingworld.io
Page 2
Vorwort
Alle Schaltungen, Programme und Bauteile wurden vorher von uns Geprüft. Trotzdem können wir leider Fehler im Buch, den Schaltungen oder Programmen nicht ausschließen. Bei Fragen oder Problemen gibt es unten die Kontaktmöglichkeiten. Mehr Informationen findest du auch auf der Internetadresse der Seitenzahl.
LEDs
sollten nicht aus naher Entfernung direkt angesehen werden, ein direkter Blick kann zu Schäden an den Netzhäuten führen. Diese kann gefährlich sein, auch wenn sie nicht sofort klar erkennbar sind. Die LEDs dürfen nur wie in den Anleitungen beschrieben verwendet werden, höhere Ströme oder Stromspannungen sind zu vermeiden.
Dieses Produkt entspricht den geltenden Europäischen Richtlinien und trägt ein CE-Kennzeichen. Der richtige Gebrauch ist in dem Beiliegenden Buch erklärt.
Bauen sie Schaltungen immer wie beschrieben auch, achten sie auf die Verschiedenen GPIO Pins vom Raspberry Pi.
Herausgeber
Jugend Programmiert Coding World UG (haftungsbeschränkt) | Homwer.com Obdrupstraße 23 A, 24986 Mittelangeln www.codingworld.io Support: [email protected] Feedback: [email protected]
→ cw42.de/pflanze/1
Die Schlaue Pflanze
Page 3
Moin Moin und Willkommen zur Smart Plant - Schlaue Pflanze Anleitung!
In diesem Kit sind alle wichtigen Komponenten enthalten, um Daten über deine Pflanze zu messen und auszuwerten. Das Ziel ist es, dass du am Ende nicht nur eine schlaue Pflanze hast, sondern dich auch mehr mit der Technik dahinter auseinandersetzen konntest. Alles was du dafür brauchst, ist ein laufender Raspberry Pi sowie das Grundwissen aus dem Jugend Programmiert Starterkit. Zusätzlich kannst du natürlich mit der Hardware des Starterkits deine Messstation noch ergänzen.
Mit folgenden Inhalten werden wir uns auseinandersetzen:
Inhalte Seite
DHT11 - Luftfeuchtigkeit und Temperatur messen 3
MCP3008 - Analoge Werte am Raspberry Pi messen 6
Der Photowiderstand 10
Der Bodenfeuchtigkeitssensor 12
Die Schlaue Pflanze 14
Weitere Projektideen 19
→ cw42.de/pflanze/2
Die Schlaue Pflanze
Page 4
Die Lufttemperatur und Feuchtigkeit mit dem DHT11 messen
Da nicht jeder Mensch mit seinem Raspberry Pi die Temperatur messen möchte, ist die Bibliothek und die benötigte Software leider nicht vorinstalliert. Du musst diese Bibliothek also selber aus dem Internet laden. Wenn dein Pi schon eine Internetverbindung hat, dann mach hier einfach weiter. Wenn dein Pi noch keine Internetverbindung hat, kannst du den Pi einfach über ein Lan-Kabel an den Router ins Netz bringen. Mehr wie immer online!
$ sudo apt-get update
Mit den apt-get-Befehlen verwalten wir die Programme, welche auf unserem Computer oder Raspberry Pi installiert sind. Speziell bei diesen Quellen werden die Softwarequellen aktualisiert, damit wir auch immer nur die neusten Programme installieren.
Wenn du den Sensor mit Python2 benutzen möchtest musst du die folgenden Befehle einfach nur durch python ersetzen (also die 3 weglassen) ;)
$ sudo apt-get install build-essential python3-dev
Hiermit installieren wir jetzt das Programm, das wir brauchen. Was es wirklich kann, zeigt sich gleich.
Und mit folgendem Befehl lädst du dir die Bibliothek herunter:
$ git clone https://github.com/coding-world/Python_DHT.git
Das besondere ist dabei, dass die Bibliothek in den Ordner Python_DHT runtergeladen wird und deinem Computer noch nicht bekannt ist. Deswegen müssen wir erst einmal in den Ordner der Bibliothek wechseln.
Bash
Bash
Bash
→ cw42.de/pflanze/3
Die Schlaue Pflanze
Page 5
$ cd Python_DHT
Mit
$ sudo python3 setup.py install
installieren wir die Bibliothek auf dem Raspberry Pi und können sie jetzt auch mit import in unserem Programm benutzen. In der nächsten Einheit werden wir dann den Sensor anschließen.
Schließe zunächst, wie immer, alles richtig an den Pi an. Die Vorderseite des DHT11 erkennst du an dem Gitter.
Anschließen
Anschlüsse am Pi Anschlüsse am DHT
3,3V 1. Pin DHT
GPIO4 2. Pin DHT
Widerstand 4,7kOhm Zwischen 1. Pin DHt und 2. Pin DHT
GND (Ground) 4. Pin DHT
Zwischen dem 1. und 2. Pin am DHT musst du noch einen Widerstand anschließen. Das dient nicht nur zur Stromversorgung des Sensors, sondern auch dazu, dass dieser Messwerte liefern kann, die akkurater sind. Am besten eignet sich dafür der Widerstand mit
Bash
Bash
→ cw42.de/pflanze/4
Die Schlaue Pflanze
Page 6
4,7kOhm. Widerstände erkennst du an ihrem aufgemalten Farbcode. Beim 4,7kOhm lautet dieser: Gelb, Lila, Schwarz, Braun und Gold. *
Bitte achte genau darauf, den Sensor in dieser Reinfolge anzuschließen! Wenn du den 3,3V und den GND Pin verwechselst, kommt es zu einem Kurzschluss und der Sensor kann dadurch kaputt gehen und sehr sehr warm werden. Achte darauf! Solltest du bemerken, dass der Sensor unnnormal warm wird oder sich sogar das Plastik verbiegt, schalte sofort deinen Raspberry Pi aus oder entferne die Verbindung zwischen dem Breadboard und dem Sensor!
Wie dir hoffentlich aufgefallen ist, benutzen wir nicht den 3. Pin am DHT Sensor. Diesen kannst du sonst benutzen, um die Daten analog auszulesen.
Jetzt, da alles richtig angeschlossen und installiert ist, können wir uns endlich in der nächsten Einheit daran machen, die Daten auszulesen.
Jetzt ist alles fertig eingerichtet und du kannst mit dem Programmieren anfangen. Wie immer einfach eine neue Datei anlegen und los:
$ sudo nano dht11_einfach.py
Das unbeschriebene Blatt mit Code füllen…
Am Anfang binden wir wie immer die benötigte Bibliothek ein. In Zeile 3 erstellen wir eine Variable namens sensor und speichern in ihr einfach nur die Art des Sensors, den wir auslesen möchten. In unserem Fall ist das der der DHT11.
In Zeile 4 legen wir den Pin am Pi fest, den wir nutzen möchten.
In Zeile 5 lernst du wieder etwas Neues. Man kann nämlich auch mehrere
import Python_DHT
sensor = Python_DHT.DHT11 pin = 4 feuchtigkeit, temperatur = Python_DHT.read_retry(sensor
print("Temperatur = "+str(temperatur)+ "C Feuchtigkeit = "
1 2 3 4 5 6
Bash
Python
→ cw42.de/pflanze/5
Die Schlaue Pflanze
Page 7
Variablen durch ein Komma getrennt hintereinander erzeugen und ihnen hinter dem Gleichzeichen, wieder durch Kommata getrennt, verschiedene Werte zuweisen. In diesem Fall geben wir mit der Funktion .read_retry() an, welchen Sensor und welchen Pin wir nutzen wollen.
Ab Zeile 6 geben wir wie gewohnt alle Informationen in der Konsole aus.
Jetzt bist du dran: Kriegst du es hin, dass ab einer bestimmten Temperatur, z.B. 25°C, eine LED anfängt zu leuchten? Tipp: Mit einem Atemhauch lässt sich die Temperatur erhöhen und logische Operatoren sind bestimmt auch nicht verkehrt.
MCP3025208 Analoge Werte am Raspberry Pi Messen
Mit dem Raspberry Pi haben wir ein mächtigen Computer und können mit den GPIO Pins einfach auf die Umwelt zugreifen und dort Daten lesen. Wir haben aber ein Problem, nämlich dass wir nur digitale Daten lesen können. Digitale Daten sind dabei nur eine 0 oder 1. Heißt, wenn wir mit Sensoren arbeiten, einen hohen oder einen niedrigen Strom haben. Ein Beispiel ist dabei ein Taster. Wenn Strom fließt, messen wir eine 1 und wenn kein Strom fließt, messen wir eine 0. Andere Sensoren übermitteln aber analoge Werte. Diese befinden sich zwischen 0 und 1. Um diese auszulesen, wird ein ADC gebraucht. Ein Analog zu Digital Konverter. Mit dem MCP3008 haben wir genau so ein Gerät. Über SPI können wir es an den Raspberry Pi anschließen und haben dann die Möglichkeit bis zu acht analoge Anschlüsse auszulesen.
→ cw42.de/pflanze/6
Die Schlaue Pflanze
Page 8
Die untere Seite erkennst du an der halbrunden Anordnung. CH0 - CH7 sind die analogen Eingänge, die wir benutzen werden.
VDD: Spannung, die der MCP3008 für den Betrieb braucht V_REF: Ist die höchste Spannung, welche die analogen Anschlüsse bekommen. Diese werden gebraucht, um richtige Werte zu messen AGND: Masse für die analogen Anschlüsse CLK: Abkürzung für Clock (Uhr). Koordiniert die Geschwindigkeitszeit D_OUT: Ausgang zur SPI Schnittstelle am Raspberry Pi D_IN: Eingang zur SPI Schnittstelle am Raspberry Pi CS/SHDN: Abkürzung für Cable Select. Mit dem SPI lassen sich verschiedene Geräte gleichzeitig ansteuern DGND: Masse für den MCP3008
Wie gesagt brauchen wir SPI, wenn du das noch nicht aktiviert hast, gibt es hier eine Anleitung dafür:
SPI Aktivieren
→ cw42.de/pflanze/7
Die Schlaue Pflanze
Page 9
Nachdem wir die Software Grundlagen hinter uns haben, geht es darum, die Hardware richtig anzuschließen.
Die halbrunde Nase zeigt in diesem Fall nach unten. Stecke den MCP3008 am besten über den mittleren Kanal des Breadboards, also zwischen e und f.
Anschlüsse Raspberry Pi Anschlüsse MCP3008
GND DGND
GPIO 8N CS/SHD
GPIO 10 D_IN
GPIO 9 D_OUT
GPIO 11 CLK
GND AGND
V_REF 3,3V
VDD 3,3V
→ cw42.de/pflanze/8
Die Schlaue Pflanze
Page 10
$ nano mcp.py
Jetzt musst du nur noch das Programm ausführen
$ sudo python mcp.py
Wichtig ist, dass du das Programm mit Rootrechten ausführst und daran denkst, dass es sich dabei um ein Python2 Programm handelt. Wenn jetzt
#!/usr/bin/python
import spidev import time import os import RPi.GPIO as gpio
# SPI Verbindung herstellen
spi = spidev.SpiDev() spi.open(0,0)
# Liest Daten vom MCP3008
def analogEingang(channel):
adc = spi.xfer2([1,(8+channel)<<4,0]) data = ((adc[1]&3) << 8) + adc[2] return data
while True:
print("0: "+str(analogEingang(0))) print("1: "+str(analogEingang(1))) print("2: "+str(analogEingang(2))) print("3: "+str(analogEingang(3))) print("4: "+str(analogEingang(4))) print("5: "+str(analogEingang(5))) print("6: "+str(analogEingang(6))) time.sleep(0.2)
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Bash
Python
Bash
→ cw42.de/pflanze/9
Die Schlaue Pflanze
Page 11
keine Werte ausgegeben werden, sollte dich das nicht wundern, denn du hast ja auch noch nichts angeschlossen, was sinnvolle Werte ausgeben könnte ;)
Also schnell weiter zum ersten Sensor!
Der Photowiderstand am Pi
Wie der MCP3008 richtig angeschlossen wird, haben wir schon gelernt. Diesen brauchen wir auch, wenn wir den Photowiderstand am Raspberry Pi anschließen wollen. Der Photowiderstand ist, wie der Name es schon sagt, ein Widerstand und kann damit die Strommenge begrenzen. Doch was für einen Widerstandswert dieser hat, hängt von der Stärke des Lichts ab. Bei normalen Zimmerlicht liegt der Widerstandswert bei ca. 10KΩ während in der Dunkelheit der Wert bei über 2MegaΩ liegen kann. Mit dem MCP3008 können wir diesen Widerstandswert messen und damit Rückschlüsse auf die Helligkeit ziehen.
Anschlüsse Pi Anschlüsse Sensor
3,3V + 10KΩ Widerstand Seite 1 Photowiderstand
CH0 + Seite 1 Photowiderstand
GND Seite 2 Photowiderstand
→ cw42.de/pflanze/10
Die Schlaue Pflanze
Page 12
Schritt für Schritt
Der Programmcode sollte dir nicht sehr unbekannt vorkommen, den es wird alles schon im Kapitel über den MCP3008 erklärt. Wir lesen einfach nur den ersten analogen Eingang aus, dieser wird auch CH0 genannt. Doch wir sollten noch einmal auf die elektronische Seite eingehen. Dafür haben wir extra diesen Schaltplan:
import spidev import time import os import RPi.GPIO as gpio
# SPI Verbindung herstellen
spi = spidev.SpiDev() spi.open(0,0)
# Liest Daten vom MCP3008
def analogEingang(channel):
adc = spi.xfer2([1,(8+channel)<<4,0]) data = ((adc[1]&3) << 8) + adc[2] return data
while True:
print("0: "+str(analogEingang(0))) time.sleep(0.1)
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15 16 17 18
Python
→ cw42.de/pflanze/11
Die Schlaue Pflanze
Page 13
Alles fängt mit der 3,3V Stromquelle an. Interessant wird es aber erst nach dem 10KΩ Widerstand, denn dort haben wir einmal den Anschluss zum analogen Eingang und über den Photowiderstand zu Erdung (GND). Wichtig ist zu wissen, dass Strom immer den weg des geringsten Widerstandes gehen will, bildlich gesprochen. Umso höher der Widerstandswert des Photowiderstandes ist, desto mehr Strom geht zum analogen Eingang und kann gemessen werden. Heißt, wenn du den Photowidertand z.B. mit dem Finger verdunkelst, steigt der gemessene Wert, während der Wert beim direkten Anleuchten, z.B. mit dem Smartphone, sinkt. So können wir einfache Rückschlüsse auf die Helligkeit ziehen.
Wir haben einen Wert von ca. 60 gemessen beim direkten Beleuchten des Photowiderstands, bei normaler Zimmerbelichtung ein Wert von ca. 300 und bei kompletter Dunkelheit einen Wert von 800. Diese Werte können bei dir natürlich variieren, sollten sich aber in einen ähnlichen Bereich befinden.
Boden Feuchtigkeitssensor
Gerade wenn wir mit Pflanzen hantieren, ist es wichtig zu wissen, ob sie noch gegossen werden müssen. Das gilt vor allem für Topfpflanzen, die abhängig vom Gießverhalten der Menschen sind. Doch das kann unter Umständen schwierig sein, da man schnell die Übersicht verlieren kann, wann das nächste Mal gewässert werden sollte. Dafür gibt es aber einen Bodenfeuchtigkeitssensor. Während der Luftfeuchtigkeitssensor genau das getan hat - die Feuchtigkeit in der Luft gemessen - macht der Bodenfeutchigkeitssensor genau das Selbe, nur halt für den Boden.
Um die ganze Theorie auch in die Tat umzusetzen, gibt es zwei Beine, die in den Boden gesteckt werden. Da Feuchtigkeit Strom leitet, können wir den
→ cw42.de/pflanze/12
Die Schlaue Pflanze
Page 14
Boden in diesem Fall als Widerstand verstehen. Den entstehenden Widerstandswert können wir messen und wissen dann genau, wann unsere Topfpflanze endlich mal wieder etwas Wasser brauchen könnte.
Anschlüsse Pi Anschlüsse Sensor
5V VCC
Analoges Singal -> CH1
GND GND
import spidev import time import os import RPi.GPIO as gpio
# SPI Verbindung herstellen
spi = spidev.SpiDev() spi.open(0,0)
1
2
3
4
5
6
7
8
Python
→ cw42.de/pflanze/13
Die Schlaue Pflanze
Page 15
Das Programm funktioniert ähnlich wie der Photowiderstand. Ein analoger Wert wird ausgelesen und wiedergegeben. Auch hier können die Messwerte sich unterscheiden. Bei einer vertrockneten/sehr trockenen Pflanze kommen wir auf einen Wert von über 900, während wir bei unserer gut gewässerten Topfpflanze einen Wert von ca. 400 messen können. Diese Wert sind natürlich von Pflanze zu Pflanze unterschiedlich.
Die Schlaue Pflanze
Wenn du hier angekommen bist, hast du den MCP3008, den DHT11, den Photowiderstand und den Feuchtigkeitssensor schon behandelt. Alle einzelnen Komponenten führen wir jetzt zusammen. Das Ziel ist es, dass wir nachher mit allen Sensoren die Daten von unserer Pflanze lesen können. Zur Ausgabe haben wir hier noch eine blaue LED angeschlossen. Diese leuchtet immer dann, wenn die Pflanze gegossen werden muss. Damit das Programm regelmäßig die Daten liest, richten wir am Ende dafür noch ein Cronjob an. Als aller erstes müssen wir alle Sensoren anschließen. Am besten machst du das Schritt für Schritt, damit am Ende alles funktioniert.
# Liest Daten vom MCP3008
def analogEingang(channel):
adc = spi.xfer2([1,(8+channel)<<4,0]) data = ((adc[1]&3) << 8) + adc[2] return data
while True:
print("Feuchtigkeit: "+str(analogEingang(1))) time.sleep(0.2)
9 10 11 12 13 14 15 16 17 18
→ cw42.de/pflanze/14
Die Schlaue Pflanze
Page 16
Anschlüsse Pi Anschlüsse Sensoren
3,3V Rote Leisten auf dem Breadboard
GND Blaue Leisten auf dem Breadboard
3,3V 1. Pin DHT11
GPIO4 2. Pin DHT11
Widerstand 4,7kOhm
Zwischen 1. Pin DHt und 2. Pin DHT
GND 3. Pin DHT11
GND DGND
GPIO 8N CS/SHD
GPIO 10 D_IN
→ cw42.de/pflanze/15
Die Schlaue Pflanze
Page 17
GPIO 9 D_OUT
GPIO 11 CLK
GND AGND
3,3V V_REF
3,3V VDD
3,3V + 10KΩ Widerstand + Seite 1 Photowiderstand
CH0 + Seite 1 Photowiderstand
GND Seite 2 Photowiderstand
3,3V VCC Feuchtigkeitssensor
Analoges Singal -> CH1
GND GND Feuchtigkeitssensor
GPIO21 langes Bein Blaue LED
GND kurzes Bein Blaue LED
→ cw42.de/pflanze/16
Die Schlaue Pflanze
Page 18
schlaue_pflanze.py
import RPi.GPIO as gpio import Python_DHT import spidev import time import os
# LED
led = 21 gpio.setmode(gpio.BCM) gpio.setup(led, gpio.OUT)
# DHT11
sensor = Python_DHT.DHT11 pin = 4
# SPI Verbindung herstellen
spi = spidev.SpiDev() spi.open(0,0)
# Liest Daten vom MCP3008
def analogEingang(channel):
adc = spi.xfer2([1,(8+channel)<<4,0]) data = ((adc[1]&3) << 8) + adc[2] return data
def pflanze_messen():
helligkeit = analogEingang(0) bodenFeuchtigkeit = analogEingang(1)
if bodenFeuchtigkeit > 650: print("Du solltest deine Pflanze Waessern") gpio.output(led, gpio.HIGH) else:
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
Python
→ cw42.de/pflanze/17
Die Schlaue Pflanze
Page 19
Wenn du das Programm jetzt ausführst, sollte bei einer Pflanze, die noch gegossen werden muss, die Blaue LED aufleuchten. Wenn nichts aufleuchtet, ist alles gut. In Zeile 30 kannst du diesen Grenzwert auch anpassen. Denn dieser ist von Pflanze zu Pflanze unterschiedlich.
Damit wir das Programm nicht immer mit der Hand ausführen müssen, richten wir jetzt noch einen Cronjob ein. Vereinfacht gesagt können wir mit einem Cronjob bestimmte Programme zu bestimmten Zeiten automatisch ausführen lassen.
$ crontab -e
@hourly \home\pi\schlaue_pflanze.py
gpio.output(led, gpio.LOW)
feuchtigkeit, temperatur = Python_DHT.read_retry(sensor print("===========================") print("Feuchtigkeit: "+str(bodenFeuchtigkeit)) print("Helligkeit: "+str(helligkeit)) print("Temperatur: "+str(temperatur)) print("Feuchtigkeit: "+str( feuchtigkeit)+"%") time.sleep(1.2)
pflanze_messen()
34 35 36 37 38 39 40 41 42 43 44
Bash
→ cw42.de/pflanze/18
Die Schlaue Pflanze
Page 20
Weitere Möglichkeiten
Unser Hauptprojekt ist zu Ende. Zusammen mit der LED wissen wir jetzt immer, wann unsere geliebte Pflanze gegossen werden muss. Doch damit sind noch nicht alle Möglichkeiten erschöpft. Was ist, wenn wir die LED mal übersehen? Können wir nicht noch anders mit der Person, die die Pflanze gießen soll, in Kontakt treten?
E-Mails
Eine Möglichkeit ist das Versenden von E-Mails. Auf
http://cw42.de/emailVersenden findest du heraus, wie du das machen
kannst. Dort könntest du dann auch noch die anderen Messwerte übermitteln.
Display
Wir haben schon öfters mit dem 84 x 48 Zeichen Display gearbeitet und hier gibt es ein perfektes Beispiel. Auf dem Display können die gesamten Messwerte dargestellt werden. Dazu gibt es gerade mit der Zimmertemperatur auch die Möglichkeit, eine Anzeige für die Uhrzeit zu bauen. Sollte dann die Pflanze Wasser brauchen, leuchtet nicht nur die LED, sondern auch die Anzeige auf dem Display kann sich verändern.
http://cw42.de/pflanzeDisplay
Twitter Bot
Mit Twitter kannst du schnell kleine Nachrichten von maximal 140 Zeichen in die Welt senden. Wir haben so schon unseren eigenen Ficus
twitter.com/jp_norbert online gebracht. Mit einem Cronjob kannst du so die
Messwerte von deiner Pflanze posten. http://cw42.de/twitterBot
Auf Wiedersehen
Wir hoffen, dir hat dieses kleine Paket gefallen! Wenn du noch mehr erleben und arbeiten willst, findest du das auf codingworld.io Dort gibt es weitere Projekte und Hintergrundinfos für dein Projekt!
→ cw42.de/pflanze/19
Die Schlaue Pflanze
Loading...