Мазмұны:

Java -де BME280 көмегімен Raspberry Pi қолданатын жеке метеостанция: 6 қадам
Java -де BME280 көмегімен Raspberry Pi қолданатын жеке метеостанция: 6 қадам

Бейне: Java -де BME280 көмегімен Raspberry Pi қолданатын жеке метеостанция: 6 қадам

Бейне: Java -де BME280 көмегімен Raspberry Pi қолданатын жеке метеостанция: 6 қадам
Бейне: Reading temperature, humidity, pressure from BME280 Sensor with Java, Pi4J, I2C, SPI, JBang 2024, Қараша
Anonim
Image
Image
Негізгі құрал -жабдықтар туралы есеп
Негізгі құрал -жабдықтар туралы есеп

Нашар ауа райы әрқашан терезеден нашар көрінеді

Біз әрқашан жергілікті ауа -райы мен терезеден көргенімізді бақылап отыруға мүдделіміз. Біз сондай -ақ жылыту мен кондиционерлік жүйені бақылауды жақсартқымыз келді. Жеке метеорологиялық станция құру - бұл үлкен тәжірибе. Бұл жобаны құруды аяқтағаннан кейін сіз сымсыз байланыстың қалай жұмыс істейтінін, сенсорлардың қалай жұмыс істейтінін және Raspberry Pi платформасының қаншалықты қуатты екенін жақсы түсінетін боласыз. Бұл жобаның негізі және жинақталған тәжірибе арқасында сіз болашақта күрделі жобаларды оңай құра аласыз.

1 -қадам: Билл негізгі құралдар

Негізгі құрал -жабдықтар туралы есеп
Негізгі құрал -жабдықтар туралы есеп
Негізгі құрал -жабдықтар туралы есеп
Негізгі құрал -жабдықтар туралы есеп
Негізгі құрал -жабдықтар туралы есеп
Негізгі құрал -жабдықтар туралы есеп

1. Таңқурай Pi

Бірінші қадам - Raspberry Pi тақтасына қолыңызды тигізу. Raspberry Pi - бұл Linux -пен жұмыс істейтін бір тақталы компьютер. Оның мақсаты - бағдарламалау дағдыларын жетілдіру және аппараттық құралдарды түсіну. Оны әуесқойлар мен электроника әуесқойлары инновациялық жобаларға тез қабылдады.

2. Raspberry Pi үшін I²C қалқаны

INPI2 (I2C адаптері) Raspberry Pi 2/3 пен I²C портын бірнеше I²C құрылғыларымен пайдалануға мүмкіндік береді. Ол Dcube дүкенінде қол жетімді

3. Сандық ылғалдылық, қысым мен температура сенсоры, BME280

BME280 - ылғалдылық, қысым мен температура сенсоры, ол жылдам жауап беру уақыты мен жоғары дәлдікке ие. Біз бұл сенсорды Dcube дүкенінен сатып алдық

4. I²C қосылатын кабель

Бізде Dcube Store дүкенінде I²C қосқыш кабелі болды

5. Микро USB кабелі

Микро USB кабелі Қуат көзі - Raspberry Pi -ге қуат беру үшін тамаша таңдау.

6. Интернетке кіруді EthernetCable/WiFi адаптері арқылы түсіндіріңіз

Алдымен сіз Raspberry Pi -ді Интернетке қосқыңыз келеді. Біз Ethernet кабелі арқылы қосыла аламыз. Тағы бір мүмкіндік - USB сымсыз адаптері арқылы сымсыз желіге қосылу.

7. HDMI кабелі (Дисплей және байланыс кабелі)

Кез келген HDMI/DVI мониторы мен кез келген теледидар Pi үшін дисплей ретінде жұмыс істеуі керек. Бірақ бұл міндетті емес. Қашықтан кіру (SSH сияқты) мүмкіндігін де жоққа шығаруға болмайды. Сіз сондай -ақ PUTTY бағдарламалық жасақтамасы арқылы қол жеткізе аласыз.

2 -қадам: Орнату үшін аппараттық қосылымдар

Орнатуға арналған аппараттық қосылымдар
Орнатуға арналған аппараттық қосылымдар
Орнатуға арналған аппараттық қосылымдар
Орнатуға арналған аппараттық қосылымдар

Схеманы көрсетілген схемаға сәйкес жасаңыз.

Оқу барысында біз аппараттық және бағдарламалық қамтамасыз ету туралы электрониканың негізін толық меңгердік. Біз осы жобаның электроникасының қарапайым схемасын құрғымыз келді. Электрондық схемалар электрониканың сызбасы сияқты. Жобаны жасаңыз және дизайнды мұқият орындаңыз. Біз мұнда электрониканың кейбір негіздерін қолдандық. Логика сізді А -дан В -ға дейін жеткізеді, қиял сізді барлық жерге апарады!

Raspberry Pi мен I²C Shield қосылымы

Алдымен Raspberry Pi алыңыз және оған I²C қалқанын (ішке қарайтын I²C порты бар) қойыңыз. Қалқанды Pi GPIO түйреуіштерінің үстінен ақырын басыңыз, сонда біз бұл қадамды пирог сияқты оңай жасаймыз (суретті қараңыз).

Сенсор мен Raspberry Pi қосылуы

Сенсорды алыңыз және онымен I²C кабелін қосыңыз. I²C шығысы әрқашан I²C кірісіне қосылатынына көз жеткізіңіз. I²C экраны GPIO түйреуіштері орнатылған Raspberry Pi үшін де осылай істеу керек. Бізде I²C қалқаны мен қосқыш кабельдер бізде өте үлкен рельеф және өте үлкен артықшылық ретінде бар. қосу және ойнату опциясы. Енді түйреуіштер мен сымдар мәселесі болмайды, сондықтан шатасулар жойылады. Өзіңізді сымдардың торына елестетіп, оған кіріңіз. Бұдан жеңілдік. Бұл жағдайды қиындатады.

Ескертпе: қоңыр сым әрқашан бір құрылғының шығысы мен басқа құрылғының кірісі арасындағы Ground (GND) байланысын ұстануы керек

Интернетке қосылу - бұл қажеттілік

Бұл жерде сізде таңдау бар. Сіз Raspberry Pi -ді LAN кабелімен немесе WIFI байланысы үшін сымсыз Nano USB адаптерімен қосуға болады. Қалай болғанда да, манифест - бұл Интернетке қосылу.

Электр тізбегінің қуаты

Micro USB кабелін Raspberry Pi қуат ұясына қосыңыз. Соққы және воила! Барлығы жақсы, біз бірден бастаймыз.

Дисплейге қосылу

Біз HDMI кабелін мониторға немесе теледидарға қосамыз. Біз Raspberry Pi -ге мониторға қосылмай -SSH көмегімен кіре аламыз (Pi компьютерінің пәрмен жолына басқа компьютерден кіріңіз). Ол үшін PUTTY бағдарламалық жасақтамасын қолдануға болады. Бұл опция озық пайдаланушыларға арналған, сондықтан біз оны егжей -тегжейлі қарастырмаймыз.

Мен рецессия болады деп естідім, мен қатысудан бас тарттым

3 -қадам: Java -де Raspberry Pi бағдарламалау

Java -де Raspberry Pi бағдарламалау
Java -де Raspberry Pi бағдарламалау

Raspberry Pi және BME280 сенсорының Java коды. Ол біздің Github репозиторийінде қол жетімді.

Кодқа өтпес бұрын, Readme файлында берілген нұсқауларды оқығаныңызға және оған сәйкес Raspberry Pi орнатыңыз. Мұны істеу үшін бір минут қажет. Жеке метеостанция-бұл жеке адам, клуб, ассоциация немесе тіпті бизнес басқаратын ауа райын өлшейтін құралдар жиынтығы. Дербес метеостанцияларды тек иесінің ләззат алуы мен білім алуы үшін пайдалануға болады, бірақ көптеген жеке метеостанция операторлары деректерді қолмен жинау және тарату арқылы немесе интернет немесе әуесқойлық радио арқылы басқалармен бөліседі.

Код сіз ойлағандай қарапайым түрде және сізде ешқандай мәселе болмауы керек, бірақ бар ма деп сұраңыз. Мың нәрсені білсең де, білетін адамнан сұра.

Сіз осы сенсордың жұмыс істейтін java кодын осы жерден көшіре аласыз.

// Ерікті лицензиямен таратылады.// Егер сіз онымен байланысты жұмыстардың лицензиясына сәйкес келсе, оны өзіңіз қалаған түрде пайдаланыңыз немесе тегін пайдаланыңыз. // BME280 // Бұл код ControlEverything.com сайтынан қол жетімді BME280_I2CS I2C шағын модулімен жұмыс істеуге арналған. //

com.pi4j.io.i2c. I2CBus импорттау;

com.pi4j.io.i2c. I2CDevice импорттау; com.pi4j.io.i2c. I2CFactory импорттау; java.io. IOException импорттау;

қоғамдық сынып BME280

{public static void main (String args ) ерекше жағдайларды шығарады {// I2C шинасын жасаңыз I2CBus шинасы = I2CFactory.getInstance (I2CBus. BUS_1); // I2C құрылғысын алыңыз, BME280 I2C мекенжайы - 0x76 (108) I2CDevice device = bus.getDevice (0x76); // 0x88 (136) адресінен 24 байт деректерді оқу b1 = жаңа байт [24]; device.read (0x88, b1, 0, 24); // Деректерді түрлендіру // temp коэффициенттері int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); егер (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); егер (dig_T3> 32767) {dig_T3 -= 65536; } // қысым коэффициенттері int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); егер (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); егер (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); егер (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); егер (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); егер (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); егер (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); егер (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); егер (dig_P9> 32767) {dig_P9 -= 65536; } // 0xA1 (161) int dig_H1 = ((байт) device.read (0xA1) & 0xFF) адресінен 1 байт деректерді оқу; // 0xE1 (225) device.read (0xE1, b1, 0, 7) адресінен 7 байт деректерді оқу; // Деректерді түрлендіру // ылғалдылық коэффициенттері int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); егер (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); егер (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); егер (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; егер (dig_H6> 127) {dig_H6 -= 256; } // Бақылаудың ылғалдылық регистрін таңдау // Ылғалдылықтың іріктеу жылдамдығынан = 1 device.write (0xF2, (байт) 0x01); // Басқару өлшеу регистрін таңдау // Қалыпты режим, температура мен қысым іріктеу жылдамдығынан = 1 құрылғы.жазу (0xF4, (байт) 0x27); // Конфигурация регистрін таңдау // Күту уақыты = 1000 мс device.write (0xF5, (байт) 0xA0); // 0xF7 (247) адресінен 8 байт деректерді оқу // қысым msb1, қысым msb, қысым lsb, temp msb1, temp msb, temp lsb, ылғалдылық lsb, ылғалдылық msb байт деректер = жаңа байт [8]; device.read (0xF7, деректер, 0, 8); // Қысым мен температура туралы мәліметтерді 19 биттікке түрлендіру adc_p = (((ұзақ) (деректер [0] & 0xFF) * 65536) + ((ұзын) (деректер [1] & 0xFF) * 256) + (ұзын) (деректер [2] & 0xF0)) / 16; long adc_t = (((ұзақ) (деректер [3] & 0xFF) * 65536) + ((ұзын) (деректер [4] & 0xFF) * 256) + (ұзын) (деректер [5] & 0xF0)) / 16; // Ылғалдылық деректерін ұзақ түрлендіру adc_h = ((ұзақ) (деректер [6] & 0xFF) * 256 + (ұзын) (деректер [7] & 0xFF)); // Температураның ығысуы бойынша есептеулер қос var1 = (((қос) adc_t) / 16384.0 - ((қос) dig_T1) / 1024.0) * ((қос) dig_T2); қос var2 = ((((қос) adc_t) / 131072.0 - ((қос) dig_T1) / 8192.0) * (((қос) adc_t) /131072.0 - ((қос) dig_T1) /8192.0)) * ((қос) dig_T3); қос t_fine = (ұзын) (var1 + var2); қос cTemp = (var1 + var2) / 5120.0; қос fTemp = cTemp * 1.8 + 32; // Қысымның ығысуы бойынша есептеулер var1 = ((double) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((қос) dig_P6) / 32768.0; var2 = var2 + var1 * ((қос) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((қос) dig_P4) * 65536.0); var1 = (((қос) dig_P3) * var1 * var1 / 524288.0 + ((қос) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((қос) dig_P1); қос p = 1048576.0 - (қос) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((қос) dig_P9) * p * p / 2147483648.0; var2 = p * ((қос) dig_P8) / 32768.0; қос қысым = (p + (var1 + var2 + ((қос) dig_P7))) / 16.0) / 100; // Ылғалдылықты есепке алу еселенген var_H = (((қос) 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))); қос ылғалдылық = var_H * (1.0 - dig_H1 * var_H / 524288.0); if (ылғалдылық> 100,0) {ылғалдылық = 100,0; } else if (ылғалдылық <0.0) {ылғалдылық = 0.0; } // Деректерді шығару System.out.printf экранына («Цельсий бойынша температура: %.2f C %n», cTemp); System.out.printf («Фаренгейт температурасы: %.2f F %n», fTemp); System.out.printf («Қысым: %.2f hPa %n», қысым); System.out.printf («Салыстырмалы ылғалдылық: %.2f %% RH %n», ылғалдылық); }}

4 -қадам: Кодекстің қолданылуы

Кодекстің тиімділігі
Кодекстің тиімділігі

Енді кодты жүктеңіз (немесе git pull) және оны Raspberry Pi -де ашыңыз.

Терминалда кодты құрастыру және жүктеу пәрмендерін іске қосыңыз және монитордағы шығуды қараңыз. Бірнеше минуттан кейін ол барлық параметрлерді көрсетеді. Сізде кодтың біркелкі ауысуы мен тыныш нәтиже беретініне көз жеткізу үшін сіз қосымша түзетулер енгізу үшін көбірек идеялар ойлайсыз (әр жоба әңгімеден басталады).

5 -қадам: Конструктивті әлемде қолдану

BME280 ылғалдылық пен қысымды өлшеуді қажет ететін барлық қосымшаларда жоғары өнімділікке қол жеткізеді. Бұл жаңадан пайда болған қосымшалар - бұл контекст туралы ақпарат, мысалы. Теріні анықтау, бөлменің өзгеруін анықтау, фитнес мониторингі / әл-ауқаты, құрғақтық немесе жоғары температураға қатысты ескерту, дыбыс пен ауа ағынының өлшенуі, үйді автоматтандыруды бақылау, жылытуды басқару, желдету, кондиционерлеу (HVAC), заттар интернеті (IoT), GPS-ті жақсарту (мысалы, уақытты бірінші рет түзету, өлікті есепке алу, көлбеуді анықтау), үй ішінде навигация (еденді анықтауды өзгерту, лифтті анықтау), ашық навигация, демалыс және спорттық қосымшалар, ауа райы болжамы және тік жылдамдық көрсеткіші (көтерілу/батып кету) Жылдамдық).

6 -қадам: Қорытынды

Көріп отырғаныңыздай, бұл жоба - бұл аппараттық және бағдарламалық қамтамасыз етудің қабілетті екендігінің керемет көрінісі. Аз уақыттың ішінде осындай әсерлі жобаны құруға болады! Әрине, бұл бастамасы ғана. Автоматтандырылған әуежайдың жеке метеостанциялары сияқты неғұрлым күрделі жеке метеостанцияны құру анемометр (жел жылдамдығы), трансмиссияометр (көріну), пиранометр (күн радиациясы) және тағы басқалар сияқты сенсорларды қамтуы мүмкін. Бізде Youtube -те негізгі функциясы бар бейне сабақ бар. Rasp Pi бар I²C сенсоры. I²C байланысының нәтижесі мен жұмысын көру өте керемет. Оны да тексеріңіз. Құрылыста және оқуда көңілді болыңыз! Бұл нұсқаулық туралы не ойлайтыныңызды бізге айтыңыз. Қажет болса, біз кейбір жақсартуларды енгізгіміз келеді.

Ұсынылған: