Baromentr elektroniczny Arduino UNO + BMP085/BMP180 + DHT11

Baromentr elektroniczny Arduino UNO + BMP085/BMP180 + DHT11

Witam wszystkich majsterkowiczów,

chciałbym pochwalić się wszystkim moim barometrem elektronicznym o dość standardowych, jak na tego typu rzeczy, funkcjonalnościach.

Jest to prototyp, nie wersja ostateczna, także z czasem zdarzy mi się pewnie dodać synchronizacje zegara przez GPS, czy upakować to w ładne pudełko ;)

 

Elementy potrzebne do odtworzenia projektu:
Hardware:
-Płytka Arduino UNO, lub podobna, może być też mikrokontroler, z wgranym BIOS’ em od
Arduino
-potencjometr o Rmax równym 10^4 OHM’a oraz 10^2 OHM’a
-wyświetlacz LCD 20×4, o standardzie HD44780
-czujnik BMP 085 lub BMP 180
-czujnik DHT11
-oporniki o rezystancji równej:
-10 kOHM (potrzebne dwa oporniki)
-47 OHM
-220 OHM
-510 OHM
-1kOHM
-płytka stykowa, prototypowa
-cztery przyciski typu “Tact Switch”
-okablowanie ( w tym kabel USB o złączu typu A oraz typu B)
Software:
Arduino IDE oraz biblioteki dołączone do dokumentacji, skompresowane do pliku „libraries.zip”

Podłączenie elementów fizycznych:
Wszystko podłączamy zgodnie z poniższymi schematami:

1

2

3

4

Obsługa zaprogramowanego sprzętu:
Podłączony i zaprogramowany barometr będzie miał następujące funkcjonalności:
-wyświetlanie daty i godziny z dokładnością do sekundy, dodatkowe zabezpieczenia przed ustawieniem nieprawidłowej godziny, bądź daty, możliwość ustawienia czasu lub daty
-wyświetlanie obecnego ciśnienia, temperatury, wilgotności oraz wysokości nad poziom morza, ta brana jest z różnicy ciśnień między względnym, a bezwzględnym, ciśnienie względne również jest edytowalne
-wygaszanie ekranu LCD po określonej liczbie cykli odświeżeń, pozwala zmniejszyć zużycie energii
Przyciski:
Przyciski za największym i najmniejszym rezystorem, mają funkcjonalność zmiany ekranu bądź elementu, który edytujemy, przyciski „środkowe” natomiast służą do edycji oraz do wchodzenia w menu edycji. Przykładowo, kiedy będziemy chcieli zmienić ekran z godziny na temperaturę, użyjemy przycisków skrajnych, chcąc natomiast edytować elementy związane z bieżącymi danymi, użyjemy przycisków środkowych

Wszystkie potrzebne biblioteki:

https://drive.google.com/file/d/0ByGC8fmb_AybODJiNjJUelZKSkk/edit?usp=sharing

Kod programu:

 

 

Mimo, że jest to mój pierwszy projekt arduino, to mam nadzieję, że coś ciekawego udało mi się wnieść do tematów z tym związanych i projekt okaże się dla kogoś pomocny/przydatny ;)

Barometr “w akcji”:

Życzę powodzenia, postaram się odpowiedzieć na ewentualne pytania/komentarze.
Dawid Gutkiewicz

Ocena: 4.6/5 (głosów: 55)

Podobne posty

21 komentarzy do “Baromentr elektroniczny Arduino UNO + BMP085/BMP180 + DHT11

  • W roku przestępnym może być kłopot z ustawieniem 29 lutego:
    nt tab[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // table with max days

    Odpowiedz
    • Wg informacji, które znalazłem na temat BMP085/BMP185, moduł posiada wbudowany konwerter dla I2C.

      Dlatego możemy zasilać je poprzez 3,3V ( w niektórych modelach nawet 5V), a komunikacja poprzez I2C nadal będzie odbywać się poprawnie.

      Tłumaczy to dlaczego mój barometr działa ;)

      Źródło:
      https://www.sparkfun.com/tutorials/253
      oraz
      http://oomlout.co.uk/products/pressure-temperature-altitude-sensor-bmp085
      cytat z ostatniego:
      “It also includes an on board 3.3v regulator and level shifter meaning it is compatible with the Arduino’s 5v logic. Finally it is i2c (digital) meaning the readings are fast and reliable.”

      Niemniej jednak brawo za spostrzegawczość i zauważenie takiej możliwości ;)

      Odpowiedz
      • Dawid,

        Przede wszystkim układ BMP085 nie posiada konwertera i VDDIO max to 3.6V – http://www.bosch-sensortec.com/de/homepage/products_3/environmental_sensors_1/bmp180_1/bmp180
        . I tutaj nie ma o czym dalej pisać.

        Niemniej, rozumiem, że akurat na Twojej płytce jest taki konwerter. Swoją drogą wydaje mi się, że również na stronie Spark Fun jest dokładnie ten sam problem – bark dopasowania poziomów logicznych. A płytka od Adafruit ma ów konwerter.

        Zwracam na to uwagę, ponieważ, według mnie warto znać tego rodzaju niuanse i poprawnie budować swoje urządzenia.


        http://www.malebranchi.waw.pl

        Odpowiedz
        • Rozumiem, dzięki
          Ale ciekawi mnie jedna rzecz, czy gdybyśmy na przykład użyli wyjść/wejść analogowych, czy nie dałoby się obejść bez konwersji sygnałów (tutaj z 3.3 na 5V i w drugą stronę odwrotnie)?

          W sensie moglibyśmy zdefiniować własny poziom sygnału 1.

          Odpowiedz
          • Hmm nie wiem, możliwe, że mogłoby to zadziałać, wydaje mi się, że
            czujnikowi BMP za jedno czy będzie dostawać sygnał z cyfrowego czy analogowego portu, byle by poziomy napięć się zgadzały. Niemniej, niewątpliwie prościej użyć 4 rezystorów i 2 tranzystorów, niż pisać software’owy I2C na porcie analogowym, gdzie dodatkowo mogą pojawić się problemy z częstotliwością magistrali…


            http://www.malebranchi.waw.pl

            Odpowiedz
  • DTH11 to slaby czujnik, walczylem z nim ponad 2 miesiace, wymienilem na dth22..
    DTH11 nie daje rady w otoczeniu powyzej 80%, po prostu jego konstrukja nie zdaje egzaminu (kilkanascie dni za oknem i sniedzieje plyta pomiarowa)…
    BMP85 u mnie tez dziala, choc kalibracja jest skomplikowana (za duzo kodu jak na taki czujnik), ale dziala.:)
    Projekt fajny, jak rowiazales klawisze na jednym pinie?
    ADC?

    Odpowiedz
    • Lepszy czujnik jak najbardziej wskazany, póki co, mój sprawdza się bez zarzutu.

      Wiele przycisków na jednym pinie to zasługa drabinki rezystorowej,
      Przykładowo mamy rezystory w szeregu R1,R2,R3….Rn
      I teraz mamy przyciski S1, S2, S3… Sn, przycisk S1 zamyka obwód między 5V, a wejściem analogowym z oporem R1, przycisk S2 – R(S2)=R1+R2, przycisk Sn – R(Sn) = R1+R2+R3+…..+Rn, także dla każdego przycisku na pinu analogowego wpływa inny prąd, możemy to potraktować jako sygnał, a co za tym idzie rozróżnić przyciski, na przykład przy pomocy takiego kodu:

      void set_button_number(int value, int wait)
      {
      if(value > 1010)
      {
      buttonNumber = 1;
      }
      if(value 980)
      {
      buttonNumber = 2;
      }
      if(value 900)
      {
      buttonNumber = 3;
      }
      if(value 820)
      {
      buttonNumber = 4;
      }
      if(value 100)
      delay(10);
      }

      gdzie:
      wait – może przyjmować wartość 1 lub inną, całkowitą, dając możliwość oczekiwania na zakończenie “wciskania” przycisku, aby kontynuować wykonywanie programu bez dalszych sygnałów

      value – odczyt stanu z wejścia analogowego, dla A0, będzie to analogRead(0)

      buttonNumber – określa numer przycisku, numerujemy wedle własnego uznania ;)

      Inaczej jeżeli chcemy zdefiniować przycisk i poczekać z wykonywaniem programu na zwolnienie przycisku, funkcję wywołamy tak:

      set_button_number(analogRead(0), 1)

      Jeśli program ma nadal pracować mimo wciśnięcia (np, gdybyśmy programowali Snake na arduino, taka funkcja ma sens):

      set_button_number(analogRead(0), 0)

      W sumie tak to wygląda, przynajmniej tak to sobie obmyśliłem

      Odpowiedz
    • Czujnik ciśnienia nie musi znajdować się na zewnątrz. Światowa Organizacja Meteorologiczna jak najbardziej dopuszcza montowanie barometrów w budynkach stacji meteorologicznych, tak też jest w stacjach IMGW(poza czujnikami stacji automatycznych MAWS).

      Odpowiedz
  • łezka się zakręciła w oku, sam 1,5 roku temu robiłem coś takiego tylko na dht22, atmega 16, płytce bluetooth HC-06 ( komunikacja z telefonem, wysyłanie temperatury i ciśnienia, oraz odbieranie informacji o godzinie (odpalenie aplikacji ustawiało zegar w termometrze – przydatne jak się czas zmienia), u mnie były 2 przyciski jeden od włączania wyświetlacza, a drugi zapalał diodę rgb która zmieniała kolory w zależności od temperatury na zewnątrz, oczywiście można było też zrobić w apce na telefonie. użyty czujnik ciśnienia BMP085 z tym że w płytce zmieniającej poziom napięć na 5v, miał być jeszcze zapis na sd ale próba zapisu zawieszała mi atmegę i nigdy nie znalazłem błędu. największą wadą było złe umieszczenie czujnika temperatury wewnętrznej który zdaje się pokazuje temperaturę stabilizatora (zasilanie z zasilacza zewnętrznego, lub baterii 9v)

    Odpowiedz
  • Super tutek… Jak można prosić to jeszcze przydałby się GPS do tego i potem komunikacja po wifi ;) czyli czujniki na zwewnątrz a w domu wyświetlacz ;) ale to tylko moja propozycja ;)

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?