Skocz do zawartości

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


Pomocna odpowiedź

Witam, mam pytanie - czy będzie (ewentualnie jest już) jakiś artykuł, w którym opisane jest jak można rozszerzyć ilość wejść/wyjść Arduino przy pomocy ekspandera np.

https://botland.com.pl/ekspandery-wyprowadzen/4455-modul-pcf8574-ekspander-wyprowadzen-mikrokontrolera.html?search_query=+PCF8574&results=19

Proszę o informacje, ponieważ bardzo mi się to przyda 🙂

Pozdrawiam!

Link do komentarza
Share on other sites

Witam,
a jest gdzieś użyty sam ekspander? Potrzebuję kilku dodatkowych pinów, a cały shield do obsługi serwo nie jest mi do niczego potrzebny przy moim projekcie 🙂

Głównie chodzi mi o podłączenie całości do układu - program wydaje mi się, że ogarnę z artykułu 🙂

Link do komentarza
Share on other sites

SiaQ, chodzi Ci o samo podłączenia? Poszukaj schematu naszego shielda, może coś Ci pomoże 😉 Te układy podłącza się bardzo łatwo: zasilanie, linie do komunikacji i właściwie tyle (jeśli nie chcesz zmieniać adresu układu).

  • Lubię! 1
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

Mam problem z DHT, ciągle wyskakuje mi błąd kompilacji dla płytki Arduino, exit status 1...

Co oznacza(co robi) ten zapis: DHT dht;

Wydaje mi się, że mam problem z bibliotekami, bo problem pojawia się od razu po ich zadeklarowaniu. Czy zależnie od tego którą mam "wersję"(cc, lub org) powinienem zainstalować różne biblioteki?

Instalowałem zgodnie z info z części 2, zainstalowane poprawnie, wpisywałem takie i takie i razem i osobno i ciągle ten błąd kompilacji.

Dlaczego wasza biblioteka jest w "", a program ją wpisuje w<>?

Kiedy kolejny odcinek kursu? Na koniec tego artykułu jest napisane, ze kolejny wkrótce, ale to było w lutym.... 🙁

Treker w komentarzach zapowiedział, że już na dniach coś o oświetleniu...

Kiedyś było coś wspominane, że pojawią się wyświetlacze graficzne, fajnie by było się też dowiedzieć co to jest I2C!!!

Zresztą Treker et consortes wiedzą czego lud pragnie 🤣

[ Dodano: 23-11-2017, 12:01 ]

Dobra doszedłem do tego, że dizała mi biblioteka SimpleDHT, zainstalowałem jej przykład:

int pinDHT11 = 13;
SimpleDHT11 dht11;

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

void loop() {
 // start working...
 Serial.println("=================================");
 Serial.println("Sample DHT11...");

 // read without samples.
 byte temperature = 0;
 byte humidity = 0;
 int err = SimpleDHTErrSuccess;
 if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
   Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
   return;
 }

 Serial.print("Sample OK: ");
 Serial.print((int)temperature); Serial.print(" *C, "); 
 Serial.print((int)humidity); Serial.println(" H");

 // DHT11 sampling rate is 1HZ.
 delay(1500);
}

działa i wyświetla wartości ok, ale pozmieniałem to dla siebie:

#include <SimpleDHT.h>
#include <LiquidCrystal.h> //Dołączenie bilbioteki
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informacja o podłączeniu nowego wyświetlacza


int pinDHT11 = 13;
SimpleDHT11 dht11;
void setup() {
}

void loop() {
 byte temperature = 0;
 byte humidity = 0;
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print((int)humidity);
 lcd.print("%RH");
 lcd.setCursor(0, 1);
 lcd.print((int)temperature);
 lcd.print("*C");

 delay(1500);
}

i wyświetla mi wartości dla temperatury i wilgotności 0 i 0... Dlaczego?

Rozumiem, że w pierwszym przypadku program skądś bierze wartość byte temperatury i wilgotności, ale nie widzę skąd, a w moim programie po prostu wyświetla przypisaną wartość... jak to naprawić?

Link do komentarza
Share on other sites

SOYER, odnosząc się do Twojego pierwszego problemu - czy przypadkiem nie masz zainstalowanej innej biblioteki? Może nazywać się tak samo, a nie być tą, która była linkowana w kursie. Nie podałeś pełnej treści komunikatu z błędem, więc ciężko jednoznacznie określić, co tam się dzieje. Jeśli zdecydujesz się na korzystanie z innej biblioteki (jak w aktualizacji Twojego wpisu), to załóż proszę osobny temat, aby innym czytelnikom nie myliły się kody. Z góry dziękuję za zrozumienie i pomoc w utrzymaniu porządku na forum 🙂

Jeśli chodzi o kontynuację kursu Arduino, to tak jak wspominałem - pojawi się i nie chce na razie deklarować terminów, bo jak widać w tym konkretnym przypadku bywa niestety różnie... W między czasie pracowałem przy m.in.: kursie budowy robotów, kursie FPGA, kursie Raspberry Pi i jakoś za daleko odszedłem od tego Arduino... Nadrobię to jednak 😉

Link do komentarza
Share on other sites

Popatrz na pierwszy i drugi program. Czego Ci w drugim brakuje?

Jak myślisz - skąd mają się wziąć wartości temperature i humidity?

Rozumiem że kończyłeś Hogwart a nie jakieś głupie technikum - ale w przypadku Arduino magia wiele nie pomoże, natomiast odczytanie danych z czujnika na pewno.

Link do komentarza
Share on other sites

SOYER, wydaje mi się, że ciągle popełniasz ten sam błąd i nadal nie rozumiesz skąd biorą się wartości zmiennych i kiedy zmieniają. Dlatego jakiś czas temu w innym wątku proponowałem Ci spróbowanie sił z czymś innym niż Arduino i użycie debuggera. Wtedy mógłbyś wykonywać program krok-po-kroku, oglądać jak zmieniają się zmienne i od razu wiele rzeczy stałoby się oczywiste.

Ogólnie - nie ma magicznego powiązdania miedzy zmienną, a jakimś obiektem, powiedzmy pinem, czy wartością pobraną z czujnika. Zmienna to po prostu "pojemnik" na wartość. Ale tą wartość trzeba tam umieścić, więc potrzebne są np. instrukcje readAnalog() do odczytu z przetwornika analogowo-cyfrowego, a w tym programie podpowiem chodzi o:

dht11.read(pinDHT11, &temperature, &humidity, NULL) 

Inaczej zmienna temperature i humidity będzie przechowywała to co tam zostało zapisane (czyli zero) i nigdy nie pokaże wyników pomiarów.

Link do komentarza
Share on other sites

Elvis, Dzięki jak zwykle jesteś niezawodny. Przeczytaj jeszcze raz moje pytania, właśnie o to pytałem skąd program bierze te zmienne, po prostu wydawało mi się, że te linijki w przykladowym kodzie odnoszą się tylko do wypadku kiedy występuje jakiś błąd. Wiem co to zmienne i że trzeba je kazać programowi wpisać w odpowiednie miejsce. Choć hogwarthu nie ukończyłem;)

Link do komentarza
Share on other sites

Mam arduino.org. Tak jak pisałem, zainstalowałem zgodnie z kursem. Komunikat wyskakuje taki krótki jak napisałem

Dla formalności dodam, że nie pytałem o wersję środowisko tylko biblioteki, której używasz do obsługi tego czujnika 😉

Link do komentarza
Share on other sites

Treker napisz jak to sprawdzić. Formalnie problem rozwiązałem inną biblioteką.

Przy okazji DHT, nauczyłem się LCD, przewijania tekstu, używania pętli for i tworzenia funkcji(super ułatwiają pracę):

#include <LiquidCrystal.h> //Dołączenie bilbioteki
#include <SimpleDHT.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informacja o podłączeniu 
int pinDHT11 = 13; //pin czujnika
int maphum; //zmienna do sterowania diodami
SimpleDHT11 dht11; 
#define led1 10 
#define led2 12 
#define led3 9 
#define led4 11 
#define led5 8 
void setup() {
  pinMode(led1, OUTPUT); 
 pinMode(led2, OUTPUT); 
 pinMode(led3, OUTPUT); 
 pinMode(led4, OUTPUT); 
 pinMode(led5, OUTPUT); 
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, LOW); 
 Serial.begin(9600); 
}

void loop() {

byte temperature = 0; 
 byte humidity = 0; 
 dht11.read(pinDHT11, &temperature, &humidity, NULL);  //odczyt z czujnika
 maphum = map(((int)humidity), 10, 95, 1, 5);  //mapowanie odczytu wilg. do ster. diodami

 switch(maphum){ //sterowanie diodami na podstawie odczytu wilgotnosci zmapowanego 1-5
   case 1: 
 digitalWrite(led1, HIGH); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, LOW); 
   break; 
   case 2: 
 digitalWrite(led1, LOW); 
 digitalWrite(led2, HIGH); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, LOW); 
   break; 
   case 3: 
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, HIGH); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, LOW); 
   break; 
   case 4: 
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, HIGH); 
 digitalWrite(led5, LOW); 
   break; 
   case 5: 
 digitalWrite(led1, LOW); 
 digitalWrite(led2, LOW); 
 digitalWrite(led3, LOW); 
 digitalWrite(led4, LOW); 
 digitalWrite(led5, HIGH);
   break; 
 } 
