Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

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

Autor Wiadomość
Komentator 




Posty: 865
Otrzymał 17 piw(a)
Wysłany: 22-02-2017, 16:58   Kurs Arduino II - #8 - cyfrowy czujnik wilgotności (DHT11)


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 darmowym blogu Forbota.

Kliknij, aby przeczytać całość!


Poniżej znajdują się komentarze naszych użytkowników powiązane z tym artykułem.


Przeczytałeś artykuł? Dodaj komentarz!
Postaw piwo autorowi tego posta
 
 
leepa79 




Posty: 42
Otrzymał 5 piw(a)
Wysłany: 28-02-2017, 08:59   

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 ;)
Kod programu: Zaznacz cały
                        //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);
}

Ostatnio zmieniony przez leepa79 28-02-2017, 09:00, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 01-03-2017, 20:18   

leepa79, super, widzę, że potencjał płytki stykowej wykorzystujesz w 100% :)
Informacje o wykorzystaniu pilota znajdziesz w najnowszej części kursu budowy robotów:
Kurs budowy robotów – #8 – zdalne sterowanie IR (RC5)


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
dejmieno 



Posty: 33
Otrzymał 2 piw(a)
Programuję w:
Java, C
Wysłany: 30-05-2017, 14:44   

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

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 30-05-2017, 15:17   

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!


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
m_rat 



Posty: 6
Programuję w:
C++
Wysłany: 06-07-2017, 13:17   

Świetny kurs.
Mam nadzieję, że jak najszybciej ukaże się następny rozdział :) !

Postaw piwo autorowi tego posta
 
 
marekmarecki 



Posty: 3
Wysłany: 17-07-2017, 15:35   

mam mały problem z tak funkcją define DHTTYPE DHT11
po napisaniu programu wyskakuje błąd przy wgrywaniu nie wiem jak to naprawić


Nowy obraz mapy bitowej.jpg
Plik ściągnięto 10 raz(y) 182.95 KB

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 17-07-2017, 15:46   

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


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
marekmarecki 



Posty: 3
Wysłany: 18-07-2017, 09:44   


taki wyświetla błąd po wgraniu programu z funkcją define DHTTYPE DHT11
a tak wygląda napisany program

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 18-07-2017, 10:00   

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 :)


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
yacca 



Posty: 1
Wysłany: 27-09-2017, 21:53   

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.

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 27-09-2017, 22:50   

yacca, witam na forum - oczywiście, że tak :)
Informacje o korzystaniu z LCD znajdziesz w pierwszym poziomie kursu Arduino: Kurs Arduino – #7 – Wyświetlacz tekstowy, LCD 2×16


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
marekmarecki 



Posty: 3
Wysłany: 28-09-2017, 16:55   

Cytat:
program był zrobiony z normalnym LCD 16x2 i działał u mnie bez problemu teraz jest przerobiony pod konwerter lcd i też nie ma problemów


Ostatnio zmieniony przez marekmarecki 28-09-2017, 17:20, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
olmekowie 



Posty: 1
Wysłany: 11-10-2017, 22:08   

Witam kiedy się spodziewać Kurs Arduino II – #9 – inteligentne oświetlenie domowe ??

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7807
Pomógł: 116 razy
Otrzymał 502 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 11-10-2017, 22:25   

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 :)


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Kurs Arduino - #8 - ... Kurs STM32 - #5 - Ko... Kurs STM32 - #4 - St... Kurs STM32 - #2 - Po...
lub przeszukaj forum po wybranych tagach: arduino, elektronika, kursy, programowanie


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki