Spisu treści:

Osobista stacja pogodowa wykorzystująca Raspberry Pi z BME280 w Javie: 6 kroków
Osobista stacja pogodowa wykorzystująca Raspberry Pi z BME280 w Javie: 6 kroków

Wideo: Osobista stacja pogodowa wykorzystująca Raspberry Pi z BME280 w Javie: 6 kroków

Wideo: Osobista stacja pogodowa wykorzystująca Raspberry Pi z BME280 w Javie: 6 kroków
Wideo: Amatorskie pomiary parametrów atmosferycznych 2024, Lipiec
Anonim
Image
Image
Zestawienie podstawowych urządzeń
Zestawienie podstawowych urządzeń

Zła pogoda zawsze wygląda gorzej przez okno

Zawsze byliśmy zainteresowani monitorowaniem naszej lokalnej pogody i tego, co widzimy za oknem. Chcieliśmy również mieć lepszą kontrolę nad naszym systemem ogrzewania i klimatyzacji. Budowanie osobistej stacji pogodowej to wspaniałe doświadczenie edukacyjne. Po zakończeniu tworzenia tego projektu lepiej zrozumiesz, jak działa komunikacja bezprzewodowa, jak działają czujniki i jak potężna może być platforma Raspberry Pi. Mając ten projekt jako bazę i zdobyte doświadczenie, będziesz mógł w przyszłości z łatwością budować bardziej złożone projekty.

Krok 1: Zestawienie podstawowych urządzeń

Zestawienie podstawowych urządzeń
Zestawienie podstawowych urządzeń
Zestawienie podstawowych urządzeń
Zestawienie podstawowych urządzeń
Zestawienie podstawowych urządzeń
Zestawienie podstawowych urządzeń

1. Raspberry Pi

Pierwszym krokiem jest zdobycie płyty Raspberry Pi. Raspberry Pi to komputer jednopłytkowy z systemem Linux. Jego celem jest poprawa umiejętności programowania i zrozumienia sprzętu. Został szybko zaadoptowany przez hobbystów i entuzjastów elektroniki do innowacyjnych projektów.

2. Osłona I²C dla Raspberry Pi

INPI2 (adapter I2C) zapewnia Raspberry Pi 2/3 port I²C do użytku z wieloma urządzeniami I²C. Jest dostępny w sklepie Dcube

3. Cyfrowy czujnik wilgotności, ciśnienia i temperatury, BME280

BME280 to czujnik wilgotności, ciśnienia i temperatury, który charakteryzuje się szybkim czasem reakcji i wysoką ogólną dokładnością. Kupiliśmy ten czujnik w sklepie Dcube

4. Kabel połączeniowy I²C

W sklepie Dcube Store był dostępny kabel połączeniowy I²C

5. Kabel Micro USB

Kabel micro USB Zasilacz to idealny wybór do zasilania Raspberry Pi.

6. Interpretuj dostęp do Internetu przez kabel Ethernet/adapter WiFi

Jedną z pierwszych rzeczy, które będziesz chciał zrobić, jest podłączenie Raspberry Pi do Internetu. Możemy połączyć się za pomocą kabla Ethernet. Inną możliwością jest połączenie z siecią bezprzewodową za pomocą bezprzewodowego adaptera USB.

7. Kabel HDMI (wyświetlacz i kabel połączeniowy)

Dowolny monitor HDMI/DVI i dowolny telewizor powinny działać jako wyświetlacz dla Pi. Ale to opcjonalne. Nie można również wykluczyć możliwości zdalnego dostępu (podobnie jak SSH). Możesz również uzyskać dostęp za pomocą oprogramowania PUTTY.

Krok 2: Połączenia sprzętowe do konfiguracji

Połączenia sprzętowe do konfiguracji
Połączenia sprzętowe do konfiguracji
Połączenia sprzętowe do konfiguracji
Połączenia sprzętowe do konfiguracji

Wykonaj obwód zgodnie z przedstawionym schematem.

Podczas nauki dokładnie poznaliśmy podstawy elektroniki w zakresie wiedzy o sprzęcie i oprogramowaniu. Chcieliśmy narysować prosty schemat elektroniki do tego projektu. Schematy elektroniczne są jak plan dla elektroniki. Opracuj plan i uważnie śledź projekt. Zastosowaliśmy tutaj podstawy elektroniki. Logika zabierze Cię z punktu A do punktu B, wyobraźnia zabierze Cię wszędzie!

Połączenie Raspberry Pi i I²C Shield

Przede wszystkim weź Raspberry Pi i umieść na nim osłonę I²C (z portem I²C skierowanym do wewnątrz). Delikatnie naciśnij Shield na piny GPIO Pi i skończymy z tym krokiem tak prostym, jak bułka z masłem (patrz zdjęcie).

Połączenie czujnika i Raspberry Pi

Weź czujnik i podłącz z nim kabel I²C. Upewnij się, że wyjście I²C ZAWSZE łączy się z wejściem I²C. To samo należy postępować w przypadku Raspberry Pi z zamontowanym nad nim nakładką I²C i pinami GPIO. Po naszej stronie mamy osłonę I²C i kable połączeniowe jako bardzo duża ulga i bardzo duża zaleta, ponieważ pozostaje nam tylko opcja plug and play. Nigdy więcej problemów z pinami i okablowaniem, a tym samym zamieszanie zniknęło. Po prostu wyobraź sobie siebie w pajęczynie przewodów i wpadaj w to. Ulga od tego. To sprawia, że wszystko jest nieskomplikowane.

Uwaga: Brązowy przewód powinien zawsze podążać za połączeniem uziemienia (GND) między wyjściem jednego urządzenia a wejściem innego urządzenia

Łączność z Internetem jest potrzebna

Właściwie masz wybór. Możesz podłączyć Raspberry Pi za pomocą kabla LAN lub bezprzewodowego adaptera Nano USB do łączności WIFI. Tak czy inaczej, manifest polega na połączeniu się z Internetem, co jest realizowane.

Zasilanie obwodu

Podłącz kabel Micro USB do gniazda zasilania Raspberry Pi. Uderz i voila! Wszystko jest w porządku i od razu zaczniemy.

Połączenie z wyświetlaczem

Możemy podłączyć kabel HDMI do monitora lub telewizora. Możemy uzyskać dostęp do Raspberry Pi bez podłączania go do monitora za pomocą -SSH (Uzyskaj dostęp do wiersza poleceń Pi z innego komputera). Możesz również użyć do tego oprogramowania PUTTY. Ta opcja jest przeznaczona dla zaawansowanych użytkowników, więc nie będziemy jej tutaj szczegółowo omawiać.

Słyszałem, że będzie recesja, postanowiłem nie brać udziału

Krok 3: Programowanie Raspberry Pi w Javie

Programowanie Raspberry Pi w Javie
Programowanie Raspberry Pi w Javie

Kod Java dla Raspberry Pi i BME280 Sensor. Jest dostępny w naszym repozytorium Github.

Przed przejściem do kodu upewnij się, że zapoznałeś się z instrukcjami podanymi w pliku Readme i zgodnie z nimi skonfiguruj swoje Raspberry Pi. To zajmie tylko chwilę. Osobista stacja pogodowa to zestaw przyrządów do pomiaru pogody obsługiwany przez osobę prywatną, klub, stowarzyszenie, a nawet firmę. Osobiste stacje pogodowe mogą być obsługiwane wyłącznie dla przyjemności i edukacji właściciela, ale wielu operatorów osobistych stacji pogodowych również udostępnia swoje dane innym, albo ręcznie kompilując dane i je rozpowszechniając, albo korzystając z internetu lub radia amatorskiego.

Kod jest w najprostszej formie, jaką możesz sobie wyobrazić i nie powinieneś mieć z nim problemu, ale zapytaj, czy tak. Nawet jeśli znasz tysiąc rzeczy, zapytaj kogoś, kto wie.

Możesz również skopiować działający kod java dla tego czujnika.

// 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. //

importuj com.pi4j.io.i2c. I2CBus;

importuj com.pi4j.io.i2c. I2CDurządzenie; importuj com.pi4j.io.i2c. I2CFabryka; import java.io. IOException;

klasa publiczna BME280

{ public static void main(String args) throws Exception { // Utwórz magistralę I2C Magistrala I2CBus = I2CFactory.getInstance(I2CBus. BUS_1); // Pobierz urządzenie I2C, adres BME280 I2C to 0x76(108) Urządzenie I2CDevice = bus.getDevice(0x76); // Odczytaj 24 bajty danych z adresu 0x88(136) byte b1 = new byte[24]; urządzenie.odczyt(0x88, b1, 0, 24); // Konwersja danych // współczynniki temp int dig_T1 = (b1[0] & 0xFF) + ((b1[1] & 0xFF) * 256); int dig_T2 = (b1[2] & 0xFF) + ((b1[3] & 0xFF) * 256); if(dig_T2 > 32767) { dig_T2 -= 65536; } int dig_T3 = (b1[4] & 0xFF) + ((b1[5] & 0xFF) * 256); if(dig_T3 > 32767) { dig_T3 -= 65536; } // współczynniki ciśnienia int dig_P1 = (b1[6] & 0xFF) + ((b1[7] & 0xFF) * 256); int dig_P2 = (b1[8] & 0xFF) + ((b1[9] & 0xFF) * 256); if(dig_P2 > 32767) { dig_P2 -= 65536; } int dig_P3 = (b1[10] & 0xFF) + ((b1[11] & 0xFF) * 256); if(dig_P3 > 32767) { dig_P3 -= 65536; } int dig_P4 = (b1[12] & 0xFF) + ((b1[13] & 0xFF) * 256); if(dig_P4 > 32767) { dig_P4 -= 65536; } int dig_P5 = (b1[14] & 0xFF) + ((b1[15] & 0xFF) * 256); if(dig_P5 > 32767) { dig_P5 -= 65536; } int dig_P6 = (b1[16] & 0xFF) + ((b1[17] & 0xFF) * 256); if(dig_P6 > 32767) { dig_P6 -= 65536; } int dig_P7 = (b1[18] & 0xFF) + ((b1[19] & 0xFF) * 256); if(dig_P7 > 32767) { dig_P7 -= 65536; } int dig_P8 = (b1[20] & 0xFF) + ((b1[21] & 0xFF) * 256); if(dig_P8 > 32767) { dig_P8 -= 65536; } int dig_P9 = (b1[22] & 0xFF) + ((b1[23] & 0xFF) * 256); if(dig_P9 > 32767) { dig_P9 -= 65536; } // Odczytaj 1 bajt danych z adresu 0xA1(161) int dig_H1 = ((byte)device.read(0xA1) & 0xFF); // Odczytaj 7 bajtów danych z adresu 0xE1(225) device.read(0xE1, b1, 0, 7); // Konwersja danych // współczynniki wilgotności int dig_H2 = (b1[0] & 0xFF) + (b1[1] * 256); if(dig_H2 > 32767) { dig_H2 -= 65536; } int dig_H3 = b1[2] & 0xFF; int dig_H4 = ((b1[3] & 0xFF) * 16) + (b1[4] & 0xF); if(dig_H4 > 32767) { dig_H4 -= 65536; } int dig_H5 = ((b1[4] & 0xFF) / 16) + ((b1[5] & 0xFF) * 16); if(dig_H5 > 32767) { dig_H5 -= 65536; } int dig_H6 = b1[6] & 0xFF; if(dig_H6 > 127) { dig_H6 -= 256; } // Wybór rejestru kontrolnego wilgotności // Wilgotność z częstotliwością próbkowania = 1 device.write(0xF2, (byte)0x01); // Wybór rejestru pomiarów kontrolnych // Tryb normalny, temperatura i ciśnienie powyżej częstotliwości próbkowania = 1 device.write(0xF4, (byte)0x27); // Wybierz rejestr konfiguracji // Czas czuwania = 1000 ms device.write(0xF5, (byte)0xA0); // Odczytaj 8 bajtów danych z adresu 0xF7(247) // pressure msb1, pressure msb, pressure lsb, temp msb1, temp msb, temp lsb, wilgotność lsb, wilgotność msb byte data = new byte[8]; urządzenie.odczyt(0xF7, dane, 0, 8); // Konwertuj dane ciśnienia i temperatury na 19-bitowe adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (long) (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; } // Wyprowadzanie danych na ekran System.out.printf("Temperatura w stopniach Celsjusza: %.2f C %n", cTemp); System.out.printf("Temperatura w stopniach Fahrenheita: %.2f F %n", fTemp); System.out.printf("Ciśnienie: %.2f hPa %n", ciśnienie); System.out.printf("Wilgotność względna: %.2f %% RH %n", wilgotność); } }

Krok 4: Praktyczność kodeksu

Praktyczność kodeksu
Praktyczność kodeksu

Teraz pobierz (lub git pull) kod i otwórz go w Raspberry Pi.

Uruchom polecenia skompiluj i prześlij kod w terminalu i zobacz dane wyjściowe w Monitorze. Po kilku chwilach wyświetli wszystkie parametry. Upewniając się, że masz płynne przejście kodu i spokojny wynik, myślisz o większej liczbie pomysłów, aby wprowadzić dalsze poprawki (Każdy projekt zaczyna się od historii).

Krok 5: Wykorzystanie w konstruktywnym świecie

BME280 osiąga wysoką wydajność we wszystkich aplikacjach wymagających pomiaru wilgotności i ciśnienia. Te pojawiające się aplikacje to Świadomość kontekstu, m.in. Wykrywanie skóry, wykrywanie zmian w pomieszczeniu, monitorowanie sprawności / dobrego samopoczucia, ostrzeżenia o suchości lub wysokich temperaturach, pomiar objętości i przepływu powietrza, sterowanie automatyką domową, sterowanie ogrzewaniem, wentylacją, klimatyzacją (HVAC), Internet rzeczy (IoT), Ulepszenia GPS (np. poprawa czasu do pierwszej naprawy, Dead Reckoning, wykrywanie zbocza), nawigacja wewnętrzna (wykrywanie zmiany podłogi, wykrywanie wind), nawigacja zewnętrzna, aplikacje rekreacyjne i sportowe, prognoza pogody i wskazanie prędkości pionowej (wzrost/opadnięcie) Prędkość).

Krok 6: Wniosek

Jak widać, ten projekt jest świetną demonstracją tego, do czego zdolny jest sprzęt i oprogramowanie. W krótkim czasie można zbudować tak imponujący projekt! Oczywiście to dopiero początek. Tworzenie bardziej wyrafinowanej osobistej stacji pogodowej, takiej jak zautomatyzowane osobiste stacje pogodowe na lotnisku, może obejmować więcej czujników, takich jak anemometr (prędkość wiatru), transmisjometr (widoczność), piranometr (promieniowanie słoneczne) itp. Na Youtube znajduje się samouczek wideo przedstawiający podstawowe funkcje Czujnik I²C z Rasp Pi. To naprawdę niesamowite widzieć wyniki i działanie komunikacji I²C. Sprawdź to również. Baw się dobrze, budując i ucząc się! Daj nam znać, co myślisz o tej instrukcji. W razie potrzeby chcielibyśmy wprowadzić pewne ulepszenia.

Zalecana: