Sisällysluettelo:

Henkilökohtainen sääasema Raspberry Pi: n avulla BME280: n kanssa Javassa: 6 vaihetta
Henkilökohtainen sääasema Raspberry Pi: n avulla BME280: n kanssa Javassa: 6 vaihetta

Video: Henkilökohtainen sääasema Raspberry Pi: n avulla BME280: n kanssa Javassa: 6 vaihetta

Video: Henkilökohtainen sääasema Raspberry Pi: n avulla BME280: n kanssa Javassa: 6 vaihetta
Video: Guardians in the Wilderness: Joey & Shannon Hodgson's Journey as Remote Forest Fire Tower Lookouts 2024, Heinäkuu
Anonim
Image
Image
Lasku olennaisista laitteista
Lasku olennaisista laitteista

Huono sää näyttää aina pahemmalta ikkunan läpi

Olemme aina olleet kiinnostuneita seuraamaan paikallista säätämme ja mitä näemme ikkunasta. Halusimme myös hallita paremmin lämmitys- ja ilmastointijärjestelmäämme. Henkilökohtaisen sääaseman rakentaminen on hieno oppimiskokemus. Kun lopetat tämän projektin rakentamisen, ymmärrät paremmin, miten langaton viestintä toimii, miten anturit toimivat ja kuinka voimakas Raspberry Pi -alusta voi olla. Kun tämä projekti on perusta ja saatu kokemus, voit helposti rakentaa monimutkaisempia projekteja tulevaisuudessa.

Vaihe 1: Bill of Essential Equipment

Lasku olennaisista laitteista
Lasku olennaisista laitteista
Lasku olennaisista laitteista
Lasku olennaisista laitteista
Lasku olennaisista laitteista
Lasku olennaisista laitteista

1. Vadelma Pi

Ensimmäinen askel on saada kädet Raspberry Pi -levylle. Raspberry Pi on Linux -käyttöinen yhden kortin tietokone. Sen tavoitteena on parantaa ohjelmointitaitoja ja laitteiston ymmärtämistä. Harrastajat ja elektroniikan harrastajat ottivat sen nopeasti käyttöön innovatiivisissa projekteissa.

2. I²C -kilpi Raspberry Pi: lle

INPI2 (I2C -sovitin) tarjoaa Raspberry Pi 2/3 an I²C -portin käytettäväksi useiden I²C -laitteiden kanssa. Se on saatavana Dcube Storesta

3. Digitaalinen kosteus-, paine- ja lämpötila -anturi, BME280

BME280 on kosteus-, paine- ja lämpötila -anturi, jolla on nopea vasteaika ja korkea kokonaistarkkuus. Ostimme tämän anturin Dcube Storesta

4. I²C -liitäntäkaapeli

Meillä oli I²C -liitäntäkaapeli saatavilla Dcube Storesta

5. Micro -USB -kaapeli

Micro USB -kaapeli Virtalähde on ihanteellinen valinta Raspberry Pi -laitteen virransyöttöön.

6. Tulkitse Internet -yhteys Ethernet -kaapelin/WiFi -sovittimen kautta

Yksi ensimmäisistä asioista, jotka haluat tehdä, on yhdistää Raspberry Pi Internetiin. Voimme muodostaa yhteyden Ethernet -kaapelilla. Toinen mahdollisuus on, että voit muodostaa yhteyden langattomaan verkkoon langattoman USB -sovittimen avulla.

7. HDMI -kaapeli (näyttö- ja liitäntäkaapeli)

Kaikkien HDMI-/DVI -näyttöjen ja televisioiden pitäisi toimia Pi: n näyttönä. Mutta se on valinnainen. Myös etäkäytön (kuten SSH) mahdollisuutta ei voida sulkea pois. Voit käyttää myös PUTTY -ohjelmistoa.

Vaihe 2: Laitteistoyhteydet asennusta varten

Laitteiston liitännät asennusta varten
Laitteiston liitännät asennusta varten
Laitteiston liitännät asennusta varten
Laitteiston liitännät asennusta varten

