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
  • 2 tygodnie później...

@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ć?

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ą 🙂

  • 5 tygodnie później...
(edytowany)

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
  • 1 miesiąc później...

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
(edytowany)

@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
  • 1 rok później...

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
  • 4 miesiące później...

@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
}

 

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