Не работает dht11

Тема в разделе "Arduino & Shields", создана пользователем TheNail314, 18 фев 2019.

Метки:
  1. TheNail314

    TheNail314 Нерд

    Доброго времени суток, недавно был на форуме с просьбой о помощи со скетчем для ардуино (1602 i2c, DHT 11, RTC DS1302) Потихоньку начинаю понимать что такое вообще ардуино и программирование :)
    Но есть проблема: при выводе данных на дисплей на экране выходит с очень кратким промежутком времени строки: Checksum error, Time out error, Humidity = 95% Temp = 29\1C. С чем это связанно? В мониторе порта все норм. Ссылка на источник со скетчем, библиотекой и статьей: http://zelectro.cc/TemperatureHumiditySensor

    P. S. (В статье, если смотреть само расположение штырьков идет следующим образом: V, S, G. У меня на датчике идет S, не подписан, -). Скетч компилировался на IDE 1.0.5
    Код (C++):
    //Тестировалось на Arduino IDE 1.0.5
    #include <Wire.h>        // Добавляем необходимые библиотеки
    #include <LiquidCrystal_I2C.h>
    #include <dht11.h>
    dht11 DHT;               // Объявление переменной класса dht11
    #define DHT11_PIN 4      // Датчик DHT11 подключен к цифровому пину номер 4

    byte degree[8] =         // Битовая маска символа градуса
    {
      B00111,
      B00101,
      B00111,
      B00000,
      B00000,
      B00000,
      B00000,
    };  
    LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея

    void setup()
    {
      lcd.init();                       // Инициализация lcd            
      lcd.backlight();                  // Включаем подсветку
      lcd.createChar(1, degree);        // Создаем символ под номером 1
    }

    void loop()
    {
      // Выводим показания влажности и температуры
      lcd.setCursor(0, 0);              // Устанавливаем курсор в начало 1 строки
      lcd.print("Humidity =    % ");     // Выводим текст
      lcd.setCursor(11, 0);
      lcd.print(DHT.humidity, 1);
      lcd.setCursor(0, 1);              // Устанавливаем курсор в начало 2 строки
      lcd.print("Temp     =   \1C ");    // Выводим текст, \1 - значок градуса
      lcd.setCursor(11, 1);            
      lcd.print(DHT.temperature,1);

      int chk;  
      ; // Мониторинг ошибок
      chk = DHT.read(DHT11_PIN);    // Чтение данных
      switch (chk){
      case DHTLIB_OK:
        break;
      case DHTLIB_ERROR_CHECKSUM:
        lcd.clear();
        lcd.print("Checksum error");
        break;
      case DHTLIB_ERROR_TIMEOUT:
        lcd.clear();
        lcd.print("Time out error");
        break;
      default:
        lcd.clear();
        lcd.print("Unknown error");
        break;
      }
      delay(1000);                    
    }
     

    Вложения:

    • lib.zip
      Размер файла:
      23,3 КБ
      Просмотров:
      256
  2. TheNail314

    TheNail314 Нерд

    Ах да, если я при этом дую на датчик, температура меняется, но это видно лишь на долю секунды, пока видны те строки с показаниями датчика
     
  3. ratman

    ratman Нерд

    Всё верно. Ты выводишь показания датчика, тут же стираешь и пишешь что-то ещё. Кстати, сенсору влажности хана.
     
  4. TheNail314

    TheNail314 Нерд

    А почему хана?
     
  5. Ну видимо, иногда датчик не успевает делать преобразования. По-моему ему нужно около 2-х секунд для этого, а у вас стоит 1 секунда задержки. И вообще, строки, отвечающие за вывод ошибок на ЖКИ можно убрать или перенаправить в Serial.
     
  6. ImrDuke

    ImrDuke Гик

    А что то не вижу строчки dht.begin();
     
  7. ratman

    ratman Нерд

    -- Ты, когда ехал сюда, видел вывеску "Склад мёртвых негров"? Не видел? А почему? Да потому, что её нет!!! (с) Криминальное чтиво.

    Нет в либе функции .begin();
     
    parovoZZ нравится это.
  8. ImrDuke

    ImrDuke Гик

    Нет, значит нет.
     
  9. Airbus

    Airbus Радиохулиган Модератор

    Как это нет?Кто сказал?Брехня всё это.Всё есть!
    Код (C++):
    //Работа с датчиком DHT11
    //Определяет влажность и температуру
    //Выдаёт на дисплей по I2C
    #include <Adafruit_Sensor.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 16, 2);
    // Example testing sketch for various DHT humidity/temperature sensors
    // Written by ladyada, public domain
    #include "DHT.h"
    #define DHTPIN 2     // what pin we're connected to
    // Uncomment whatever type you're using!
    #define DHTTYPE DHT11   // DHT 11
    //#define DHTTYPE DHT22   // DHT 22  (AM2302)
    //#define DHTTYPE DHT21   // DHT 21 (AM2301)
    // Connect pin 1 (on the left) of the sensor to +5V
    // Connect pin 2 of the sensor to whatever your DHTPIN is
    // Connect pin 4 (on the right) of the sensor to GROUND
    // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
    DHT dht(DHTPIN, DHTTYPE);

    void setup()
    {
      lcd.init();
      lcd.backlight();
      Serial.begin(9600);
      Serial.println("DHTxx test!");
      dht.begin();
         }

    void loop()
    {
      // Reading temperature or humidity takes about 250 milliseconds!
      // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      // check if returns are valid, if they are NaN (not a number) then something went wrong!
      if (isnan(t) || isnan(h)) {
        Serial.println("Failed to read from DHT");
        lcd.setCursor(0, 0);
        lcd.print("error");} //и на LCD                              }
      else {
        lcd.setCursor(0, 0);
        lcd.print("Hum:          %");
        lcd.setCursor(11, 0);
        lcd.print(h);
        Serial.print("Humidity: ");
        Serial.print(h);
        Serial.print(" %\t");
        lcd.setCursor(0, 1);
        lcd.print("temp:         C");
        lcd.setCursor(11, 1);
        lcd.print(t);
        Serial.print("Temperature: ");
        Serial.print(t);
        Serial.println(" *C");
        delay(60000);
        }
      }
     
  10. ratman

    ratman Нерд

    Только у ТС библиотека DHT11, а не DHT.