Cuprins:

Stație meteo personală folosind Raspberry Pi cu BME280 în Java: 6 pași
Stație meteo personală folosind Raspberry Pi cu BME280 în Java: 6 pași

Video: Stație meteo personală folosind Raspberry Pi cu BME280 în Java: 6 pași

Video: Stație meteo personală folosind Raspberry Pi cu BME280 în Java: 6 pași
Video: Raspberry Pi -Weather Station at Home 2024, Iulie
Anonim
Image
Image
Lista echipamentelor esențiale
Lista echipamentelor esențiale

Vremea rea arată întotdeauna mai rău printr-o fereastră

Am fost întotdeauna interesați să monitorizăm vremea locală și ceea ce vedem pe fereastră. De asemenea, am dorit un control mai bun asupra sistemului nostru de încălzire și aer condiționat. Construirea unei stații meteo personale este o experiență excelentă de învățare. Când terminați construirea acestui proiect, veți avea o mai bună înțelegere a modului în care funcționează comunicațiile fără fir, a modului în care funcționează senzorii și cât de puternică poate fi platforma Raspberry Pi. Având acest proiect ca bază și experiența acumulată, veți putea construi cu ușurință proiecte mai complexe în viitor.

Pasul 1: Lista echipamentelor esențiale

Lista echipamentelor esențiale
Lista echipamentelor esențiale
Lista echipamentelor esențiale
Lista echipamentelor esențiale
Lista echipamentelor esențiale
Lista echipamentelor esențiale

1. Un Raspberry Pi

Primul pas este să puneți mâna pe o placă Raspberry Pi. Raspberry Pi este un computer cu o singură placă alimentat de Linux. Scopul său este de a îmbunătăți abilitățile de programare și înțelegerea hardware-ului. A fost adoptat rapid de pasionați și pasionați de electronică pentru proiecte inovatoare.

2. Scut I²C pentru Raspberry Pi

INPI2 (adaptor I2C) oferă Raspberry Pi 2/3 un port I²C pentru utilizare cu mai multe dispozitive I²C. Este disponibil pe Dcube Store

3. Senzor digital de umiditate, presiune și temperatură, BME280

BME280 este un senzor de umiditate, presiune și temperatură care are un timp de răspuns rapid și o precizie generală ridicată. Am achiziționat acest senzor de la Dcube Store

4. Cablu de conectare I²C

Aveam cablul de conectare I²C disponibil la Dcube Store

5. Cablu micro USB

Cablul micro USB Sursa de alimentare este o alegere ideală pentru alimentarea Raspberry Pi.

6. Interpretează accesul la Internet prin EthernetCable / WiFi Adapter

Unul dintre primele lucruri pe care veți dori să le faceți este să vă conectați Raspberry Pi la Internet. Ne putem conecta folosind un cablu Ethernet. O altă posibilitate este că vă puteți conecta la o rețea fără fir folosind un adaptor wireless USB.

7. Cablu HDMI (Cablu de afișare și conectivitate)

Orice monitor HDMI / DVI și orice televizor ar trebui să funcționeze ca afișaj pentru Pi. Dar este opțional. Posibilitatea accesului la distanță (cum ar fi-SSH) nu poate fi exclusă, de asemenea. De asemenea, puteți obține acces cu software-ul PUTTY.

Pasul 2: Conexiuni hardware pentru configurare

Conexiuni hardware pentru configurare
Conexiuni hardware pentru configurare
Conexiuni hardware pentru configurare
Conexiuni hardware pentru configurare

Realizați circuitul conform schemei prezentate.

În timp ce învățam, am obținut detalii despre elementele electronice referitoare la cunoștințele hardware și software. Am vrut să elaborăm o schemă electronică simplă pentru acest proiect. Schemele electronice sunt ca un plan pentru electronică. Desenați un plan și urmați cu atenție proiectarea. Aici am aplicat câteva elemente de bază ale electronicii. Logica te duce de la A la B, imaginația te va duce peste tot!

Conexiunea Raspberry Pi și I²C Shield

În primul rând, luați Raspberry Pi și așezați scutul I²C (cu portul I²C orientat spre interior). Apăsați ușor Shield peste pinii GPIO ai lui Pi și am terminat cu acest pas la fel de ușor ca plăcinta (a se vedea imaginea).

Conexiunea senzorului și a Raspberry Pi

Luați senzorul și conectați cablul I²C cu acesta. Asigurați-vă că ieșirea I²C se conectează ÎNTOTDEAUNA la intrarea I²C. Același lucru trebuie urmat și pentru Raspberry Pi, cu ecranul I²C montat deasupra pinilor GPIO. Avem ecranul I²C și cablurile de conectare de pe partea noastră ca un relief foarte mare și un avantaj foarte mare, deoarece rămânem doar cu opțiunea plug and play. Nu mai există probleme legate de cabluri și, prin urmare, dispariția a dispărut. Imaginați-vă doar în rețeaua de fire și intrând în asta. O ușurare de la asta. Acest lucru face ca lucrurile să nu fie complicate.

Notă: firul maro trebuie să urmeze întotdeauna conexiunea la masă (GND) între ieșirea unui dispozitiv și intrarea unui alt dispozitiv

Conectivitatea la Internet este o nevoie

Ai de fapt o alegere aici. Puteți conecta Raspberry Pi cu cablul LAN sau adaptorul Nano USB wireless pentru conectivitate WIFI. Oricum ar fi, manifestul este să vă conectați la internet, ceea ce este realizat.

Alimentarea circuitului

Conectați cablul Micro USB la mufa de alimentare a Raspberry Pi. Punch up și voila! Totul e bine de plecat și vom începe imediat.

Conexiune la afișaj

Putem avea cablul HDMI conectat la un monitor sau la un televizor. Putem accesa un Raspberry Pi fără a-l conecta la un monitor folosind -SSH (Accesați linia de comandă a Pi de pe alt computer). Puteți utiliza, de asemenea, software-ul PUTTY. Această opțiune este pentru utilizatorii avansați, deci nu o vom acoperi în detaliu aici.

Am auzit că va fi o recesiune, am decis să nu particip

Pasul 3: Programarea Raspberry Pi în Java

Programare Raspberry Pi în Java
Programare Raspberry Pi în Java

Codul Java pentru senzorul Raspberry Pi și BME280. Este disponibil în depozitul nostru Github.

Înainte de a trece la cod, asigurați-vă că ați citit instrucțiunile date în fișierul Readme și configurați Raspberry Pi conform acestuia. Va dura doar un moment pentru a face acest lucru. O stație meteo personală este un set de instrumente de măsurare a vremii operate de un individ privat, club, asociație sau chiar de afaceri. Stațiile meteo personale pot fi operate exclusiv pentru plăcerea și educarea proprietarului, dar mulți operatori de stații meteo personale își împărtășesc și datele cu alții, fie prin compilarea manuală și distribuirea acestora, fie prin utilizarea internetului sau a radio-amatorilor.

Codul este în cea mai simplă formă pe care o puteți imagina și nu ar trebui să aveți nicio problemă cu acesta, dar întrebați-o dacă aveți. Chiar dacă știi o mie de lucruri, întreabă totuși pe cineva care știe.

Puteți copia și codul Java de lucru pentru acest senzor și de aici.

// Distribuit cu o licență de voință liberă. // BME280 // Acest cod este conceput pentru a funcționa cu Mini-modulul BME280_I2CS I2C disponibil de pe ControlEverything.com. //

import com.pi4j.io.i2c. I2CBus;

import com.pi4j.io.i2c. I2CDevice; import com.pi4j.io.i2c. I2CFactory; import java.io. IOException;

clasa publica BME280

{public static void main (String args ) throws Exception {// Create I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Obțineți dispozitiv I2C, adresa BME280 I2C este 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Citiți 24 de octeți de date de la adresa 0x88 (136) octet b1 = octet nou [24]; device.read (0x88, b1, 0, 24); // Convertiți datele // coeficienții temp int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); if (dig_T2> 32767) {dig_T2 - = 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); if (dig_T3> 32767) {dig_T3 - = 65536; } // coeficienți de presiune int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); if (dig_P2> 32767) {dig_P2 - = 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); if (dig_P3> 32767) {dig_P3 - = 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); if (dig_P4> 32767) {dig_P4 - = 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); if (dig_P5> 32767) {dig_P5 - = 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); if (dig_P6> 32767) {dig_P6 - = 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); if (dig_P7> 32767) {dig_P7 - = 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); if (dig_P8> 32767) {dig_P8 - = 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); if (dig_P9> 32767) {dig_P9 - = 65536; } // Citiți 1 octet de date de la adresa 0xA1 (161) int dig_H1 = ((octet) device.read (0xA1) & 0xFF); // Citiți 7 octeți de date de la adresa 0xE1 (225) device.read (0xE1, b1, 0, 7); // Conversia datelor // coeficienți de umiditate int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); if (dig_H2> 32767) {dig_H2 - = 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); if (dig_H4> 32767) {dig_H4 - = 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); if (dig_H5> 32767) {dig_H5 - = 65536; } int dig_H6 = b1 [6] & 0xFF; if (dig_H6> 127) {dig_H6 - = 256; } // Selectați registrul de control al umidității // Umiditate peste rata de eșantionare = 1 device.write (0xF2, (octet) 0x01); // Selectați registrul de măsurare a controlului // Mod normal, temperatură și presiune peste rata de eșantionare = 1 device.write (0xF4, (octet) 0x27); // Selectați config register // Timp standby = 1000 ms device.write (0xF5, (octet) 0xA0); // Citiți 8 octeți de date de la adresa 0xF7 (247) // presiune msb1, presiune msb, presiune lsb, temp msb1, temp msb, temp lsb, umiditate lsb, umiditate msb octet date = octet nou [8]; device.read (0xF7, data, 0, 8); // Conversia datelor de presiune și temperatură în 19 biți lung adc_p = (((lung) (date [0] și 0xFF) * 65536) + ((lung) (date [1] și 0xFF) * 256) + (lung) (date [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Conversia datelor de umiditate lung adc_h = ((lung) (date [6] & 0xFF) * 256 + (lung) (date [7] & 0xFF)); // Calcule compensare temperatură 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); dublu t_fine = (lung) (var1 + var2); cTemp dublu = (var1 + var2) / 5120.0; fTemp dublu = cTemp * 1,8 + 32; // Calcule compensare presiune var1 = ((dublu) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((double) dig_P6) / 32768.0; var2 = var2 + var1 * ((dublu) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((double) dig_P4) * 65536.0); var1 = (((dublu) dig_P3) * var1 * var1 / 524288.0 + ((dublu) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((dublu) dig_P1); dublu p = 1048576.0 - (dublu) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((dublu) dig_P9) * p * p / 2147483648.0; var2 = p * ((dublu) dig_P8) / 32768.0; presiune dublă = (p + (var1 + var2 + ((dublu) dig_P7)) / 16.0) / 100; // Calcule compensare umiditate 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))); umiditate dublă = var_H * (1.0 - dig_H1 * var_H / 524288.0); if (umiditate> 100,0) {umiditate = 100,0; } else if (umiditate <0,0) {umiditate = 0,0; } // Ieșire date pe ecran System.out.printf ("Temperatura în grade Celsius:%.2f C% n", cTemp); System.out.printf ("Temperatura în Fahrenheit:%.2f F% n", fTemp); System.out.printf ("Presiune:%.2f hPa% n", presiune); System.out.printf ("Umiditate relativă:%.2f %% RH% n", umiditate); }}

Pasul 4: Practicitatea codului

Practicitatea Codului
Practicitatea Codului

Acum, descărcați (sau git pull) codul și deschideți-l în Raspberry Pi.

Rulați comenzile pentru a compila și încărca codul pe terminal și vedeți ieșirea pe monitor. După câteva momente, va afișa toți parametrii. Asigurându-vă că aveți o tranziție lină a codului și un rezultat calm (ish), vă gândiți la mai multe idei pentru a face modificări suplimentare (fiecare proiect începe cu o poveste).

Pasul 5: Utilizare în lume constructivă

BME280 atinge performanțe ridicate în toate aplicațiile care necesită măsurarea umidității și a presiunii. Aceste aplicații emergente sunt Context Awareness, de ex. Detectarea pielii, Detectarea schimbărilor de cameră, Monitorizarea / bunăstarea fitnessului, Avertisment privind uscăciunea sau temperaturile ridicate, Măsurarea volumului și a debitului de aer, Controlul automatizării caselor, Controlul încălzirii, Ventilației, Aer condiționat (HVAC), Internetul obiectelor (IoT), Îmbunătățirea GPS-ului (de exemplu, îmbunătățirea timpului până la prima remediere, calculul mortului, detectarea pantei), navigație interioară (schimbarea detecției podelei, detectarea ascensorului), navigație în aer liber, aplicații de agrement și sport, prognoza meteo și indicarea vitezei verticale (ascensiune / chiuvetă) Viteză).

Pasul 6: Concluzie

După cum puteți vedea, acest proiect este o demonstrație excelentă a ceea ce sunt capabile hardware și software. În puțină perioadă de timp, se poate construi un proiect atât de impresionant! Desigur, acesta este doar începutul. Realizarea unei stații meteo personale mai sofisticate, cum ar fi stațiile meteorologice personale de aeroport automatizate, poate implica mai mulți senzori precum anemometru (viteza vântului), transmisometru (vizibilitate), piranometru (radiație solară) etc. Avem un tutorial video pe Youtube cu funcționarea de bază a Senzor I²C cu Rasp Pi. Este cu adevărat uimitor să vezi rezultatele și funcționarea comunicațiilor I²C. Verifică-l și pe acesta. Distrează-te construind și învățând! Vă rugăm să ne spuneți ce părere aveți despre acest lucru instructiv. Ne-ar plăcea să aducem unele îmbunătățiri, dacă este necesar.

Recomandat: