panStamp Umweltsensor
PanStamp Umweltsensor | |
---|---|
Allgemein | |
Protokoll | SWAP |
Typ | Sensor |
Kategorie | HardwareMods |
Technische Details | |
Kommunikation | 868MHz (433/915MHz) |
Kanäle | |
Betriebsspannung | 3.3V |
Leistungsaufnahme | |
Versorgung | Battery AA |
Abmessungen | 48.5 x 100 mm |
Sonstiges | |
Modulname | 34_panStamp.pm 34_SWAP.pm |
Ersteller | für diesen Sketch: Tobias |
Hersteller | panStamp |
panStamps sind Arduino Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Arduino IDE oder mit dem ino Kommandozeilen Binary programmieren. Dieser bildet das Herzstück des Umweltsensors
Weiterführende Information zu panStamps und den grundlegenden Modulen um sie mit Fhem zu integrieren finden sich im zugehörigen Wiki Artikel.
Beschreibung
Der auf dem panStamp (Arduino328p) basierende Umweltsensor hat die folgenden Eigenschaften:
- 4x Analogeingänge
- Helligkeitserfassung per TSL2561
- Temperatur- und Luftfeuchtemessung mit DHT22
- Luftdruck- und Temperaturmessung per BMP180
- Anschluss von 1..n 1wire Temperatursensoren DS18B20
- Messung der Batteriespannung
- Messung der Solarspannung
- Anpassbare MessFrequenz für Tag und Nacht
- passt alles in ein ELV IP65 (Nr: G203/G203C) Gehäuse und ist damit geeignet für den Außeneinsatz
Alle benötigten Dateien sind hier zu finden:
- Sketch
- EnvironmentSensor.xml
- Target3001 Dateien
Unbestückte Platinen können beim Ersteller, falls vorrätig, angefragt und erworben werden.
Schaltplan und Bauteilliste
Bauteilliste:
Bauteil | Bezeichnung | Shop | BauteilNr |
---|---|---|---|
L1 | LQH4C Speicherdrossel | Mouser.com
Reichelt Reichelt |
81-LQH43CN100K03L
L-1212FPS 10µ L-1616FPS 10µ |
C1, C2 | Keramikkondensator Typ:X7R 10uf | Reichelt
Mouser.com |
X5R-G0805 10/16
810-CGJ4J1X7R0J106AC |
C3 | Keramikkondensator Typ:X7R 1uF | Reichelt
Mouser.com |
X7R-G0805 1,0/16
810-C2012X5R1C105K-2 |
C4, C7 | Keramikkondensator Typ:X7R 100nF | Reichelt
Mouser.com |
X7R-G0805 100N
581-0805YD104KAT2A |
IC1 | MAX1724 Schaltregler 1.5uA IQ Step-Up DC/DC Converter | Mouser.com
tme.eu Ebay: G&C Supermarket |
MAX1724EZK33T
MAX1724EZK33+T MAX1724 |
K1,K2,K3,K4,K5 | Anreihklemme 3,5mm 3Pol | IT-WNS | AK-3.5-3-GY |
R1 | Widerstandsnetzwerk 100K | Reichelt | SIL 5-4 100K |
R2 | SMD Widerstand 1k | Reichelt
Mouser.com |
SMD-0805 1K
71-CRCW0805-1.0K-E3 |
R3 | SMD Widerstand 10k | Reichelt
Mouser.com |
SMD-0805 10K
71-CRCW0805-10K-E3 |
R4 | SMD Widerstand 4k7 | Reichelt
Mouser.com |
SMD-0805 4,70K
71-CRCW0805-4.7K-E3 |
J1 | Stiftleiste 1x5Pol | Reichelt | MPE 087-1-005 |
D1 | LED 3mm LowCurrent 2mA | Reichelt | LED 3MM 2MA GN |
TASTER | Reset TASTER 9314 | Reichelt | TASTER 9314 |
Batteriehalter | Batteriehalter 1x AA Mignon(Akku) | Reichelt | HALTER 1XAAP |
K7 | Anschluss Solarpanel (VERT PCB 2Pin TIN FRICTION LOCK) | Reichelt
Mouser |
zb. MPE 087-1-002
538-22-23-2021 |
D2 | BAV70 Schaltdiode SMD, SOT-23, 250V, 1A | Reichelt | BAV 70 SMD |
T1 | BCW 61 Transistor SMD PNP SOT-23 32V 0,1A 0,25W | Reichelt | BCW 61C SMD |
T2 | BC847 Transistor SMD NPN SOT-23 45V 0,1A 0,25W | Reichelt | BC 847B SMD |
T3 | BSS138 Transistor SMD N-FET SOT-23 50V 0,22A | Reichelt | BSS 138 SMD |
IC | panStamp AVR | panstamp.com | panStamp AVR |
-- | Female Header 2,54 mm, 1X16, straight | Reichelt | MPE 094-1-016 |
-- | DHT22 | lipoly.de | DHT22 |
-- | BMP180 | lipoly.de | BMP180 |
-- | TSL2561 | lipoly.de | TSL2561 |
-- | Dallas DS18B20 | lipoly.de | DS18B20 |
Hinweise zum Aufbau
Soll kein 1Wire genutzt werden, so wird empfohlen den R4 (4k7) nicht zu bestücken da dieser Pullup bei jedem Messvorgang bei denen 1wire/DHT22/BMP180 oder TSL2561 involviert sind zusätzlich die Batterie belasten.
Soll kein DHT22 genutzt werden, so wird empfohlen R3 und C7 (4k7) nicht zu bestücken da beide bei jedem Messvorgang bei denen 1wire/DHT22/BMP180 oder TSL2561 involviert sind zusätzlich die Batterie belasten.
Hinweise zum Betrieb mit FHEM
Configuration
Nach upload des Sketches auf den Panstamp ist zuerst die korrekte Kennung über das Register 09 sowie der gewünschte Sendezyklus über das Register 0A zu setzen (siehe Inbetriebname im Wiki Artikel zum den panStamps). Anschließend ist die Konfiguration mittels Register 0B zu setzen:
Bezeichnung | Länge | Position | Beschreibung |
---|---|---|---|
Sync Intervall | 2 Byte | 0+1 | Intervall in Sekunden zur Synronisation mit der Zentrale. 0000 ist deaktiviert |
SendDelay | 2 Byte | 2+3 | Sendeverzögerung in ms zwischen dem Senden von mehreren Registern. Soll Sendeüberlagerung bei Nutzung von Repeatern minimieren |
Altitude | 2 Byte | 4+5 | Angabe des Standortes des Sensors in Höhenmetern ünN. Notwendig zur Berechnung von SeaLevelPressure |
Day/NichtShift Type | 1 Byte | 6 | Type:1 -> Nutzung des Solarwertes ; Type:2 -> Nutzung der Helligkeit vom TSL2561 |
Day/NigthShift Threshold | 3 Byte | 7+8+9 | Schwellwert bei dem Day/Night umgeschaltet werden soll, Type 1: in mV ;Type 2: in Lum |
Day/NightShift TX Intervall | 2 Byte | 10+11 | Intervall in Sekunden im Tagesrhythmus, Das "normale" TX_INTERVAL (Register 0A) ist dann NachtRhythmus |
HAS_Analog4 | 1Bit | 12.0 | Die analoge Spannung am A3 wird gemessen. VCC liegt an D3 an. |
HAS_Analog3 | 1Bit | 12.1 | Die analoge Spannung am A2 wird gemessen. VCC liegt an D3 an. |
HAS_Analog2 | 1Bit | 12.2 | Die analoge Spannung am A1 wird gemessen. VCC liegt an D6 an. |
HAS_Analog1 | 1Bit | 12.3 | Die analoge Spannung am A0 wird gemessen. VCC liegt an D7 an. |
HAS_DS18B20 | 1Bit | 13.0 | Ein oder mehrere DS18B20 sind angeschlossen und sollen ausgelesen werden |
HAS_DHT22 | 1Bit | 13.1 | Ein DHT22 ist angeschlossen und soll ausgelesen werden |
HAS_TSL2561 | 1Bit | 13.2 | Ein Hellihkeitssensor TSL2561 ist angeschlossen und soll ausgelesen werden. |
HAS_BMP180 | 1Bit | 13.3 | Ein Luftdrucksensor BMP180 ist angeschlossen und soll ausgelesen werden. |
Transmit BatVol | 1Bit | 14.0 | Die aktuelle Batteriespannung soll übermittelt werden. |
Transmit SolarVol | 1Bit | 14.1 | Die aktuelle Spannung von der Solarzelle soll übermittelt werden. |
Enable Debug LED | 1Bit | 14.2 | Aktivierung der LED als Debug Ausgabe zur Initialisierung und zu jedem Sendezeitpunkt |
Enable Day/NightShift | 1Bit | 14.3 | Die Sendeintervalle für Tag und Nachtrhythmus sollen aktiviert werden |
Nutzung von unterschiedlichen Sendeintervallen bei Tag/Nacht
Soll das Sendeintervall tagsüber anders sein als in der Nacht, so ist dies über die Day/NightShift Funktionen einzustellen. Beispielsweise soll der Umweltsensor für eine Rolladensteuerung benutzt werden. Dann ist es besser die Messung minütlich durchzuführen. In der Nacht wäre dann 10-minütlich ausreichend. Über den ConfigParameter "Day/NichtShift Type" kann angegeben werden, auf welcher Grundlage die Tag/Nachterkennung stattfinden soll. Entweder über eine Solarspannung die normalerweise nur am Tage vorliegt, oder über eine Helligkeitsmessung des TSL2561 falls einer bestückt ist. In beiden Fällen wird über "Day/NichtShift Threshold" der Schwellwert angegeben an welchem Punkt die Tag/Nacht Grenze gesetzt werden soll. Bei Nutzung von Solarspannung ist hier der Schwellwert in mV anzugeben (zb. 500 für 0.5V) oder in Lumen als gemsssener Lumenwert des TSL2561. Hier sollten man vorher die Messerte der jeweiligen Sensoren über einige Tage genau beobachten um einen geeigneten Wert zu finden. Durch die angabe des Intervalls mit "Day/NichtShift TX Intervall" wird das Sendeintervall für den Tagrhythmus angegeben. Das Standardsendeintervall aus dem Register 0A ist das für den Nachtrhythmus verantwortlich.
Setzen der Konfiguration
Ein Register ist als Hex-Wert zu setzen. Folgende Tabelle zeigt eine exemplarische Konfiguration:
Bezeichnung | Wert | Binär Wert | Hex Wert |
---|---|---|---|
Sync Intervall | 12h -> 43200s | A8C0 | |
SendDelay | 100ms | 0064 | |
Altitude | 53m | 0035 | |
Day/NichtShift Type | 1 | 01 | |
Day/NigthShift Threshold | 1000mV | 0003E8 | |
Day/NightShift TX Intervall | 60s | 003C | |
HAS_Analog4 | nein | 0 | |
HAS_Analog3 | nein | 0 | |
HAS_Analog2 | ja | 1 | |
HAS_Analog1 | ja | 1 | |
00001100 | 0C | ||
HAS_DS18B20 | ja | 1 | |
HAS_DHT22 | nein | 0 | |
HAS_TSL2561 | nein | 0 | |
HAS_BMP180 | nein | 1 | |
00001001 | 09 | ||
Transmit BatVol | ja | 1 | |
Transmit SolarVol | ja | 1 | |
Enable Debug LED | nein | 0 | |
Enable Day/NightShift | ja | 1 | |
00001011 | 0B |
In obigem Fall ist das Konfigurationsregister wie folgt aufgebaut: A8C0 0064 0035 01 0003E8 003C 0C 09 0B Aufgrunddessen wird die Konfiguration folgendermaßen gesetzt:
set <MySwapDevice> regSet 0B A8C000640035010003E8003C0C090B
Es ist auch möglich die einzelnen Endpoints unabhängig voneinander zu setzen. z.B.:
set <MySwapDevice> regSet 0B.17 1
Syncronisation mit der Zentrale
Jede Syncronisation kostet zusätzlichen Strom und belastet damit die Batterie. Allerdings benötigt man eine Synronisation um Befehle von der Zentrale entgegenzunehmen. Z.B. für eine neue Konfiguration. Im Normalfall benötigt man keine automatisiert Synronisation da mit Druck auf den Reset-Button ebenfalls eine Synronisation erfolgt. Hat man aber ein Szenario vorliegen, beidem FHEM automatisiert die Konfiguration ändern soll, so ist ein SyncIntervall notwendig. Um die automatisierte Syncronisation abzuschalten ist als Wert 0000 zu setzen.
Nutzung von mehreren DS18B20
Die Messwerte für die 1wire Temperatursensoren werden in einem einzelnen Register 0E übertragen. Das bedeutet, falls mehrere DS18B20 am Bus angeschossen sind, überschreiben diese sich gegenseitig. Dieses Verhalten ist aber vom Author so gewollt um eine gewissen Generik zu gewährleisten. Um nun auf die einzelnen Messerte in FHEM zugriff zu bekommen, schafft folgendes UserReading Abhilfe:
attr <MySwapDevice> userReadings Temperature_Sun:0E.1-1wire_Address:.*28D6CF710400009C {SWAP_1wire($name)}
Die im Beispiel verwendete 1Wire ID ist natürlich an die eigenen Gegebenheiten anzupassen. Pro angeschlossenem DS18B20 ist ein weiteres userReading anzulegen.
Anschließend ist folgende Prozedur in 99_MyUtils.pm zu ergänzen:
sub SWAP_1wire($) { my ($SwapDevice) = @_; return (hex(ReadingsVal($SwapDevice, "0E.0-1wire_Temperature", ""))*0.01) - 50; }
Nun wird pro eindeutiger 1Wire-ID ein neues Reading erzeugt welches den Messwert enthält.
Weitere Hinweise
Keine.