Pomiar wilgotności DHT11

Masz problem z Arduino? Tutaj możesz szukać pomocy.
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Pomiar wilgotności DHT11

Post autor: Pixelx » 2 mar 2014, 21:00

Witam.

Chciałbym kupić czujnik do mierzenia wilgotności powietrza

http://allegro.pl/dht11-czujnik-temp-i- ... 74145.html

http://allegro.pl/dht11-czujnik-wilgotn ... 74473.html

1. Nie wiem czy lepiej kupić wbudowany w płytkę? Czy osobny i podpiąć pin od transmisji pod rezystor 5kohm tak jak na schemacie w załączniku czy kupić gotowy moduł z płytką PCB? W internecie w grafice widziałem też inne schematy w któych ten czujnik podłączany był pod pin analogowy? Więc nie wiem jak to jest że inny podpinają to pod cyfrowy inny pod analogowy chyba, że ten analogowy robił za cyfrowy? Mimo to jak chce wykorzystać pin cyfrowy.

2. Czy ma znaczenie który moduł kupie? Ten z płytką czy bez?

Po zakupie tego chciałbym wykorzystać do przetestowania przykład z biblioteki DHT11. W załączniku dodałem bibliotekę którą mam dodaną do arduino.

Mam także parę pytań do linii kodu za co odpowiadają.

Kod: Zaznacz cały

/*
  Board	          int.0	  int.1	  int.2	  int.3	  int.4	  int.5
 Uno, Ethernet	  2	  3
 Mega2560	  2	  3	  21	  20	  19	  18
 Leonardo	  3	  2	  0	  1
 Due	          (any pin, more info http://arduino.cc/en/Reference/AttachInterrupt)
 */

#include <idDHT11.h>

int idDHT11pin = 2; //Digital pin for comunications
int idDHT11intNumber = 0; //interrupt number (must be the one that use the previus defined pin (see table above)

//declaration
void dht11_wrapper(); // must be declared before the lib initialization

// Lib instantiate
idDHT11 DHT11(idDHT11pin,idDHT11intNumber,dht11_wrapper);

void setup()
{
  Serial.begin(9600);
  Serial.println("idDHT11 Example program");
  Serial.print("LIB version: ");
  Serial.println(IDDHT11LIB_VERSION);
  Serial.println("---------------");
}
// This wrapper is in charge of calling 
// mus be defined like this for the lib work
void dht11_wrapper() {
  DHT11.isrCallback();
}
void loop()
{
  Serial.print("\nRetrieving information from sensor: ");
  Serial.print("Read sensor: ");
  //delay(100);
  DHT11.acquire();
  while (DHT11.acquiring())
    ;
  int result = DHT11.getStatus();
  switch (result)
  {
  case IDDHTLIB_OK: 
    Serial.println("OK"); 
    break;
  case IDDHTLIB_ERROR_CHECKSUM: 
    Serial.println("Error\n\r\tChecksum error"); 
    break;
  case IDDHTLIB_ERROR_ISR_TIMEOUT: 
    Serial.println("Error\n\r\tISR Time out error"); 
    break;
  case IDDHTLIB_ERROR_RESPONSE_TIMEOUT: 
    Serial.println("Error\n\r\tResponse time out error"); 
    break;
  case IDDHTLIB_ERROR_DATA_TIMEOUT: 
    Serial.println("Error\n\r\tData time out error"); 
    break;
  case IDDHTLIB_ERROR_ACQUIRING: 
    Serial.println("Error\n\r\tAcquiring"); 
    break;
  case IDDHTLIB_ERROR_DELTA: 
    Serial.println("Error\n\r\tDelta time to small"); 
    break;
  case IDDHTLIB_ERROR_NOTSTARTED: 
    Serial.println("Error\n\r\tNot started"); 
    break;
  default: 
    Serial.println("Unknown error"); 
    break;
  }
  Serial.print("Humidity (%): ");
  Serial.println(DHT11.getHumidity(), 2);

  Serial.print("Temperature (oC): ");
  Serial.println(DHT11.getCelsius(), 2);

  Serial.print("Temperature (oF): ");
  Serial.println(DHT11.getFahrenheit(), 2);

  Serial.print("Temperature (K): ");
  Serial.println(DHT11.getKelvin(), 2);

  Serial.print("Dew Point (oC): ");
  Serial.println(DHT11.getDewPoint());

  Serial.print("Dew Point Slow (oC): ");
  Serial.println(DHT11.getDewPointSlow());

  delay(2000);
}




Pytania do linii kodu który podałem wyżej. Za co odpowiadają te linie kodu?

Kod: Zaznacz cały

void dht11_wrapper() {
  DHT11.isrCallback();

---------------------------------------

 DHT11.acquire();
  while (DHT11.acquiring())
    ;
}


3. Jak interpretować te przerwania? A co jeśli będę chciał przenieść do na zewnętrzny mikrokontroler np: Atmega328?

Board int. int.1 int.2 int.3 int. int.5
Uno, Ethernet 2 3
Mega2560 2 3 21 20 19 18
Leonardo 3 2 0 1



Z góry dzięki za pomoc.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
rafalzaq
Majsterkowicz
Posty: 180
Rejestracja: 2 maja 2013, 23:57

Re: Pomiar wilgotności DHT11

Post autor: rafalzaq » 3 mar 2014, 22:01

Wystarczy jak kupisz zwykły bez płytki. Jest kilka wariantów takiej płytki. Może się na niej znaleźć, dioda z rezystorem sygnalizująca zasilanie, rezystor podciągający (ten 5k, o którym wspominasz) lub ew. kondensator. Od Chińczyków na ebayu kupisz taki czujnik za nieco ponad dolara.

Nie wiem do czego są potrzebne przerwania. Używałem bibliotek bez przerwań. Możesz sprawdzić w kodzie tych bibliotek albo poszukać jakiegoś opisu na stronie, z której masz bibliotekę.
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 4 mar 2014, 16:32

Przesłałbyś mi ta bibliotekę która używałeś?

Podłączałeś to pod pin analogowy czy cyfrowy w necie znalazłem różne schematy inni pod cyfrowy podpinali inni pod analogowy? Chyba, że korzystali z innych bibliotek?
Awatar użytkownika
rafalzaq
Majsterkowicz
Posty: 180
Rejestracja: 2 maja 2013, 23:57

Re: Pomiar wilgotności DHT11

Post autor: rafalzaq » 5 mar 2014, 21:49

Sprawdzałem kilka różnych bo coś mu czujnik nie chciał działać. Okazało się że samo pobieranie danych wygląda identycznie. A czujnik prawdopodobnie uszkodzony.
Jeśli zrobisz wszystko wg tego http://learn.adafruit.com/dht/overview tutoriala to powinno działać. Jest tam też biblioteka do pobrania. Tylko pamiętaj żeby wybrać w kodzie właściwy typ czujnika.
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 5 mar 2014, 22:04

Dzięki.

Dzisiaj też znalazłem tą bibliotekę co wysłałeś mi w tym tutorialu. Tylko, że ja ja znalazłem pod filmikiem na yt :)

Filmik
http://www.youtube.com/watch?v=Qj69qfneNzI

Myślę nad kupieniem DHT22 jest bardziej czuły i lepszy odczyt dostanę.

Mam pytanię jszcze w sprawie tego rezystora w tym tutku co mi dałeś piszą 10k.

"You will want to place a 10K resistor between VCC and the data pin"
Do podłączenia DHT22 używam takiego samego rezystora jak w DHT11 czyli 10kohm?
Awatar użytkownika
rafalzaq
Majsterkowicz
Posty: 180
Rejestracja: 2 maja 2013, 23:57

Re: Pomiar wilgotności DHT11

Post autor: rafalzaq » 6 mar 2014, 19:39

Nie mam DHT22, ale wygląda podobnie, więc prawdopodobnie tak. Ogólnie nie musi to być dokładnie 10k. Jest on tylko po to aby utrzymać stan wysoki gdy nie są wysyłane żadne dane. Akurat w tym interfejsie poszczególne bity są rozpoznawane jako stan niski. Jeśli masz środowisko z dużymi zakłóceniami to dajesz mniejszy rezystor. Zwykle daje się 10k lub 4,7k.
DHT22 ma trochę lepsze parametry, ale jeszcze jakiś czas temu różnica w cenie była dość duża.
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 6 mar 2014, 20:09

DHT11 ma pomiary wilgotności od 20-80% a DHT22 0-100%.
Myślę, że wilgotność normalnie raczej nie przekroczy tych 80 i nie spadnie poniżej 20 w domowych warunkach?
U ciebie jak wyglądają pomiary? ile %? Wiec może nie warto dokładać do tego DHT22.
Awatar użytkownika
rafalzaq
Majsterkowicz
Posty: 180
Rejestracja: 2 maja 2013, 23:57

