SantyagoSantyago
YouTube RSS Google+ Facebook GitHub

Okazje Allegro

10x Przewody elektroluminescencyjne neon ELWire 5m

10x Przewody elektroluminescencyjne neon ELWire 5m
Kup teraz: 175,00 zł

Taśma LED WS2813 - długość 1m - 60 diod/m

Taśma LED WS2813 - długość 1m - 60 diod/m
Kup teraz: 45,00 zł

Arduino poradnik

Wstęp

Teoria

Biblioteki

Komponenty

Czujniki i sensory

Rozwiązania i algorytmy

Narzędzia

Mikrokontrolery i Arduino IDE

Arduino i klony

Poradniki wideo

Sprzęt dostarczają

Reklama na Blogu

Najnowsze poradniki

Ostatnie komentarze

Popularne wpisy

Facebook

Google+

Ostatnie fotografie

polskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorywieliczka-szyb-danilowicza

Czujniki ciśnienia i temperatury BMP085 / BMP180

BMP085 i BMP180 to dwa zgodne elektrycznie czujniki ciśnienia atmosferycznego i temperatury firmy Bosch.

Charakteryzują się pomiarem ciśnienia w zakresie od 300 do 1100 hPa, co daje nam możliwość określenia wysokości od +9000 do -500 metrów względem poziomu morza. Głównymi różnicami jakie występują pomiędzy BMP085 a BMP180 to rozmiar oraz dokładność pomiaru w trybie wysokiej rozdzielczości pomiaru, w którym przewagę ma nowszy model oznaczony BMP180.

  BMP085 BMP180
Zakres mierzonego ciśnienia 300 - 1100 hPa
Napięcie zasilania 1.8 - 3.6 V
Pobór prądu 5 µA / pomiar
Rozmiar 5.0 mm  x 5.0 mm 3.6 mm x 3.8 mm
Wysokość 1.2 mm 0.93 mm
Dokładność (tryb niskiego poboru energii) 0.06 hPa (0.5m)
Dokładność (tryb wysokiej rozdzielczości) 0.03 hPa (0.25m) 0.02 hPa (0.17m)
Temperatura pracy -40 to +85°C

Pełna karta katalogowa BMP085: http://www.jarzebski.pl/datasheets/BMP085.pdf
Pełna karta katalogowa BMP180: http://www.jarzebski.pl/datasheets/BMP180.pdf

Obliczanie wysokości na podstawie pomiaru ciśnienia atmosferycznego

Znając ciśnienie jakie panuje na poziomie morza p0 (np.: 1013.25 hPa) oraz pomiar p, możemy określić aktualną wysokość, wyliczając ją z poniższego wzoru.

Zależność pomiędzy wysokością a ciśnieniem przedstawia poniższa charakterystyka, z której wynika, że zmiana ciśnienia Δp = 1 hPa odpowiada wysokości Δh = 8.43 m. Natomiast zmiana wysokości Δh = 10 m odpowiada zmianie ciśnienia Δp = 1 2hPa

Połączenie z Arduino

Na rynku istnieje kilka gotowych modułów z czujnikami BMP085 oraz BMP180. Różnią się one przede wszystkim poziomem napięcia zasilania, które typowo wynosi 3.3V. W przypadku posiadanych przeze mnie modułów IMU GY-80 oraz IMU GY-87 zasilanie może być zarówno 5V jak i 3.3V. Jeśli zdecydujemy się na zasilanie 5V należy zwrócić szczególną uwagę na podłączenie do odpowiedniego 5V pinu modułu IMU, gdyż podłączenie do pinu 3.3V może go uszkodzić.

Pin oznaczony SCL (adapter) podłączamy do pinu A5 (Arduino), natomiast pin SDA (adapter) do pinu A4 (Arduino).

Nie zapomnijmy również o masie GND.

Przykładowy program

