• „5G ja, aber mit geblockten Frequenzbereichen für die Industrie“ 13. Dezember 2018
    Wenige Wochen ist die Entscheidung der Frequenzvergabe für den 5G-Mobilfunk nun her, doch der mediale Rummel um das Thema scheint nicht abzuebben. Braucht man 5G für die Industrie oder reichen nicht auch andere, traditionelle oder bewährte Kommunikationsverfahren? Auch auf der SPS IPC Drives 2018 in Nürnberg war das ein Thema.
Know-how für alle

GPIO

Der 700MHz ARM11 CPU und dem Broadcom Grafikchip stehen 256MB Arbeitsspeicher zur Seite. Als Schnittstellen stehen ein HDMI und ein craspberry-pi_001omposite Ausgang für den Monitor, ein 3.5mm Audio-Ausgang, eine LAN-Buchse sowie zwei USB 2.0 Schnittstellen zur Verfügung. Der von den USB-Buchsen maximal bereitgestellte Strom darf 100mA nicht übersteigen. Da selbst einige Mäuse mittlerweile einen höheren Strom ziehen, ist ein USB-Hub mit separater Stromversorgung eine gute Erweiterung des Systems. Die absolute Besonderheit des Computers sind die 17 GPIOs. GPIO steht für General Purpose Input Output. Jeder der 17 Pins kann wahlweise als digitaler Ein- oder Ausgang geschaltet werden. Befindet sich ein Pin im Modus Ausgang, kann an diesen per Software eine Spannung von Null oder 3.3V angelegt werden. Somit können über Leistungstransistoren mit den Pins elektrische Verbraucher ein- oder ausgeschaltet werden. Im Modus Eingang gibt die Software eine 0 zurück, wenn keine Spannung an dem entsprechenden Pin anliegt beziehungsweise eine 1, wenn 3.3V Spannung anliegen.


http://www.amazon.de/gp/feature.html?ie=UTF8&docId=1000784973&tag=kalocomputerwiss

raspberry-pi_002Auf der Platinenrückseite ist der Einschub für die SD-Karten zu sehen. Eine 4GB-KArte ist ausreichend, um Debian-Linux zu installieren und dabei noch circa 2GB Speicher für eigene Erweiterungen frei zu haben.

 

 

 

GPIO Nummern bei Verwendung der WiringPi Software, erhältlich auf drogon.net.

raspberry-gpio

 

Anschluss einer einzelnen LED

bevor wir mit dem Anschluss an den GPIO beginnen, schalten wir mit einer LED 3,3V und 0V

So sieht die Verdrahtung auf dem Board ausexample1-300x225.

 

 

 

 

Zur besseren Übersicht zeige ich hier den Verdrahtungsplan

1led_bb1-267x300

Temperaturmessung mit dem Dallas DS18B20

Es gibt im Internet bereits viele Kochbücher für diese Anwendung daher möchte ich hier meine Lösung vorstellen.

Die Temperatur Messergebnisse möchte ich auf meiner Webseite (des RasPI) darstellen sodass ich in dem LAN mir die Temperaturen anzeigen lassen kann.

Meine Temperaturmessungen die ich über VPN von jedem Ort aus abrufen kann sehen für Innen- und Außenmessung so aus:

Die Anzeige ist hier

  • letzten 3 Stunden
  • letzten 24 Stunden

Temperaturmessung1

  • letzte Woche
  • Letzter Monat

Temperaturmessung2

Vorbereitungen:

Nur ein Widerstand

Den Datenanschluss DQ des DS1820 verbindet man direkt mit dem Anschluss GPIO4 der GPIO-Schnittstelle des Raspberry Pi. GND und VDD liegen am Masseanschluss GND. Die parasitäre Stromversorgung bewerkstelligt ein Pullup-Widerstand von 4,7 kΩ zwischen dem 3,3 Volt Anschluss 3V3 und GPIO4.

Den Widerstand, eine Buchsenleiste zum Aufstecken auf den GPIO-Port sowie den 1-wire Anschluss lötet man auf eine kleine Lochrasterplatte, die direkt auf dem GPIO-Port sitzt. Den 1-wire Anschluss kann man platzsparend mit einer abgewinkelten Buchsenleiste realisieren. Das alles bringt man ohne weiteres mit im TEK-BERRY Gehäuse des Raspberry Pi unter.

1-wire Softwaretreiber

Die für die Ansteuerung des 1-wire Temperatursensors erforderlichen Kernelmodule sind Bestandteil der Linux-Distribution Raspbian „wheezy“, man muss sie allerdings explizit laden:

Neuere Versionen des Raspbian Betriebssystems ab Kernel 3.18 (Februar 2015) erfordern zusätzlich die Aktivierung des Device Tree Overlay für 1-wire. Dazu editiert man (per sudo nano oder einem anderen Editor Ihrer Wahl) die Datei /boot/config.txt und fügt folgende Zeile hinzu:


dtoverlay=w1-gpio,gpiopin=4,pullup=on

Nach dem erforderlichen Reboot gelingt nun das Laden der erforderlichen Module per Kommandozeile:

sudo modprobe w1-gpio pullup=1
sudo modprobe w1-therm

Wichtig ist der Parameter pullup=1, der dem Modul mitteilt, dass eine parasitäre Speisung über einen Pullup-Widerstand vorhanden ist.
Die Module legen im Verzeichnis /sys/bus/w1/devices jeweils ein Unterverzeichnis für jeden gefundenen Sensor an. Der Name des Verzeichnisses setzt sich aus dem Family-Code des Sensors und seiner eindeutigen Identifikationsnummer zusammen. Sensoren vom Typ DS1820 und DS18S20 haben den Family-Code 10, DS18B20 den Code 28 und DS1822 die 22. In jedem Unterverzeichnis gibt es die Datei w1_slave, die Sensorstatus und gemessenen Temperaturwert enthält:

cd /sys/bus/w1/devices
cd 10-000801b5*
cat w1_slave

0f 00 4b 46 ff ff 06 10 0c : crc=0c YES
0f 00 4b 46 ff ff 06 10 0c t=7375

Die Datei besteht aus zwei Zeilen, die jeweils den hexadezimalen Registerdump des Sensor-ICs enthalten. Am Ende der ersten Zeile steht die Prüfsumme (CRC) und die Information, ob es sich um einen gültigen Messwert handelt (YES). Die zweite Zeile endet mit dem Temperaturmesswert in tausendstel Grad Celsius. Im Beispiel beträgt die Temperatur also 7,375 °C. Die Genauigkeit auf drei Stellen hinter dem Komma ist natürlich nur scheinbar; dem Datenblatt des DS18S20 entnimmt man zum Beispiel, dass die Messgenauigkeit ±0,5 °C beträgt. Die tatsächliche Temperatur liegt also irgendwo zwischen 6,8 und 7,9 °C.
Wenn alles soweit funktioniert, dann sollte man die beiden erforderlichen Module in die Datei /etc/modules eintragen, damit sie der Kernel in Zukunft automatisch beim Systemstart lädt:

# /etc/modules
w1-gpio pullup=1
w1-therm

Round Robin Datenbank RRDtool

Für eine langfristige Aufzeichnung der Temperaturmesswerte und die komfortable Erzeugung von Grafiken bietet sich die Verwendung von RRDtool an. Die Artikel Wetterdatenerfassung mit dem USB-WDE1 und Temperaturmessung mit dem Raspberry Pi (USB-seriell) stellen dieses Tool ausführlich vor.
Zuerst muss man RRDtool unter Zuhilfenahme des Packagemanagers auf dem Raspberry Pi installieren:


rrdtool create temperature.rrd --step 900 \
DS:temp0:GAUGE:1200:-40:80 \
DS:temp1:GAUGE:1200:-40:80 \
RRA:AVERAGE:0.5:1:960 \
RRA:MIN:0.5:96:3600 \
RRA:MAX:0.5:96:3600 \
RRA:AVERAGE:0.5:96:3600

Datenerfassung mit Python

Ein Pythonscript übernimmt die Auswertung der Special-Files w1_slave und das Einfügen der Temperaturwerte in die Round Robin Datenbank:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import re, os, rrdtool, time

# function: read and parse sensor data file
def read_sensor(path):
value = „U“
try:
f = open(path, „r“)
line = f.readline()
if re.match(r“([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES“, line):
line = f.readline()
m = re.match(r“([0-9a-f]{2} ){9}t=([+-]?[0-9]+)“, line)
if m:
value = str(float(m.group(2)) / 1000.0)
f.close()
except (IOError), e:
print time.strftime(„%x %X“), „Error reading“, path, „: „, e
return value

# define pathes to 1-wire sensor data
pathes = (
„/sys/bus/w1/devices/10-000801b5a7a6/w1_slave“,
„/sys/bus/w1/devices/10-000801b5959d/w1_slave“
)

# read sensor data
data = ‚N‘
for path in pathes:
data += ‚:‘
data += read_sensor(path)
time.sleep(1)

# insert data into round-robin-database
rrdtool.update(
„%s/temperature.rrd“ % (os.path.dirname(os.path.abspath(__file__))),
data)

Das Auslesen von w1_slave erfolgt in der Funktion read_sensor. Sie testet zunächst, ob die erste Zeile mit YES endet und somit eine valide Prüfsumme existiert. Wenn ja, dann extrahiert die Funktion den Temperaturwert aus der zweiten Zeile der Datei und gibt den Wert in Grad Celsius zurück. Im Fehlerfall liefert sie dagegen den Wert U zurück, den RRDtool als »Unknown« interpretiert.
Im Hauptprogramm stehen als erstes die Definitionen der Pfade zu den Temperatursensoren – diese müssen Sie natürlich ändern! Dann liest das Script nacheinander alle Sensoren durch Aufruf der Funktion read_sensor aus. Die Wartezeit von einer Sekunde soll das Einschwingverhalten der parasitären Stromversorgung auf dem Datenbus verbessern. Am Ende erfolgt das Einfügen der Messwerte in die Round Robin Datenbank. Die Konstruktion des Pfades zur Datenbank geht davon aus, dass sich das Script und die Datenbank im gleichen Verzeichnis befinden.
Das Script speichert man in die ausführbare Datei gettemp.py und führt es per Kommandozeile aus. Das Ergebnis lässt sich mittels rrdtool lastupdate überprüfen. Das gibt den Zeitstempel und die Werte des letzten Datenbankupdates aus:


chmod +x gettemp.py
./gettemp.py
rrdtool lastupdate temperature.rrd
temp0 temp1

1386777156: 18.937 5.687

Damit man sich in Zukunft nicht immer am Raspberry Pi einloggen und die Kommandozeile bemühen muss, ist es sinnvoll, den Scriptaufruf in seine crontab einzutragen:


echo '2-57/5 * * * * $HOME/temperature/gettemp.py >> $HOME/temperature/gettemp.log 2>&1' | crontab -

Mit dieser Definition führt der cron Daemon alle fünf Minuten, beginnend mit der zweiten Minute nach der vollen Stunde, das Script aus. Eine Ausgabeumleitung schickt eventuelle Fehlermeldungen in die Datei gettemp.log. Da die Datenbank als kleinstes Messintervall 15 Minuten definiert, erfolgt somit eine Durchschnittsbildung über jeweils drei Messwerte.

Grafik und mehr

Haben Hard- und Software eine Zeit lang fleißig Temperaturmesswerte gesammelt, dann kann RRDtool nette Grafiken erzeugen, zum Beispiel den Temparaturverlauf der letzten Woche als Liniendiagramm visualisieren:


rrdtool graph tempweek.png \
-s 'now - 1 week' -e 'now' \
DEF:temp0=temperature.rrd:temp0:AVERAGE \
LINE2:temp0#00FF00:Innen \
DEF:temp1=temperature.rrd:temp1:AVERAGE \
LINE2:temp1#0000FF:Außen

 

Sport's by Runnerinn

Trek Bike TrekkInn FR

Tennis Smashinn

Count per Day
  • 78Besucher heute: