Բովանդակություն:

Անձնական եղանակային կայան ՝ օգտագործելով Raspberry Pi- ն BME280- ով Java- ում. 6 քայլ
Անձնական եղանակային կայան ՝ օգտագործելով Raspberry Pi- ն BME280- ով Java- ում. 6 քայլ

Video: Անձնական եղանակային կայան ՝ օգտագործելով Raspberry Pi- ն BME280- ով Java- ում. 6 քայլ

Video: Անձնական եղանակային կայան ՝ օգտագործելով Raspberry Pi- ն BME280- ով Java- ում. 6 քայլ
Video: Ինչպես Գարուն Boot աշխատում եւ ինչ է ավտո-կոնֆիգուրացիա. Կախարդական? 2024, Նոյեմբեր
Anonim
Image
Image
Հիմնական սարքավորումների հաշիվ
Հիմնական սարքավորումների հաշիվ

Վատ եղանակը միշտ ավելի վատ տեսք ունի պատուհանից:

Մենք միշտ շահագրգռված ենք եղել վերահսկել մեր տեղական եղանակը և այն, ինչ տեսնում ենք պատուհանից: Մենք նաև ցանկանում էինք ավելի լավ վերահսկել մեր ջեռուցման և օդորակման համակարգը: Անձնական եղանակային կայանի կառուցումը ուսուցման հիանալի փորձ է: Այս նախագծի կառուցումն ավարտելուց հետո ավելի լավ կհասկանաք, թե ինչպես են աշխատում անլար հաղորդակցությունները, ինչպես են աշխատում սենսորները և որքան հզոր կարող է լինել Raspberry Pi հարթակը: Այս նախագիծը որպես հիմք և ձեռք բերված փորձը, դուք կկարողանաք հեշտությամբ կառուցել ավելի բարդ նախագծեր ապագայում:

Քայլ 1: Հիմնական սարքավորումների հաշիվ

Հիմնական սարքավորումների հաշիվ
Հիմնական սարքավորումների հաշիվ
Հիմնական սարքավորումների հաշիվ
Հիմնական սարքավորումների հաշիվ
Հիմնական սարքավորումների հաշիվ
Հիմնական սարքավորումների հաշիվ

1. Ազնվամորի Պի

Առաջին քայլն այն է, որ ձեր ձեռքերը հասնեն Raspberry Pi տախտակին: Raspberry Pi- ն Linux- ով աշխատող մեկ տախտակ ունեցող համակարգիչ է: Դրա նպատակն է բարելավել ծրագրավորման հմտությունները և ապարատային ընկալումը: Այն արագորեն ընդունվեց նորարարական նախագծերի համար զբաղվողների և էլեկտրոնիկայի սիրահարների կողմից:

2. I²C Shield ազնվամորի Pi- ի համար

INPI2- ը (I2C ադապտեր) ապահովում է Raspberry Pi 2/3 և I²C պորտը I²C բազմաթիվ սարքերի հետ օգտագործելու համար: Այն հասանելի է Dcube Store- ում

3. Թվային խոնավության, ճնշման և ջերմաստիճանի ցուցիչ, BME280

BME280- ը խոնավության, ճնշման և ջերմաստիճանի ցուցիչ է, որն ունի արագ արձագանքման ժամանակ և ընդհանուր բարձր ճշգրտություն: Այս սենսորը մենք գնել ենք Dcube Store- ից

4. I²C միացնող մալուխ

Մենք ունեինք I²C միացման մալուխ, որը հասանելի էր Dcube Store- ում

5. Միկրո USB մալուխ

Միկրո USB մալուխ Էլեկտրամատակարարումը իդեալական ընտրություն է Raspberry Pi- ի սնուցման համար:

6. Մեկնաբանել ինտերնետ հասանելիությունը EthernetCable/WiFi ադապտերի միջոցով

Առաջին բաներից մեկը, որ կցանկանաք անել, դա ձեր Raspberry Pi- ի ինտերնետին միացումն է: Մենք կարող ենք միանալ Ethernet մալուխի միջոցով: Մեկ այլ հնարավորություն այն է, որ դուք կարող եք միանալ անլար ցանցին ՝ օգտագործելով USB անլար ադապտեր:

7. HDMI մալուխ (ցուցադրման և միացման մալուխ)

HDանկացած HDMI/DVI մոնիտոր և ցանկացած հեռուստատեսություն պետք է աշխատեն որպես ցուցադրում Pi- ի համար: Բայց դա ընտրովի չէ: Հեռավոր մուտքի (նման-SSH) հնարավորությունը նույնպես չի կարող բացառվել: Կարող եք նաև մուտք գործել PUTTY ծրագրակազմով:

Քայլ 2: Կարգավորման սարքավորումների միացումներ

Կարգավորման սարքավորումների միացումներ
Կարգավորման սարքավորումների միացումներ
Կարգավորման սարքավորումների միացումներ
Կարգավորման սարքավորումների միացումներ

Կատարեք սխեման, ինչպես ցույց է տրված սխեմատիկ:

Սովորելիս մենք մանրամասնորեն ծանոթացանք էլեկտրոնիկայի հիմունքներին `կապված ապարատային և ծրագրային ապահովման գիտելիքների հետ: Մենք ցանկանում էինք այս նախագծի համար կազմել էլեկտրոնիկայի պարզ սխեմատիկա: Էլեկտրոնային սխեմաները նման են էլեկտրոնիկայի նախագծին: Մշակեք նախագիծ և ուշադիր հետևեք ձևին: Մենք այստեղ կիրառել ենք էլեկտրոնիկայի որոշ հիմունքներ: Տրամաբանությունը ձեզ տանում է A- ից B, երևակայությունը կտանի ձեզ ամենուր:

Raspberry Pi- ի և I²C Shield- ի միացում

Առաջին հերթին վերցրեք Raspberry Pi- ն և դրա վրա տեղադրեք I²C Shield (Inward Facing I²C Port- ով): Մեղմորեն սեղմեք Shield- ը Pi- ի GPIO կապում, և մենք այս քայլը կատարեցինք նույնքան հեշտ, որքան կարկանդակը (տես նկարը):

Սենսորային և ազնվամորու Pi- ի միացում

Վերցրեք սենսորը և միացրեք I²C մալուխը դրա հետ: Համոզվեք, որ I²C ելքը ՄԻՇՏ միանում է I²C մուտքին: Նույնը պետք է հետևել Raspberry Pi- ի համար, երբ դրա վրա տեղադրված է I²C վահանը GPIO կապում: Մենք ունենք I²C Shield և միացնող մալուխները մեր կողմից ՝ որպես շատ մեծ օգնություն և շատ մեծ առավելություն, քանի որ մեզ մնում է միայն plug and play տարբերակ: Այլևս քորոցների և էլեկտրագծերի խնդիր չկա, և, հետևաբար, խառնաշփոթը վերացել է: Պարզապես պատկերացրեք ինքներդ ձեզ լարերի ցանցում և մտեք դրա մեջ: Դրանից թեթևացում: Սա ամեն ինչ բարդացնում է:

Նշում. Շագանակագույն մետաղալարը միշտ պետք է հետևի Ground (GND) կապին մի սարքի ելքի և մեկ այլ սարքի մուտքի միջև:

Ինտերնետ կապը անհրաժեշտություն է

Դուք իրականում այստեղ ընտրություն ունեք: Դուք կարող եք միացնել Raspberry Pi- ն LAN մալուխով կամ անլար Nano USB ադապտերով WIFI միացման համար: Ամեն դեպքում, մանիֆեստը կայացած ինտերնետին միանալն է:

Շղթայի սնուցումը

Միացրեք Micro USB մալուխը Raspberry Pi- ի սնուցման վարդակին: Unchարճացրեք և վոիլա: Ամեն ինչ լավ է, և մենք անմիջապես կսկսենք:

Միացում ցուցադրման հետ

Մենք կարող ենք կամ HDMI մալուխը միացնել մոնիտորին կամ հեռուստացույցին: Մենք կարող ենք մուտք գործել Raspberry Pi ՝ առանց այն մոնիտորին միացնելու -SSH- ի միջոցով (մուտք գործեք Pi- ի հրամանի տող այլ համակարգչից): Դրա համար կարող եք օգտագործել նաև PUTTY ծրագրակազմը: Այս տարբերակը առաջադեմ օգտվողների համար է, այնպես որ մենք այն մանրամասն չենք լուսաբանի այստեղ:

Ես լսել եմ, որ անկում է լինելու, որոշեցի չմասնակցել:

Քայլ 3: Raspberry Pi ծրագրավորում Java- ում

Raspberry Pi ծրագրավորում Java- ում
Raspberry Pi ծրագրավորում Java- ում

Raspberry Pi- ի և BME280 ցուցիչի համար Java կոդը: Այն հասանելի է մերGithub շտեմարանում:

Նախքան ծածկագրին անցնելը, համոզվեք, որ կարդացել եք Readme ֆայլում տրված հրահանգները և ըստ դրա կարգավորեք ձեր Raspberry Pi- ն: Դա անելու համար կպահանջվի ընդամենը մի պահ: Անձնական եղանակային կայանը եղանակի չափման գործիքների շարք է, որոնք աշխատում են մասնավոր անձի, ակումբի, ասոցիացիայի կամ նույնիսկ բիզնեսի կողմից: Անձնական եղանակային կայանները կարող են գործել բացառապես սեփականատիրոջ հաճույքի և կրթության համար, սակայն շատ անհատ օդերևութաբանական կայանների օպերատորները նույնպես կիսում են իրենց տվյալները մյուսների հետ ՝ դրանք ձեռքով կազմելով և տարածելով, կամ ինտերնետի կամ սիրողական ռադիոյի միջոցով:

Կոդն ամենապարզ ձևն է, որը կարող եք պատկերացնել, և դրա հետ կապված որևէ խնդիր չպետք է ունենաք, այլ հարցրեք, թե արդյոք ունեք: Նույնիսկ եթե դուք հազար բան գիտեք, միևնույն է հարցրեք մեկին, ով գիտի:

Այս սենսորի համար կարող եք պատճենել աշխատանքային java ծածկագիրը նաև այստեղից:

// Տարածված է ազատ կամքի լիցենզիայի միջոցով: // BME280 // Այս կոդը նախատեսված է BME280_I2CS I2C մինի մոդուլի հետ աշխատելու համար, որը հասանելի է ControlEverything.com կայքում: //

ներմուծել com.pi4j.io.i2c. I2CBus;

ներմուծել com.pi4j.io.i2c. I2CD սարք; ներմուծել com.pi4j.io.i2c. I2CFactory; ներմուծում java.io. IOException;

հանրային դաս BME280

{public static void main (String args ) նետում է Բացառություն {// Ստեղծել I2C ավտոբուս I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Ստացեք I2C սարք, BME280 I2C հասցեն ՝ 0x76 (108) I2CD սարքի սարք = bus.getDevice (0x76); // Կարդացեք 24 բայթ տվյալներ 0x88 (136) բայթ հասցեից b1 = նոր բայթ [24]; device.read (0x88, b1, 0, 24); // Փոխարկել տվյալները // ջերմաստիճանի գործակիցները 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; } // Կարդացեք 1 բայթ տվյալներ 0xA1 (161) հասցեից int dig_H1 = ((բայթ) device.read (0xA1) & 0xFF); // Կարդացեք 7 բայթ տվյալներ 0xE1 (225) սարքի հասցեից: կարդալ (0xE1, b1, 0, 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 սարք. Գրել (0xF2, (բայթ) 0x01); // Ընտրել հսկիչ չափման գրանցամատյան // Նորմալ ռեժիմ, ջերմաստիճան և ճնշում ընտրանքի արագության նկատմամբ = 1 սարք: գրել (0xF4, (բայթ) 0x27); // Ընտրեք config register // Stand_by time = 1000 ms device.write (0xF5, (byte) 0xA0); // Կարդացեք 8 բայթ տվյալներ 0xF7 (247) հասցեից // ճնշում msb1, ճնշում msb, ճնշում lsb, ջերմաստիճան msb1, temp msb, temp lsb, խոնավություն lsb, խոնավություն msb բայթ տվյալներ = նոր բայթ [8]; device.read (0xF7, տվյալներ, 0, 8); // pressureնշման և ջերմաստիճանի տվյալները փոխարկեք 19 բիթ երկարության adc_p = (((երկար) (տվյալներ [0] & 0xFF) * 65536) + ((երկար) (տվյալներ [1] և 0xFF) * 256) + (երկար) (տվյալներ [2] & 0xF0)) / 16; երկար adc_t = (((երկար) (տվյալներ [3] և 0xFF) * 65536) + ((երկար) (տվյալներ [4] և 0xFF) * 256) + (երկար) (տվյալներ [5] և 0xF0)) / 16; // Փոխակերպեք խոնավության տվյալները երկար adc_h = ((երկար) (տվյալները [6] & 0xFF) * 256 + (երկար) (տվյալները [7] & 0xFF)); // Temերմաստիճանի փոխհատուցման հաշվարկներ կրկնակի 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; // Pressնշման փոխհատուցման հաշվարկներ var1 = ((կրկնակի) 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); եթե (խոնավություն> 100.0) {խոնավություն = 100.0; } else if (խոնավություն <0.0) {խոնավություն = 0.0; } // Մուտքագրեք տվյալները System.out.printf էկրանին («elsերմաստիճանը Celsius: %.2f C %n», cTemp); System.out.printf («Fերմաստիճանը Ֆարենհայտում ՝ %.2f F %n», fTemp); System.out.printf ("Pressնշում. %.2f hPa %n", ճնշում); System.out.printf ("Հարաբերական խոնավություն. %.2f %% RH %n", խոնավություն); }}

Քայլ 4: Կոդի գործնականություն

Կոդի գործնականությունը
Կոդի գործնականությունը

Այժմ, ներբեռնեք (կամ git pull) ծածկագիրը և բացեք այն Raspberry Pi- ում:

Գործարկեք տերմինալում կոդը կազմելու և վերբեռնելու հրամանները և տեսեք արտադրանքը Մոնիտորի վրա: Մի քանի պահից այն կցուցադրի բոլոր պարամետրերը: Ապահովելով, որ դուք ունեք կոդի սահուն անցում և հանգիստ (նախկին) արդյունք, դուք ավելի շատ գաղափարներ եք մտածում հետագա փոփոխություններ կատարելու համար (Յուրաքանչյուր նախագիծ սկսվում է պատմությամբ):

Քայլ 5: Օգտագործումը կառուցողական աշխարհում

BME280- ը բարձր արդյունավետության է հասնում բոլոր այն ծրագրերում, որոնք պահանջում են խոնավության և ճնշման չափում: Այս ի հայտ եկող ծրագրերն են Համատեքստի իրազեկումը, օրինակ. Մաշկի հայտնաբերում, սենյակի փոփոխության հայտնաբերում, Ֆիթնեսի մոնիտորինգ / բարեկեցություն, Չորության կամ բարձր ջերմաստիճանի վերաբերյալ նախազգուշացում, umeավալի և օդի հոսքի չափում, Տան ավտոմատացման հսկողություն, Heեռուցման հսկողություն, օդափոխություն, օդորակիչ (HVAC), Իրերի ինտերնետ (IoT), GPS- ի բարելավում (օրինակ ՝ ժամանակի առաջին ուղղման բարելավում, մեռած հաշվարկ, լանջի հայտնաբերում), ներքին նավարկություն (հատակի հայտնաբերման փոփոխություն, վերելակի հայտնաբերում), բացօթյա նավարկություն, ժամանցի և սպորտային ծրագրեր, եղանակի կանխատեսում և ուղղահայաց արագության ցուցում (բարձրացում/սուզվել Արագություն):

Քայլ 6: Եզրակացություն

Ինչպես տեսնում եք, այս նախագիծը հիանալի ցուցադրում է, թե ինչի են ընդունակ ապարատային և ծրագրային ապահովումները: Փոքր ժամանակում կարելի է կառուցել նման տպավորիչ նախագիծ: Իհարկե, սա դեռ սկիզբն է: Ավելի բարդ Անձնական եղանակային կայան ստեղծելը, ինչպիսին է Օդանավակայանի ավտոմատացված Անձնական եղանակային կայանները, կարող են ներառել ևս մի քանի սենսորներ, ինչպիսիք են ՝ անեմոմետրը (քամու արագությունը), հաղորդիչը (տեսանելիությունը), պիրանոմետրը (արևային ճառագայթում) և այլն: I²C ցուցիչ Rasp Pi- ով: Իրոք զարմանալի է տեսնել I²C հաղորդակցության արդյունքներն ու աշխատանքը: Ստուգեք նաև այն: Haveվարճացեք կառուցելով և սովորելով: Խնդրում ենք մեզ տեղեկացնել, թե ինչ եք կարծում այս ուսանելիի մասին: Անհրաժեշտության դեպքում մենք կցանկանայինք կատարելագործումներ կատարել:

Խորհուրդ ենք տալիս: