Stacja pogodowa Arduino Nano DHT 22 i BME280

Stacja pogodowa Arduino Nano DHT 22 i BME280

Wrzucam tutaj swój pierwszy “projekt” na majsterkowie. Konstrukcja powstała w wyniku zabaw z Arduino nano i potrzeby wykorzystania części, które walały się z demontażu – jak LCD 24×2. Kilka sztuk takich LCD zalegało mi nie wykorzystywane, więc trzeba było je zagospodarować. 

Konstrukcja nie jest żadnym nowum – typowa aż do bólu aplikacja DHT22 i BME 280, odczyt, przesłanie danych na LCD.

Kod poniżej:

//uzyte biblioteki
#include <DHT.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
//definicja pinu i typu czujnika DHT
#define DHTPIN 8
#define DHTTYPE DHT22
//definicja pinow magistrali SPI
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
//definicja pinow LCD
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
//definicja DHT
DHT dht(DHTPIN, DHTTYPE);
//uzyte zmienne
float Tzew;
float Wilg;
float temperatura;
float cisnienie;
float wilgotnosc;
#define SEALEVELPRESSURE_HPA (1013.25) //cisnienie na poziomie morza
#define ALTITUDE 160.0 // wysokosc wzgledna w metrach dla miejsca pomiaru – u mnie 160 m npm
Adafruit_BME280 bme(BME_CS); // inicjalizacja czujnika BME w trybie hardware SPI
void setup() {
Serial.begin(9600);
Serial.println(F(“Start Testu”));
lcd.begin(24, 2); //start LCD 24×2
bool status;
status = bme.begin();
if (!status) {
Serial.println(“Brak sensora BME 280 – sprawdz polaczenie”);
while (1);
}
Serial.println(“OK”);
}
void loop() {
temperatura = bme.readTemperature(); //odczyt temperatury z czujnika BME
cisnienie = bme.readPressure(); //odczyt cisnienia z czujnika BME
cisnienie = bme.seaLevelForAltitude(ALTITUDE,cisnienie); //przeliczenie cisnienia dla danej wysokosci npm
wilgotnosc = bme.readHumidity(); //wilgotnosc z czujnika BME
Tzew = dht.readTemperature(); //temperatura z czujnika DHT
Wilg = dht.readHumidity(); //wilogotnosc z czujnika DHT
lcd.setCursor(0,0);
lcd.print(“Tzew: “);
lcd.print(Tzew);
lcd.print(” Twew: “);
lcd.print(temperatura);
lcd.setCursor(0,1);
lcd.print(“Cisn: “);
lcd.print(cisnienie/100);
lcd.print(” Wilg: “);
lcd.print(Wilg);
delay(1000);
}

Schemat we fritzingu poniżej – nie bawiłem się w żadne płytki stykowe – wszytko lutowane bezpośrednio do płytki nano, sprawdzone i zamknięte w typowej puszce instalacyjnej, w której wyciąłem otwór pod LCD i wkleiłem go dwuskładnikowym klejem. Z obudowy wyprowadzone przewody: zasilanie/USB oraz czujnika zewnętrznego. Konstrukcja powieszona na okresy testów, aby porównać jak się temperatury zachowają w okresie tygodnia – odczyty z referencyjnym loggerem. Jeżeli będą satysfakcjonujące, to będę rozbudowywać o moduł transmisji danych i akwizycji na Raspberry.

Pliki załączone do artykułu:

Ocena: 4/5 (głosów: 11)

Podobne posty

22 komentarzy do “Stacja pogodowa Arduino Nano DHT 22 i BME280

  • Witaj !
    Układ prosty i spełniający swoje zadanie :)
    Powiedz mi proszę jak się sprawuje czujnik BME ? Z tego co się orientuje to lubi się “on” zapychać i z czasem zaczyna pokazywać błędne pomiary, gdy wystawiony jest poza obudowa. Pytam dlatego że kiedyś chciałem go zastosować w czujniku jakości powietrza, lecz znajomy mi go odradził właśnie ze względu na to że trzeba jakoś go wystawić poza obudową, a ten mały drań “tak twierdzi znajomy” lubi się zapychać i jeśli nawet drobinka wilgoci się tam dostanie to tak samo. A wiadomo im więcej opinii tym lepiej :)
    Akurat moja stacja śmiga już od stycznia (praca inżynierska w której zbudowałem całą sieć czujników dla miasta Racibórz i okolice) , dane wysyłane są na serwer itd. ale uchowało się na szczęście jeszcze parę sztuk esp i jeden jest w domu :) dane wysyłane na thingspeak. Dla zainteresowanych link : https://thingspeak.com/channels/294249

    Odpowiedz
  • Póki co BME testuje od dwóch tygodni na UNO i od wczoraj na nano i działa.
    Co do błędnych pomiarów – ten czujnik służy do pomiaru ciśnienia i mierzy dokładnie, ale temperatura ma sporą odchyłkę od referencyjnych.
    Przebadałem na płytce prototypowej szereg czujników i tak:
    DHT11 – tylko do testów – wiarygodność mała
    LM35 – bardzo dokładny – niewielkie różnice ok 0,5 stopnia od referencyjnego
    DS18B20 – bardzo dokładny – wskazania pokrywają się z referencyjnym PT100 – max 0,5 stopnia
    DHT22 – dokładność lepsza niż DHT11, ale mimo wszystko mniej dokładny niż LM i DS
    BME 280 – do pomiaru temperatur nie warto go używać, chyba, że poglądowo – różnice ok 2,5 stopnia od PT100 referencyjnego.

    Odpowiedz
    • Z tą temperaturą to wiadomo, układ sam generuje ciepło i stąd ta niedokładność.
      A jak wygląda sprawa wilgotności względem DHT22 ? Jest całkiem znośna czy jednak nie ?

      Odpowiedz
  • A tutaj odczyty
    T zewn z DHT 22
    Twew z BME 280
    Cisn: BME280
    Wilgotność DHT 22
    Wilgotność z BME jest na poziomie 43%

    Wszystkie czujniki temperatury obok siebie (oprócz DHT22 za oknem) zastanawia duża różnica na wilgotności.
    Odczyt temperatury najbliższy rzeczywistemu w Dallas DS18B20 – wg PT 100 mam 28,53

    Odpowiedz
  • Jakbyś miał kiedyś czas i chęci oczywiście ;) to zobacz jaka jest różnica jak DHT22 jest zaraz obok BME280 bo bardzo mnie to interesuje :) Co do wilgotności to zależna ona jest od temperatury i zawartości pary wodnej w powietrzu, więc różnice między czujnikiem na zewnątrz jak i wewnątrz będą i jest to naturalne. Poniżej masz wykres przedstawiający te zależności :
    https://www.schock.pl/cache/media_2_avenit_mzag_schoeckmedia_image_thumbnailscheme_1140x642.jpg

    Odpowiedz
  • Wersja robocza – w domu to nie będzie wisieć na pewno. Do domu jak zrobię to na wyświetlaczu OLED, ale połączone z innymi rzeczami – sygnalizacja dwóch alarmów. Robione z tego, co było pod ręką i bardziej jako test czujników.

    Odpowiedz
  • Witam, od jakiegoś czasu bawię się modułami ESP z czujnikami DHT22. Z racji różnych wpisów odnośnie dokładności pomiaru przez te czujniki zamówiłem czujnik BME280 i wczoraj został podłączony. Niestety odchyłki między czujnikami trochę mnie zdziwiły . Na zdjęciu widać różnicę w odczytach a czujniki leżały obok siebie.

    Odpowiedz
    • Witaj,
      Tak jak wcześniej rozmawiałem z kolegą koala106…
      Różnica temperatur wynika z tego, że układ BMExxx się grzeje, a do tego dochodzi pojemność cieplna płytki PCB.
      Druga sprawa jest taka, że układu BME / BMP głównie służą do pomiaru ciśnienia, a reszta to skromne dodatki.
      Jak chcesz mieć dobry pomiar temperatury to możesz dać np. DS18B20.

      Odpowiedz
  • W takim razie do pomiaru wilgotności mógłbyś polecić jakiś czujnik, który był by wiarygodny w odczytach? Podłączałem dwa czujniki DHT obok siebie i różnica pomiaru była prawie 10 %. Może akurat trafiły mi się takie egzemplarze. Zależy mi na tym z racji tego, że chciałbym sterować osuszaczem powietrza w którym właśnie padła elektronika.

    Odpowiedz
    • Wydaje mi się, że DHT22 powinien być wystarczający. Niestety nie mam niczego godnego i dobrego do polecenia bo jedynie korzystałem z DHT11, DHT22 i czujników rezystancyjnych.
      Bynajmniej ze wszystkich tych czujników które miałem to najlepiej spisywał się DHT22, a trochę sporo się ich wykorzystało.

      Odpowiedz
  • Z doswiadczenia z różnymi czujnikami: dht11 tylko dla zabawy, dht22 tylko do wnętrz gdzie nie występuje duża wilgotność > 75%, najlepszy z tego jest bme280 używam od roku w kilku czujnikach jakości powietrza. Jednak są zabepieczone obudowami zewnętrznymi kupionymi na aliex.. taka ciekawostka, testowałem “dokładne” ds18b20 kilka sztuk z tej samej partii podłączone pod jeden kontroler, każdy pokazywał co innego rozrzut nawet 2-3 stopni, wiec nie sa takie dobre jak sie wydaje.

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?