Skocz do zawartości

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


Pomocna odpowiedź

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.

Link do komentarza
Share on other sites

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);
}
Link do komentarza
Share on other sites

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

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

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!

Link do komentarza
Share on other sites

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 🙂

Link do komentarza
Share on other sites

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

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.