Spisu treści:

Obliczanie wilgotności, ciśnienia i temperatury przy użyciu BME280 i interfejsu fotonowego.: 6 kroków
Obliczanie wilgotności, ciśnienia i temperatury przy użyciu BME280 i interfejsu fotonowego.: 6 kroków

Wideo: Obliczanie wilgotności, ciśnienia i temperatury przy użyciu BME280 i interfejsu fotonowego.: 6 kroków

Wideo: Obliczanie wilgotności, ciśnienia i temperatury przy użyciu BME280 i interfejsu fotonowego.: 6 kroków
Wideo: Układy BMP280/BME280 - czyli prosto o mierzeniu ciśnienia, temperatury i wilgotności 2024, Lipiec
Anonim
Obliczanie wilgotności, ciśnienia i temperatury przy użyciu BME280 i interfejsu fotonowego
Obliczanie wilgotności, ciśnienia i temperatury przy użyciu BME280 i interfejsu fotonowego

Spotykamy się z różnymi projektami, które wymagają monitorowania temperatury, ciśnienia i wilgotności. W ten sposób zdajemy sobie sprawę, że parametry te faktycznie odgrywają kluczową rolę w oszacowaniu wydajności pracy systemu w różnych warunkach atmosferycznych. Zarówno na poziomie przemysłowym, jak i systemach osobistych, optymalna temperatura, wilgotność i poziom ciśnienia barometrycznego są niezbędne dla odpowiedniej wydajności systemu.

Dlatego udostępniamy kompletny samouczek dotyczący tego czujnika, w tym samouczku wyjaśnimy działanie czujnika wilgotności, ciśnienia i temperatury BME280 z fotonem cząstek.

Krok 1: Eksploracja BME280

Eksploracja BME280
Eksploracja BME280

Sektor elektroniczny przyspieszył swoją grę dzięki czujnikowi BME280, czujnikowi środowiskowemu z temperaturą, ciśnieniem barometrycznym i wilgotnością! Ten czujnik doskonale nadaje się do wszelkiego rodzaju czujników pogodowych/środowiskowych, a nawet może być używany w I2C.

Ten precyzyjny czujnik BME280 jest najlepszym rozwiązaniem do pomiaru wilgotności z dokładnością ±3%, ciśnienia barometrycznego z dokładnością bezwzględną ±1 hPa oraz temperatury z dokładnością ±1,0°C. Ponieważ ciśnienie zmienia się wraz z wysokością, a pomiary ciśnienia są tak dobre, można go również używać jako wysokościomierza z dokładnością ±1 metra lub lepszą!Czujnik temperatury został zoptymalizowany pod kątem najniższego poziomu hałasu i najwyższej rozdzielczości i służy do kompensacji temperatury czujnik ciśnienia i może być również używany do szacowania temperatury otoczenia. Pomiary za pomocą BME280 mogą być wykonywane przez użytkownika lub wykonywane w regularnych odstępach czasu.

Arkusz danych: Kliknij, aby wyświetlić podgląd lub pobrać arkusz danych czujnika BME280.

Krok 2: Lista wymagań sprzętowych

Lista wymagań sprzętowych
Lista wymagań sprzętowych

Użyliśmy wyłącznie części Dcube Store Parts, ponieważ są one łatwe w użyciu, a coś o tym, że wszystko ładnie pasuje na centymetrowej siatce, naprawdę nas pobudza. Możesz użyć czegokolwiek, ale schemat połączeń zakłada, że używasz tych części.

  • BME280 Czujnik I²C Mini Moduł
  • Tarcza I²C dla fotonu cząsteczkowego
  • Foton cząstek
  • Kabel I²C
  • Zasilacz

Krok 3: Połączenie

Interfejs
Interfejs

Sekcja poświęcona interfejsom zasadniczo wyjaśnia połączenia przewodów wymagane między czujnikiem a fotonem cząstek. Zapewnienie prawidłowych połączeń jest podstawową koniecznością podczas pracy na dowolnym systemie o pożądanej mocy. Tak więc wymagane połączenia są następujące:

BME280 będzie pracował przez I2C. Oto przykładowy schemat okablowania, pokazujący, jak okablować każdy interfejs czujnika. Po wyjęciu z pudełka, płyta jest skonfigurowana do interfejsu I2C, dlatego zalecamy korzystanie z tego interfejsu, jeśli jesteś agnostykiem. Wszystko czego potrzebujesz to cztery przewody! Wymagane są tylko cztery połączenia Vcc, Gnd, SCL i SDA, które są połączone za pomocą kabla I2C. Połączenia te są pokazane na powyższych zdjęciach.

