Ein weiterer kabelloser Temperatur- und Feuchtigkeitssensor. Z-Wave Board Z-Uno + Sensirion SHT20

Wie es sich für einen anständigen Auftritt gehört, habe ich eine Wetterstation, die ich selbst aus DHT22-, Raspberry Pi- und Nokia-Bildschirm zusammengestellt habe. Dies ist eine Konstantstromlösung, die Daten über Ethernet überträgt.

Aber jetzt brauchte ich eine mobile Wetterstation auf dem Balkon, drahtlos und batteriebetrieben.
Als Funkmodul habe ich eine Z-Wave Z-Uno-Karte verwendet. Als Temperatur- und Feuchtigkeitssensor habe ich beschlossen, Sensirion SHT20 auf I2C zu testen.



Materialien und Preise:
Nein, nein.MaterialShopPreis
1Z-Wave Z-Uno Board5smart.ru3500 r
2Sensirion SHT20 Sensorvoltmaster.ru72 r
3Fall Gainta G517Bvoltmaster.ru160 r
4Batteriefach BH421 2xAAAvoltmaster.ru14 p


Z-Uno wird ständig aktualisiert, Unterstützung für neue Peripheriegeräte und Bibliotheken wird hinzugefügt. Derzeit unterstützt die aktuelle Version von Firmware 2.0.9 die folgenden Geräte:

  • 1-Draht-Temperatursensor DS18B20
  • DHT22 && DHT11 Temperatur- und Feuchtigkeitssensor
  • 125 kHz RFID-Kartenleser
  • I2C BMP180 Druck- und Temperatursensor
  • Beispiele hierfür sind z-uno.z-wave.me/examples


Der Sensirion SHT20-Sensor, der am I2C-Bus arbeitet, war nicht in der Liste der unterstützten Sensoren enthalten, daher musste ich meine eigene Implementierung für Z-Uno schreiben. Die Skizzensyntax für Z-Uno ist Arduino so ähnlich wie möglich, die gesamte Skizze passt in 35 Zeilen:



Skizze für Z-Uno für die Arbeit mit einem Temperatur- und Feuchtigkeitssensor Sensirion SHT20
#include <Wire.h> #include "SHT2x.h" int16_t temperature; uint8_t humidity; ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); #define ZUNO_CHANNEL_TEMPERATURE 1 #define ZUNO_CHANNEL_HUMIDITY 2 ZUNO_SETUP_CHANNELS( ZUNO_SENSOR_MULTILEVEL_TEMPERATURE(getterTemp), ZUNO_SENSOR_MULTILEVEL_HUMIDITY(getterHumid) ); void setup() { Wire.begin(); } void loop() { temperature = SHT2x.GetTemperature(); zunoSendReport(ZUNO_CHANNEL_TEMPERATURE); humidity = SHT2x.GetHumidity(); zunoSendReport(ZUNO_CHANNEL_HUMIDITY); zunoSendDeviceToSleep(); } byte getterTemp(void) { return temperature; } byte getterHumid(void) { return humidity; } 


SHT2x.cpp geändert für Z-Uno
 /* SHT2x - A Humidity Library for Arduino. Supported Sensor modules: SHT21-Breakout Module - http://www.moderndevice.com/products/sht21-humidity-sensor SHT2x-Breakout Module - http://www.misenso.com/products/001 Created by Christopher Ladden at Modern Device on December 2009. Modified by Paul Badger March 2010 Modified by www.misenso.com on October 2011: - code optimisation - compatibility with Arduino 1.0 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //#include <inttypes.h> #include <Wire.h> #include "Arduino.h" #include "SHT2x.h" /****************************************************************************** * Global Functions ******************************************************************************/ /********************************************************** * GetHumidity * Gets the current humidity from the sensor. * * @return float - The relative humidity in %RH **********************************************************/ float SHT2xClass::GetHumidity(void) { return (-6.0 + 125.0 / 65536.0 * (float)(readSensor(eRHumidityNoHoldCmd))); } /********************************************************** * GetTemperature * Gets the current temperature from the sensor. * * @return float - The temperature in Deg C **********************************************************/ float SHT2xClass::GetTemperature(void) { return (-46.85 + 175.72 / 65536.0 * (float)(readSensor(eTempNoHoldCmd))); } /****************************************************************************** * Private Functions ******************************************************************************/ uint16_t SHT2xClass::readSensor(uint8_t command) { uint16_t result = 0 ; uint8_t data[2]; // Sending request to sensor Wire.beginTransmission(eSHT2xAddress); // We have to read some registers from sensor Wire.write(command); // Command Wire.endTransmission(); delay(100); Wire.requestFrom(eSHT2xAddress, 3); //Get 3 bytes byte i = 0; while(Wire.available()) { data[i++] = Wire.read(); } result = data[0] << 8; result += data[1]; result &= ~0x0003; // clear two low bits (status bits) return result; } SHT2xClass SHT2x; 


SHT2x.h
 /* SHT2x - A Humidity Library for Arduino. Supported Sensor modules: SHT21-Breakout Module - http://www.moderndevice.com/products/sht21-humidity-sensor SHT2x-Breakout Module - http://www.misenso.com/products/001 Created by Christopher Ladden at Modern Device on December 2009. Modified by www.misenso.com on October 2011: - code optimisation - compatibility with Arduino 1.0 This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SHT2X_H #define SHT2X_H //#include <inttypes.h> typedef enum { eSHT2xAddress = 0x40, } HUM_SENSOR_T; typedef enum { eTempHoldCmd = 0xE3, eRHumidityHoldCmd = 0xE5, eTempNoHoldCmd = 0xF3, eRHumidityNoHoldCmd = 0xF5, } HUM_MEASUREMENT_CMD_T; class SHT2xClass { private: uint16_t readSensor(uint8_t command); uint8_t _data; public: SHT2xClass(){}; float GetHumidity(void); float GetTemperature(void); }; extern SHT2xClass SHT2x; #endif 


Von den besonderen Dingen gibt es in der Skizze nur eine Linie, die Z-Uno in den Schlafmodus versetzt:

 ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); 

Und festlegen, an welchen Kanal die Temperatur an und an welche Luftfeuchtigkeit gesendet werden soll:

 ZUNO_SETUP_CHANNELS( ZUNO_SENSOR_MULTILEVEL_TEMPERATURE(getterTemp), ZUNO_SENSOR_MULTILEVEL_HUMIDITY(getterHumid) ); 

Der Rest ist regulärer Arduino-Code.

Sensirion SHT20 arbeitet mit I2C und ist über 2 Drähte verbunden. Standardmäßig sind in der Wire.h-Bibliothek für I2C die Pins 9 und 10 definiert.

Bild

Informationen vom Sensor können auf dem Telefon angezeigt werden und werden in der Automatisierung zur Steuerung des Luftbefeuchters und der Klimaanlage verwendet.


Die Daten werden alle 12 Minuten aktualisiert. In diesem Modus muss der Sensor länger als 2 Jahre mit einem Batteriesatz arbeiten.



Das Gint-Gebäude G517B 90 x 60 x 20 cm wurde speziell mit einem Platz unter dem Batteriefach ausgewählt, alles passt perfekt.

Die Entwicklung des Z-Wave-Temperatur- und Feuchtigkeitssensors dauerte ca. 2 Stunden und 3746 p. Sie können auch einen E-Ink-Bildschirm hinzufügen und an die Wand hängen!

Source: https://habr.com/ru/post/de404417/


All Articles