Serial.println(maphum); 
 dzieci();
 wyniki();
 franek();
 wyniki();
 dominik();
 wyniki();
 zosia();

}
void zosia(){
 lcd.begin(16, 2);
 lcd.setCursor(16,0);
 lcd.print(" Czesc Zosia :-)");  //tekst 1 linii
 for (int positionCounter = 0; positionCounter < 33; positionCounter++) {
   lcd.scrollDisplayLeft(); // przesuwamy ww tekst o 33 pozycji w lewo czyli "poza ekran"
   delay(600);  //czas przeskoku o ledną pozycję na wyświetlaczu (szybkosc przewijania)
 }
}
void franek(){
 lcd.begin(16, 2);
 lcd.setCursor(16,1);
 lcd.print(" Czesc Franek :-)");  //tekst 2 linii
 delay(1500);  // czekamy z ww. tekstem
 for (int positionCounter = 0; positionCounter < 35; positionCounter++) {
   lcd.scrollDisplayLeft(); // przesuwamy ww tekst o 35 pozycji w lewo czyli "poza ekran"
   delay(600);  //czas przeskoku o jedną pozycję na wyświetlaczu (szybkosc przewijania)
 }
}
void wyniki(){
 byte temperature = 0; 
 byte humidity = 0; 
 dht11.read(pinDHT11, &temperature, &humidity, NULL);  //odczyt z czujnika
 lcd.begin(16, 2); // ustawiamy lcd dla nast. wyswietlenia
 lcd.setCursor(2, 0); 
 lcd.print("Wilg.: "); 
 lcd.print((int)humidity); 
 lcd.print("%RH"); 
 lcd.setCursor(2, 1); 
 lcd.print("Temp.: "); 
 lcd.print((int)temperature); 
 lcd.print("*C"); // wyswietlamy temp. i wilgotnosc wraz z jednostkami
 delay(3000); // czekamy z ww. tekstem 
 for (int positionCounter = 0; positionCounter < 2; positionCounter++) {
   lcd.scrollDisplayRight(); //przewijamy ww tekst do prawej krawedzi lcd
   delay(1000);// szybkosc przewijania
 }
 for (int positionCounter = 0; positionCounter < 4; positionCounter++) {
   lcd.scrollDisplayLeft(); //przewijamy do lewej krawedzi ww tekst
   delay(1000); // szybkosc przeijania
 }
 for (int positionCounter = 0; positionCounter < 2; positionCounter++) {
   lcd.scrollDisplayRight(); // przewijamy teks znowu do srodka lcd
   delay(1000); //czekamy
 }
 delay(3000);
}
void dominik(){
 lcd.begin(16, 2);
 lcd.setCursor(16,0);
 lcd.print(" Czesc Dominik :-)");  //tekst 2 linii
 delay(1500);  // czekamy z ww. tekstem
 for (int positionCounter = 0; positionCounter < 35; positionCounter++) {
   lcd.scrollDisplayLeft(); // przesuwamy ww tekst o 35 pozycji w lewo czyli "poza ekran"
   delay(600);  //czas przeskoku o ledną pozycję na wyświetlaczu (szybkosc przewijania)
 }
}
void dzieci(){
 int migniecie = 0;
 lcd.begin(16, 2);
 lcd.setCursor(4,0);
 lcd.print("Dominik");  //tekst 1 linii
 lcd.setCursor(2,1);
 lcd.print("Zosia Franek"); //tekst 2 linii
  for(int migniecie =0; migniecie <10; migniecie++){
    lcd.noDisplay();
    delay(500);
    lcd.display();
    delay(500); // 10 krotne migniecie napisu
  }
}
Link do komentarza
Share on other sites

SOYER, najlepiej po prostu wgrać bibliotekę linkowaną w artykule (dodać ją ręcznie bez posiłkowania się automatycznym instalatorem). Faktycznie, funkcje ułatwiają pisanie programów - dlatego było o tym mówione już w pierwszym poziomie kursu Arduino 🙂

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.