Skocz do zawartości

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


Pomocna odpowiedź

Napisano
html_mig_img
Termometry (analogowe i cyfrowe), które zostały opisane podczas poprzedniego odcinka kursu, to zdecydowanie najczęściej używane sensory do pomiaru warunków atmosferycznych.Drugim równie popularnym tematem jest pomiar wilgotności, który będzie możliwy dzięki DHT-11!

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

No to ja zacznę:

Lampa i pasek LED sterowany pilotem z odczytem temp i wilgotności.

Kierując się tylko informacjami z kursów (tak jak już to wcześniej wspominałem) poskładałem coś takiego. Podpatrzyłem jedynie jak podłączyć moduł przekaźnika RM0. A więc mamy tu odbiornik podczerwieni z kursu elektroniki II #7, stabilizator napięcia z kursu elektroniki #8, wyświetlacz z kursu arduino #7, tranzystor BC547 (sterowanie paskiem LED) zastosowany w lekcjach elektroniki i arduino, tak samo jak LED i przyciski, czujnik DS18B20 oraz czujnik DHT11 z ostatnich lekcji arduinoII. Część z czujnikiem DS18B20 robiłem chwilę przed lekcją w ramach przygotowania i jest trochę inaczej niż w kursie (to będę dziś poprawiał). Kod w wersji wczesnej alfa 🙂 cały czas modyfikowany - wczoraj przypisałem do przycisków włączanie i wyłączanie led i lampy tzn. włączanie i wyłączanie na jednym przycisku. Potem chcę coś zrobić z czasowym podświetleniem wyświetlacza (void ekranLed() ). Ten delay strasznie mrozi kod 🙂 Zabawa jest super. Chciałem wykorzystać pilot z kursu budowy robotów, ale tam do jednego przycisku przypisane są dwa kody, a to trochę mi skomplikowało myśl - więc poczekam jeszcze na stosowną lekcję.

No i kod - proszę nie krzyczeć - w wolnych chwilach poprawiam go 😉

                        //ODCZYT KODOW Z PILOTA
//#include <IRremote.h>
//#define irPin 11
//IRrecv irrecv(irPin);
//decode_results results;
// 
//void setup() {
//   Serial.begin(9600);
//   irrecv.enableIRIn();
//}
// 
//void loop() {
//   if (irrecv.decode(&results)) {
//      Serial.print("0x");
//      Serial.println(results.value, HEX);
//      delay(250);
//      irrecv.resume();
//      }
//}

                  // Czytnik numerów seryjnych czujników DS18B20
//
//#include <OneWire.h>
//
//// Numer pinu cyfrowego do którego podłaczyłęś czujniki
//const byte ONEWIRE_PIN = 2;
//
//OneWire onewire(ONEWIRE_PIN);
//
//void setup()
//{
//  while(!Serial);
//  Serial.begin(9600);
//}
//
//void loop()
//{
//  byte address[8];
//
//  onewire.reset_search();
//  while(onewire.search(address))
//  {
//    if (address[0] != 0x28)
//      continue;
//
//    if (OneWire::crc8(address, 7) != address[7])
//    {
//      Serial.println(F("Błędny adres, sprawdz polaczenia"));
//      break;
//    }
//
//    for (byte i=0; i<8; i++)
//    {
//      Serial.print(F("0x"));
//      Serial.print(address[i], HEX);
//
//      if (i < 7)
//        Serial.print(F(", "));
//    }
//    Serial.println();
//  }
//
//  while(1);
//}



#include <IRremote.h> //Dolaczenie bibloteki dla scalonego odbiornika IR 
                    //https://github.com/shirriff/Arduino-IRremote/zipball/master

#include <LiquidCrystal.h> //Dołączenie bilbioteki wyswietlacza
#include <OneWire.h> //Bibloteki dla termometru
#include <DS18B20.h>
#include "DHT.h"//Biblioteka dla czujnika wilg / temp

#define irPin 2 //pin odbiornika IR
#define diodaPin 9 //pin listwy LED
#define diodaPin1 8 //pin kontrolki odbioru z pilota
#define lampa 7 //pin sterowania lampa (przekaźnik RM0)
#define PodLed 12 //podswietlenie wyswietlacza
#define ONEWIRE_PIN 13 //pin termometru
#define przON A0
#define przOFF A1
#define DHT11_PIN A3 //Pin czujnika wilg / temp

IRrecv irrecv(irPin);
decode_results results;
DHT dht;
byte address[8] = {0x28, 0x5, 0xD2, 0x4B, 0x8, 0x0, 0x0, 0x79}; //adres termometru

OneWire onewire(ONEWIRE_PIN); //nie mam pojecia co - dla termometru
DS18B20 sensors(&onewire);
LiquidCrystal lcd(3, 4, 5, 6, 10, 11); //Informacja o podłączeniu nowego wyświetlacza

int jasnosc = 0; // zmienna dla jasnosi listwy LED
int lampaStatus = LOW;
int diodaStatus = LOW;
int lampaStatus1 = LOW;

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

   pinMode(diodaPin, OUTPUT); //deklaracja pinow wyjsciowych
   pinMode(diodaPin1, OUTPUT);
   pinMode(lampa, OUTPUT);
   pinMode (PodLed, OUTPUT);
   pinMode (przON, INPUT_PULLUP);
   pinMode (przOFF, INPUT_PULLUP);

   sensors.begin(); //znow cos dla termometru
   sensors.request(address);

   dht.setup(DHT11_PIN);//Czujnik wilgotnosci
}

void loop() {

 if (digitalRead(przON) == LOW) { //Jeśli przycisk wciśnięty
   lampaStatus = ~lampaStatus;
   digitalWrite(lampa, lampaStatus); //Włącz /wyłącz lampe
   delay(250);
 } 

if (digitalRead(przOFF) == LOW) { //Jeśli przycisk wciśnięty
   diodaStatus = ~diodaStatus;
   digitalWrite(diodaPin, diodaStatus); //Wyłącz /wyłącz ledy
   delay(250);
}

if (sensors.available())
 {
   float temperature = sensors.readTemperature(address);

   Serial.print(temperature);
   Serial.println(F(" 'C"));

   sensors.request(address);
 }

  if (irrecv.decode(&results)) {

      switch (results.value) {

        case 0x6170807F: //instrukcja dla listwy LED zwiekszanie
           if(jasnosc < 255) {jasnosc = jasnosc+51;} 
           Serial.println(jasnosc); 
           analogWrite(diodaPin, jasnosc);
           zamigajLED(); //funkcja kontrolki odbioru 
           ekranDane();
           ekranLed();
           break;

        case 0x617040BF: //instrukcja dla listwy LED zmniejszanie
           if(jasnosc > 0) {jasnosc = jasnosc-51;}
           Serial.println(jasnosc);
           analogWrite(diodaPin, jasnosc);
           zamigajLED();
           ekranDane();
           ekranLed();
           break;

        case 0x617020DF: //instrukcja dla listwy LED pelny
           analogWrite(diodaPin, 255);
           zamigajLED();
           break;

        case 0x6170A05F: //instrukcja dla listwy LED wylaczony
           analogWrite(diodaPin, 0);
           zamigajLED();
           break;

        case 0x617048B7: //instrukcja dla lampy
           lampaStatus1 = ~lampaStatus1;
           digitalWrite(lampa, lampaStatus1); //Włącz lampe
           zamigajLED();
           break;
        }
  irrecv.resume();
  }
}

void zamigajLED() { //kontrolka odbioru pilota
  digitalWrite(diodaPin1, HIGH); //Włączenie diody
  delay(200); //Odczekanie 0,2 sekundy
  digitalWrite(diodaPin1, LOW); //Wyłączenie diody
  delay(200); //Odczekanie 0,2 sekundy
}

void ekranDane(){//Wyswietlenie 'danych' na ekranie
   delay (50);
   lcd.display();
   lcd.begin(16, 2); //Deklaracja typu wyswietlacza
   lcd.clear(); //Wyczyszczenie wyswietlacza
   lcd.setCursor(0, 0); //Ustawienie kursora
   lcd.print("LED: "); //Wyświetlenie tekstu
   lcd.print(jasnosc); //Wyświetlenie tekstu

if (sensors.available() || (dht.getStatusString() == "OK"))
 {
 //Pobranie informacji o wilgotnosci
 int wilgotnosc = dht.getHumidity();
 //Pobranie informacji o temperaturze
 int temperatura = dht.getTemperature();

   float temperature = sensors.readTemperature(address);

   Serial.print(temperature);
   Serial.println(F(" 'C"));
   lcd.setCursor(0, 1); //Ustawienie kursora
   lcd.print("T1:"); //Wyświetlenie tekstu
   lcd.setCursor(3, 1); //Ustawienie kursora
   lcd.print(temperature); //Wyświetlenie tekstu

   lcd.setCursor(10, 0); //Ustawienie kursora
   lcd.print("W: ");
   lcd.setCursor(12, 0);
   lcd.print(wilgotnosc);
   lcd.setCursor(9, 1); //Ustawienie kursora
   lcd.print("T2:");
   lcd.setCursor(12, 1);
   lcd.print(temperatura);

   sensors.request(address);
 }

 //Odczekanie wymaganego czasugo
 delay(dht.getMinimumSamplingPeriod());
}

void ekranLed(){ //Podswietlenie ekranu (czasowe)
 digitalWrite (PodLed, HIGH);
 delay (3000);
 digitalWrite (PodLed, LOW);
}
  • 2 miesiące później...

Czy ten kurs będzie jeszcze kontynuowany? Z tego co widzę w sklepie botland na opisie zestawu to w planach jest jeszcze chyba jeden artykuł "Inteligentne oświetlenie domowe".

Ciekawe, czy jest jeszcze potencjał na "Kurs Arduino poziom III" 😉. Te dwa kursy chyba mocno wyczerpują temat 🙂.

dejmieno, oczywiście będzie kolejna część, ale niestety ostatnio nie mogłem zajmować się tym tematem (stąd nawet moja ogólnie mniejsza aktywność przy publikacji artykułów). Mam jednak nadzieję, że jeszcze kilka dni i wszystko wróci na właściwe tory, wtedy nadrabiam zaległości i działamy dalej!

  • 1 miesiąc później...
  • 2 tygodnie później...

marekmarecki, witam na forum 🙂 Pokaż proszę kod, który kompilujesz (wklej dokładnie, to co próbujesz wgrać u siebie).

marekmarecki, ciężko powiedzieć, ponieważ nic takiego w kursie nie występuje. Nie wiem jakiej biblioteki używasz i skąd ten program i błąd. Zwróć uwagę, że w kursie korzystamy z biblioteki przyjmującej tylko 1 argument, a Ty do swojej podajesz dwa. Jeśli masz pytania nie związane z kursem, czyli np. z inną biblioteką to załóż osobny temat, w którym opiszesz dokładnie swój problem i podlinkujesz używane biblioteki. Dzięki temu nie będziemy mieszać w głowach osobom, które korzystają z tego kursu - z góry dziękuję za pomoc w utrzymaniu porządku na forum 🙂

Drugie rozwiązanie: skorzystaj z bibliotek i programów opisanych w kursie, nie powinieneś mieć wtedy żadnych problemów 🙂

  • 2 miesiące później...

A czy można by uzupełnić ten kod o obsługę prostego LCD - tak, aby dane na temat temperatury i wilgotności wyświetlać bezpośrednio na wyświetlaczu?

Pozdrawiam, y.

  • 2 tygodnie później...

olmekowie, witam na forum 🙂 Niestety w przypadku tej części coś ewidentnie mi nie idzie i za każdym razem, pojawia się przeszkoda. Przez co artykuł jest odkładany w nieskończoność. Mam teraz plan, aby napisać go raz jeszcze, zupełnie inaczej niż planowałem - postaram się, aby pojawił się w tym miesiącu 🙂

Edit: Sporo się tego ostatnio nazbierało (kurs FPGA, kurs Raspberry Pi)... Nie miałem kiedy opublikować tego odcinka. Niedługo nadrobię jednak zaległość - obiecuję!

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