Re: Pomiar wilgotności DHT11

Post autor: rafalzaq » 7 mar 2014, 19:13

Nie mam na razie nigdzie podłączonego takiego czujnika na stałe. Jedynie testowałem przez ok. godzinę różne sztuki. Odczytana wilgotność była nie mal ta samo co na stacji pogodowej i na takim analogowym higrometrze powieszonym na ścianie. Niestety wszystkie te pomiary wskazywały wilgotność między 40 a 60%, więc nie wiem jak z odczytami przy wilgotności poza zakresem 20-80%. Lepszą dokładność przy pomiarze temperatury pominąłem bo i tak mam osobne czujniki.
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 16 mar 2014, 15:38

Witam ponownie.

Czujnik podłączyłem wszystko działa ładnie na serial monitorze. Gdy chcę to podłączyć pod LCD wyświetla się 0.00% znika i wyświetla się nazwa nan i tak w kółko.

Kod który zastosowałem do tego to. Dodam, że testuje to na Atmega328P (zewnętrzny mikrokontroler). Jak to wyeliminować?

Kod: Zaznacz cały


#include <DHT.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(9,8,7,6,5,4);

#define DHTPIN 2     

#define DHTTYPE DHT11   


DHT dht(DHTPIN, DHTTYPE);

void setup() 
{
 
  lcd.begin(16,2);
  lcd.clear();
 
  dht.begin();
}

void loop() 
{
  
  float h = dht.readHumidity();

    lcd.setCursor(0,0);
    lcd.print(h);
   
   delay(1000);
  }


Awatar użytkownika
rafalzaq
Majsterkowicz
Posty: 180
Rejestracja: 2 maja 2013, 23:57

Re: Pomiar wilgotności DHT11

Post autor: rafalzaq » 16 mar 2014, 17:23

NaN oznacza, że to co zwróciła funkcja dht.readHumidity() nie jest liczbą. Sprawdziłbym kilka rzeczy:
- zwiększyć delay na 2 sekundy lub więcej (czujnik musi mieć jakiś odstęp między kolejnymi odczytami i może tu jest błąd)
- odczytać po serialu wartość jaką zwraca czujnik zanim się ją wyśle na LCD
- ew. sprawdzić czy clear z lcd w pętli cokolwiek zmieni.

Na razie nie mam innych pomysłów.
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 17 mar 2014, 00:19

Zrobiłem delay na 2s i tak samo, na serialu działa, clear nic nie zmienia.

Wyświetlacz sprawny bo wyświetlam na nim też inne wartości z czujników.
Próbowałem także użyć lcd.write( nazwa zmiennej) to wyświetlił mi jakiś Chiński znaczek o ile można tak to nazwać.
Awatar użytkownika
rafalzaq
Majsterkowicz
Posty: 180
Rejestracja: 2 maja 2013, 23:57

Re: Pomiar wilgotności DHT11

Post autor: rafalzaq » 18 mar 2014, 20:24

Zarówno LCD jak i odczyt przez serial robiłeś na tej atmedze? Filtrowanie zasilania masz? Zewnętrzny kwarc czy wewnętrzny oscylator?
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 18 mar 2014, 23:50

Serial sprawdzałem na arduino leonardo i mam od razu na płytce prototypowej atmege z podłączonym wyświetlaczem. Po przetestowaniu w leonardo na serialu wrzuciłem to na Atmęgę. Chyba, że podłączę sobie wyświetlacz i DHT11 do leonardo i sprawdzę jak działa. Choć jak na moje to nic nie da.
Obecnie korzystam z wewnętrznego oscylatora.
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 21 mar 2014, 18:50

Przetestowałem ten układ na arduino Leonardo + LCD i działa wszystko. Na zewnętrznej Atmega328 nie działa. Może to wina, że nie mam kwarcu?
Awatar użytkownika
rafalzaq
Majsterkowicz
Posty: 180
Rejestracja: 2 maja 2013, 23:57

Re: Pomiar wilgotności DHT11

Post autor: rafalzaq » 21 mar 2014, 20:32

Nie podłączałem jeszcze czujnika ani wyświetlacza do osobnej atmegi, więc nie mogę potwierdzić, że to ma wpływ. Jeśli masz gdzieś pod ręką taki kwarc to warto sprawdzić. Tylko nie zapomnij zmienić fusebitów (czy tam wybrać odpowiedniej wersji atmegi w arduino IDE).
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 22 mar 2014, 22:48

Nic nie dało. Program się wgrał i pokazuje 0. Wyrzuciłem całkowicie lcd.clear();. No nic szkoda, że nie działa. Jak ktoś ma jakąś propozycje to napiszcie.
lukasz
Majsterkowicz
Posty: 59
Rejestracja: 21 sty 2014, 21:02

Re: Pomiar wilgotności DHT11

Post autor: lukasz » 23 mar 2014, 10:38

Ta biblioteka co uzywasz jest problemem. Znajdź taka która ma odczyt w stylu dht.read11()
Nie mam dostępu do kompa, ale ta linijke pamiętam. Z ta biblioteka co uzywasz mialem identyczne problemy
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 23 mar 2014, 12:20

Znalazłem ją i dalej to samo. To już się robi dziwne. Przetestowałem to jeszcze na arduino na serialu i działa.

Link skąd pobrałem: http://www.dfrobot.com/wiki/index.php/D ... DFR0067%29

O co chodzi z tą 1 w kodzie? To trzeba zmieniać? Dodam iż pin cyfrowy do którego podłączam to pin 2 standardowo jest to pin 4, ale to raczej nie ma znaczenia.

Kod: Zaznacz cały


lcd.print(DHT.humidity,1);

Kod który wgrałem na Atmegę328 po przerobieniu

Kod: Zaznacz cały


// 
//   FILE:  dht11_test1.pde
// PURPOSE: DHT11 library test sketch for Arduino
//
#include <dht11.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(9,8,7,6,5,4);

dht11 DHT;
#define DHT11_PIN 2

void setup()
{
  
  lcd.begin(16,2);
  lcd.clear();
}

void loop()
{
  int chk;
  
  chk = DHT.read(DHT11_PIN);    // READ DATA
  
  lcd.setCursor(0,0);
  lcd.print(DHT.humidity,1);
  lcd.setCursor(0,1);
  lcd.print(DHT.temperature,1);

  delay(1000);
  lcd.clear();
}


lukasz
Majsterkowicz
Posty: 59
Rejestracja: 21 sty 2014, 21:02

Re: Pomiar wilgotności DHT11

Post autor: lukasz » 23 mar 2014, 13:32

Po południu bede mial chwile to złożę uklad. Podaj dokładnie jak masz poskladane u siebie to zrobię tak samo
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 23 mar 2014, 14:08

Sposobu programowania nie będę ci opisywać bo to nie ma sensu. Wyświetlacz działa itd bo wyświetlałem na nim przed chwilą inne wartości.

DHT11

Pin1 - Vcc 5V
Pin2 - sprzężony z 1 za pomocą rezystora 4,7kohm oraz wyprowadzony kabelek do pinu 2 Atmegi
Pin3- nic
Pin4 - GND
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
lukasz
Majsterkowicz
Posty: 59
Rejestracja: 21 sty 2014, 21:02

Re: Pomiar wilgotności DHT11

Post autor: lukasz » 23 mar 2014, 23:54

Dopiero wróciłem, sprawdze to jutro
Awatar użytkownika
Pixelx
Majsterkowicz
Posty: 207
Rejestracja: 25 gru 2013, 14:19

Re: Pomiar wilgotności DHT11

Post autor: Pixelx » 25 mar 2014, 17:46

Już wiesz coś czy nadal nic nie spojrzałeś w tej sprawie? ;/
Awatar użytkownika
dzasek
Młodszy majsterkowicz
Posty: 44
Rejestracja: 21 sty 2015, 09:24

Re: Pomiar wilgotności DHT11

Post autor: dzasek » 21 kwie 2015, 10:20

Mam ten sam problem czy coś już się wyjaśniło w tym temacie?
Awatar użytkownika
dzasek
Młodszy majsterkowicz
Posty: 44
Rejestracja: 21 sty 2015, 09:24

Re: Pomiar wilgotności DHT11

Post autor: dzasek » 22 kwie 2015, 07:04

Rozwiązałem problem, wystarczyło zmienić bibliotekę linku nie podam bo się nie da. Wszystko działa na atmega 8L wew. osc. 8Mhz.
misiek1811
Młodszy majsterkowicz
Posty: 14
Rejestracja: 2 gru 2013, 17:18
Kontakt:

Re: Pomiar wilgotności DHT11

Post autor: misiek1811 » 14 maja 2015, 18:11

Witam
A jest możliwość podłączenia dwóch czujników DHT11 ?
ODPOWIEDZ

Strony partnerskie: