另一个无线温湿度传感器。 Z-Wave板Z-Uno + Sensirion SHT20

作为一个体面的演出,我有一个气象站,由DHT22,Raspberry Pi和诺基亚屏幕组装而成,这是一个恒功率解决方案,可通过以太网传输数据。

但是现在我需要在阳台上安装一个移动气象站,并通过无线和电池供电。
作为无线电模块,我使用了Z-Wave Z-Uno板,作为温度和湿度传感器,我决定尝试在I2C上运行的Sensirion SHT20。



材料和价格:
不行材质价钱
1个Z-Wave Z-Uno板5smart.ru3500转
2Sensirion SHT20传感器voltmaster.ru72 r
3凯斯Gainta G517Bvoltmaster.ru160转
4电池仓BH421 2xAAAvoltmaster.ru14 r


Z-Uno不断更新,增加了对新外围设备和库的支持。 目前,当前的固件版本是2.0.9,并且其中包含对以下设备的支持:

  • 1-Wire DS18B20温度传感器
  • DHT22 && DHT11温湿度传感器
  • 125Khz RFID读卡器
  • I2C BMP180压力和温度传感器
  • 和其他设备,此处的示例为z-uno.z-wave.me/examples


在I2C总线上工作的Sensirion SHT20传感器不在支持的列表中,因此我不得不为Z-Uno编写自己的实现。 Z-Uno的草图语法尽可能类似于Arduino,整个草图适合35行:



Z-Uno使用温度和湿度传感器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修改为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 


在特殊的事情中,草图中只有一条线使Z-Uno进入睡眠模式:

 ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); 

并设置向哪个温度和向哪个湿度发送温度的通道:

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

其余的是常规的Arduino代码。

Sensirion SHT20可在I2C上运行,并通过2根线连接。 默认情况下,在I2C的Wire.h库中,定义了引脚9和10。

图片

可以在电话上查看来自传感器的信息,并将其用于自动化控制加湿器和空调。


数据每12分钟更新一次,在这种模式下,传感器必须用一组电池工作2年以上。



特别选择Gint建筑G517B 90 x 60 x 20 cm,并在电池盒下方放置一个地方,一切都非常合适。

Z-Wave温湿度传感器的开发花费了大约2个小时和3746 p。 您还可以添加电子墨水屏幕并将其挂在墙上!

Source: https://habr.com/ru/post/zh-CN404417/


All Articles