Skocz do zawartości
Wiktor2019

Czujnik DHT11 - nie działa pomiar ujemnych temperatur

Pomocna odpowiedź

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?

Udostępnij ten post


Link to post
Share on other sites

@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ę! 2

Udostępnij ten post


Link to post
Share on other sites
(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

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
Share on other sites
(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

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...