Mundarija:

Java -da BME280 yordamida Raspberry Pi -dan foydalanadigan shaxsiy ob -havo stantsiyasi: 6 qadam
Java -da BME280 yordamida Raspberry Pi -dan foydalanadigan shaxsiy ob -havo stantsiyasi: 6 qadam

Video: Java -da BME280 yordamida Raspberry Pi -dan foydalanadigan shaxsiy ob -havo stantsiyasi: 6 qadam

Video: Java -da BME280 yordamida Raspberry Pi -dan foydalanadigan shaxsiy ob -havo stantsiyasi: 6 qadam
Video: STM32. Урок 27. Метеостанция на LCD2004 и BME280 2024, Iyul
Anonim
Image
Image
Asosiy uskunalar hisobi
Asosiy uskunalar hisobi

Yomon ob -havo har doim derazadan yomonroq ko'rinadi

Biz har doim mahalliy ob -havo va derazadan nimani ko'rayotganimizni kuzatishga qiziqqanmiz. Shuningdek, biz isitish va konditsioner tizimimizni yaxshiroq nazorat qilishni xohladik. Shaxsiy ob -havo stantsiyasini qurish - bu katta tajriba. Ushbu loyihani qurishni tugatgandan so'ng, siz simsiz aloqa qanday ishlashini, sensorlar qanday ishlashini va Raspberry Pi platformasi qanchalik kuchli ekanligini yaxshiroq tushunasiz. Bu loyiha asos sifatida va to'plangan tajriba yordamida siz kelajakda murakkabroq loyihalarni osongina qura olasiz.

1 -qadam: asosiy uskunalar hisobi

Asosiy uskunalar hisobi
Asosiy uskunalar hisobi
Asosiy uskunalar hisobi
Asosiy uskunalar hisobi
Asosiy uskunalar hisobi
Asosiy uskunalar hisobi

1. Raspberry Pi

Birinchi qadam - Raspberry Pi taxtasida qo'lingizni olish. Raspberry Pi - bu Linux bilan ishlaydigan bitta taxtali kompyuter. Uning maqsadi - dasturlash ko'nikmalarini yaxshilash va apparatni tushunish. U tezda havaskorlar va elektronika ixlosmandlari tomonidan innovatsion loyihalar uchun qabul qilindi.

2. Raspberry Pi uchun I²C qalqoni

INPI2 (I2C adapteri) Raspberry Pi 2/3 va I²C portlarini bir nechta I²C qurilmalarida ishlatish uchun taqdim etadi. U Dcube do'konida mavjud

3. Raqamli namlik, bosim va harorat sensori, BME280

BME280 - namlik, bosim va harorat sensori, tez javob berish vaqti va umumiy aniqligi yuqori. Biz bu sensorni Dcube do'konidan sotib oldik

4. I²C ulanish kabeli

Bizda Dcube do'konida I²C ulanish kabeli bor edi

5. Micro USB kabeli

Micro USB kabeli Quvvat manbai Raspberry Pi -ni quvvatlantirish uchun ideal tanlovdir.

6. Internetga kirishni EthernetCable/WiFi adapteri orqali izohlang

Siz qilmoqchi bo'lgan birinchi narsalardan biri - Raspberry Pi -ni Internetga ulash. Biz Ethernet kabeli yordamida ulanishimiz mumkin. Yana bir imkoniyat shundaki, siz simsiz tarmoqqa USB simsiz adapter yordamida ulanishingiz mumkin.

7. HDMI kabeli (displey va ulanish kabeli)

Har qanday HDMI/DVI monitor va har qanday televizor Pi uchun displey sifatida ishlashi kerak. Lekin bu ixtiyoriy. Masofadan kirish (SSH kabi) imkoniyatini ham inkor etib bo'lmaydi. Siz PUTTY dasturi yordamida ham kirishingiz mumkin.

2 -qadam: O'rnatish uchun apparat ulanishlari

O'rnatish uchun apparat ulanishlari
O'rnatish uchun apparat ulanishlari
O'rnatish uchun apparat ulanishlari
O'rnatish uchun apparat ulanishlari

Ko'rsatilgan sxemaga muvofiq sxemani yarating.

O'rganish jarayonida biz elektronika asoslari va dasturiy ta'minot haqidagi bilimlarga ega bo'ldik. Biz ushbu loyiha uchun elektronikaning oddiy sxemasini tuzmoqchi edik. Elektron sxemalar elektronika sxemasiga o'xshaydi. Loyihani tuzing va dizaynga diqqat bilan amal qiling. Biz bu erda elektronikaning ba'zi asoslarini qo'lladik. Mantiq sizni Adan Bgacha oladi, Xayol sizni hamma joyga olib boradi!

Raspberry Pi va I²C qalqonining ulanishi

Birinchidan, Raspberry Pi -ni oling va I²C qalqonini (ichkariga qaragan I²C porti bilan) joylashtiring. Qalqonni GPIO pinlari ustidan sekin bosing va biz bu qadamni pirogdek oson bajaramiz (rasmga qarang).

Sensor va Raspberry Pi ulanishi

Sensorni oling va u bilan I²C kabelini ulang. I²C chiqishi har doim I²C kirishiga ulanganligiga ishonch hosil qiling. I²C qalqoni o'rnatilgan GPIO pinli Raspberry Pi uchun ham xuddi shunday qilish kerak, bizda I²C qalqoni va ulanish kabellari biz tomonda juda katta yengillik va juda katta ustunlikdir, chunki biz faqat ulash va ijro etish opsiyasi. Endi pinlar va simlar muammosi yo'q, shuning uchun chalkashliklar yo'qoldi. O'zingizni simlar tarmog'ida tasavvur qiling va bunga kiring. Bundan yengillik. Bu narsalarni murakkablashtirmaydi.

E'tibor bering: jigarrang sim har doim bitta qurilmaning chiqishi va boshqa qurilmaning kirishi o'rtasidagi Ground (GND) aloqasini kuzatishi kerak

Internetga ulanish - bu ehtiyoj

Sizda bu erda tanlov bor. Siz Raspberry Pi -ni LAN kabeli yoki WIFI -ga ulanish uchun simsiz Nano USB -adapter bilan ulashingiz mumkin. Qanday bo'lmasin, manifest - bu Internetga ulanish.

O'chirishning kuchi

Micro USB kabelini Raspberry Pi quvvat manbaiga ulang. Yumshat va voila! Hammasi yaxshi, biz darhol boshlaymiz.

Displeyga ulanish

HDMI kabelini monitor yoki televizorga ulashimiz mumkin. Biz Raspberry Pi -ga monitorga ulanmasdan kira olamiz -SSH (Pi -ning buyruq satriga boshqa kompyuterdan kiring). Buning uchun PUTTY dasturidan ham foydalanishingiz mumkin. Bu variant ilg'or foydalanuvchilar uchun mo'ljallangan, shuning uchun biz bu erda batafsil yoritmaymiz.

Men retsessiya bo'lishini eshitdim, qatnashmaslikka qaror qildim

3 -qadam: Java -da Raspberry Pi dasturlash

Java -da Raspberry Pi dasturlash
Java -da Raspberry Pi dasturlash

Raspberry Pi va BME280 sensori uchun Java kodi. U bizning Github omborida mavjud.

Kodga o'tishdan oldin, Readme faylida berilgan ko'rsatmalarni o'qiganingizga va Raspberry Pi -ni unga muvofiq sozlaganingizga ishonch hosil qiling. Buning uchun bir oz vaqt kerak bo'ladi. Shaxsiy ob-havo stantsiyasi-bu xususiy shaxs, klub, uyushma yoki hatto biznes tomonidan boshqariladigan ob-havo o'lchash asboblari to'plami. Shaxsiy ob -havo stantsiyalari faqat egasining zavqlanishi va o'qishi uchun ishlatilishi mumkin, lekin ko'plab shaxsiy meteorologik operatorlar o'z ma'lumotlarini boshqalarga ham qo'lda to'plash va tarqatish orqali, ham internet yoki havaskor radiodan foydalanish orqali ulashadilar.

Kod siz tasavvur qila oladigan eng sodda shaklda va sizda hech qanday muammo bo'lmasligi kerak, lekin bor yoki yo'qligini so'rang. Agar siz ming narsani bilsangiz ham, bilgan odamdan so'rang.

Bu sensor uchun ishlaydigan java kodini bu erdan ham ko'chirishingiz mumkin.

// Ixtiyoriy litsenziya bilan tarqatilgan. // BME280 // Bu kod ControlEverything.com saytida mavjud bo'lgan BME280_I2CS I2C Mini moduli bilan ishlash uchun mo'ljallangan. //

com.pi4j.io.i2c. I2CBus -ni import qilish;

com.pi4j.io.i2c. I2CDevice -ni import qilish; com.pi4j.io.i2c. I2CFactory -ni import qilish; java.io. IOException ni import qilish;

ommaviy sinf BME280

{public static void main (String args ) istisno qiladi {// I2C avtobusini yaratish I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // I2C qurilmasini oling, BME280 I2C manzili - 0x76 (108) I2CDevice device = bus.getDevice (0x76); // 0x88 (136) bayt b1 = yangi bayt [24] manzilidan 24 bayt ma'lumotlarni o'qing; device.read (0x88, b1, 0, 24); // Ma'lumotni aylantirish // temp koeffitsientlari int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); agar (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); agar (dig_T3> 32767) {dig_T3 -= 65536; } // bosim koeffitsientlari int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); agar (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); agar (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); agar (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); agar (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); agar (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); agar (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); agar (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); agar (dig_P9> 32767) {dig_P9 -= 65536; } // 0xA1 (161) int dig_H1 = ((bayt) device.read (0xA1) va 0xFF) manzilidan 1 bayt ma'lumotlarni o'qing; // 0xE1 (225) device.read (0xE1, b1, 0, 7) manzilidan 7 bayt ma'lumotni o'qing; // Ma'lumotni aylantirish // namlik koeffitsientlari int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); agar (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); agar (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); agar (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; agar (dig_H6> 127) {dig_H6 -= 256; } // Namlikni nazorat qilish registrini tanlang // Namlik olish tezligidan yuqori namlik = 1 device.write (0xF2, (bayt) 0x01); // Boshqaruv o'lchov registrini tanlang // Oddiy rejim, namuna olish tezligi ustidan harorat va bosim = 1 qurilma.yozish (0xF4, (bayt) 0x27); // Konfiguratsiya registrini tanlang // Kutish vaqti = 1000 ms qurilma. yozish (0xF5, (bayt) 0xA0); // 0xF7 (247) manzilidan 8 bayt ma'lumotlarni o'qing // bosim msb1, bosim msb, bosim lsb, temp msb1, temp msb, temp lsb, namlik lsb, namlik msb bayt ma'lumotlar = yangi bayt [8]; device.read (0xF7, ma'lumotlar, 0, 8); // Bosim va harorat ma'lumotlarini 19 bit uzunlikka aylantirish adc_p = (((uzun) (ma'lumotlar [0] & 0xFF) * 65536) + ((uzun) (ma'lumotlar [1] & 0xFF) * 256) + (uzun) (ma'lumotlar [2] & 0xF0)) / 16; uzoq adc_t = (((uzun) (ma'lumotlar [3] va 0xFF) * 65536) + ((uzun) (ma'lumotlar [4] va 0xFF) * 256) + (uzun) (ma'lumotlar [5] va 0xF0)) / 16; // Namlik ma'lumotlarini uzoqqa aylantiring adc_h = ((uzun) (ma'lumotlar [6] & 0xFF) * 256 + (uzun) (ma'lumotlar [7] & 0xFF)); // Haroratning ofset hisoblari er -xotin var1 = (((ikki barobar) adc_t) / 16384.0 - ((ikki baravar) dig_T1) / 1024.0) * ((ikki baravar) dig_T2); er -xotin var2 = ((((ikki barobar) adc_t) / 131072.0 - ((er -xotin) dig_T1) / 8192.0) * (); er -xotin t_fine = (uzun) (var1 + var2); er -xotin cTemp = (var1 + var2) / 5120.0; er -xotin fTemp = cTemp * 1.8 + 32; // Bosimning ofset hisoblari var1 = ((dubl) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((ikkita) dig_P6) / 32768.0; var2 = var2 + var1 * ((ikkita) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((er -xotin) dig_P4) * 65536.0); var1 = (((er -xotin) dig_P3) * var1 * var1 / 524288.0 + ((ikki baravar) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((er -xotin) dig_P1); er -xotin p = 1048576.0 - (er -xotin) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((er -xotin) dig_P9) * p * p / 2147483648.0; var2 = p * ((er -xotin) dig_P8) / 32768.0; er -xotin bosim = (p + (var1 + var2 + ((er -xotin) dig_P7))) / 16.0) / 100; // Namlik ofset hisoblari er -xotin var_H = (((er -xotin) 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))); ikki marta namlik = var_H * (1.0 - dig_H1 * var_H / 524288.0); if (namlik> 100,0) {namlik = 100,0; } if if (namlik <0.0) {namlik = 0.0; } // Ma'lumotlarni System.out.printf ekraniga chiqarish ("Selsiy bo'yicha harorat: %.2f C %n", cTemp); System.out.printf ("Farengeytdagi harorat: %.2f F %n", fTemp); System.out.printf ("Bosim: %.2f hPa %n", bosim); System.out.printf ("Nisbiy namlik: %.2f %% RH %n", namlik); }}

4 -qadam: Kodning amaliyligi

Kodeksning amaliyligi
Kodeksning amaliyligi

Endi kodni yuklab oling (yoki git pull) va uni Raspberry Pi -da oching.

Kodni kompilyatsiya qilish va terminalga yuklash buyruqlarini bajaring va monitorda chiqishni ko'ring. Bir necha daqiqadan so'ng, u barcha parametrlarni ko'rsatadi. Kodning silliq o'tishiga va xotirjam (ish) natijaga ega bo'lishingizga ishonch hosil qilib, siz qo'shimcha o'zgartirishlar kiritish uchun ko'proq g'oyalarni o'ylaysiz (har bir loyiha hikoyadan boshlanadi).

5 -qadam: Konstruktiv dunyoda foydalanish

BME280 namlik va bosimni o'lchashni talab qiladigan barcha ilovalarda yuqori ko'rsatkichlarga erishadi. Bu paydo bo'layotgan ilovalar Kontekst xabardorligi, masalan. Terini aniqlash, xonadagi o'zgarishlarni aniqlash, fitnesni kuzatish / farovonlik, quruqlik yoki yuqori harorat haqida ogohlantirish, tovush va havo oqimini o'lchash, uyni avtomatlashtirishni nazorat qilish, isitishni isitish, shamollatish, konditsionerlik (HVAC), narsalar Interneti (IoT), GPS-ni takomillashtirish (masalan, o'z vaqtida tuzatishni takomillashtirish, o'liklarni hisobga olish, qiyaliklarni aniqlash), ichki navigatsiya (polni aniqlash, liftni aniqlash), ochiq havoda navigatsiya, bo'sh vaqt va sport dasturlari, ob-havo ma'lumoti va vertikal tezlik ko'rsatkichi (ko'tarilish/cho'kish) Tezlik).

6 -qadam: Xulosa

Ko'rib turganingizdek, bu loyiha apparat va dasturiy ta'minot nimalarga qodirligini ajoyib namoyish etadi. Qisqa vaqt ichida shunday ta'sirli loyihani qurish mumkin! Albatta, bu faqat boshlanishi. Avtomatlashtirilgan aeroport shaxsiy ob -havo stantsiyalari kabi yanada murakkab shaxsiy ob -havo stantsiyasini yaratish Anemometr (shamol tezligi), transmissometr (ko'rish qobiliyati), piranometr (quyosh nurlari) va boshqalarni o'z ichiga olishi mumkin. Bizda Youtube -da video darslik mavjud, uning asosiy funktsiyalari bor. Rasp Pi bilan I²C sensori. I²C aloqa natijalari va ishlashini ko'rish juda ajoyib. Buni ham tekshirib ko'ring. Qurilish va o'qishdan zavqlaning! Iltimos, bu ko'rsatma haqida fikringizni bildiring. Agar kerak bo'lsa, biz ba'zi yaxshilanishlarni qilishni xohlaymiz.

Tavsiya: