Java -da BME280 ilə Raspberry Pi istifadə edən Şəxsi Hava İstasyonu: 6 addım
Java -da BME280 ilə Raspberry Pi istifadə edən Şəxsi Hava İstasyonu: 6 addım
Anonim
Image
Image
Essential Equipment Bill
Essential Equipment Bill

Pis hava həmişə pəncərədən pis görünür

Həmişə yerli hava şəraitimizi və pəncərədə gördüklərimizi izləməklə maraqlanmışıq. İstilik və kondisioner sistemimizə daha yaxşı nəzarət etmək istəyirdik. Şəxsi Hava İstasyonu qurmaq böyük bir təcrübədir. Bu layihəni bitirdikdə simsiz rabitənin necə işlədiyini, sensorların necə işlədiyini və Raspberry Pi platformasının nə qədər güclü olacağını daha yaxşı anlayacaqsınız. Bir baza olaraq bu layihə və qazanılan təcrübə ilə gələcəkdə daha mürəkkəb layihələr qura biləcəksiniz.

Addım 1: Əsas Avadanlıq Bill

Essential Equipment Bill
Essential Equipment Bill
Essential Equipment Bill
Essential Equipment Bill
Essential Equipment Bill
Essential Equipment Bill

1. Moruq Pi

İlk addım əllərinizi Raspberry Pi lövhəsinə qoymaqdır. Raspberry Pi, Linux ilə işləyən tək lövhəli kompüterdir. Məqsədi proqramlaşdırma bacarıqlarını və hardware anlayışını inkişaf etdirməkdir. Yenilikçi layihələr üçün həvəskarlar və elektronika həvəskarları tərəfindən tez qəbul edildi.

2. Raspberry Pi üçün I²C Shield

INPI2 (I2C adapteri), çoxlu I²C cihazları ilə istifadə üçün Raspberry Pi 2/3 və I²C portunu təmin edir. Dcube Mağazasında mövcuddur

3. Rəqəmsal Nəmlik, Təzyiq və Temperatur Sensoru, BME280

BME280, yüksək reaksiya müddətinə və yüksək dəqiqliyə malik olan nəmlik, təzyiq və temperatur sensoru. Bu sensoru Dcube Mağazasından aldıq

4. I²C Bağlayıcı Kabel

Dcube Store -da I²C birləşdirən kabelimiz var idi

5. Mikro USB kabeli

Mikro USB kabel Güc təchizatı, Raspberry Pi -ni gücləndirmək üçün ideal seçimdir.

6. EthernetCable/WiFi Adapter vasitəsilə İnternetə çıxışı şərh edin

Etmək istədiyiniz ilk şeylərdən biri Raspberry Pi -ni İnternetə bağlamaqdır. Ethernet kabelindən istifadə edərək əlaqə qura bilərik. Başqa bir ehtimal, USB simsiz adapterdən istifadə edərək simsiz şəbəkəyə qoşula bilərsiniz.

7. HDMI Kabeli (Ekran və keçid kabeli)

Hər hansı bir HDMI/DVI monitor və hər hansı bir TV Pi üçün bir ekran kimi işləməlidir. Ancaq isteğe bağlıdır. Uzaqdan giriş (SSH kimi) imkanı da istisna edilə bilməz. PUTTY proqramı ilə də əldə edə bilərsiniz.

Addım 2: Quraşdırma üçün Avadanlıq Bağlantıları

Quraşdırma üçün Avadanlıq Bağlantıları
Quraşdırma üçün Avadanlıq Bağlantıları
Quraşdırma üçün Avadanlıq Bağlantıları
Quraşdırma üçün Avadanlıq Bağlantıları

Göstərilən sxemə görə dövrə düzəldin.

Öyrənərkən, hardware və proqram bilikləri ilə bağlı elektronikanın əsaslarını dərindən öyrəndik. Bu layihə üçün sadə bir elektronika sxemini tərtib etmək istədik. Elektron sxemlər elektronika üçün bir plana bənzəyir. Bir plan tərtib edin və dizaynı diqqətlə izləyin. Burada elektronikanın bəzi əsaslarını tətbiq etdik. Məntiq sizi A -dan B -yə aparır, Xəyal sizi hər yerə aparacaq!

Raspberry Pi və I²C Shield bağlantısı

Əvvəlcə Raspberry Pi götürün və üzərinə I²C Shield (İçəri baxan I²C Portu ilə) qoyun. Qalxanı Pi -nin GPIO sancaqlarına yumşaq bir şəkildə basın və bu addımı pasta qədər asan edirik (şəkilə baxın).

Sensor və Raspberry Pi -nin əlaqəsi

Sensoru götürün və I²C kabelini onunla bağlayın. I²C Çıxışının DAİMA I²C Girişinə qoşulduğundan əmin olun. Üzərində GPIO pinləri olan I²C qalxanı olan Raspberry Pi üçün də eyni qaydalara riayət edilməlidir. I²C Shield və yan kabellərimiz yan tərəfimizdə çox böyük bir relyef və çox böyük bir üstünlük olaraq qalır. tak ve çalıştır seçimi. Artıq sancaqlar və naqillər problemi yoxdur və buna görə də qarışıqlıq aradan qalxdı. Özünüzü tellər şəbəkəsində təsəvvür edin və buna girirsiniz. Bundan bir rahatlıq. Bu, işləri çətinləşdirir.

Qeyd: Qəhvəyi tel həmişə bir cihazın çıxışı ilə digər cihazın girişi arasındakı Ground (GND) bağlantısını izləməlidir

İnternet bağlantısı bir ehtiyacdır

Əslində burada seçiminiz var. Raspberry Pi -ni LAN kabeli və ya WIFI Bağlantısı üçün simsiz Nano USB Adaptoru ilə bağlaya bilərsiniz. Hər halda, manifest başa çatan internetə qoşulmaqdır.

Dövrün Gücü

Micro USB kabelini Raspberry Pi -nin elektrik prizinə qoşun. Zərbə və voila! Hər şey yaxşıdır və dərhal başlayacağıq.

Ekrana keçid

HDMI kabelini bir monitora və ya televizora bağlaya bilərik. Raspberry Pi -SSH istifadə edərək monitora qoşmadan daxil ola bilərik (Pi -nin əmr satırına başqa bir kompüterdən daxil olun). Bunun üçün PUTTY proqramından da istifadə edə bilərsiniz. Bu seçim qabaqcıl istifadəçilər üçündür, buna görə burada ətraflı məlumat verməyəcəyik.

Bir tənəzzül olacağını eşitdim, iştirak etməmək qərarına gəldim

Addım 3: Java -da Raspberry Pi Proqramlaşdırması

Java -da Raspberry Pi Proqramlaşdırma
Java -da Raspberry Pi Proqramlaşdırma

Raspberry Pi və BME280 Sensoru üçün Java Kodu. Github depomuzda mövcuddur.

Kodu işə salmadan əvvəl, Readme faylında verilən təlimatları oxuduğunuzdan və Raspberry Pi -ni ona uyğun olaraq qurduğunuzdan əmin olun. Bunu etmək üçün bir az vaxt lazım olacaq. Şəxsi hava stansiyası, xüsusi bir şəxs, klub, dərnək və ya hətta bir iş tərəfindən idarə olunan hava ölçmə cihazlarıdır. Şəxsi hava stansiyaları yalnız sahibinin zövqü və təhsili üçün işlədilə bilər, lakin bir çox fərdi hava stansiyası operatoru da məlumatları əl ilə toplayaraq yayaraq və ya internetdən və ya həvəskar radiodan istifadə edərək başqaları ilə paylaşır.

Kod təsəvvür edə biləcəyiniz ən sadə formadadır və onunla heç bir probleminiz olmamalı, ancaq olub olmadığını soruşmalısınız. Min şeyi bilsən də, yenə də biləndən soruş.

Bu sensor üçün işləyən java kodunu buradan da kopyalaya bilərsiniz.

// Azad iradə lisenziyası ilə paylanmışdır. // BME280 // Bu kod ControlEverything.com saytında mövcud olan BME280_I2CS I2C Mini Modulu ilə işləmək üçün hazırlanmışdır. //

com.pi4j.io.i2c. I2CBus idxal edin;

com.pi4j.io.i2c. I2CDevice idxal edin; com.pi4j.io.i2c. I2CFactory idxal edin; java.io. IOException idxal edin;

ictimai sinif BME280

{public static void main (String args ) istisnalar atır {// I2C avtobusu yaradın I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // I2C cihazı alın, BME280 I2C ünvanı 0x76 (108) I2CDevice device = bus.getDevice (0x76); // 0x88 (136) bayt b1 = yeni bayt [24] ünvanından 24 bayt məlumat oxuyun; device.read (0x88, b1, 0, 24); // Veriləri çevirin // temp əmsalları int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); əgər (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); əgər (dig_T3> 32767) {dig_T3 -= 65536; } // təzyiq əmsalları int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); əgər (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); əgər (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); əgər (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); əgər (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); əgər (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); əgər (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); əgər (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); əgər (dig_P9> 32767) {dig_P9 -= 65536; } // 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF) ünvanından 1 bayt məlumat oxuyun; // 0xE1 (225) device.read (0xE1, b1, 0, 7) ünvanından 7 bayt məlumat oxuyun; // Veriləri çevirin // rütubət əmsalları int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); əgər (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); əgər (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); əgər (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; əgər (dig_H6> 127) {dig_H6 -= 256; } // Nəzarət rütubət reyestrini seçin // Nəmlik dərəcəsi üzərində rütubət = 1 cihaz.write (0xF2, (byte) 0x01); // Nəzarət ölçmə reyestrini seçin // Normal rejim, nümunə götürmə sürəti üzərindəki temp və təzyiq = 1 cihaz. Yazın (0xF4, (bayt) 0x27); // Config register seçin // Stand_by time = 1000 ms device.write (0xF5, (byte) 0xA0); // 0xF7 (247) ünvanından 8 bayt məlumat oxuyun // təzyiq msb1, təzyiq msb, təzyiq lsb, temp msb1, temp msb, temp lsb, rütubət lsb, rütubət msb bayt data = yeni bayt [8]; device.read (0xF7, data, 0, 8); // Təzyiq və temperatur məlumatlarını 19 bit uzunluğuna çevirin adc_p = (((uzun) (data [0] & 0xFF) * 65536) + ((uzun) (data [1] & 0xFF) * 256) + (uzun) (məlumatlar [2] & 0xF0)) / 16; uzun adc_t = (((uzun) (data [3] & 0xFF) * 65536) + ((uzun) (data [4] & 0xFF) * 256) + (uzun) (data [5] & 0xF0)) / 16; // Nəmlik məlumatlarını uzun müddətə çevirin adc_h = ((uzun) (data [6] & 0xFF) * 256 + (uzun) (data [7] & 0xFF)); // Temperatur ofset hesablamaları ikiqat var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); cüt var2 = ((((cüt) adc_t) / 131072.0 - ((ikiqat) dig_T1) / 8192.0) * (((ikiqat) adc_t) /131072.0 - ((ikiqat) dig_T1) /8192.0)) * ((ikiqat) dig_T3); ikiqat t_fine = (uzun) (var1 + var2); ikiqat cTemp = (var1 + var2) / 5120.0; ikiqat fTemp = cTemp * 1.8 + 32; // Təzyiq ofset hesablamaları var1 = ((ikiqat) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((ikiqat) dig_P6) / 32768.0; var2 = var2 + var1 * ((ikiqat) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((ikiqat) dig_P4) * 65536.0); var1 = (((ikiqat) dig_P3) * var1 * var1 / 524288.0 + ((ikiqat) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((ikiqat) dig_P1); ikiqat p = 1048576.0 - (ikiqat) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((ikiqat) dig_P9) * p * p / 2147483648.0; var2 = p * ((ikiqat) dig_P8) / 32768.0; ikiqat təzyiq = (p + (var1 + var2 + ((ikiqat) dig_P7)) / 16.0) / 100; // Rütubət ofset hesablamaları ikiqat var_H = (((ikiqat) 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))); ikiqat rütubət = var_H * (1.0 - dig_H1 * var_H / 524288.0); əgər (rütubət> 100.0) {rütubət = 100.0; } başqa halda (rütubət <0.0) {rütubət = 0.0; } // Çıxış məlumatları System.out.printf ekranında ("Selsi temperaturu: %.2f C %n", cTemp); System.out.printf ("Fahrenheitdəki temperatur: %.2f F %n", fTemp); System.out.printf ("Təzyiq: %.2f hPa %n", təzyiq); System.out.printf ("Nisbi Nəmlik: %.2f %% RH %n", rütubət); }}

Addım 4: Kodun Praktikliyi

Kodun praktikliyi
Kodun praktikliyi

İndi kodu yükləyin (və ya git pull) və Raspberry Pi -də açın.

Kodu yığmaq və terminala yükləmək üçün əmrləri işlədin və Monitorda çıxışı görün. Bir neçə dəqiqədən sonra bütün parametrləri göstərəcək. Hamar bir kod keçidinə və sakit (iş) bir nəticə əldə etməyinizə əmin olaraq, əlavə dəyişikliklər etmək üçün daha çox fikir düşünürsünüz (Hər bir layihə bir hekayə ilə başlayır).

Addım 5: Konstruktiv dünyada istifadə

BME280 rütubət və təzyiq ölçümü tələb edən bütün tətbiqlərdə yüksək performans əldə edir. Bu ortaya çıxan tətbiqlər Kontekst Məlumatlandırmasıdır, məsələn. Dəri Algılama, Otaq Dəyişikliyi Algılama, Fitness Monitorinqi / Rifah, Quruluq və ya Yüksək İstiliklə əlaqədar Xəbərdarlıq, Həcm və Hava Axınının Ölçülməsi, Ev Otomasyonuna Nəzarət, Nəzarət Isıtması, Havalandırma, Kondisioner (HVAC), Əşyaların İnterneti (IoT), GPS Təkmilləşdirilməsi (məsələn, İlk Yeniləmə Vaxtında Təkmilləşdirmə, Ölü Hesablama, Yamac Algılama), Daxili Naviqasiya (Döşəmə Algılamasının Dəyişməsi, Asansörün Algılanması), Açıq Naviqasiya, İstirahət və İdman Tətbiqləri, Hava Proqnozu və Şaquli Sürət Göstəricisi (Yüksəliş/Sink) Sürət).

Addım 6: Nəticə

Gördüyünüz kimi, bu layihə aparat və proqram təminatının nəyə qadir olduqlarının möhtəşəm bir nümayişidir. Bir az vaxt ərzində belə təsir edici bir layihə qurmaq olar! Əlbəttə ki, bu yalnız başlanğıcdır. Avtomatlaşdırılmış Hava Limanı Şəxsi Hava İstasyonları kimi daha mürəkkəb bir Şəxsi Hava İstasyonu hazırlamaq, Anemometr (külək sürəti), Transmissiya (görünürlük), Piranometr (günəş radiasiyası) və s. Kimi daha çox sensoru əhatə edə bilər. Rasp Pi ilə I²C sensoru. I²C ünsiyyətinin nəticələrini və işini görmək həqiqətən heyrətamizdir. Bunu da yoxlayın. Bina qurmaq və öyrənməkdən zövq alın! Zəhmət olmasa bu öyrədici haqqında nə düşündüyünüzü bizə bildirin. Lazım gələrsə bəzi təkmilləşdirmələr etmək istərdik.

Tövsiyə: