جهاز استشعار درجة الحرارة والرطوبة اللاسلكي الآخر. لوح Z-Wave Z-Uno + Sensirion SHT20

كحفل لائق ، لدي محطة للطقس ، جمعتها بنفسي من شاشة DHT22 و Raspberry Pi وشاشة Nokia ، وهذا حل طاقة ثابت ينقل البيانات عبر Ethernet.

لكنني الآن بحاجة إلى محطة طقس متنقلة على الشرفة ، لاسلكي وبطارية تعمل بالطاقة.
بصفتي وحدة راديو ، استخدمت لوحة Z-Wave Z-Uno ، كمستشعر درجة الحرارة والرطوبة ، قررت تجربة Sensirion SHT20 على I2C.



المواد والأسعار:
لا.الموادتسوقالسعر
1لوحة Z-Wave Z-Uno5smart.ru3500 ص
2مستشعر Sensirion SHT20voltmaster.ru72 ص
3Case Gainta G517Bvoltmaster.ru160 ص
4حجرة البطارية BH421 2xAAAvoltmaster.ru14 ص


يتم تحديث Z-Uno باستمرار ، ويضاف دعم الأجهزة الطرفية والمكتبات الجديدة. في الوقت الحالي ، إصدار البرنامج الثابت الحالي هو 2.0.9 وظهر دعم للأجهزة التالية فيه:

  • 1-سلك DS18B20 استشعار درجة الحرارة
  • DHT22 && DHT11 استشعار درجة الحرارة والرطوبة
  • 125 كيلو هرتز قارئ بطاقة RFID
  • I2C BMP180 استشعار الضغط ودرجة الحرارة
  • وغيرها من الأجهزة ، الأمثلة هنا هي z-uno.z-wave.me/examples


لم يكن مستشعر Sensirion SHT20 الذي يعمل على ناقل I2C في قائمة المستشعرات المدعومة ، لذلك كان علي كتابة التنفيذ الخاص بي لـ Z-Uno. بنية الرسم التخطيطي لـ Z-Uno مشابهة لأردوينو قدر الإمكان ، الرسم بأكمله يتناسب مع 35 سطرًا:



Sketch لـ 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) ); 

والباقي هو رمز اردوينو عادي.

يعمل Sensirion SHT20 على I2C ومتصل بواسطة سلكين. بشكل افتراضي ، في مكتبة Wire.h لـ I2C ، يتم تعريف الدبابيس 9 و 10.

الصورة

يمكن عرض المعلومات من المستشعر على الهاتف ويتم استخدامها في التشغيل الآلي للتحكم في المرطب وتكييف الهواء.


يتم تحديث البيانات كل 12 دقيقة ، في هذا الوضع ، يجب أن يعمل المستشعر لأكثر من عامين من مجموعة واحدة من البطاريات.



تم اختيار مبنى Gint G517B 90 × 60 × 20 سم خصيصًا مع مكان أسفل حجرة البطارية ، كل شيء مناسب تمامًا.

استغرق تطوير جهاز استشعار درجة الحرارة والرطوبة Z-Wave حوالي ساعتين و 3746 ص. يمكنك أيضًا إضافة شاشة E-Ink وتعليقها على الحائط!

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


All Articles