ARDUINO - Stacja pogody
-
jacek
09/07/2015
- Informatyka
- 3847 czytań 0 komentarzy
- ARDUINO UNO z ATMEGA 383 lub inny podobny
- Czujnik DHT22
- Rezystor 10kR
- kondensator 100pF - ceramiczny
- Przewód trzy-cztero żyłowy
Do wykonania projektu wykorzystana zostanie platforma ARDUINO. Jest prosta, tania i ma duże wsparcie na rynku. Można nabywać gotowe moduły lub wykonywać je samemu. Istota działania tej platformy opiera się na umiejętności dobrego zaprogramowania tego co ma być wykonane przez mikrokontroler. Trzeba więc mieć pomysł na realizację i niestety nauczyć się programowania w C. Niestety ale i stety, bo rozwijając takie umiejętności staje przed tobą czytelniku cały świat.
W pierwszej kolejności zrobiony został termometr. Do platformy ARDUINO podłączony został scalony czujnik temperatury DS1820, a na kontrolerze działał program monitorowania temperatury z wyznaczaniem temperatury minimalnej i maksymalnej w czasie pracy. Temperatura to jednak dopiero początek. Do pełni danych potrzebna jest przynajmniej wilgotność względna. I dlatego rozbudowie uległ system pomiaru.
W nowym rozwiązaniu zastosowano czujnik DHT22. Razem z rezystorem i kondensatorem filtrującym zamontowano go na małej płytce drukowanej. Do podłączenia wykorzystano przewód telefoniczny. Sukces platformy ARDUINO polega na wykorzystaniu dostępnych bibliotek obsługujących poszczególne moduły. Tak samo było i tym razem. Ale … No właśnie jest ale. W czasie testów odbyła się nierówna walka z generowanymi błędami komunikacyjnymi między kontrolerem i czujnikiem. Okazało się, że winne są właśnie biblioteki. Czujnik pracuje z częstotliwością 8Hz a nasze ARDUINO z 16 Hz. Poszukiwania doprowadziły do autora bibliotek z obsługa błędów i filtrowaniem danych (Link - biblioteka DHT22). Co w efekcie zaowocowało … dobrze działającym urządzeniem.
Jak To Jest Zrobione?
Materiały:
Czujnik wymaga odpowiedniego podłączenia. DHT22 musi mieć podłączony rezystor między piny VCC (zasilanie 5V) i DAT (złącze danych). Aby wyciszyć maksymalnie zakłócenia elektryczne, zgodnie z notą katalogową zamontowano także kondensator 100pF między VCC i GND (masa).
Reszta to już tylko oprogramowanie. Dane zostają odczytane z czujnika. Bieżąca temperatura i wilgotność prezentowane są na wyświetlaczu. Do tego w dwóch zmiennych przechowuje się wartość maksimum i minimum z odczytanych temperatur. Co dwie sekundy odczytywane są dane z czujnika, modyfikowane wartości temperatury minimalnej i maksymalnej i wszystkie te dane prezentowane są na wyświetlaczu LCD. W tym rozwiązaniu zastosowano możliwość monitorowania danych przez port szeregowy COM. Po podłączeniu ARDUINO do komputera przez USB uruchamiamy IDE i włączamy monitor portu szeregowego. Na ekranie zobaczymy bieżące odczyty danych.
Wartości min i max temperatury przechowywane są do czasu kolejnego restartu mikro-kontrolera. Z czasem będą przechowywane w pamięci i możliwe do odczytu, aby np. prześledzić zmiany temperatury i wilgotności. Do tego jednak wymagana jest dalsza rozbudowa urządzenia. Możliwe jest też prezentowanie danych na stronie WWW. Więc możliwości zmian są szerokie.
Kod Programu "Stacja Pogody"
=============
//Stacja Pogody //Autor Jacek Patka //biblioteka DHT22 - https://github.com/markruys/arduino-DHT //Pomiar temperatury i wilgotnosci //wyznaczenie temperatury minimalnej i maksymalnej //dane na LCD i COM #include "DHT.h" #include <LiquidCrystal.h> DHT dht; LiquidCrystal lcd(8,9,4,5,6,7); float temp, min = 150, max = -150; void setup() { lcd.begin(16, 2); lcd.print("Reading sensor"); Serial.begin(9600); Serial.println(); Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)"); dht.setup(2); // data pin 2 } void loop() { delay(dht.getMinimumSamplingPeriod()); float humidity = dht.getHumidity(); float temperature = dht.getTemperature(); //Wyznaczenie temperatury min i max if(temperature < min) min = temperature; if(temperature > max) max = temperature; //Dane na LCD lcd.clear(); char tempF[6]; char humF[6]; dtostrf(temperature, 5, 1, tempF); dtostrf(humidity, 2, 0, humF); lcd.print("T:"); lcd.print(tempF); lcd.print((char)223); lcd.print("C "); lcd.print("H: "); lcd.print(humF); lcd.print("%"); char minF[6]; char maxF[6]; dtostrf(min, 5, 1, minF); dtostrf(max, 5, 1, maxF); lcd.setCursor(0,1); lcd.print("<"); lcd.print(minF); lcd.write((char)223); // lcd.write('C'); lcd.setCursor(9,1); lcd.print(">"); lcd.print(maxF); lcd.write((char)223); // lcd.write('C'); //Dane na COM Serial.print(dht.getStatusString()); Serial.print("\t"); Serial.print(humidity, 1); Serial.print("\t\t"); Serial.print(temperature, 1); Serial.print("\t\t"); Serial.println(dht.toFahrenheit(temperature), 1); }=============
Dodaj komentarz
Zaloguj się, aby móc dodać komentarz.
Oceny
Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony
Zaloguj się , żeby móc zagłosować.
Zaloguj się , żeby móc zagłosować.
Brak ocen. Może czas dodać swoją?



















