Na szczęście w przypadku czujników BMP085 i BMP180 możemy posłużyć się gotową biblioteką przygotowaną przez Adafruit: https://github.com/adafruit/Adafruit-BMP085-Library (lub mirror BMP085.zip). Bibliotekę należy rozpakować do katalogu  libraries.

  1. #include <Wire.h>
  2. #include <Adafruit_BMP085.h>
  3.  
  4. Adafruit_BMP085 bmp;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin(9600);
  9.  
  10.   // Jako parametr mozemy podav dokladnosc - domyslnie 3
  11.   // 0 - niski pobór energii - najszybszy pomiar
  12.   // 1 - standardowy pomiar
  13.   // 2 - wysoka precyzja
  14.   // 3 - super wysoka precyzja - najwolniejszy pomiar
  15.   if (!bmp.begin())
  16.   {
  17.     Serial.println("Nie odnaleziono czujnika BMP085 / BMP180");
  18.     while (1) {}
  19.   }
  20. }
  21.  
  22. void loop()
  23. {
  24.     // Odczytujemy temperaturę
  25.     Serial.print("Temperatura = ");
  26.     Serial.print(bmp.readTemperature());
  27.     Serial.println(" *C");
  28.     
  29.     // Odczytujemy cisnienie
  30.     Serial.print("Cisnienie = ");
  31.     Serial.print(bmp.readPressure());
  32.     Serial.println(" Pa");
  33.     
  34.  
  35.     // Obliczamy wysokosc dla domyslnego cisnienia przy pozimie morza
  36.     // p0 = 1013.25 millibar = 101325 Pascal
  37.     Serial.print("Wysokosc = ");
  38.     Serial.print(bmp.readAltitude());
  39.     Serial.println(" metrow");
  40.     
  41.     // Jesli znamy aktualne cisnienie przy poziomie morza,
  42.     // mozemy dokladniej wyliczyc wysokosc, padajac je jako parametr
  43.     Serial.print("Rzeczywista wysokosc = ");
  44.     Serial.print(bmp.readAltitude(102520));
  45.     Serial.println(" metrow");
  46.     
  47.     Serial.println();
  48.     delay(500);
  49. }

Wynik działania

Wizualizacja

Spróbujmy jeszze pokazać na wykresie poszczególne parametry za pomocą processingu. W tym przypadku skorzystamy nieco z zmodyfikowanego programu dla Arduino. Wyliczymy również wysokość samodzielnie, ponieważ funkcja readAltitude() ponownie będzie odczytywała ciśnienie do wyliczeń, które już mamy.

  1. #include <Wire.h>
  2. #include <Adafruit_BMP085.h>
  3.  
  4. Adafruit_BMP085 bmp;
  5.  
  6. float sealevelPressure;
  7.  
  8. void setup()
  9. {
  10.   Serial.begin(9600);
  11.  
  12.   if (!bmp.begin())
  13.   {
  14.     Serial.println("Nie odnaleziono czujnika BMP085 / BMP180");
  15.     while (1) {}
  16.   }
  17. }
  18.  
  19. void loop()
  20. {
  21.     // Odczytujemy temperature i cisnienie
  22.     float temp = bmp.readTemperature();
  23.     float pressure = bmp.readPressure();
  24.     
  25.     // Sami wyliczamy wysokosc
  26.     sealevelPressure = 101325;
  27.     float altitude = 44330 * (1.0 - pow(pressure / sealevelPressure, 0.1903));
  28.     
  29.     // Wyczucamy dane na port szeregowy
  30.     Serial.print("D:");
  31.     Serial.print(temp);
  32.     Serial.print(":");
  33.     Serial.print(pressure);
  34.     Serial.print(":");
  35.     Serial.print(altitude);
  36.     Serial.println();
  37. }

Program wizualizacyjny:

  1. import processing.serial.*;
  2.  
  3. Serial myPort;
  4.  
  5. boolean hasData = false;
  6.  
  7. int actualSample = 0;
  8. int maxSamples = 300;
  9. int sampleStep = 2;
  10.  
  11. float[] tempValues = new float[maxSamples+1];
  12. int minTemp = 0;
  13. int maxTemp = 0;
  14.  
  15. float[] pressureValues = new float[maxSamples+1];
  16. int minPressure = 0;
  17. int maxPressure = 0;
  18.  
  19. float[] altitudeValues = new float[maxSamples+1];
  20. int minAltitude = 0;
  21. int maxAltitude = 0;
  22.  
  23. void setup ()
  24. {
  25.   size(670, 750);        
  26.   myPort = new Serial(this, Serial.list()[0], 9600);
  27.   myPort.bufferUntil(10);
  28.   background(0);
  29. }
  30.  
  31. void drawChart(String title, float[] data, int minValue, int maxValue, int x, int y, int h, int ls, int fs)
  32. {  
  33.   strokeWeight(1);
  34.   noFill();
  35.   stroke(50,50,50);
  36.   rect(x, y, (maxSamples*sampleStep)+50, h+50);
  37.  
  38.   strokeWeight(1);
  39.   stroke(90,90,90);
  40.  
  41.   for (float t = minValue; t <= maxValue; t = t + ls)
  42.   {
  43.      float line = map(t, minValue, maxValue, 0, h);
  44.      line(x+40, y+h-line+16, x+(maxSamples*sampleStep)+40, y+h-line+16);
  45.      fill(200, 200, 200);
  46.      textSize(fs);
  47.      text(int(t), 5+x, h-line+20+y);
  48.   }
  49.  
  50.   textSize(14);
  51.   String title2 = title + " " + nf(data[actualSample-1], 0, 2);  
  52.   text(title2, ((maxSamples*sampleStep)/2)-(textWidth(title2)/2)+40, h+40+y);
  53.  
  54.   strokeWeight(2);
  55.   stroke(204, 102, 0);
  56.  
  57.   for (int i = 1; i < actualSample; i++)
  58.   {
  59.     float v0 = map(data[i-1], minValue, maxValue, 0, h);
  60.     float v1 = map(data[i], minValue, maxValue, 0, h);
  61.     line(((i-1)*sampleStep)+40+x, h-v0+16+y, (i*sampleStep)+40+x, h-v1+16+y);
  62.   }
  63. }
  64.  
  65. void draw ()
  66. {
  67.   if (!hasData) return;
  68.  
  69.   background(0);
  70.  
  71.   drawChart("Temperatura", tempValues, minTemp, maxTemp, 10, 10, 100, 1, 14);
  72.   drawChart("Cisnienie", pressureValues, minPressure, maxPressure, 10, 200, 200, 50, 10);
  73.   drawChart("Wysokosc", altitudeValues, minAltitude, maxAltitude, 10, 490, 200, 1, 12);
  74. }
  75.  
  76. void nextSample()
  77. {
  78.   if (actualSample == maxSamples)
  79.   {
  80.     float lastTemp = tempValues[maxSamples];
  81.     float lastPressure = pressureValues[maxSamples];
  82.     float lastAltitude = altitudeValues[maxSamples];
  83.      
  84.     for (int i = 1; i <= (maxSamples-1); i++)
  85.     {
  86.       tempValues[i-1] = tempValues[i];
  87.       pressureValues[i-1] = pressureValues[i];
  88.       altitudeValues[i-1] = altitudeValues[i];       
  89.     }
  90.      
  91.     tempValues[(maxSamples-1)] = lastTemp;
  92.     pressureValues[(maxSamples-1)] = lastPressure;
  93.     altitudeValues[(maxSamples-1)] = lastAltitude;
  94.   } else
  95.   {
  96.     actualSample++;
  97.   }  
  98. }
  99.  
  100. void serialEvent (Serial myPort)
  101. {
  102.   String inString = myPort.readStringUntil(10);
  103.  
  104.   if (inString != null)
  105.   {
  106.     inString = trim(inString);
  107.     String[] list = split(inString, ':');
  108.    
  109.     String testString = trim(list[0]);
  110.  
  111.     if (list.length != 4) return;
  112.    
  113.     float temp = float(list[1]);
  114.     float pressure = float(list[2]);
  115.     float altitude = float(list[3]);
  116.  
  117.     if (actualSample == 0)
  118.     {
  119.       for (int i = 0; i <= maxSamples; i++)
  120.       {
  121.         tempValues[i] = temp;
  122.         pressureValues[i] = pressure;
  123.         altitudeValues[i] = altitude;
  124.       }
  125.     }
  126.  
  127.     tempValues[actualSample] = temp;
  128.     pressureValues[actualSample] = pressure;
  129.     altitudeValues[actualSample] = altitude;
  130.  
  131.     maxTemp = floor(max(tempValues))+1;
  132.     minTemp = ceil(min(tempValues))-1;
  133.  
  134.     maxPressure = floor(max(pressureValues))+200;
  135.     minPressure = ceil(min(pressureValues))-200;
  136.    
  137.     maxAltitude = floor(max(altitudeValues))+2;
  138.     minAltitude = ceil(min(altitudeValues))-2;
  139.  
  140.     if (actualSample > 1)
  141.     {
  142.       hasData = true;
  143.     }
  144.  
  145.     nextSample();
  146.   }
  147. }

Wynik działania

O ile pomiar ciśnienia jest w miarę dokładny na potrzeby meteorologiczne, to przeliczona za jego pomocą wysokość może może wahać się w zakresie ±1 m. Warto również podkreślić fakt, że większa dokładoność pomiaru ciśnienia w czujniku BMP180 rozwiązywana jest programowo, a nie sprzętowo - uśredniany jest 3-krotny pomiar.

Materiały dodatkowe

Biblioteka dla Arduino: http://www.jarzebski.pl/arduino/BMP085/BMP085.zip
Przykłady z powyższego wpisu: http://www.jarzebski.pl/arduino/BMP085/BMPxxx_examples.zip
Pełna karta katalogowa BMP085: http://www.jarzebski.pl/datasheets/BMP085.pdf
Pełna karta katalogowa BMP180: http://www.jarzebski.pl/datasheets/BMP180.pdf

Udpstępnij dalej!

http://www.jarzebski.pl/arduino/czujniki-i-sensory/czujniki-cisnienia-bmp085-bmp180.html

Reklama

Komentarze Komentarze
Avatar 1
Henryk Windows 7 / Safari 537.36
25 lipiec 2014 - 22:26 Warszawa

z dużym zainteresowaniem przeczytałem, troszku przez przypadek trafiłem na Twoją stronę - szukając czujnika ciśnienia atmosferycznego, 180 - jest za mało dokładna dla mnie, a może istnieją bardziej dokładne
mikro - czujniki tylko ja źle szukam ?
Z pełnym podziwem
Henryk

Avatar 1
ATM Windows XP / Mozilla Firefox 32.0
14 wrzesień 2014 - 18:14 Brak informacji

Bardzo ciekawe rozwiązanie, gratulacje dla autora.
Interesuje mnie czy czujniki BMP pracują także pod typiowy oprogramowaniem np, LogTemp, se sterownikami Maxima?
Jeśli mogę poproszę odpowiedź na moją pocztę.
Pozdrowienia.

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 31.0
15 wrzesień 2014 - 20:02 Bytom

Witaj, nic mi na ten temat nie wiadomo - technicznie rzecz biorąc pójdzie pod wszystkim co obsłuży i2c, kwestia oprogramowania

Avatar 1
Waldek Linux Ubuntu / Mozilla Firefox 37.0
23 kwiecień 2015 - 08:27 Toruń

Mam pytanie.

Chcialem polaczyc 2 przyklady w jeden tzn aby Arduino Pro Mini pobieral dane z DHT22 i BMP180. Czy połączone oba przyklady z Pana strony zamieszczone ponizej bedzie OK ??? czy moze cos inaczej zrobic aby korzystac z 2 czujnikow

====================================================================
#include "DHT.h" // biblioteka DHT

#define DHTPIN 2 // numer pinu sygnałowego
#define DHTTYPE DHT22 // typ czujnika (DHT11). Jesli posiadamy DHT22 wybieramy DHT22

#include
#include

Adafruit_BMP085 bmp;

// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on \'168/\'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on \'168/\'328 Arduino Uno/Duemilanove/etc thats Analog 4
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here

DHT dht(DHTPIN, DHTTYPE); // definicja czujnika

void setup()
{
Serial.begin(9600); // otworzenie portu szeregowego

dht.begin(); // inicjalizacja czujnika

// Jako parametr mozemy podav dokladnosc - domyslnie 3
// 0 - niski pobór energii - najszybszy pomiar
// 1 - standardowy pomiar
// 2 - wysoka precyzja
// 3 - super wysoka precyzja - najwolniejszy pomiar

if (!bmp.begin())
{
Serial.println("Nie odnaleziono czujnika BMP085 / BMP180");
while (1) {}
}
}

void loop()
{
// Odczyt temperatury i wilgotności powietrza
float t = dht.readTemperature();
float h = dht.readHumidity();

// Sprawdzamy czy są odczytane wartości
if (isnan(t) || isnan(h))
{
// Jeśli nie, wyświetlamy informację o błędzie
Serial.println("Blad odczytu danych z czujnika");
} else
{
// Jeśli tak, wyświetlamy wyniki pomiaru
Serial.print("Wilgotnosc: ");
Serial.print(h);
Serial.print(" % ");
Serial.print("Temperatura (DHT22): ");
Serial.print(t);
Serial.println(" *C");
Serial.println();
}

// BMP180
// Odczytujemy temperaturę
Serial.print("Temperatura = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");

// Odczytujemy cisnienie
Serial.print("Cisnienie = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");

// Obliczamy wysokosc dla domyslnego cisnienia przy pozimie morza
// p0 = 1013.25 millibar = 101325 Pascal
Serial.print("Wysokosc = ");
Serial.print(bmp.readAltitude());
Serial.println(" metrow");

// Jesli znamy aktualne cisnienie przy poziomie morza,
// mozemy dokladniej wyliczyc wysokosc, padajac je jako parametr
Serial.print("Rzeczywista wysokosc = ");
Serial.print(bmp.readAltitude(102520));
Serial.println(" metrow");

Serial.println();
delay(500);
}

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
25 kwiecień 2015 - 12:43 Bytom

Najprościej będzie skompilować i sprawdzić :) Pamiętaj, aby czujniki nie korzystały z tych samych pinów

Avatar 1
Krzysztof Windows 7 / Mozilla Firefox 38.0
22 maj 2015 - 21:02 Warszawa

Witam,
czujnik dziala bezproblemowo ...oprócz dokładności. 1012hPa a on pokazuje 992... Pod czym jest skompilowane program wizualizacyjny?

Pozdrawiam
Krzysztof

Avatar 1
Marcin W-w Windows / Safari 537.36
11 czerwiec 2015 - 11:08 Brak informacji

Skąd bierzesz wartość 1012hPa? Może nie bierzesz pod uwagę wysokości na jakiej się znajdujesz? Czujnik podaje Ci faktyczne ciśnienie, zaś ciśnienie "meteo" jest zredukowane do poziomu morza...

Avatar 1
hubert Safari 537.35
03 sierpień 2015 - 19:52 Warszawa

Mam identyczny problem i sam juz nie wiem czy to wina czujnika czy może programu.

Avatar 1
Kacza Windows 7 / Safari 537.36
24 maj 2017 - 16:58 Brak informacji

Dzięki za fajny artykuł. Być może ktoś tu jeszcze trafi i będzie walczył z tym samym co ja, czyli by ciśnienie wyglądało jak w pogodynce. Należy wyliczyć ciśnienie zredukowane na podstawie wysokości stacji, temperatury i ciśnienia zmierzonego:
[code]
//funkcja wylicza cisnienie zredukowane do poziomu morza i dla 0oC (takie jak na mapach pogody) na podstawie zmierzonego cisnienia atmosferycznego na danej wysokosci npm i zmierzonej temperatury
//temperatura w oC, ciśnienie w Pa, wysokość npm w m
uint32_t cisnieniezredukowaneNPM(int16_t temperatura, uint32_t cisnieniebezw, uint32_t wysokosc_pomiaru)
{
//stopien baryczny
uint16_t stopienbaryczny=(800000*(1000+4*temperatura)/(cisnieniebezw+1)); //dodaje 1 w mianowniku bo czasami wychodzi jajo jak jest blisko 0
//przyblizone cisnienie
uint32_t cisnienie1=cisnieniebezw+(100000*wysokosc_pomiaru/(stopienbaryczny+1));
// cisnienie srednie
uint32_t Psr=(cisnieniebezw+cisnienie1)/2;
//temperatura poziomu morza
int16_t tpm=temperatura+((6*wysokosc)/1000);
//srednia temperatura
int16_t tsr=(temperatura+tpm)/2;
//kolejne przyblizenie stopnia barycznego
stopienbaryczny=(800000*(1000+4*tsr)/(Psr+1)); //wyliczamy ponownie dla wartosci srednich
//zwracamy cisnienie zredukowane w Pa, ewentualnie mozna przeliczyc na hPa poza funkcja
return cisnieniebezw+(100000*wysokosc_pomiaru/(stopienbaryczny+1));
}
[/code]
Funkcja w fazie testów, tę 1 z mianowników można pewnie wywalić i mieć bardziej precyzyjny wynik, trzeba tylko zabezpieczyć się IFami przed brakiem odczytu z czujnika i dzieleniem przez 0. Formułka na ciśnienie zredukowane z forum o pogodzie przerobiona na liczby całkowite.
Pozdr
Kacza

Avatar 1
Mikah Windows 7 / Mozilla Firefox 38.0
18 czerwiec 2015 - 10:34 Brak informacji

Dzięki za bardzo pomocne przykłady.
Pytanie: jak mogę podłączyć dwa czujniki do pomiaru ciśnienia do arduino? Czy w funckcji >> bmp.readPressure() jako parametr podaję numer czujnika?

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
20 czerwiec 2015 - 01:10 Bytom

BMP będą posiadać ten sam adres na I2c, dlatego musiałbyś skorzystać z tego: http://www.nxp.com/documents/data_sheet/PCA9548A.pdf

Avatar 1
Mikah Linux / Safari 537.36
26 czerwiec 2015 - 12:40 Brak informacji

hmmmmm wyższa szkoła jazdy, chyba zastosuje drugie mini pro do drugiego bmp.
myślałem, że wszystkie urządzenia na i2c mają unikalne adresy...?

Avatar 1
rafal Windows 7 / Safari 537.36
23 czerwiec 2015 - 13:38 Toruń

WItam, czujnik działa bezproblemowo ale jest "duży" problem z dokładnościa odnośnie wysokości pokazujue ci około też 300 metrów nad poziomem morza ja sprawdziłem u siebie pokazuje mi na pomiarze z czujnika też około 300 metrów a moje miasto znajduję sie na około 50 metrów jak poradzić sobie i rozwiązać ten problem.

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
23 czerwiec 2015 - 23:00 Bytom

Podajesz dobre, aktualne ciśnienie na poziomie morza do sealevelPressure?

Avatar 1
rafal Windows 7 / Safari 537.36
25 czerwiec 2015 - 11:10 Toruń

cisnienie podaje dokladne sprawdz u siebie czy ci dobrze działa ?

Avatar 1
m Windows Vista / Safari 537.36
05 lipiec 2015 - 13:00 Biała Podlaska

Witam, jakiego programu uzywa pan do wizualizacji wynikow pomiaru?

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 34.0
06 lipiec 2015 - 21:42 Bytom

Processing.org :)

Avatar 1
Maras Windows 7 / Safari 537.36
02 grudzień 2015 - 21:04 Brak informacji

BMP180 to bardzo dobry czujnik, sam użyłem go w jednym z moich projektów. Ostatnio znalazłem w Elektronice Praktycznej artykuł o polskim portalu typu chmura dla urządzeń pomiarowych. BMP180 jest tam pokazany jako przykład, pracuje razem z czujnikiem wilgotności HTU21D i to wszystko nadaje do chmury za pomocą ESP8266. Fajna sprawa, marzy mi się własna stacja pogodowa z wykreseami w necie, warto się nad tym zastanowić, tylko ja osobiście nie miałem jeszcze do czynienia z ESP i w ogóle zagadnieniami sieciowymi.
stronka tutaj https://skizi.net/blog/show/22

Avatar 1
Michal Windows 7 / Mozilla 11.0
22 grudzień 2015 - 10:18 Brak informacji

Prawie wszystko można zbudować w oparciu o moduł ESP8266. Obecnie własnie buduje stacje pogodowa na tym mikrokontrolerze, zbierając dane z areometru, kierunkowskazu i DHT22 a pozniej wysyłając do internetu. Polecam do nauki: https://learn.adafruit.com/esp8266-temperature-slash-humidity-webserver (przykładowy poradnik, na stronie adafruit jest ich wiecej) Sam jeszcze sie uczę ;)

Avatar 1
Wojciech Windows / Mozilla Firefox 50.0
06 styczeń 2017 - 12:54 Warszawa

Wszytko pięknie kolego, tylko problem polega na tym że DHT22 to mega słaby czujnik, a DHT11 to już w ogóle porażka. Od kilku miesięcy mam uruchiony testowo taki układ DHT22 + DS18B20 obok stoi jeszcze czujnik stacji pogodowej Bioterm i zwykły termometr. Wszystkie trzy łącznie z DS18B20 pokazują zgodnie tą samą temperaturę +/- 0,5stopnia (co dla domowej stacji pogodowej jest jak najbardziej do przyjęcia), a DHT22 odwala takie bzdury że szkoda gadać.

W temperaturze pokojowej DHT22 jako tako sobie radzi, ale gdy temperatura spada poniżej zera potrafi pokazywać -6 gdy jest -10. Druga sprawa to bardzo wolna reakcja na zmianę temperatury. Ogólnie czujniki DHT nie nadają się do niczego poza nauką arduino.
Dlatego myślę nad zakupem BME280 bo generalnie DS18N20 jest najlepszy, ale brak mi wilgotności :(

Avatar 1
koyaan Windows / Safari 537.36
11 grudzień 2015 - 23:00 Brak informacji

Dzięki, szczególnieza graficzną prezentację pomiarów, zastosowałem czujnik BME280, temperatura, ciśnienie i wilgotność powietrza, działa wyśmienicie.

Avatar 1
Marek Windows XP / Safari 537.36
24 styczeń 2016 - 21:55 Jaworzno

Podpiąłem BMP180 + DTH22 i wszystko pięknie działa. Jedynie rozbieżność przy odczycie temperatur z obu czujników wynosi 0,4oC. Przydała by się kalibracja czujników.
Teraz czas zrobić wizualizację.
Dziękuję.

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 43.0
24 styczeń 2016 - 22:27 Bytom

Jeśli odchyłka jest stała dla szerszego zakresu tempepratur :) odejmin/dodaj te 0.4C

Skomentuj wpis