INHOUDSOPGAWE:

Persoonlike weerstasie met framboos Pi met BME280 in Java: 6 stappe
Persoonlike weerstasie met framboos Pi met BME280 in Java: 6 stappe

Video: Persoonlike weerstasie met framboos Pi met BME280 in Java: 6 stappe

Video: Persoonlike weerstasie met framboos Pi met BME280 in Java: 6 stappe
Video: Vandaag!! Maleisië staat onder water. Een ongelooflijke overstroming veranderde Johor in een oceaan 2024, Julie
Anonim
Image
Image
Handves van noodsaaklike toerusting
Handves van noodsaaklike toerusting

Slegte weer lyk altyd erger deur 'n venster

Ons was nog altyd geïnteresseerd in die monitering van ons plaaslike weer en wat ons by die venster sien. Ons wou ook beter beheer oor ons verwarming en lugversorgingstelsel hê. Die bou van 'n persoonlike weerstasie is 'n wonderlike leerervaring. As u klaar is met die bou van hierdie projek, het u 'n beter begrip van hoe draadlose kommunikasie werk, hoe sensors werk en hoe kragtig die Raspberry Pi -platform kan wees. Met hierdie projek as basis en die opgedane ervaring, sal u in die toekoms maklik meer komplekse projekte kan bou.

Stap 1: Bill van noodsaaklike toerusting

Handves van noodsaaklike toerusting
Handves van noodsaaklike toerusting
Handves van noodsaaklike toerusting
Handves van noodsaaklike toerusting
Handves van noodsaaklike toerusting
Handves van noodsaaklike toerusting

1. 'n Framboos Pi

Die eerste stap is om 'n Raspberry Pi -bord in die hande te kry. Raspberry Pi is 'n Linux -aangedrewe enkelbordrekenaar. Die doel daarvan is om programmeringsvaardighede en begrip van hardeware te verbeter. Dit is vinnig aangeneem deur stokperdjies en elektronika -entoesiaste vir innoverende projekte.

2. I²C -skild vir Framboos Pi

Die INPI2 (I2C -adapter) bied die Raspberry Pi 2/3 'n I²C -poort vir gebruik met verskeie I²C -toestelle. Dit is beskikbaar op Dcube Store

3. Digitale humiditeits-, druk- en temperatuursensor, BME280

Die BME280 is 'n humiditeits-, druk- en temperatuursensor met 'n vinnige reaksietyd en 'n hoë algehele akkuraatheid. Ons het hierdie sensor by Dcube Store gekoop

4. I²C -aansluitkabel

Ons het die I²C -aansluitkabel beskikbaar by Dcube Store

5. Mikro -USB -kabel

Die mikro -USB -kabel Kragtoevoer is 'n ideale keuse vir die voeding van die Raspberry Pi.

6. Interpreteer internettoegang via EthernetCable/WiFi -adapter

Een van die eerste dinge wat u wil doen, is om u Raspberry Pi aan die internet te koppel. Ons kan met 'n Ethernet -kabel verbind. 'N Ander moontlikheid is dat u met 'n draadlose USB -adapter aan 'n draadlose netwerk kan koppel.

7. HDMI -kabel (skerm en verbindingskabel)

Enige HDMI/DVI -monitor en enige TV moet as 'n skerm vir die Pi werk. Maar dit is opsioneel. Afsluitbare toegang (soos-SSH) kan ook nie uitgesluit word nie. U kan ook toegang kry met PUTTY -sagteware.

Stap 2: Hardewareverbindings vir opstelling

Hardewareverbindings vir opstelling
Hardewareverbindings vir opstelling
Hardewareverbindings vir opstelling
Hardewareverbindings vir opstelling

Maak die stroombaan volgens die skema.

Terwyl ons geleer het, het ons deeglik kennis gemaak met die basiese beginsels van elektronika rakende hardeware- en sagtewarekennis. Ons wou 'n eenvoudige elektroniese skema vir hierdie projek opstel. Elektroniese skemas is soos 'n bloudruk vir elektronika. Stel 'n bloudruk op en volg die ontwerp noukeurig. Ons het hier 'n paar basiese beginsels van elektronika toegepas. Logika bring jou van A na B, verbeelding neem jou oral!

Aansluiting van die Raspberry Pi en I²C Shield

Neem eerstens die Raspberry Pi en plaas die I²C -skild (met I²C -poort na binne) daarop. Druk die skild saggies oor die GPIO -penne van Pi, en ons is klaar met hierdie stap so maklik soos 'n tert (sien die prentjie).

Aansluiting van die sensor en Framboos Pi

Neem die sensor en verbind die I²C -kabel daarmee. Maak seker dat I²C Output ALTYD aansluit by die I²C Input. Dieselfde moet gevolg word vir die Raspberry Pi met die I²C -skild daaroor, die GPIO -penne. Ons het die I²C -skild en die aansluitkabels aan ons kant as 'n baie groot verligting en 'n baie groot voordeel, aangesien ons slegs die plug and play opsie. Geen probleem met penne en bedrading meer nie, en daarom is verwarring weg. Stel jou net voor dat jy in die draaddraad is en daarby ingaan. 'N Verligting daarvan. Dit maak dinge ongekompliseerd.

Let wel: die bruin draad moet altyd die grondverbinding (GND) volg tussen die uitset van een toestel en die ingang van 'n ander toestel

Internetverbinding is 'n behoefte

U het eintlik 'n keuse hier. U kan Raspberry Pi verbind met die LAN -kabel of die draadlose Nano USB -adapter vir WIFI -verbinding. Hoe dan ook, die manifest is om aan te sluit op die internet wat bereik word.

Die krag van die stroombaan

Steek die mikro -USB -kabel in die kragaansluiting van die Raspberry Pi. Maak op en voila! Alles is in orde en ons begin dadelik.

Koppel aan die skerm

Ons kan die HDMI -kabel aan 'n monitor of 'n TV koppel. Ons het toegang tot 'n Raspberry Pi sonder om dit aan 'n monitor te koppel met behulp van -SSH (Toegang tot die opdragreël van die Pi vanaf 'n ander rekenaar). U kan ook die PUTTY -sagteware daarvoor gebruik. Hierdie opsie is vir gevorderde gebruikers, so ons sal dit nie hier in detail bespreek nie.

Ek het gehoor daar gaan 'n resessie wees, ek het besluit om nie deel te neem nie

Stap 3: Framboos Pi -programmering in Java

Framboos Pi -programmering in Java
Framboos Pi -programmering in Java

Die Java -kode vir die Raspberry Pi en BME280 -sensor. Dit is beskikbaar in ons Github -bewaarplek.

Voordat u na die kode gaan, moet u die instruksies in die Readme -lêer lees en u Raspberry Pi daarvolgens instel. Dit sal net 'n rukkie neem om dit te doen. 'N Persoonlike weerstasie is 'n stel weermeetinstrumente wat deur 'n privaat persoon, klub, vereniging of selfs besigheid bestuur word. Persoonlike weerstasies mag slegs bedoel word vir die plesier en opvoeding van die eienaar, maar baie persoonlike weerstasie -operateurs deel ook hul data met ander, óf deur handmatig data op te stel en te versprei, óf deur gebruik te maak van die internet of amateurradio.

Die kode is in die eenvoudigste vorm wat u u kan voorstel, en u moet dit nie ondervind nie, maar vra of u dit het. Selfs as u duisend dinge weet, moet u steeds iemand vra wat dit weet.

U kan ook die werkende java -kode vir hierdie sensor hiervandaan kopieer.

// Versprei met 'n vrywillige lisensie. // Gebruik dit op enige manier wat u wil, wins of gratis, mits dit in die lisensies van die gepaardgaande werke pas. // BME280 // Hierdie kode is ontwerp om te werk met die BME280_I2CS I2C Mini Module beskikbaar by ControlEverything.com. //

invoer com.pi4j.io.i2c. I2CBus;

voer com.pi4j.io.i2c. I2CD -toestel in; invoer com.pi4j.io.i2c. I2CFactory; invoer java.io. IOException;

openbare klas BME280

{public static void main (String args ) gooi uitsondering {// Skep I2C -bus I2CBus -bus = I2CFactory.getInstance (I2CBus. BUS_1); // Kry I2C -toestel, BME280 I2C -adres is 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Lees 24 grepe data vanaf adres 0x88 (136) greep b1 = nuwe greep [24]; toestel.lees (0x88, b1, 0, 24); // Skakel die data om // temp koëffisiënte int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); as (dig_T2> 32767) {dig_T2 -= 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); as (dig_T3> 32767) {dig_T3 -= 65536; } // drukkoëffisiënte int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); as (dig_P2> 32767) {dig_P2 -= 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); as (dig_P3> 32767) {dig_P3 -= 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); as (dig_P4> 32767) {dig_P4 -= 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); as (dig_P5> 32767) {dig_P5 -= 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); as (dig_P6> 32767) {dig_P6 -= 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); as (dig_P7> 32767) {dig_P7 -= 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); as (dig_P8> 32767) {dig_P8 -= 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); as (dig_P9> 32767) {dig_P9 -= 65536; } // Lees 1 greep data van adres 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Lees 7 grepe data vanaf adres 0xE1 (225) device.read (0xE1, b1, 0, 7); // Skakel die data om // humiditeitskoëffisiënte int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); as (dig_H2> 32767) {dig_H2 -= 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); as (dig_H4> 32767) {dig_H4 -= 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); as (dig_H5> 32767) {dig_H5 -= 65536; } int dig_H6 = b1 [6] & 0xFF; as (dig_H6> 127) {dig_H6 -= 256; } // Kies beheervochtigheidsregister // Humiditeit bo monstertempo = 1 toestel.skryf (0xF2, (byte) 0x01); // Kies kontrolemetingsregister // Normale modus, temp en druk bo monstertempo = 1 apparaat. Skryf (0xF4, (byte) 0x27); // Kies konfigregister // Stand -by -tyd = 1000 ms device.write (0xF5, (byte) 0xA0); // Lees 8 grepe data vanaf adres 0xF7 (247) // druk msb1, druk msb, druk lsb, temp msb1, temp msb, temp lsb, humiditeit lsb, humiditeit msb byte data = nuwe byte [8]; device.read (0xF7, data, 0, 8); // Skakel druk- en temperatuurdata om in 19-bisse lank adc_p = (((lang) (data [0] & 0xFF) * 65536) + ((lank) (data [1] & 0xFF) * 256) + (lank) (data [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Verander die humiditeitsdata lank adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Temperatuurverrekenings berekeninge dubbel var1 = (((dubbel) adc_t) / 16384.0 - ((dubbel) dig_T1) / 1024.0) * ((dubbel) dig_T2); dubbel var2 = ((((dubbel) adc_t) / 131072.0 - ((dubbel) dig_T1) / 8192.0) * (((dubbel) adc_t) /131072.0 - ((dubbel) dig_T1) /8192.0)) * ((dubbel) dig_T3); dubbel t_fine = (lank) (var1 + var2); dubbel cTemp = (var1 + var2) / 5120.0; dubbel fTemp = cTemp * 1.8 + 32; // Drukverrekeningsberekeninge var1 = ((dubbel) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((dubbel) dig_P6) / 32768.0; var2 = var2 + var1 * ((dubbel) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((dubbel) dig_P4) * 65536.0); var1 = (((dubbel) dig_P3) * var1 * var1 / 524288.0 + ((dubbel) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((dubbel) dig_P1); dubbel p = 1048576.0 - (dubbel) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dubbel) dig_P9) * p * p / 2147483648.0; var2 = p * ((dubbel) dig_P8) / 32768.0; dubbele druk = (p + (var1 + var2 + ((dubbel) dig_P7)) / 16.0) / 100; // Humiditeitsverrekening berekeninge dubbel var_H = (((dubbel) 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))); dubbele humiditeit = var_H * (1.0 - dig_H1 * var_H / 524288.0); as (humiditeit> 100.0) {humiditeit = 100.0; } anders as (humiditeit <0.0) {humiditeit = 0.0; } // Uitvoerdata na die skerm System.out.printf ("Temperatuur in Celsius: %.2f C %n", cTemp); System.out.printf ("Temperatuur in Fahrenheit: %.2f F %n", fTemp); System.out.printf ("Druk: %.2f hPa %n", druk); System.out.printf ("Relatiewe humiditeit: %.2f %% RH %n", humiditeit); }}

Stap 4: Die praktiese kode

Die praktiese kode
Die praktiese kode

Laai nou die kode af (of git trek) en maak dit oop in die Raspberry Pi.

Voer die opdragte uit om die kode op die terminale op te stel en op te laai en sien die uitset op Monitor. Na 'n paar oomblikke word al die parameters vertoon. As u seker maak dat u 'n gladde kode -oorgang en 'n kalm resultaat het, dink u aan meer idees om verdere wysigings aan te bring (elke projek begin met 'n verhaal).

Stap 5: Gebruik in die konstruktiewe wêreld

Die BME280 behaal hoë prestasie in alle toepassings wat humiditeit en drukmeting vereis. Hierdie opkomende toepassings is Context Awareness, bv. Veldeteksie, opsporing van kamerverandering, fiksheidsmonitering / welstand, waarskuwing oor droogte of hoë temperature, meting van volume en lugvloei, huishoudelike outomatisering, beheer van verwarming, ventilasie, lugversorging (HVAC), Internet of Things (IoT), GPS-verbetering (bv. Verbetering van tyd tot eerste herstel, dooie afrekening, hellingopsporing), binnenshuise navigasie (verandering van vloeropsporing, hysbakopsporing), buitelugnavigasie, ontspanning en sporttoepassings, weervoorspelling en vertikale snelheidsaanwysing (styg/sink) Spoed).

Stap 6: Gevolgtrekking

Soos u kan sien, is hierdie projek 'n uitstekende demonstrasie van waartoe hardeware en sagteware in staat is. Binne 'n kort tydjie kan u so 'n indrukwekkende projek bou! Dit is natuurlik net die begin. Om 'n meer gesofistikeerde persoonlike weerstasie soos outomatiese lughawe persoonlike weerstasies te maak, kan meer sensors insluit, soos windmeter (windsnelheid), transmissometer (sigbaarheid), pyranometer (sonstraling), ens. I²C -sensor met Rasp Pi. Dit is regtig ongelooflik om die resultate en werking van die I²C -kommunikasie te sien. Gaan dit ook na. Geniet dit om te bou en te leer! Laat weet ons asseblief wat u van hierdie instruksies dink. Ons wil graag verbeterings aanbring indien nodig.

Aanbeveel: