Wetterstation Anfang
Folgende Teile braucht ihr für die Anleitung
Raspberry Pi Wetterstation Kit | 19.95€
Hallo und herzlich willkommen bei dem Jugend Programmiert Projekt Wetterstation .
In diesem Projekt bauen wir zusammen mit dir eine digitale Wetterstation. Dabei lernst du, wie man verschiedene Sensoren für Temperatur und Luftfeuchtigkeit ausliest und die Daten verarbeitet.
Außerdem steuern wir ein Siebensegment Display an und geben auf diesem unsere Daten aus.
Inhalte | Seite |
---|---|
Einleitung & Vorbereitung | Seite 2 |
DS18B20 anschließen & auslesen | Seite 3 |
DHT11 anschließen & auslesen | Seite 6 |
Sieben Segment Display | Seite 9 |
Daten verarbeiten | Seite 13 |
Daten auf das Display bringen | Seite 17 |
Ideen und Projekte | Seite 20 |
Einleitung & Vorbereitung
Wir freuen uns, dass du dich für eines unserer Projekte entschieden hast. Wie immer gehen wir von einer frischen und aktuellen Raspbian Installation auf deinem Raspberry Pi aus. Bringe den System auf einen aktuellen Stand. Öffne ein Terminal und gebe den folgenden Befehl ein:
sudo apt-get update && sudo apt-get upgrade
Als nächstes aktivieren wir ein paar Einstellungen in der Raspberry Pi Konfiguration. Dies ist notwendig, damit der Pi ein paar GPIO Pins anders ansteuert. Dies brauchen wir für die Sensoren. Aber keine Angst, das ist ganz einfach. Gebe in deinem Terminal den Befehl ein:
sudo raspi-config
SPI für das Display
In dem Menü wählen wir zuerst Punkt Nr. 7 aus, 7 Advanced Options
. Jetzt wählst du Punkt A6 SPI aus. Auf die Frage, ob wir das SPI Interface aktivieren wollen, antworten wir mit und bestätigen das mit OK .
1-Wire für den Outdoor Sensor
Im raspi-ronfig
Menü gehst du wieder auf Nr. 7 Advanced Options und dort auf AA 1-Wire . Das Aktivieren des one-wire Interace bestätigen wir mit und , der Pi startet nun einmal neu.
Das war es schon. Jetzt ist dein Pi bereit, die Sensoren auszulesen.
DS18B20 - Der Outdoor Sensor
Der DS18B20 ist ein Temperatursensor, der über das One-Wire Interface ausgelesen wird. Das bedeutet, dass der Sensor nur einen GPIO Pin für die Datenübertragung braucht. Dazu kommen aber noch Strom, also + und - . Der Sensor ist wasserdicht und kann daher auch unter Wasser genutzt werden. Das gilt natürlich nur für die Spitze und das Schwarze Kabel. Am anderen Ende findest du drei Kabel in den Farben rot, schwarz und gelb. Rot ist für Strom, schwarz für Ground (minus) und über das gelbe Kabel werden die Daten übertragen. Bei dem Sensor ist auch ein 4,7kΩ (Ohm) Widerstand dabei, den werden wir gleich brauchen.
Entferne ein kleines Stück, ca. 0,5 cm der Isolierung der drei Kabel. Falls du keine Abisolierzange hast, kannst du das vorsichtig mit einem Cuttermesser machen.
Jetzt nimmst du dein Breadboard und drei Jumperkabel F/M. Das steht für Male und Female, männlich und weiblich, damit ist einfach der Stecker mit Pin auf der einen und ohne Pin auf der anderen Seite gemeint.
Jetzt steckst du das Kabelende ohne Isolierung in das Breadboard und fixierst es mit einem der Stecker.
Wenn du mehr über die Funktionsweise des Breadboards erfahren möchtest, dann kannst du online unser Tutorial dazu schauen:
https://codingworld.io/project/gpio
Der One-Wire Sensor ist super einfach auszulesen. Alle paar Sekunden schickt der Sensor Daten an den GPIO Pin 4. Dieser überträgt die Daten in eine Datei und speichert sie auf deinem Raspberry Pi. Öffne das Terminal und gebe den folgenden Befehl ein:
cd cd /sys/bus/w1/devices/
Mit cd
(Change Direcory) gehen wir in einen bestimmten Ordner. In diesem Ordner gibt es einen Ordner mit einer Nummer. Lasse dir alle Dateien und Ordner mit dem Befehl ls
anzeigen. Einer der Ordner heißt 28-XXXXX. Die Nummer ist die ID deines Sensors. Jeder Sensor hat eine eigene ID und auch einen eigenen Ordner, es ist sogar möglich mehrere DS18B20 Sensoren an einem GPIO Pi an zu schließen.
Wir wechseln in den Ordner des Sensors.
cd 28-XXXXXXX
In diesem Ordner gibt es eine Datei mit dem Namen w1_slave, in der stehen die Temperaturdaten. Der Befehl cat
gibt den Inhalt einer Datei direkt aus. Das machen wir jetzt.
cat w1_slave
Die Ausgabe sollte so aussehen:
0a 00 4b 46 7f ff 0c 10 64 : crc=64 YES
0a 00 4b 46 7f ff 0c 10 64 t=16625
Die erste Zeile ist eine Prüfnummer, damit der Pi weiß, dass er die richtigen Daten bekommen hat. Die zweite Zeile ist die interessante. Am Ende steht dort t=16625 Das ist die Temperatur.
Natürlich wäre es immer etwas umständlich, den Ordner heraus zu suchen und sich dann die Temperatur ausgeben zu lassen. Wechsel zurück in dein Heimverzeichnis mit dem Befehl
cd
Der Terminal hat sehr viele praktische Funktionen. Es gibt auch eine, die es erlaubt, den Inhalt der w1_slave direkt auszugeben. Der Befehl dazu lautet:
cat /sys/bus/w1/devices/??-*/w1_slave
Dieser Befehl sollte auf jedem Raspberry Pi funktionieren. Die ? stehen für jedes mögliche Zeichen, der * steht für jede beliebige Zeichenfolge. Einzig das - ist fest. Es wird ein Ordner benutzt der an dritter Position ein - hat. Aus diesem Ordner wird der Inhalt der Datei w1_slave** ausgegeben.
DHT11 Luftfeuchtigkeit und Temperatur
Der zweite Sensor in unserem Kit ist der DHT11. Der Sensor kann die Temperatur und die Luftfeuchtigkeit in einem Raum messen. Um Ihn anzusprechen, müssen wir ein paar Dinge vorbereiten. Als erstes laden wir uns eine Bibliothek herunter, mit der wir den Sensor auslesen können.
git clone
https://github.com/coding-world/Python_DHT.git
Der Befehl lädt die ganze Bibliothek in den Ordner Python_DHT. In diesen Ordner wechseln wir mit dem Befehl:
cd Python_DHT
Jetzt installieren wir die Bibliothek mit diesem Befehl:
sudo python3 setup.py install
Die Bibliothek ist nun auf deinem PI installiert und wir können sie in unser Pythonprogramm einlesen.
Anschließen
Anschlüsse am Pi | Anschlüsse am DHT |
3,3V | 1. Pin DHT |
GPIO17 | 2. Pin DHT |
Widerstand 4,7kΩ | Zwischen 1. Pin DHT und 2. Pin DHT |
GND (Ground) | 4. Pin DHT |
Wenn du den DS18B20 schon angeschlossen hast, wirst du merken, dass GPIO Pin 4 schon belegt ist. Deswegen verbinden wir die Datenleitung des DHT11 mit dem GPIO Pin 17 !
- Zwischen dem 1. und dem 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 4,7kΩ. Widerstände erkennst du an ihrem aufgemalten Farbcode. Beim 4,7kΩ 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!
Wenn du alles richtig angeschlossen hast, können wir den Sensor auslesen. Dafür erstellen wir eine neue Datei und schreiben ein kleines Script zum Testen.
nano dht11_einfach.py
Das unbeschriebene Blatt mit Code füllen…
import Python_DHT
sensor = Python_DHT.DHT11
pin = 17
feuchtigkeit, temperatur = Python_DHT
.read_retry(sensor, pin)
print("Temperatur = "+str(temperatur)+
"C Feuchtigkeit = "+str( feuchtigkeit)+"%")
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 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 Variablen durch ein Komma getrennt hintereinander erzeugen und ihnen hinter dem Gleichheitszeichen, 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 7 geben wir wie gewohnt alle Informationen in der Konsole aus.
In Zeile 5 auf 6 und in Zeile 7 auf 8 gibt es Drucktechnischen gründen einen Zeilenumbruch.
Führe deinen Code aus mit diesem Befehl:
python3 dht11_einfach.py
Die Ausgabe sollte ungefähr so aussehen:
Temperatur = 19.0°C Feuchtigkeit = 21.0%
Falls es zu Fehlern kommt, kontrolliere bitte ob du die Bibliothek mit dem Befehl sudo python**3**
installiert hast und der Sensor richtig verbunden ist.