VS: Raspberry Pi Zero W und Sensoren: Unterschied zwischen den Versionen

Aus CyberWiki
Zur Navigation springen Zur Suche springen
K (Geli verschob die Seite Raspberry Pi Zero W und Sensoren nach VS: Raspberry Pi Zero W und Sensoren, ohne dabei eine Weiterleitung anzulegen)
 
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 24: Zeile 24:


==Test==
==Test==
Ist der Sensor auf einem Breadboard geeignet verkabelt, kann mit folgendem Pythonprogramm ein erster Test versucht werden:
Ist der Sensor auf einem Breadboard richtig verkabelt, kann mit folgendem Pythonprogramm ein erster Test versucht werden:
  #!/usr/bin/env python
  #!/usr/bin/env python
  # -*- coding: utf-8 -*-
  # -*- coding: utf-8 -*-
  # Read SHT31
 
  #--------------------------------
#------------------------------------------------------------------------
  # SHT31 abfragen
  #------------------------------------------------------------------------
  import os, sys, time
  import os, sys, time
  import smbus
  import smbus
  # Get I2C bus
  # I2C Bus festlegen
  bus = smbus.SMBus(1)
  bus = smbus.SMBus(1)
    
    
  # SHT31 address, 0x44(68)
  # SHT31 Adresse definieren, 0x44(68)
  bus.write_i2c_block_data(0x44, 0x2C, [0x06])
  bus.write_i2c_block_data(0x44, 0x2C, [0x06])
    
    
  time.sleep(0.5)
  time.sleep(0.5)
    
    
  # SHT31 address, 0x44(68)
  # Daten lesen aus 0x00(00), 6 Bytes
# Read data back from 0x00(00), 6 bytes
  # Temp MSB, Temp LSB, Temp CRC, Humididty MSB, Humidity LSB, Humidity CRC
  # Temp MSB, Temp LSB, Temp CRC, Humididty MSB, Humidity LSB, Humidity CRC
  data = bus.read_i2c_block_data(0x44, 0x00, 6)
  data = bus.read_i2c_block_data(0x44, 0x00, 6)
    
    
  # Convert the data
  # Daten konvertieren
  temp = data[0] * 256 + data[1]
  temp = data[0] * 256 + data[1]
  cTemp = -45 + (175 * temp / 65535.0)
  cTemp = -45 + (175 * temp / 65535.0)
Zeile 50: Zeile 51:
  humidity = 100 * (data[3] * 256 + data[4]) / 65535.0
  humidity = 100 * (data[3] * 256 + data[4]) / 65535.0
    
    
  # Output data to screen
  # Daten anzeigen
  print "Temperature in Celsius: %.2f C" %cTemp
  print "Temperatur in Celsius: %.2f C" %cTemp
  print "Temperature in Fahrenheit: %.2f F" %fTemp
  print "Temperatur in Fahrenheit: %.2f F" %fTemp
  print "Relative Humidity: %.2f %%RH" %humidity
  print "Relative Feuchtigkeit: %.2f %%RH" %humidity
==DS18B20 Temperatursensor==
Für die Messung der Wandtemperatur wird ein DS18B20 Temperatursensor eingesetzt. Dieser wird wie in [[Temperatursensor DS18B20]] beschrieben angeschlossen und ausgelesen.<br />
[[Datei:DS18B20sensor.jpg]]
 
==Relais Modul==
Zum Ein- und Ausschalten des Ventilators wird ein 5V Relais-Modul 250VAC 10A eingesetzt. Damit können elektrische Verbraucher mit bis zu 2300W Leistung bei 230V geschaltet werden.<br />
[[Datei:2-channels-5v-relay-module.jpg]]<br />
Zum Anschluss an den Raspberry Pi werden folgende Pins verbunden:
'''Raspi      Relais'''
5V        VCC (4-pol. Anschlussfeld)
GND        GND (4-pol. Anschlussfeld)
GPIO25    IN1 (4-pol. Anschlussfeld)
Damit das Relais läuft, war bei mir auch die folgende Verbindung erforderlich:
GND        GND (3-pol. Anschlussfeld)
Die übrigen Pins am Relais werden von mir nicht beschaltet, deren Bedeutung findet man aber im Internet.<br />
Mit folgendem Programm kann das Funktionieren getesten werden:
#!/usr/bin/env python
#coding: utf8
import time
from gpiozero import LED
led = LED(25)
# Relais ausschalten - Relais active low!
# Damit muss am Relais VJD nicht mit 5V verbunden werden
led.on()
#-----------------------------------------------------------------
# Ausgang 3 mal ein-/ausschalten
i = 3
while i > 0:
    led.off() # Relais einschalten
    time.sleep(3) # 3 Sekunden warten
    led.on()  # Relais ausschalten
    time.sleep(3) # 3 Sekunden warten
    i = i - 1 # Zähler für die Schleife herunterzählen
Hinweis: Das Relais arbeitet mit dieser Beschaltung im "active low"-Modus. D.h. wenn GPIO25 ausgeschaltet wird, zieht das Relais an und die LED leuchtet.<br />
In welchem Zustand der Verbraucher eingeschaltet wird, entscheidet man beim Anschluss der 230V-Verbindung (im Bild K1 bzw. K2).

Aktuelle Version vom 5. Februar 2019, 12:24 Uhr

Wegen der geringen Workload des Projektes - Sensoren auslesen, kleine Berechnungen - wird ein Raspberry Zero W eingesetzt, der für sich einen Stromverbrauch vom ca. 1 W aufweist. Er hat, wie alle neueren Raspis einen 40-poligen Anschlusskonnektor. https://de.pinout.xyz/#
Der Rechner verfügt über WLAN und kann damit ins Netzwerk eingebunden werden.

Betriebssystem: Raspbian Stretch Lite

Die gesamte root-Partition wird auf einen 16GB USB-Stick verschoben, sodass die SD-Karte nur beim Bootvorgang kurz lesend angesprochen wird. Eine eigene Datenpartition wird nicht benötigt, da nur Messwerte gespeichert werden. Siehe Root-Filesystem auf USB-Datenträger umstellen.

Raspberry-pi3-pinout.jpg

SHT31-D Temperature and Humidity Sensor

Für die Ventilatorsteuerung werden 2 Sensoren des Typs SHT31-D verwendet. Diese Sensoren liefern eine hohe Genauigkeit und arbeiten in einem weiten Temperaturbereich.
SHT31.jpg
Auszug aus dem Datenblatt:

RH (Relative Humidity) operating range: 0 - 100%RH
Temperature range: -40 to +125°C
Typical Humidity accuracy: +/- 2%
Typical Temperature accuracy: +/- 0.2°C
I2C Interface with two user selectable addresses

Der Anschluss an den Raspberry Pi entspricht dem Luftdrucksensor BMP180, der ebenfalls über den I2C-Bus arbeitet - jedenfalls bis zum Punkt Software installieren. Funktioniert der Sensor nicht auf Anhieb, ist http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_I2C.html eine gute Einstiegsseite für die Problemsuche.
Da der Sensor über eine fixe Adresse auf dem I2C-Bus verfügt, ist für den Anschluss eines weiteren Sensors noch folgende Ergänzung notwendig (Zitat aus dem Datenblatt):

  • The SHT31 has a default I2C address of 0x44 which can also be changed to 0x45 by connecting the ADR pin to the VIN pin to pull the ADR pin high. So, connect the ADR pin to the 5V pin on the Arduino and also modify the sketch so that when creating the SHT31 object, the address 0x45 can be defined.

Test

Ist der Sensor auf einem Breadboard richtig verkabelt, kann mit folgendem Pythonprogramm ein erster Test versucht werden:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#------------------------------------------------------------------------
# SHT31 abfragen
#------------------------------------------------------------------------
import os, sys, time
import smbus
# I2C Bus festlegen
bus = smbus.SMBus(1)
 
# SHT31 Adresse definieren, 0x44(68)
bus.write_i2c_block_data(0x44, 0x2C, [0x06])
 
time.sleep(0.5)
 
# Daten lesen aus 0x00(00), 6 Bytes
# Temp MSB, Temp LSB, Temp CRC, Humididty MSB, Humidity LSB, Humidity CRC
data = bus.read_i2c_block_data(0x44, 0x00, 6)
 
# Daten konvertieren
temp = data[0] * 256 + data[1]
cTemp = -45 + (175 * temp / 65535.0)
fTemp = -49 + (315 * temp / 65535.0)
humidity = 100 * (data[3] * 256 + data[4]) / 65535.0
 
# Daten anzeigen
print "Temperatur in Celsius: %.2f C" %cTemp
print "Temperatur in Fahrenheit: %.2f F" %fTemp
print "Relative Feuchtigkeit: %.2f %%RH" %humidity

DS18B20 Temperatursensor

Für die Messung der Wandtemperatur wird ein DS18B20 Temperatursensor eingesetzt. Dieser wird wie in Temperatursensor DS18B20 beschrieben angeschlossen und ausgelesen.
DS18B20sensor.jpg

Relais Modul

Zum Ein- und Ausschalten des Ventilators wird ein 5V Relais-Modul 250VAC 10A eingesetzt. Damit können elektrische Verbraucher mit bis zu 2300W Leistung bei 230V geschaltet werden.
2-channels-5v-relay-module.jpg
Zum Anschluss an den Raspberry Pi werden folgende Pins verbunden:

Raspi      Relais
5V         VCC (4-pol. Anschlussfeld)
GND        GND (4-pol. Anschlussfeld)
GPIO25     IN1 (4-pol. Anschlussfeld)

Damit das Relais läuft, war bei mir auch die folgende Verbindung erforderlich:

GND        GND (3-pol. Anschlussfeld)

Die übrigen Pins am Relais werden von mir nicht beschaltet, deren Bedeutung findet man aber im Internet.
Mit folgendem Programm kann das Funktionieren getesten werden:

#!/usr/bin/env python
#coding: utf8 
import time
from gpiozero import LED

led = LED(25)
# Relais ausschalten - Relais active low!
# Damit muss am Relais VJD nicht mit 5V verbunden werden
led.on()
#-----------------------------------------------------------------
# Ausgang 3 mal ein-/ausschalten
i = 3
while i > 0:
    led.off() # Relais einschalten
    time.sleep(3) # 3 Sekunden warten
    led.on()  # Relais ausschalten
    time.sleep(3) # 3 Sekunden warten
    i = i - 1 # Zähler für die Schleife herunterzählen

Hinweis: Das Relais arbeitet mit dieser Beschaltung im "active low"-Modus. D.h. wenn GPIO25 ausgeschaltet wird, zieht das Relais an und die LED leuchtet.
In welchem Zustand der Verbraucher eingeschaltet wird, entscheidet man beim Anschluss der 230V-Verbindung (im Bild K1 bzw. K2).