Skocz do zawartości

Kurs Arduino II - #8 - cyfrowy czujnik wilgotności (DHT11)


Pomocna odpowiedź

@olekmi skompilowałem przed chwilą poniższy kod z kursu i wszystko zadziałało poprawnie:

#include "DHT.h"
#define DHT11_PIN 2
DHT dht;
 
void setup()
{
  Serial.begin(9600);
  dht.setup(DHT11_PIN);
}
 
void loop()
{
  //Pobranie informacji o wilgotnosci
  int wilgotnosc = dht.getHumidity();
  Serial.print(wilgotnosc);
  Serial.print("%RH | ");
  
  //Pobranie informacji o temperaturze
  int temperatura = dht.getTemperature();
  Serial.print(temperatura);
  Serial.println("*C");
 
  delay(1000); //Odczekanie wymaganego czasu
}

Pokaż z ciekawości zawartość swojego pliku DHT.h - znajdziesz go w katalogu z zainstalowaną biblioteką.

  • Lubię! 1
Link do komentarza
Share on other sites

@Treker 
dzięki wielkie za pomoc, już sobie poradziłem 🙂 
Mam pytanie czy można ustawić zakres pracy w enkoderze tak by po osiągnięciu danej wartości wyświetlił dana wartość np tempertura na ekranie LCD. Czy muszę napisać kod menu. Jeżeli tak to w jaki sposób bym mógł to zrobić?

Link do komentarza
Share on other sites

21 godzin temu, olekmi napisał:

dzięki wielkie za pomoc, już sobie poradziłem 🙂 

@olekmi podziel się proszę rozwiązaniem problemu - na pewno przyda się jeszcze komuś w przyszłości 🙂

21 godzin temu, olekmi napisał:

Mam pytanie czy można ustawić zakres pracy w enkoderze tak by po osiągnięciu danej wartości wyświetlił dana wartość np tempertura na ekranie LCD. Czy muszę napisać kod menu. Jeżeli tak to w jaki sposób bym mógł to zrobić?

O jakim enkoderze mowa? W tym kursie nie używamy takiego komponentu, ciężko wiec o jakąś konkretną poradę, bo nie wiem co dokładnie masz przed sobą 🙂

Link do komentarza
Share on other sites

Używając jednego czujnika DHT-11 mogłem odczytywać nowe wartości co 1 sekundę a nawet krócej. Podłączając inny czujnik DHT-11 dostaję NaN co drugi pomiar, działa dopiero przy próbkowaniu co najmniej co 1,2 sekundę. Dlaczego na innym czujniku wygląda to inaczej?

Edytowano przez michalt38
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Moja wersja stacji pogodowej z wyświetlaniem wyników na lcd:

#include <OneWire.h>
#include <DallasTemperature.h>   //Biblioteka termometru cyfrowego

OneWire oneWire(A5);                    //podłącznie termometru do A5
DallasTemperature sensors(&oneWire);     //przekazanie informacji do biblioteki
#include "DHT.h" 
DHT dht;              //biblioteka czujnika wilgoci

#include <LiquidCrystal.h>    //biblioteka lcd
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);      //inf. o wyswietlaczu

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
dht.setup(2);           //czujnik wilgoci pin 2
sensors.begin();        //inicjalizacja termometru
lcd.begin(16, 2);       //inicjalizacja lcd
lcd.clear();

}

void loop() {
  // put your main code here, to run repeatedly:
  sensors.requestTemperatures();        //zapytanie o odczyt termometru
  float temperatura = sensors.getTempCByIndex(0);   //zapisanie odczytu jako stałej
  int wilgotnosc = dht.getHumidity();             //zapisanie odczytu jako stałej
  int odczyt = analogRead(A0);
  int zachmurzenie = map(odczyt, 0, 1024, 1, 5);

  lcd.setCursor(0, 0);
  lcd.print("Temperatura");
  lcd.setCursor(0, 1);
  lcd.print(temperatura);
  lcd.setCursor(4, 1);
  lcd.print((char)223);
  lcd.setCursor(5, 1);
  lcd.print("C");                   //wyświetlenie temperatury powietrza

  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Wilgotnosc");
  lcd.setCursor(0, 1);
  lcd.print(wilgotnosc);
  lcd.setCursor(3, 1);
  lcd.print("%RH");                 //wyswietlenie wilgotnosci powietrza

  delay(2000);
  lcd.clear();

  switch(zachmurzenie) {          //wyswietlenie inf. o zachmurzeniu
    case 1:
    lcd.setCursor(0, 0);
    lcd.print("Zachmurzenie");
    lcd.setCursor(0, 1);
    lcd.print("Calkowite");
    break;
    case 2:
    lcd.setCursor(0, 0);
    lcd.print("Zachmurzenie");
    lcd.setCursor(0, 1);
    lcd.print("Duze");
    break;
    case 3:
    lcd.setCursor(0, 0);
    lcd.print("Zachmurzenie");
    lcd.setCursor(0, 1);
    lcd.print("Umiarkowane");
    break;
    case 4:
    lcd.setCursor(0, 0);
    lcd.print("Zachmurzenie");
    lcd.setCursor(0, 1);
    lcd.print("Male");
    break;
    lcd.setCursor(0, 0);
    lcd.print("Zachmurzenie");
    lcd.setCursor(0, 1);
    lcd.print("Bezchmurnie");
    break;
  }
  delay(2000);
  lcd.clear();
  
}

 

  • Lubię! 2
Link do komentarza
Share on other sites

@leh1992 super 🙂 tak trzymaj! Ewentualnie mógłbyś wykorzystać pomiar temperatury czujnika DHT11 i porównać pomiary z Dallasem, ciekawe jaka będzie różnica.

Edytowano przez Gieneq
Link do komentarza
Share on other sites

Cześć

Tak prezentuje się moja stacja pogody:

20210829_181833.thumb.jpg.b36d5b7ab7b69cb2364d49966db02a4d.jpg

Kod:

//biblioteki
#include <DHT.h> //wilgotnosc
 #include <OneWire.h> //temperatura
  #include <DallasTemperature.h>
   #include <LiquidCrystal.h> //wyswietlacz

#define DHT11_PIN 10
 #define termometr A4
  #define zachmurzenie A5
   #define czuwanie 11

DHT dht; //wilgotnosc
 OneWire oneWire(termometr); //temperatura i oneWire
  DallasTemperature sensors(&oneWire);
   LiquidCrystal lcd(4,5,6,7,8,9); //wyswietlacz

volatile int tryb = 1;
int wilgotnosc=0;
int wilgotnosc2=0;
int temperatura=0;
int zachmurzenie1=0;
int zachmurzenie2=0;

int maxT = sensors.getTempCByIndex(0);
int minT = sensors.getTempCByIndex(0);

int maxH = dht.getHumidity();
int minH = 99;


void setup() 
{
Serial.begin(9600);

dht.setup(DHT11_PIN); //wilgotnosc
sensors.begin(); //temperatura
lcd.begin(16,2); //wyswietlacz
lcd.setCursor(0,0);

pinMode(3, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(czuwanie, OUTPUT);

digitalWrite(czuwanie, HIGH);

attachInterrupt(digitalPinToInterrupt(2), maxMin, LOW); //przerwania do przyciskow
attachInterrupt(digitalPinToInterrupt(3), podswietlenie, LOW);

}

void loop() 
{
 
switch(tryb)
 {
  case 1: //czuwanie
  
  obliczenia();
  lcd.clear();
  lcd.print("Stacja pogody");
  lcd.setCursor(0,1);
  lcd.print("Wcisnij przycisk");
  digitalWrite(czuwanie, LOW);
  
  break;

  case 2: //podswietlenie
   digitalWrite(czuwanie, HIGH);
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Stacja pogody");
   delay(2000);
   lcd.clear();
   lcd.print(temperatura);
   lcd.setCursor(2,0);
   lcd.print("^C");
   lcd.setCursor(6,0);
   lcd.print(wilgotnosc);
   lcd.setCursor(8,0);
   lcd.print("%RH");
   lcd.setCursor(0,1);
   lcd.print("zachmurzenie");
   lcd.setCursor(13,1);
   lcd.print(zachmurzenie2);
   lcd.setCursor(15,1);
   lcd.print("%");
   delay(7000);
   tryb=1;
  break;
  
  case 3: //maxMin
  digitalWrite(czuwanie, HIGH);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Stacja pogody");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temperatura");
  lcd.setCursor(0,1);
  lcd.print("max ");
  lcd.print(maxT);
  lcd.setCursor(8,1);
  lcd.print("min ");
  lcd.print(minT);
  delay(4000);
  
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Wilgotnosc");
  lcd.setCursor(0,1);
  lcd.print("max ");
  lcd.print(maxH);
  lcd.setCursor(8,1);
  lcd.print("min ");
  lcd.print(minH);
  delay(4000);
  tryb=1;
  break;

 } 
}

void maxMin() //funkcja do przerwania
{
  tryb=3;
}
void podswietlenie() //funkcja do przerwania
{
  tryb=2;
}

void obliczenia()
{
sensors.requestTemperatures(); //pobieranie temperatury
temperatura=sensors.getTempCByIndex(0);
wilgotnosc = dht.getHumidity(); //pobieranie wilgotnosci
if (dht.getStatusString()=="OK") //jesli odebrano poprawne dane
  {
  wilgotnosc2=wilgotnosc;
  }
delay(dht.getMinimumSamplingPeriod());

zachmurzenie1=analogRead(zachmurzenie); //obliczanie zachmurzenia
if(zachmurzenie1>600)
{
  zachmurzenie1=600;
}
else if(zachmurzenie1<100)
{
  zachmurzenie1=100;
}
zachmurzenie2=map(zachmurzenie1, 100, 600, 99, 0);

if(temperatura > maxT) //obliczanie max i min temperatury i wilgotnosci
{
 maxT=temperatura;
}
 if(temperatura<minT)
 {
  minT=temperatura; 
 } 
  if(wilgotnosc2>maxH)
  {
   maxH=wilgotnosc2;
  } 
   if((wilgotnosc2<minH) && (wilgotnosc2!=0))
   {
    minH=wilgotnosc2;
   }
}

Pozdrawiam

  • Lubię! 2
Link do komentarza
Share on other sites

@Gieneq skopiowałem ze strony kursu i nie działa:

#include "DHT.h"
#define DHT11_PIN 2
DHT dht;
 
void setup()
{
  Serial.begin(9600);
  dht.setup(DHT11_PIN);
}
 
void loop()
{
  //Pobranie informacji o wilgotnosci
  int wilgotnosc = dht.getHumidity();
  Serial.print(wilgotnosc);
  Serial.print("%RH | ");
  
  //Pobranie informacji o temperaturze
  int temperatura = dht.getTemperature();
  Serial.print(temperatura);
  Serial.println("*C");
 
  delay(1000); //Odczekanie wymaganego czasu
}

 

Link do komentarza
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!

Anonim
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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.