Raspberry Pi Sensoren auslesen

Aus Laub-Home Wiki

Mit dem Raspberry Pi kann man ohne Probleme diverse Sensoren auslesen, hier ist eine kleine Sammlung davon.

Das GPIO Board


Header Pinout, top row:

Pin Number Pin Name Rev1 Pin Name Rev2 Hardware Notes Alt 0 Function Other Alternative Functions
P1-02 5V0 5V0 Supply through input poly fuse
P1-04 5V0 5V0 Supply through input poly fuse
P1-06 GND GND
P1-08 GPIO 14 GPIO 14 Boot to Alt 0 -> UART0_TXD ALT5 = UART1_TXD
P1-10 GPIO 15 GPIO 15 Boot to Alt 0 -> UART0_RXD ALT5 = UART1_RXD
P1-12 GPIO 18 GPIO 18 ALT4 SPI1_CE0_N ALT5 = PWM0
P1-14 GND GND
P1-16 GPIO23 GPIO23 ALT3 = SD1_CMD ALT4 = ARM_RTCK
P1-18 GPIO24 GPIO24 ALT3 = SD1_DATA0 ALT4 = ARM_TDO
P1-20 GND GND
P1-22 GPIO25 GPIO25 ALT4 = ARM_TCK
P1-24 GPIO08 GPIO08 SPI0_CE0_N
P1-26 GPIO07 GPIO07 SPI0_CE1_N


Header Pinout, bottom row:

Pin Number Pin Name Rev1 Pin Name Rev2 Hardware Notes Alt 0 Function Other Alternative Functions
P1-01 3.3 V 3.3 V 50 mA max (01 & 17)
P1-03 GPIO 0 GPIO 2 1K8 pull up resistor I2C0_SDA I2C0_SDA / I2C1_SDA
P1-05 GPIO 1 GPIO 3 1K8 pull up resistor I2C0_SCL I2C0_SCL / I2C1_SCL
P1-07 GPIO 4 GPIO 4 GPCLK0
P1-09 GND GND
P1-11 GPIO17 GPIO17 ALT3 = UART0_RTS, ALT5 = UART1_RTS
P1-13 GPIO21 GPIO27 PCM_DIN ALT5 = GPCLK1
P1-15 GPIO22 GPIO22 ALT3 = SD1_CLK ALT4 = ARM_TRST
P1-17 3.3 V 3.3 V 50 mA max (01 & 17)
P1-19 GPIO10 GPIO10 SPI0_MOSI
P1-21 GPIO9 GPIO9 SPI0_MISO
P1-23 GPIO11 GPIO11 SPI0_SCLK
P1-25 GND GND

Temperatur Sensor

Fertige Module

Es gibt bereits fertige Sensor Module, welche bei eBay für ca. $5 verfügbar sind - diese gibt es in verschiedenen Größen und Bauformen und besitzen drei Anschluss Pins:

  • VCC (V3,3 / V5)
  • Data
  • Ground


DIY / Selbstbau

Alternativ zu den oben erwähnten fertigen Modulen, kann man die Sensor-Schaltung auch selbst basteln; hierzu wird neben dem Sensor (DS18B20) noch ein Widerstand (4,7k oder 10k) als Pullup benötigt. Die entsprechende Schaltung wird am folgenden Beispiel an einem Arduino verwendet - da jedoch die Schaltung identisch ist, kann diese auch am Pi an einem jeweiligen GPIO Pin verwendet werden:

Anschließen des Temperatur Sensors

Um den Temperatur Sensor mit dem Raspberry Pi zu verbinden muss man lediglich die 3 Anschlüsse des Sensors mit dem Pi verbinden. Hierbei wird GROUND zu GND, 3V3 zu VCC und GPIO4 zu DQ verbunden.

Sensor Pin Raspberry PI GPIO Pin
GND Ground Pin 6 (rechts, 3ter von oben)
VCC 3V3 Pin 1 (links, erster von oben)
DQ GPIO4 Pin 7 (links, 4ter von oben)

Als Verbindungskabel habe ich ein altes PC Gehäuse zu Mainboard Kabel verwendet und hier einfach die Adern samt Metal Hülse freigelegt und dann einfach mit den Pins verbunden.
Die folgenden Bilder sollten alles erklären.

Auswerten

Nachdem nun alles verkabelt ist müssen die benötigten Module noch geladen werden.

modprobe w1-gpio
modprobe w1-therm

dann prüfen wir ob die Module auch wirklich geladen sind:

lsmod
Module                  Size  Used by
w1_therm                2705  0
w1_gpio                 1283  0
wire                   23530  2 w1_gpio,w1_therm
cn                      4649  1 wire
snd_bcm2835            19889  0
snd_pcm                74834  1 snd_bcm2835
snd_seq                52536  0
snd_timer              19698  2 snd_seq,snd_pcm
snd_seq_device          6300  1 snd_seq
snd                    52489  5 snd_seq_device,snd_timer,snd_seq,snd_pcm,snd_bcm2835
snd_page_alloc          4951  1 snd_pcm

damit die Module dann immer beim Start geladen werden muss man diese einfach in der modules Datei eintragen:
/etc/modules

w1-gpio
w1-therm

so, nun können wir schauen ob wir die Temperatur auslesen können:

cat /sys/bus/w1/devices/w1_bus_master1/28-000004118a7f/w1_slave
89 01 4b 46 7f ff 07 10 2d : crc=2d YES
89 01 4b 46 7f ff 07 10 2d t=24562

Der Temperaturwert "t=xxxxx" entspricht 1/1000 °C. Da wir diesen nun noch umrechnen wollen um einen Besser lesbaren Wert zu bekommen brauchen wir als erste nur den reinen T= Wert:

grep 't=' /sys/bus/w1/devices/w1_bus_master1/28-000004118a7f/w1_slave | awk -F't=' '{print $2}'

Und nun noch umrechnen. Da die Bash von sich aus keine Kommazahlen unterstützt installieren wir das kleine Tool bc nach und Rechnen damit um:

aptitude install bc
echo "scale=3; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/28-000004118a7f/w1_slave | awk -F't=' '{print $2}')/1000" | bc -l

Will man nur 2 Kommastellen oder weniger angezeigt bekommen, muss man einfach nur den scale Wert anpassen (0,1,2,3.....)

Linksammlung

Temperatur

GPIO

Dann hat man gpio als cmd