Talaan ng mga Nilalaman:

Personal na Station ng Panahon ng Paggamit ng Raspberry Pi Sa BME280 sa Java: 6 Mga Hakbang
Personal na Station ng Panahon ng Paggamit ng Raspberry Pi Sa BME280 sa Java: 6 Mga Hakbang

Video: Personal na Station ng Panahon ng Paggamit ng Raspberry Pi Sa BME280 sa Java: 6 Mga Hakbang

Video: Personal na Station ng Panahon ng Paggamit ng Raspberry Pi Sa BME280 sa Java: 6 Mga Hakbang
Video: Bury Your Backup Servers Underground ⚰️ 2024, Hulyo
Anonim
Image
Image
Bill ng Mahalagang Kagamitan
Bill ng Mahalagang Kagamitan

Ang masamang panahon ay laging mas malala sa isang bintana

Palagi kaming naging interesado sa pagsubaybay sa aming lokal na panahon at kung ano ang nakikita namin sa bintana. Nais din namin ng mas mahusay na kontrol sa aming sistema ng pag-init at A / C. Ang pagbuo ng isang Personal na Panahon ng Panahon ay isang mahusay na karanasan sa pag-aaral. Kapag natapos mo ang pagbuo ng proyektong ito magkakaroon ka ng isang mas mahusay na pag-unawa sa kung paano gumagana ang mga wireless na komunikasyon, kung paano gumagana ang mga sensor, at kung gaano katindi ang platform ng Raspberry Pi. Sa proyektong ito bilang isang batayan at nakuhang karanasan, madali kang makakagawa ng mas kumplikadong mga proyekto sa hinaharap.

Hakbang 1: Bill ng Mahalagang Kagamitan

Bill ng Mahalagang Kagamitan
Bill ng Mahalagang Kagamitan
Bill ng Mahalagang Kagamitan
Bill ng Mahalagang Kagamitan
Bill ng Mahalagang Kagamitan
Bill ng Mahalagang Kagamitan

1. Isang Raspberry Pi

Ang unang hakbang ay upang makuha ang iyong mga kamay sa isang board na Raspberry Pi. Ang Raspberry Pi ay isang pinalakas na solong board computer ng Linux. Ang layunin nito ay upang mapabuti ang mga kasanayan sa programa at pag-unawa sa hardware. Mabilis itong pinagtibay ng mga hobbyist at mahilig sa electronics para sa mga makabagong proyekto.

2. I²C Shield para sa Raspberry Pi

Ang INPI2 (I2C adapter) ay nagbibigay ng Raspberry Pi 2/3 isang I²C port para magamit sa maraming mga I²C device. Magagamit ito sa Dcube Store

3. Digital Humidity, Pressure at Temperatura Sensor, BME280

Ang BME280 ay isang halumigmig, presyon at sensor ng temperatura na may mabilis na oras ng pagtugon at mataas na pangkalahatang kawastuhan. Binili namin ang sensor na ito mula sa Dcube Store

4. I²C Pagkonekta ng Cable

Mayroon kaming magagamit na pagkonekta na I²C na cable sa Dcube Store

5. Micro USB cable

Ang micro USB cable Power supply ay isang mainam na pagpipilian para sa pagpapatakbo ng Raspberry Pi.

6. Bigyang kahulugan ang Internet Access sa pamamagitan ng EthernetCable / WiFi Adapter

Isa sa mga unang bagay na nais mong gawin ay upang makakonekta ang iyong Raspberry Pi sa Internet. Maaari kaming kumonekta gamit ang isang Ethernet cable. Ang isa pang posibilidad ay maaari kang kumonekta sa isang wireless network gamit ang isang USB wireless Adapter.

7. HDMI Cable (Display & connectivity cable)

Anumang HDMI / DVI monitor at anumang TV ay dapat gumana bilang isang display para sa Pi. Ngunit opsyonal ito. Ang posibilidad ng remote na pag-access (tulad ng-SSH) ay hindi rin maaaring mapasyahan. Maaari ka ring makakuha ng pag-access gamit ang PUTTY software.

Hakbang 2: Mga Koneksyon sa Hardware para sa Pag-setup

Mga Koneksyon sa Hardware para sa Pag-setup
Mga Koneksyon sa Hardware para sa Pag-setup
Mga Koneksyon sa Hardware para sa Pag-setup
Mga Koneksyon sa Hardware para sa Pag-setup

Gawin ang circuit alinsunod sa ipinakita na eskematiko.

Habang natututo, nakuha namin nang lubusan ang mga pangunahing kaalaman sa electronics tungkol sa hardware at kaalaman sa software. Nais naming gumuhit ng isang simpleng iskemang electronics para sa proyektong ito. Ang mga elektronikong eskematiko ay tulad ng isang blueprint para sa electronics. Gumuhit ng isang blueprint at sundin nang mabuti ang disenyo. Nag-apply kami dito ng ilang mga pangunahing kaalaman sa electronics. Nakukuha ka ng lohika mula A hanggang B, dadalhin ka ng Imagination saanman!

Koneksyon ng Raspberry Pi at I²C Shield

Una sa lahat kunin ang Raspberry Pi at ilagay ang I²C Shield (na may Inward Facing I²C Port) dito. Dahan-dahang pindutin ang Shield sa mga GPIO pin ng Pi at tapos na kami sa hakbang na ito na kasing dali ng pie (tingnan ang larawan).

Koneksyon ng Sensor at Raspberry Pi

Kunin ang sensor at ikonekta ang I²C cable dito. Siguraduhin na ang I²C Output ALWAYS kumokonekta sa I²C Input. Ang pareho ay dapat sundin para sa Raspberry Pi na may kalasag I CC na naka-mount sa itaas nito ang mga GPIO pin. Mayroon kaming I²C Shield at ang mga nag-uugnay na mga kable sa aming panig bilang isang napakalaking kaluwagan at isang napakalaking kalamangan dahil naiwan lamang tayo sa pagpipilian sa plug and play. Wala nang isyu sa mga pin at kable at samakatuwid, nawala ang pagkalito. Isipin lamang ang iyong sarili sa web ng mga wires at papasok doon. Isang kaluwagan mula doon. Ginagawa nitong hindi kumplikado ang mga bagay.

Tandaan: Dapat laging sundin ng brown wire ang koneksyon ng Ground (GND) sa pagitan ng output ng isang aparato at ng pag-input ng ibang aparato

Ang Pagkakonekta sa Internet ay isang Kailangan

Mayroon kang pagpipilian dito talaga. Maaari mong ikonekta ang Raspberry Pi gamit ang LAN cable o ang wireless Nano USB Adapter para sa Pagkonekta ng WIFI. Alinmang paraan, ang manipest ay upang kumonekta sa internet kung saan nakamit.

Pagpapatakbo ng Circuit

I-plug ang Micro USB cable sa power jack ng Raspberry Pi. Punch up at voila! Lahat ng bagay ay mabuti upang pumunta at magsisimula agad kami.

Koneksyon sa Display

Maaari nating maiugnay ang HDMI cable sa isang monitor o isang TV. Maaari naming ma-access ang isang Raspberry Pi nang hindi ikonekta ito sa isang monitor gamit ang -SSH (I-access ang linya ng utos ng Pi mula sa isa pang computer). Maaari mo ring gamitin ang PUTTY software para doon. Ang pagpipiliang ito ay para sa mga advanced na gumagamit kaya hindi namin ito sasakupin nang detalyado dito.

Narinig kong magkakaroon ng pag-urong, napagpasyahan kong hindi lumahok

Hakbang 3: Pagprogram ng Raspberry Pi sa Java

Raspberry Pi Programming sa Java
Raspberry Pi Programming sa Java

Ang Java Code para sa Raspberry Pi at BME280 Sensor. Magagamit ito sa aming repository ngGithub.

Bago magpatuloy sa code, tiyaking nabasa mo ang mga tagubiling ibinigay sa Readme file at I-setup ang iyong Raspberry Pi alinsunod dito. Aabutin lamang ng ilang sandali upang magawa ito. Ang isang personal na istasyon ng panahon ay isang hanay ng mga instrumento sa pagsukat ng panahon na pinapatakbo ng isang pribadong indibidwal, club, asosasyon, o kahit na negosyo. Ang mga personal na istasyon ng panahon ay maaaring patakbuhin lamang para sa kasiyahan at edukasyon ng may-ari, ngunit maraming mga operator ng personal na istasyon ng panahon ang nagbabahagi din ng kanilang data sa iba, alinman sa pamamagitan ng manu-manong pag-iipon ng data at pamamahagi nito, o sa pamamagitan ng paggamit ng internet o amateur radio.

Ang code ay nasa pinakasimpleng form na maaari mong isipin at dapat kang walang isyu dito ngunit tanungin kung mayroon ka. Kahit na alam mo ang isang libong bagay, magtanong pa rin sa isang taong may alam.

Maaari mong kopyahin ang gumaganang java code para sa sensor na ito mula rito.

// Ipinamamahagi ng isang lisensyang malaya ang kalooban. // BME280 // Ang code na ito ay dinisenyo upang gumana sa BME280_I2CS I2C Mini Module na magagamit mula sa ControlEverything.com. //

import com.pi4j.io.i2c. I2CBus;

import com.pi4j.io.i2c. I2CDevice; import com.pi4j.io.i2c. I2CFactory; i-import ang java.io. IOException;

pampublikong klase BME280

{public static void main (String args ) nagtatapon ng Exception {// Lumikha ng I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Kumuha ng I2C aparato, ang address ng BME280 I2C ay 0x76 (108) I2CDevice aparato = bus.getDevice (0x76); // Basahin ang 24 bytes ng data mula sa address na 0x88 (136) byte b1 = bagong byte [24]; aparato.read (0x88, b1, 0, 24); // convert the data // temp coefficients int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); kung (dig_T2> 32767) {dig_T2 - = 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); kung (dig_T3> 32767) {dig_T3 - = 65536; } // coefficients ng presyon int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); kung (dig_P2> 32767) {dig_P2 - = 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); kung (dig_P3> 32767) {dig_P3 - = 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); kung (dig_P4> 32767) {dig_P4 - = 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); kung (dig_P5> 32767) {dig_P5 - = 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); kung (dig_P6> 32767) {dig_P6 - = 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); kung (dig_P7> 32767) {dig_P7 - = 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); kung (dig_P8> 32767) {dig_P8 - = 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); kung (dig_P9> 32767) {dig_P9 - = 65536; } // Basahin ang 1 byte ng data mula sa address na 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Basahin ang 7 bytes ng data mula sa address na 0xE1 (225) device.read (0xE1, b1, 0, 7); // I-convert ang data // coefficients ng halumigmig int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); kung (dig_H2> 32767) {dig_H2 - = 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); kung (dig_H4> 32767) {dig_H4 - = 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); kung (dig_H5> 32767) {dig_H5 - = 65536; } int dig_H6 = b1 [6] & 0xFF; kung (dig_H6> 127) {dig_H6 - = 256; } // Piliin ang kontrol sa rehistro ng kahalumigmigan // Humidity over sampling rate = 1 device.write (0xF2, (byte) 0x01); // Piliin ang rehistro sa pagsukat ng pagsukat // Karaniwang mode, temp at presyon sa paglipas ng sampling rate = 1 aparato. Magsulat (0xF4, (byte) 0x27); // Select config register // Stand_by time = 1000 ms device.write (0xF5, (byte) 0xA0); // Read 8 bytes of data from address 0xF7 (247) // pressure msb1, pressure msb, pressure lsb, temp msb1, temp msb, temp lsb, halumigmig lsb, halumigmig byb byte data = bagong byte [8]; aparato.read (0xF7, data, 0, 8); // I-convert ang data ng presyur at temperatura sa 19-bit na haba adc_p = ((((haba) (data [0] & 0xFF) * 65536) + ((haba) (data [1] & 0xFF) * 256) + (haba) (data [2] & 0xF0)) / 16; mahabang adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (haba) (data [5] & 0xF0)) / 16; // I-convert ang data ng kahalumigmigan mahabang adc_h = ((haba) (data [6] & 0xFF) * 256 + (haba) (data [7] & 0xFF)); // Temperature offset calculations double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); dobleng var2 = (((((doble) adc_t) / 131072.0 - ((doble) dig_T1) / 8192.0) * (((doble) adc_t) /131072.0 - ((doble) dig_T1) /8192.0)) * ((doble) dig_T3); dobleng t_fine = (haba) (var1 + var2); doble cTemp = (var1 + var2) / 5120.0; doble fTemp = cTemp * 1.8 + 32; // Mga kalkulasyon ng offset ng presyon var1 = ((doble) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((doble) dig_P6) / 32768.0; var2 = var2 + var1 * ((doble) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((doble) dig_P4) * 65536.0); var1 = ((((doble) dig_P3) * var1 * var1 / 524288.0 + ((doble) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((doble) dig_P1); doble p = 1048576.0 - (doble) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = (((doble) dig_P9) * p * p / 2147483648.0; var2 = p * ((doble) dig_P8) / 32768.0; dobleng presyon = (p + (var1 + var2 + ((doble) dig_P7)) / 16.0) / 100; // Humidity offset calculations dobleng var_H = ((((doble) 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))); dobleng kahalumigmigan = var_H * (1.0 - dig_H1 * var_H / 524288.0); kung (halumigmig> 100.0) {kahalumigmigan = 100.0; } iba pa kung (halumigmig <0.0) {halumigmig = 0.0; } // Data ng output upang i-screen ang System.out.printf ("Temperatura sa Celsius:%.2f C% n", cTemp); System.out.printf ("Temperatura sa Fahrenheit:%.2f F% n", fTemp); System.out.printf ("Presyon:%.2f hPa% n", presyon); System.out.printf ("Kamag-anak na Humidity:%.2f %% RH% n", halumigmig); }}

Hakbang 4: Ang Pagsasabuhay ng Code

Ang Pagsasagawa ng Code
Ang Pagsasagawa ng Code

Ngayon, i-download (o hilahin ang git) ang code at buksan ito sa Raspberry Pi.

Patakbuhin ang mga utos upang Magtipon at Mag-upload ng code sa terminal at makita ang output sa Monitor. Pagkatapos ng ilang sandali, i-screen nito ang lahat ng mga parameter. Tinitiyak na mayroon kang isang maayos na paglipat ng code at isang kalmado (ish) na resulta, nag-iisip ka ng maraming mga ideya upang gumawa ng karagdagang mga susog (Ang bawat proyekto ay nagsisimula sa isang Kuwento).

Hakbang 5: Paggamit sa Nakabubuo na Daigdig

Ang BME280 ay nakakamit ng mataas na pagganap sa lahat ng mga aplikasyon na nangangailangan ng halumigmig at pagsukat ng presyon. Ang mga umuusbong na application na ito ay Awtomatikong Konteksto, hal. Pagtuklas ng Balat, Pagtuklas sa Pagbabago ng Silid, Pagsubaybay sa Kalusugan / Kaayusan, Babala Tungkol sa Pagkatuyo o Mataas na Temperatura, Pagsukat ng Dami at Daloy ng Air, Pagkontrol sa Awtomatiko sa Bahay, Pagkainit ng Pagkontrol, Bentilasyon, Air Conditioning (HVAC), Internet of Things (IoT), Pagpapahusay ng GPS (hal. Pag-aayos ng Oras sa Unang Pag-ayos, Patay na Pagkuha, Pagtuklas ng Slope), Pag-navigate sa Looban (Pagbabago ng Pagtuklas sa Palapag, Pagtuklas ng Elevator), Pag-navigate sa Labas, Mga Application sa Libangan at Palakasan, Pagtataya ng Panahon At Pahiwatig ng Vertical Velocity (Rise / Sink Bilis)

Hakbang 6: Konklusyon

Tulad ng nakikita mo, ang proyektong ito ay isang mahusay na pagpapakita ng kung ano ang may kakayahang hardware at software. Sa kaunting dami ng oras, ang isa ay maaaring bumuo ng isang kahanga-hangang proyekto! Siyempre, ito ay isang simula lamang. Ang paggawa ng isang mas sopistikadong Personal na Panahon ng Panahon tulad ng Awtomatikong Paliparan Personal na Mga Panahon ng Panahon ay maaaring kasangkot sa ilang mas maraming mga sensor tulad ng Anemometer (bilis ng hangin), Transmissometer (kakayahang makita), Pyranometer (solar radiation) atbp Mayroon kaming isang tutorial sa video sa Youtube pagkakaroon ng pangunahing paggana ng I²C sensor na may Rasp Pi. Tunay na kamangha-manghang makita ang mga resulta at gumagana ng mga komunikasyon sa I²C. Suriin din ito Magsaya sa pagbuo at pag-aaral! Mangyaring ipaalam sa amin kung ano ang palagay mo sa itinuturo na ito. Gusto naming gumawa ng ilang mga pagpapabuti kung kinakailangan.

Inirerekumendang: