Un autre capteur de température et d'humidité sans fil. Carte Z-Wave Z-Uno + Sensirion SHT20

Comme il convient, j'ai une station météo que j'ai moi-même montée à partir du DHT22, du Raspberry Pi et de l'écran Nokia, c'est une solution d'alimentation constante qui transmet des données via Ethernet.

Mais maintenant, j'avais besoin d'une station météo mobile sur le balcon, sans fil et alimentée par batterie.
En tant que module radio, j'ai utilisé une carte Z-Wave Z-Uno, comme capteur de température et d'humidité, j'ai décidé d'essayer Sensirion SHT20 en travaillant sur I2C.



Matériaux et prix:
Non.MatièreBoutiquePrix
1Carte Z-Wave Z-Uno5smart.ru3500 r
2Capteur Sensirion SHT20voltmaster.ru72 r
3Case Gainta G517Bvoltmaster.ru160 r
4Compartiment à piles BH421 2xAAAvoltmaster.ru14 p


Z-Uno est constamment mis à jour, la prise en charge de nouveaux périphériques et bibliothèques est ajoutée. À l'heure actuelle, la version actuelle du micrologiciel est 2.0.9 et la prise en charge des appareils suivants y est apparue:

  • Capteur de température DS18B20 à 1 fil
  • Capteur de température et d'humidité DHT22 && DHT11
  • Lecteur de carte RFID 125Khz
  • Capteur de pression et de température I2C BMP180
  • et d'autres appareils, des exemples ici sont z-uno.z-wave.me/examples


Le capteur Sensirion SHT20 fonctionnant sur le bus I2C n'était pas dans la liste des capteurs pris en charge, j'ai donc dû écrire ma propre implémentation pour Z-Uno. La syntaxe d'esquisse pour Z-Uno est aussi similaire à Arduino que possible, l'esquisse entière tient en 35 lignes:



Esquisse pour Z-Uno sur l'utilisation d'un capteur de température et d'humidité 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 modifié pour 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 


Parmi les choses spéciales, dans l'esquisse, il n'y a qu'une ligne qui met Z-Uno en mode veille:

 ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); 

Et configurer quel canal envoyer la température et dans quelle humidité:

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

Le reste est du code Arduino normal.

Sensirion SHT20 fonctionne sur I2C et est connecté par 2 fils. Par défaut, dans la bibliothèque Wire.h pour I2C, les broches 9 et 10 sont définies.

image

Les informations du capteur peuvent être consultées sur le téléphone et sont utilisées dans l'automatisation pour contrôler l'humidificateur et la climatisation.


Les données sont mises à jour toutes les 12 minutes, dans ce mode, le capteur doit fonctionner pendant plus de 2 ans à partir d'un jeu de piles.



Le bâtiment Gint G517B 90 x 60 x 20 cm a été spécialement choisi avec une place sous le compartiment batterie, tout s'intègre parfaitement.

Le développement du capteur de température et d'humidité Z-Wave a pris environ 2 heures et 3746 p. Vous pouvez également ajouter un écran E-Ink et l'accrocher au mur!

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


All Articles