Skocz do zawartości

Czujnik DHT11 - nie działa pomiar ujemnych temperatur


Pomocna odpowiedź

Napisano

Czujnik temperatury i wilgotności dht11 podłączony do arduino nie pokazuje mi temperatury na minusie. Pokazuje mi np. 10 wiem, że to na minusie ponieważ czujnik jest w zamrażarce ale nie chce pokazać mi minusa. Wgrywam taki program na resztą rzeczy proszę nie zwracać uwagi:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#define DHT11_PIN 2
DHT dht;

LiquidCrystal_I2C lcd(0x27, 20, 4);  // set the LCD address to 0x20 for a 16 chars and 2 line display

DS3231 clock;
RTCDateTime dt;

OneWire oneWire(A5); //Podłączenie do A5
DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki





void setup()
{
   Serial.begin(9600);
  sensors.begin(); //Inicjalizacja czujnikow
  
  lcd.init();                      // initialize the lcd 
 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.begin(20, 4); //Deklaracja typu

  Serial.println("Initialize DS3231");;
  clock.begin();
  clock.setDateTime(2019,11,23,21,21,0); 

  Serial.begin(9600);
  dht.setup(DHT11_PIN);
}

void loop()
{ 
  for (int i = 0; i < 1; i++) { //Wykonaj 1 razy
  dt = clock.getDateTime(); 
   lcd.setCursor(0, 0);
    lcd.print("zegar i");//ekran pokazowy
    lcd.setCursor(0, 2);//ekran pokazowy
    lcd.print("termometr ");//ekran pokazowy
    delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 1);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 2);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 3);//pusto
    lcd.print(" ");//pusto
  }
    
  for (int i = 0; i < 100; i++) { //Wykonaj 100 razy
  dt = clock.getDateTime();
      
    lcd.setCursor(0, 0);
    lcd.print("       #czas#       "); //czas
    lcd.setCursor(0, 1); //czas        
    lcd.print(dt.hour);  //czas        
    lcd.print(':');      //czas            
    lcd.print(dt.minute);//czas        
    lcd.print(' ');      //czas            
    lcd.setCursor(0, 2); //data
    lcd.print("       #data#       "); //data
    lcd.setCursor(0, 3); //data
    lcd.print(dt.day); //data
    lcd.print('/'); //data
    lcd.print(dt.month); //data
    lcd.print('/'); //data
    lcd.print(dt.year); //data
    delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 1);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 2);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 3);//przerwa
    lcd.print(" ");//przerwa
    delay(100);
    lcd.clear();
    lcd.setCursor(0, 0);//OBUDOWA
    lcd.print("TEMP W OBUDOWIE");//OBUDOWA
    lcd.setCursor(0, 1);//OBUDOWA  
    lcd.print(clock.readTemperature());//OBUDOWA
    lcd.print("*C");//OBUDOWA
    lcd.setCursor(0, 2);//OBUDOWA
    lcd.print(" ");
    lcd.setCursor(0, 3);//OBUDOWA
    lcd.print(" ");   //OBUDOWA
     delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 1);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 2);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 3);//przerwa
    lcd.print(" ");//przerwa
    delay(100);
    lcd.clear();
    lcd.setCursor(0, 0);//wilgotność i temperatura
    lcd.print("TEMP I WILG NA ZEWN");//wilgotność i temperatura
     //Pobranie informacji o wilgotnosci
    int wilgotnosc = dht.getHumidity();//wilgotność i temperatura
     lcd.setCursor(0, 1);//wilgotność i temperatura
     lcd.print("WILGOTNOSC "); //wilgotność i temperatura
     lcd.print(wilgotnosc);//wilgotność i temperatura
     lcd.print("%RH | ");//wilgotność i temperatura
     //Pobranie informacji o temperaturze
    int temperatura = dht.getTemperature();//wilgotność i temperatura
    lcd.setCursor(0, 2);//wilgotność i temperatura
    lcd.print("TEMPERATURA ");//wilgotność i temperatura
    lcd.print(temperatura);//wilgotność i temperatura
    lcd.print("*C");//wilgotność i temperatura
    for ( int i = 0; i > dht.getTemperature();){
      lcd.setCursor(15, 3);
      lcd.print("- ");
    }

     
      delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 1);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 2);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 3);//pusto
    lcd.print(" ");//pusto
     delay(100);
    lcd.setCursor(0, 0);//pusto
    lcd.print("Aktualna temperatura: ");
    lcd.setCursor(0, 1);//pusto
    lcd.print("grrtghtrhtrh");  //Wyswietlenie informacji
    lcd.setCursor(0, 2);//pusto
    lcd.print("gtgrbn ");//pusto
    lcd.setCursor(0, 3);//pusto
    lcd.print("5675872712&&&%#@@! ");//pusto
     delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 1);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 2);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 3);//pusto
    lcd.print(" ");//pusto
}
}

 
void LCDprint2digits(int number) {
  if (number >= 0 && number < 60) {
    lcd.write('0');
  }
  lcd.print(number);  
}

Co może być nie tak z tym kodem?

(edytowany)

@Wiktor2019 A czytałeś dokumentację tego czujnika, czy po prostu założyłeś że będzie działał bo powinien?

Taka mała podpowiedź:

dht11.thumb.PNG.5217852b0eb833df6ea18471497a6302.PNG

Kolumna "Measurement Range" ...

Edytowano przez Elvis
  • Lubię! 1
(edytowany)

Okej ale na czujniku pisze, że temperatura

-20-60  To czy w nadruku na czujniku jest błąd?

W takim razie jak użyje czujnika dht22 to prawidłowo będzie się wyświetlał minus prze temperaturach ujemnych?

Edytowano przez Wiktor2019

Z tego co widzę w większości opisów dht11 przewija się zakres 0-50, więc to raczej prawda. Dla dht22 ciężko o dokumentację, ale faktycznie zakres wydaje się już lepiej dopasowany do oczekiwań 🙂 Niestety w przypadku tanich układów i modułów "z dalekiego wschodu" ciężko jest o solidną dokumentację. Co więcej zdarzają się po prostu podróbki i w sumie nigdy nie wiadomo co dany model będzie miał nadrukowane, a co znajdziemy w środku.

  • Lubię! 2
(edytowany)

@ElvisMam jeszcze jedno pytanie co trzeba w tym kodzie zmienić żeby działał poprawnie z dwoma czujnikami dht11?

Oraz czemu nie pokazuje mi się temperatura z czujnik ds18b20 tylko -127 podłączam taj jak w kursie na forbocie.  

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"
#define DHT11_PIN 2
DHT dht;

LiquidCrystal_I2C lcd(0x27, 20, 4);  // set the LCD address to 0x20 for a 16 chars and 2 line display

DS3231 clock;
RTCDateTime dt;


OneWire oneWire(A5); //Podłączenie do A5
DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki


void setup()
{
  Serial.begin(9600);
  sensors.begin(); //Inicjalizacja czujnikow
  
  lcd.init();                      // initialize the lcd 
   // Print a message to the LCD.
  lcd.backlight();
  lcd.begin(20, 4); //Deklaracja typu

  Serial.println("Initialize DS3231");;
  clock.begin();
  clock.setDateTime(2019,11,23,21,21,0); 

  Serial.begin(9600);
  dht.setup(DHT11_PIN);

}

void loop()
{ 
  for (int i = 0; i < 1; i++) { //Wykonaj 1 razy
  dt = clock.getDateTime(); 
   lcd.setCursor(0, 0);
    lcd.print("zegar i");//ekran pokazowy
    lcd.setCursor(0, 2);//ekran pokazowy
    lcd.print("termometr ");//ekran pokazowy
    delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 1);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 2);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 3);//pusto
    lcd.print(" ");//pusto
  }
    
  for (int i = 0; i < 100; i++) { //Wykonaj 100 razy
  dt = clock.getDateTime();
      
    lcd.setCursor(0, 0);
    lcd.print("       #czas#       "); //czas
    lcd.setCursor(0, 1); //czas        
    lcd.print(dt.hour);  //czas        
    lcd.print(':');      //czas            
    lcd.print(dt.minute);//czas        
    lcd.print(' ');      //czas            
    lcd.setCursor(0, 2); //data
    lcd.print("       #data#       "); //data
    lcd.setCursor(0, 3); //data
    lcd.print(dt.day); //data
    lcd.print('/'); //data
    lcd.print(dt.month); //data
    lcd.print('/'); //data
    lcd.print(dt.year); //data
    delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 1);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 2);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 3);//przerwa
    lcd.print(" ");//przerwa
    delay(100);
    lcd.clear();
    lcd.setCursor(0, 0);//OBUDOWA
    lcd.print("TEMP W OBUDOWIE");//OBUDOWA
    lcd.setCursor(0, 1);//OBUDOWA  
    lcd.print(clock.readTemperature());//OBUDOWA
    lcd.print("*C");//OBUDOWA
    lcd.setCursor(0, 2);//OBUDOWA
    lcd.print(" ");
    lcd.setCursor(0, 3);//OBUDOWA
    lcd.print(" ");   //OBUDOWA
     delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 1);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 2);//przerwa
    lcd.print(" ");//przerwa
    lcd.setCursor(0, 3);//przerwa
    lcd.print(" ");//przerwa
    delay(100);
    lcd.clear();
    lcd.setCursor(0, 0);//wilgotność i temperatura
    lcd.print("TEMP I WILG NA ZEWN");//wilgotność i temperatura
     //Pobranie informacji o wilgotnosci
    int wilgotnosc = dht.getHumidity();//wilgotność i temperatura
     lcd.setCursor(0, 1);//wilgotność i temperatura
     lcd.print("WILGOTNOSC "); //wilgotność i temperatura
     lcd.print(wilgotnosc);//wilgotność i temperatura
     lcd.print("%RH | ");//wilgotność i temperatura
     //Pobranie informacji o temperaturze
    int temperatura = dht.getTemperature();//wilgotność i temperatura
    lcd.setCursor(0, 2);//wilgotność i temperatura
    lcd.print("TEMPERATURA ");//wilgotność i temperatura
    lcd.print(temperatura);//wilgotność i temperatura
    lcd.print("*C");//wilgotność i temperatura
       delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 1);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 2);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 3);//pusto
    lcd.print(" ");//pusto
     delay(100);
     lcd.clear();
    lcd.setCursor(0, 0);//pusto
    sensors.requestTemperatures(); //Pobranie temperatury czujnika
    lcd.print("Aktualna temperatura: ");
    lcd.println(sensors.getTempCByIndex(0));  //Wyswietlenie informacji
    lcd.setCursor(0, 1);//pusto
    lcd.print("Aktualna temperatura: ");
    lcd.setCursor(0, 2);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 3);//pusto
    lcd.print(" ");//pusto
    delay(5000);
    lcd.clear();
    lcd.setCursor(0, 0);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 1);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 2);//pusto
    lcd.print(" ");//pusto
    lcd.setCursor(0, 3);//pusto
    lcd.print(" ");//pusto
}
}

 
void LCDprint2digits(int number) {
  if (number >= 0 && number < 60) {
    lcd.write('0');
  }
  lcd.print(number);  
}

 

Edytowano przez Wiktor2019

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...