Krok 4: Kod monitorowania temperatury, ciśnienia i wilgotności

Kod monitorowania temperatury, ciśnienia i wilgotności
Kod monitorowania temperatury, ciśnienia i wilgotności
Kod monitorowania temperatury, ciśnienia i wilgotności
Kod monitorowania temperatury, ciśnienia i wilgotności

Czysta wersja kodu, której użyjemy do uruchomienia tego, jest dostępna TUTAJ.

Podczas korzystania z modułu czujnika z Arduino dołączamy bibliotekę application.h oraz spark_wiring_i2c.h. Biblioteka "application.h" oraz spark_wiring_i2c.h zawiera funkcje ułatwiające komunikację i2c pomiędzy czujnikiem a cząsteczką.

Kliknij TUTAJ, aby otworzyć stronę internetową do monitorowania urządzeń

Prześlij kod na swoją tablicę i powinien zacząć działać! Wszystkie dane można uzyskać na stronie internetowej, jak pokazano na obrazku.

Kod znajduje się poniżej:

// Rozprowadzany z wolną licencją.// Używaj go w dowolny sposób, z zyskiem lub za darmo, pod warunkiem, że pasuje do licencji powiązanych z nim dzieł. // BME280 // Ten kod jest przeznaczony do współpracy z modułem mini BME280_I2CS I2C dostępnym na stronie ControlEverything.com. #include #include // adres BME280 I2C to 0x76(108) #define Addr 0x76 double cTemp = 0, fTemp = 0, ciśnienie = 0, wilgotność = 0; void setup() { // Ustaw zmienną Particle.variable("i2cdevice", "BME280"); article.variable("cTemp", cTemp); Particle.variable("fTemp", fTemp); Particle.variable("ciśnienie", ciśnienie); Particle.variable("wilgotność", wilgotność); // Zainicjuj komunikację I2C jako MASTER Wire.begin(); // Zainicjuj komunikację szeregową, ustaw szybkość transmisji = 9600 Serial.begin(9600); opóźnienie(300); } void loop() { unsigned int b1[24]; dane int bez znaku[8]; int dig_H1 = 0; for(int i = 0; i < 24; i++) { // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr danych Wire.write((136+i)); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Żądaj 1 bajtu danych Wire.requestFrom(Addr, 1); // Odczytaj 24 bajty danych if(Wire.available() == 1) { b1 = Wire.read(); } } // Konwersja danych // współczynniki temp int dig_T1 = (b1[0] & 0xff) + ((b1[1] & 0xff) * 256); int dig_T2 = b1[2] + (b1[3] * 256); int dig_T3 = b1[4] + (b1[5] * 256); // współczynniki ciśnienia int dig_P1 = (b1[6] & 0xff) + ((b1[7] & 0xff) * 256); int dig_P2 = b1[8] + (b1[9] * 256); int dig_P3 = b1[10] + (b1[11] * 256); int dig_P4 = b1[12] + (b1[13] * 256); int dig_P5 = b1[14] + (b1[15] * 256); int dig_P6 = b1[16] + (b1[17] * 256); int dig_P7 = b1[18] + (b1[19] * 256); int dig_P8 = b1[20] + (b1[21] * 256); int dig_P9 = b1[22] + (b1[23] * 256); for(int i = 0; i < 7; i++) { // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr danych Wire.write((225+i)); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Żądaj 1 bajtu danych Wire.requestFrom(Addr, 1); // Odczytaj 7 bajtów danych if(Wire.available() == 1) { b1 = Wire.read(); } } // Konwersja danych // współczynniki wilgotności int dig_H2 = b1[0] + (b1[1] * 256); int dig_H3 = b1[2] & 0xFF; int dig_H4 = (b1[3] * 16) + (b1[4] & 0xF); int dig_H5 = (b1[4] / 16) + (b1[5] * 16); int dig_H6 = b1[6]; // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr danych Wire.write(161); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Żądaj 1 bajtu danych Wire.requestFrom(Addr, 1); // Odczytaj 1 bajt danych if(Wire.available() == 1) { dig_H1 = Wire.read(); } // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybór rejestru kontrolnego wilgotności Wire.write(0xF2); // Wilgotność powyżej częstotliwości próbkowania = 1 Wire.write(0x01); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr pomiarów kontrolnych Wire.write(0xF4); // Tryb normalny, temperatura i ciśnienie powyżej częstotliwości próbkowania = 1 Wire.write(0x27); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr konfiguracji Wire.write(0xF5); // Czas czuwania = 1000ms Wire.write(0xA0); // Zatrzymaj transmisję I2C Wire.endTransmission(); for(int i = 0; i <8; i++) { // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr danych Wire.write((247+i)); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Żądaj 1 bajtu danych Wire.requestFrom(Addr, 1); // Odczytaj 8 bajtów danych if(Wire.available() == 1) { data = Wire.read(); } } // Konwertuj dane ciśnienia i temperatury na 19-bitowe adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (długi)(dane[2] i 0xF0)) / 16; long adc_t = (((long)(data[3] & 0xFF) * 65536) + ((long)(data[4] & 0xFF) * 256) + (long)(data[5] & 0xF0)) / 16; // Konwertuj dane wilgotności long adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF)); // Obliczenia przesunięcia temperatury double var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2); podwójna var2 = ((((podwójny)adc_t) / 131072.0 - ((podwójny)dig_T1) / 8192.0) * (((podwójny)adc_t)/131072.0 - ((podwójny)dig_T1)/8192.0)) * ((podwójny)dig_T3); double t_fine = (long)(var1 + var2); podwójne cTemp = (var1 + var2) / 5120.0; podwójne fTemp = cTemp * 1,8 + 32; // Obliczenia przesunięcia ciśnienia var1 = ((double)t_fine / 2.0) - 64000.0; zm2 = zm1 * zm1 * ((podwójny)dig_P6) / 32768,0; zm2 = zm2 + zm1 * ((podwójny)dig_P5) * 2,0; var2 = (var2 / 4.0) + (((podwójny)dig_P4) * 65536.0); var1 = (((podwójny) dig_P3) * var1 * var1 / 524288.0 + ((podwójny) dig_P2) * var1) / 524288.0; var1 = (1,0 + var1 / 32768,0) * ((podwójny)dig_P1); podwójne p = 1048576,0 - (podwójne)adc_p; p = (p - (zmienna2 / 4096,0)) * 6250,0 / zmienna1; var1 = ((podwójny) dig_P9) * p * p / 2147483648.0; var2 = p * ((podwójny) dig_P8) / 32768,0; podwójne ciśnienie = (p + (var1 + var2 + ((podwójne)dig_P7)) / 16.0) / 100; // Obliczenia przesunięcia wilgotności double var_H = (((double)t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1,0 + dig_H6 / 67108864.0 * var_H * (1,0 + dig_H3 / 67108864.0 * var_H))); podwójna wilgotność = var_H * (1,0 - dig_H1 * var_H / 524288.0); if(wilgotność> 100,0) { wilgotność = 100,0; } else if(wilgotność < 0,0) { wilgotność = 0,0; } // Dane wyjściowe do pulpitu nawigacyjnego Particle.publish("Temperatura w stopniach Celsjusza: ", String(cTemp)); Particle.publish("Temperatura w stopniach Fahrenheita: ", String(fTemp)); Particle.publish("Ciśnienie: ", Ciąg(nacisk)); Particle.publish("Wilgotność względna: ", String(wilgotność)); opóźnienie (1000); }

Krok 5: Aplikacje:

Aplikacje
Aplikacje

Czujnik temperatury, ciśnienia i wilgotności względnej BME280 ma różne zastosowania przemysłowe, takie jak monitorowanie temperatury, ochrona termiczna peryferyjnych komputerów, monitorowanie ciśnienia w przemyśle. Zastosowaliśmy ten czujnik również w aplikacjach stacji pogodowej, a także w systemie monitorowania szklarni.

Inne aplikacje mogą obejmować:

  1. Świadomość kontekstu, np. wykrywanie skóry, wykrywanie zmiany pomieszczenia.
  2. Monitorowanie kondycji / dobrego samopoczucia - Ostrzeżenie dotyczące suchości lub wysokich temperatur.
  3. Pomiar objętości i przepływu powietrza.
  4. Sterowanie automatyką domową.
  5. Sterowanie ogrzewaniem, wentylacją, klimatyzacją (HVAC).
  6. Internet przedmiotów.
  7. Ulepszenie GPS (np. poprawa czasu do pierwszej naprawy, martwe liczenie, wykrywanie nachylenia).
  8. Nawigacja wewnętrzna (wykrywanie zmiany piętra, wykrywanie windy).
  9. Nawigacja zewnętrzna, aplikacje rekreacyjne i sportowe.
  10. Prognoza pogody.
  11. Wskaźnik prędkości pionowej (prędkość wznoszenia/opadania).

Krok 6: Samouczek wideo

Obejrzyj nasz samouczek wideo, aby przejść przez wszystkie etapy łączenia i ukończenia projektu.

Bądź na bieżąco z interfejsami innych czujników i blogami roboczymi.

Zalecana: