htu21d выдает 0%...
- Войдите на сайт для отправки комментариев
Пт, 17/04/2020 - 23:01
Всем привет. Пробую подключать датчик влажности htu21d к Mega2560. DA на 20, CL на 21 естественно. Питание 3.3 взял с ноги 3.3 на Mega. В итоге температура показывается адекватная, а влажность 0%. При этом, если подышать на датчик, влажность растет (что ожидаемо) и потом возвращается к 0%, что тоже ожидаемо за исключением 0% влажности в нормальном режиме.
Это глюк датчика, или влажность надо калибровать как-то перед использованием?
Скетч и либа от товарища enjoyneering79
/*********/ /* This is an Arduino example for SHT21, HTU21D Digital Humidity & Temperature Sensor written by : enjoyneering79 sourse code: https://github.com/enjoyneering/ This sensor uses I2C bus to communicate, specials pins are required to interface Board: SDA SCL Uno, Mini, Pro, ATmega168, ATmega328..... A4 A5 Mega2560, Due............................ 20 21 Leonardo, Micro, ATmega32U4.............. 2 3 Digistump, Trinket, ATtiny85............. 0/physical pin no.5 2/physical pin no.7 Blue Pill, STM32F103xxxx boards.......... PB7* PB6* ESP8266 ESP-01:.......................... GPIO0/D5 GPIO2/D3 NodeMCU 1.0, WeMos D1 Mini............... GPIO4/D2 GPIO5/D1 *STM32F103xxxx pins B7/B7 are 5v tolerant, but bi-directional logic level converter is recommended Frameworks & Libraries: ATtiny Core - https://github.com/SpenceKonde/ATTinyCore ESP8266 Core - https://github.com/esp8266/Arduino ESP8266 I2C lib fixed - https://github.com/enjoyneering/ESP8266-I2C-Driver STM32 Core - https://github.com/rogerclarkmelbourne/Arduino_STM32 GNU GPL license, all text above must be included in any redistribution, see link below for details: - https://www.gnu.org/licenses/licenses.html */ /***************************/ #include <Wire.h> #include <HTU21D.h> /* HTU21D(resolution) resolution: HTU21D_RES_RH12_TEMP14 - RH: 12Bit, Temperature: 14Bit, by default HTU21D_RES_RH8_TEMP12 - RH: 8Bit, Temperature: 12Bit HTU21D_RES_RH10_TEMP13 - RH: 10Bit, Temperature: 13Bit HTU21D_RES_RH11_TEMP11 - RH: 11Bit, Temperature: 11Bit */ HTU21D myHTU21D(HTU21D_RES_RH12_TEMP14); void setup() { Serial.begin(9600); Serial.println(); while (myHTU21D.begin() != true) { Serial.println(F("HTU21D, SHT21 sensor is faild or not connected")); //(F()) saves string to flash & keeps dynamic memory free delay(5000); } Serial.println(F("HTU21D, SHT21 sensor is active")); } void loop() { /* DEMO - 1 */ Serial.println(F("DEMO 1: 12-Bit Resolution")); Serial.print(F("Humidity............: ")); Serial.print(myHTU21D.readHumidity()); Serial.println(F(" +-2%")); Serial.print(F("Compensated Humidity: ")); Serial.print(myHTU21D.readCompensatedHumidity()); Serial.println(F(" +-2%")); Serial.println(F("DEMO 1: 14-Bit Resolution")); Serial.print(F("Temperature.........: ")); Serial.print(myHTU21D.readTemperature()); Serial.println(F(" +-0.3C")); /* DEMO - 2 */ Serial.println(F("DEMO 2: 11-Bit Resolution")); myHTU21D.setResolution(HTU21D_RES_RH11_TEMP11); Serial.print(F("Humidity............: ")); Serial.print(myHTU21D.readHumidity()); Serial.println(F(" +-2%")); Serial.print(F("Compensated Humidity: ")); Serial.print(myHTU21D.readCompensatedHumidity()); Serial.println(F(" +-2%")); Serial.println(F("DEMO 2: 11-Bit Resolution")); Serial.print(F("Temperature.........: ")); Serial.print(myHTU21D.readTemperature()); Serial.println(F(" +-0.3C")); /* DEMO - 5 */ Serial.println(F("DEMO 5:")); Serial.print(F("Sensor's ID.........: ")); Serial.println(myHTU21D.readDeviceID()); /* back to lib. default resolution */ myHTU21D.softReset(); myHTU21D.setResolution(HTU21D_RES_RH12_TEMP14); /* DEMO - END */ Serial.print(F("DEMO starts over again in 20 sec.")); delay(20000); }
Вывод в порт
DEMO 2: 11-Bit Resolution Humidity............: 0.00 +-2% Compensated Humidity: -0.31 +-2% Temperature.........: 22.93 +-0.3C
Возьмите другой сенсор, библиотеку, прочитайте показания вручную... Почему от 3.3В питаете?
Если подышать, получаем
35 - мало. В 80 поверил бы. Меняйте один из компонентов системы.
0% в простое - это и есть ненормальность. 35 - это просто повышение от "комнатной" влажности, которая естественно не может быть 0%
Если бы он температуру тоже 0 градусов показывал, было бы понятно что плата мертвая, но температура-то правильная...
Про смену компонентов системы я не понял. Есть мега, есть датчик. Что на что менять?
Что касается 3.3 В - на плате так написано, вот и питаю от 3.3В :)
Что на что менять я уже написал в #1
У датчиков влажности окисляются серебряные электроды внутри и тогда они начинают работать именно так - дыхнёшь - зашкаливают, а потом быстро сваливаются до нуля. Только замена помогает.
попробую еще поковырять, но скорее всего, увы, датчик сдох... позже отпишусь