Sensor suhu dan kelembaban nirkabel lainnya. Papan Z-Wave Z-Uno + Sensirion SHT20

Sebagai pertunjukan yang layak, saya memiliki stasiun cuaca, yang saya rakit sendiri dari DHT22, Raspberry Pi dan layar Nokia, ini adalah solusi daya konstan yang mentransmisikan data melalui Ethernet.

Tetapi sekarang saya membutuhkan stasiun cuaca bergerak di balkon, nirkabel dan bertenaga baterai.
Sebagai modul radio, saya menggunakan papan Z-Wave Z-Uno, sebagai sensor suhu dan kelembaban saya memutuskan untuk mencoba Sensirion SHT20 yang bekerja pada I2C.



Bahan dan harga:
Tidak.MaterialBerbelanjaHarga
1Z-Wave Z-Uno Board5smart.ru3500 r
2Sensirion SHT20 Sensorvoltmaster.ru72 r
3Case Gainta G517Bvoltmaster.ru160 r
4Kompartemen Baterai BH421 2xAAAvoltmaster.ru14 hal


Z-Uno terus diperbarui, dukungan untuk periferal dan perpustakaan baru ditambahkan. Saat ini, versi firmware saat ini adalah 2.0.9 dan dukungan untuk perangkat berikut telah muncul di dalamnya:

  • Sensor suhu 1-kawat DS18B20
  • Sensor suhu dan kelembaban DHT22 && DHT11
  • 125 KHz pembaca kartu RFID
  • I2C BMP180 sensor tekanan dan suhu
  • dan perangkat lain, contoh di sini adalah z-uno.z-wave.me/examples


Sensor Sensirion SHT20 yang bekerja pada bus I2C tidak ada dalam daftar yang didukung, jadi saya harus menulis implementasi saya sendiri untuk Z-Uno. Sintaks sketsa untuk Z-Uno adalah sama dengan Arduino mungkin, seluruh sketsa cocok dalam 35 baris:



Buat sketsa untuk Z-Uno saat bekerja dengan sensor suhu dan kelembaban 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 dimodifikasi untuk 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 


Dari hal-hal khusus, dalam sketsa hanya ada garis yang menempatkan Z-Uno ke mode tidur:

 ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); 

Dan mengatur saluran mana untuk mengirim suhu ke dan di mana kelembaban:

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

Sisanya adalah kode Arduino biasa.

Sensirion SHT20 bekerja pada I2C dan dihubungkan oleh 2 kabel. Secara default, di perpustakaan Wire.h untuk I2C, pin 9 dan 10 didefinisikan.

gambar

Informasi dari sensor dapat dilihat di telepon dan digunakan dalam otomasi untuk mengontrol pelembap dan pendingin udara.


Data diperbarui setiap 12 menit, dalam mode ini, sensor harus bekerja selama lebih dari 2 tahun dari satu set baterai.



Gint building G517B 90 x 60 x 20 cm dipilih secara khusus dengan tempat di bawah kompartemen baterai, semuanya pas dengan sempurna.

Pengembangan sensor suhu dan kelembaban Z-Wave memakan waktu sekitar 2 jam dan 3.746 p. Anda juga dapat menambahkan layar E-Ink dan menggantungnya di dinding!

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


All Articles