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.
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
Nie dział mi program. Pokazuje błąd
W tym miejscu bład ” lcd.print(” Wilg: „); ” opis to: stray ‘\342’ in program.
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.
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 ?
Odczyty z czujników:
Wilgotność: DHT 11
Temperatura DS18B20
Temperatura LM35
Temperatura DHT 11
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
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
Różnica między DHT22 i BME280 w jednym miejscu 5% – BME wolnie reaguje na zmiany wilgotności.
Jak dla mnie, to wykonanie na powieszenie w garażu. Do domu to niezbyt estetycznie.
Zrób lepszy marudo
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.
Czasem mam wrażenie że połowa projektów na majsterkowie to stacje pogodowe. Co wy, nie macie okien w domach czy co? :)
Tutaj bardziej ciekawość i chęć porównania popularnych czujników, ich dokładności oraz zagospodarowania zapasów.
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.
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.
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.
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.
DHT 22 po trzech tygodniach pokazuje bzdury – zwłaszcza wilgotność – teraz czekam na SHT31 – podobno dużo lepsze.
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.
Nie działa mi ten program na arduino uno mam pełną listę błędów
Jakie błędy? Najlepiej załóż temat na forum, łatwiej będzie pomóc