Tee piiri esitetyn kaavion mukaisesti.

Oppiessamme opimme perusteellisesti elektroniikan perusteet laitteisto- ja ohjelmistotiedoista. Halusimme laatia yksinkertaisen elektroniikkakaavion tälle projektille. Elektroniset kaaviot ovat kuin suunnitelma elektroniikalle. Laadi suunnitelma ja seuraa suunnittelua huolellisesti. Olemme soveltaneet joitain elektroniikan perusasioita täällä. Logiikka vie sinut paikasta A paikkaan B, mielikuvitus vie sinut kaikkialle!

Raspberry Pi- ja I²C -kilven liitäntä

Ota ensin Raspberry Pi ja aseta sille I²C -kilpi (sisäänpäin suuntautuvalla I²C -portilla). Paina kilpi varovasti Pi: n GPIO -nastojen päälle ja olemme tehneet tämän vaiheen yhtä helppoa kuin piirakka (katso kuva).

Anturin ja Raspberry Pi: n liitäntä

Ota anturi ja liitä I²C -kaapeli siihen. Varmista, että I²C -lähtö kytketään AINA I²C -tuloon. Samaa on noudatettava myös Raspberry Pi -laitteessa, jossa I²C -suoja on asennettu GPIO -nastoihin. plug and play -vaihtoehto. Ei enää nastoja ja johdotusongelmia, joten hämmennys on kadonnut. Kuvittele itsesi johtojen verkkoon ja päästä siihen. Helpotus siitä. Tämä tekee asioista mutkattomia.

Huomautus: Ruskean johdon tulee aina seurata maadoitusliitäntää (GND) yhden laitteen ulostulon ja toisen laitteen tulon välillä

Internet -yhteys on tarpeen

Sinulla on oikeasti valinnanvaraa täällä. Voit yhdistää Raspberry Pi: n LAN -kaapelilla tai langattomalla WIFI -yhteydellä varustetulla Nano USB -sovittimella. Joka tapauksessa manifestissa on muodostettu yhteys Internetiin.

Piirin virta

Liitä Micro USB -kaapeli Raspberry Pi -laitteen virtaliitäntään. Tsemppiä ja voila! Kaikki on kunnossa ja aloitamme heti.

Yhteys näyttöön

Voimme joko liittää HDMI -kaapelin näyttöön tai televisioon. Voimme käyttää Raspberry Pi -laitetta kytkemättä sitä näyttöön käyttämällä -SSH -protokollaa (Siirry Pi: n komentoriville toiselta tietokoneelta). Voit käyttää siihen myös PUTTY -ohjelmistoa. Tämä vaihtoehto on tarkoitettu kokeneille käyttäjille, joten emme käsittele sitä yksityiskohtaisesti täällä.

Olen kuullut, että tulee taantuma, päätin olla osallistumatta

Vaihe 3: Raspberry Pi -ohjelmointi Javassa

Raspberry Pi -ohjelmointi Javassa
Raspberry Pi -ohjelmointi Javassa

Raspberry Pi- ja BME280 -anturin Java -koodi. Se on saatavana Github -arkistostamme.

Ennen kuin jatkat koodia, muista lukea Readme -tiedoston ohjeet ja asentaa Raspberry Pi sen mukaan. Se kestää vain hetken. Henkilökohtainen sääasema on joukko säämittauslaitteita, joita yksityinen henkilö, klubi, yhdistys tai jopa yritys käyttää. Henkilökohtaisia sääasemia voidaan käyttää yksinomaan omistajan iloksi ja kouluttamiseksi, mutta monet henkilökohtaiset sääaseman ylläpitäjät jakavat tietonsa myös muiden kanssa joko kokoamalla tiedot manuaalisesti ja jakamalla niitä tai käyttämällä Internetiä tai amatööriradiota.

Koodi on yksinkertaisimmassa muodossaan, jonka voit kuvitella, eikä sinulla pitäisi olla mitään ongelmia sen kanssa, vaan kysy, onko sinulla. Vaikka tiedät tuhat asiaa, kysy silti joltain, joka tietää.

Voit myös kopioida tämän anturin toimivan Java -koodin täältä.

// Levitetään vapaaehtoisella lisenssillä. // BME280 // Tämä koodi on suunniteltu toimimaan BME280_I2CS I2C Mini -moduulin kanssa, joka on saatavana osoitteesta ControlEverything.com. //

tuonti com.pi4j.io.i2c. I2CBus;

tuoda com.pi4j.io.i2c. I2CDevice; tuonti com.pi4j.io.i2c. I2CFactory; tuoda java.io. IOException;

julkinen luokka BME280

{public static void main (String args ) heittää Poikkeus {// Luo I2C -väylä I2CBus -väylä = I2CFactory.getInstance (I2CBus. BUS_1); // Hanki I2C -laite, BME280 I2C -osoite on 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Lue 24 tavua dataa osoitteesta 0x88 (136) tavu b1 = uusi tavu [24]; device.read (0x88, b1, 0, 24); // Muunna tiedot // lämpötilakerroimet int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); jos (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); jos (dig_T3> 32767) {dig_T3 -= 65536; } // painekertoimet int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); jos (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); jos (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); jos (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); jos (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); jos (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); jos (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); jos (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); jos (dig_P9> 32767) {dig_P9 -= 65536; } // Lue 1 tavu dataa osoitteesta 0xA1 (161) int dig_H1 = ((tavu) device.read (0xA1) & 0xFF); // Lue 7 tavua dataa osoitteesta 0xE1 (225) device.read (0xE1, b1, 0, 7); // Muunna tiedot // kosteuskertoimet int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); jos (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); jos (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); jos (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; jos (dig_H6> 127) {dig_H6 -= 256; } // Valitse kosteusrekisteri // Kosteus yli näytteenottotaajuuden = 1 laite. Kirjoita (0xF2, (tavu) 0x01); // Valitse ohjauksen mittausrekisteri // Normaalitila, lämpötila ja paine näytteenottotaajuudella = 1 laite. Kirjoita (0xF4, (tavu) 0x27); // Valitse määritysrekisteri // Valmiusaika = 1000 ms device.write (0xF5, (tavu) 0xA0); // Lue 8 tavua dataa osoitteesta 0xF7 (247) // paine msb1, paine msb, paine lsb, lämpötila msb1, lämpötila msb, lämpötila lsb, kosteus lsb, kosteus msb tavu data = uusi tavu [8]; device.read (0xF7, data, 0, 8); // Muunna paine- ja lämpötilatiedot 19 bitin pituisiksi adc_p = (((pitkä) (data [0] & 0xFF) * 65536) + ((pitkä) (data [1] & 0xFF) * 256) + (pitkä) (data [2] & 0xF0)) / 16; pitkä adc_t = (((pitkä) (data [3] & 0xFF) * 65536) + ((pitkä) (data [4] & 0xFF) * 256) + (pitkä) (data [5] & 0xF0)) / 16; // Muunna kosteustiedot pitkäksi adc_h = ((pitkä) (data [6] & 0xFF) * 256 + (pitkä) (data [7] & 0xFF)); // Lämpötilan poikkeaman laskelmat double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024,0) * ((double) dig_T2); double var2 = (((((double) adc_t) / 131072.0 - ((double) dig_T1) / 8192.0) * (((double) adc_t) /131072.0 - ((double) dig_T1) /8192.0)) * ((double) dig_T3); double t_fine = (pitkä) (var1 + var2); kaksinkertainen cTemp = (var1 + var2) / 5120,0; kaksinkertainen fTemp = cTemp * 1,8 + 32; // Painepoikkeaman laskelmat var1 = ((double) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((kaksinkertainen) dig_P6) / 32768.0; var2 = var2 + var1 * ((kaksinkertainen) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((kaksinkertainen) dig_P4) * 65536.0); var1 = ((((kaksinkertainen) dig_P3) * var1 * var1 / 524288.0 + ((kaksinkertainen) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((kaksinkertainen) dig_P1); kaksinkertainen p = 1048576,0 - (kaksinkertainen) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((kaksinkertainen) dig_P9) * p * p / 2147483648.0; var2 = p * ((kaksinkertainen) dig_P8) / 32768.0; kaksinkertainen paine = (p + (var1 + var2 + ((kaksinkertainen) dig_P7))) / 16,0) / 100; // Kosteuspoikkeaman laskutoimitukset double var_H = (((double) 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))); kaksinkertainen kosteus = var_H * (1,0 - dig_H1 * var_H / 524288.0); if (kosteus> 100,0) {kosteus = 100,0; } muu jos (kosteus <0,0) {kosteus = 0,0; } // Tulostustiedot näytölle System.out.printf ("Lämpötila celsiusasteina: %.2f C %n", cTemp); System.out.printf ("Lämpötila Fahrenheit: %.2f F %n", fTemp); System.out.printf ("Paine: %.2f hPa %n", paine); System.out.printf ("Suhteellinen kosteus: %.2f %% RH %n", kosteus); }}

Vaihe 4: Koodin käytännöllisyys

Koodin käytännöllisyys
Koodin käytännöllisyys

Lataa nyt (tai git pull) koodi ja avaa se Raspberry Pi: ssä.

Suorita komennot kääntääksesi ja ladataksesi koodin päätelaitteeseen ja katsoaksesi näytön tuloksen. Muutaman hetken kuluttua se näyttää kaikki parametrit. Varmistaaksesi, että koodisiirto on sujuva ja tulos rauhallinen (ish), ajattelet lisää ideoita lisämuutosten tekemiseksi (jokainen projekti alkaa tarinalla).

Vaihe 5: Hyödyntäminen rakentavassa maailmassa

BME280 saavuttaa korkean suorituskyvyn kaikissa sovelluksissa, joissa vaaditaan kosteuden ja paineen mittaamista. Nämä uudet sovellukset ovat kontekstitietoisuutta, esim. Ihon tunnistus, huoneenmuutoksen havaitseminen, kuntosalin seuranta / hyvinvointi, varoitus kuivuudesta tai korkeista lämpötiloista, äänenvoimakkuuden ja ilmavirran mittaus, kodin automaation ohjaus, ohjauksen lämmitys, ilmanvaihto, ilmastointi (LVI), esineiden internet (IoT), GPS-parannus (esim. Ensimmäiseen korjaukseen tarvittava aika, kuolleen laskenta, kaltevuuden tunnistus), sisänavigointi (lattian havaitseminen, hissin tunnistus), ulkona navigointi, vapaa-ajan ja urheilusovellukset, sääennuste ja pystysuuntaisen nopeuden ilmaisu (nousu/uppoaminen) Nopeus).

Vaihe 6: Johtopäätös

Kuten näette, tämä projekti on loistava osoitus siitä, mihin laitteisto ja ohjelmisto kykenevät. Lyhyessä ajassa voidaan rakentaa niin vaikuttava projekti! Tämä on tietysti vasta alkua. Kehittyneemmän henkilökohtaisen sääaseman, kuten automatisoitujen lentoasemien henkilökohtaisten sääasemien, tekeminen voi sisältää joitain muita antureita, kuten tuulimittari (tuulen nopeus), lähetysmittari (näkyvyys), pyranometri (auringonsäteily) jne. Meillä on Youtubessa video -opetusohjelma, jossa on I²C -anturi ja Rasp Pi. On todella hämmästyttävää nähdä I²C -viestinnän tulokset ja toiminta. Tarkista se myös. Hauskaa rakentamista ja oppimista! Kerro meille, mitä pidät tästä ohjeesta. Haluaisimme tehdä joitain parannuksia tarvittaessa.

Suositeltava: