Taula de continguts:

Estació meteorològica personal que utilitza Raspberry Pi amb BME280 a Java: 6 passos
Estació meteorològica personal que utilitza Raspberry Pi amb BME280 a Java: 6 passos

Vídeo: Estació meteorològica personal que utilitza Raspberry Pi amb BME280 a Java: 6 passos

Vídeo: Estació meteorològica personal que utilitza Raspberry Pi amb BME280 a Java: 6 passos
Vídeo: ESP32 STEAMAKERS 2 LCD: TEMPERATURA, LUMINOSIDAD Y POTENCIOMETRO 2024, Desembre
Anonim
Image
Image
Factura d’equips essencials
Factura d’equips essencials

El mal temps sempre es veu pitjor per una finestra

Sempre ens ha interessat controlar el temps local i el que veiem per la finestra. També volíem un millor control sobre el nostre sistema de calefacció i aire condicionat. Construir una estació meteorològica personal és una gran experiència d’aprenentatge. Quan acabeu de construir aquest projecte, coneixereu millor el funcionament de les comunicacions sense fils, el funcionament dels sensors i la potència de la plataforma Raspberry Pi. Amb aquest projecte com a base i l’experiència adquirida, podreu construir fàcilment projectes més complexos en el futur.

Pas 1: factura d'equips essencials

Factura d’equips essencials
Factura d’equips essencials
Factura d’equips essencials
Factura d’equips essencials
Factura d’equips essencials
Factura d’equips essencials

1. Un Raspberry Pi

El primer pas és aconseguir una taula Raspberry Pi. Raspberry Pi és un ordinador de placa única alimentat per Linux. El seu objectiu és millorar les habilitats de programació i la comprensió del maquinari. Va ser adoptat ràpidament per aficionats i aficionats a l'electrònica per a projectes innovadors.

2. Escut I²C per a Raspberry Pi

L'INPI2 (adaptador I2C) proporciona a Raspberry Pi 2/3 un port I²C per utilitzar-lo amb múltiples dispositius I²C. Està disponible a Dcube Store

3. Sensor digital d’humitat, pressió i temperatura, BME280

El BME280 és un sensor d’humitat, pressió i temperatura que té un temps de resposta ràpid i una alta precisió general. Hem comprat aquest sensor a Dcube Store

4. Cable de connexió I²C

Teníem disponible el cable de connexió I²C a Dcube Store

5. Cable micro USB

El cable micro USB és una opció ideal per alimentar el Raspberry Pi.

6. Interpretar l'accés a Internet mitjançant un adaptador EthernetCable / WiFi

Una de les primeres coses que voldreu fer és que el vostre Raspberry Pi estigui connectat a Internet. Ens podem connectar mitjançant un cable Ethernet. Una altra possibilitat és que pugueu connectar-vos a una xarxa sense fils mitjançant un adaptador sense fils USB.

7. Cable HDMI (cable de pantalla i connectivitat)

Qualsevol monitor HDMI / DVI i qualsevol televisor haurien de funcionar com a pantalla del Pi. Però és opcional. La possibilitat d’accés remot (com-SSH) tampoc no es pot descartar. També podeu obtenir accés amb el programari PUTTY.

Pas 2: connexions de maquinari per a la configuració

Connexions de maquinari per a la configuració
Connexions de maquinari per a la configuració
Connexions de maquinari per a la configuració
Connexions de maquinari per a la configuració

Feu el circuit segons l’esquema que es mostra.

Mentre apreníem, vam conèixer a fons els conceptes bàsics de l’electrònica pel que fa al coneixement del maquinari i el programari. Volíem elaborar un esquema electrònic senzill per a aquest projecte. Els esquemes electrònics són com un pla per a l’electrònica. Elaboreu un plànol i seguiu amb cura el disseny. Aquí hem aplicat alguns conceptes bàsics de l'electrònica. La lògica us porta de la A a la B, la imaginació us portarà a tot arreu.

Connexió de l’escut Raspberry Pi i I²C

Primer de tot, agafeu el Raspberry Pi i col·loqueu-hi l’escut I²C (amb el port I²C cap a l’interior). Premeu l'escut suaument sobre els passadors GPIO de Pi i ja hem acabat amb aquest pas tan fàcil com el pastís (vegeu la foto).

Connexió del sensor i del gerd Pi

Agafeu el sensor i connecteu-hi el cable I²C. Assegureu-vos que la sortida I²C SEMPRE es connecti a l'entrada I²C. El mateix s’ha de seguir per al Raspberry Pi amb l’escut I²C muntat damunt els pins GPIO. Tenim l’escut I²C i els cables de connexió al nostre costat com un gran alleujament i un avantatge molt gran ja que només ens queda opció plug and play. Ja no hi ha problemes de cablejat i pins i, per tant, la confusió ha desaparegut. Imagina’t a tu mateix a la xarxa de cables i hi entres. Un alleujament d'això. Això fa que les coses siguin senzilles.

Nota: el cable marró sempre ha de seguir la connexió de terra (GND) entre la sortida d’un dispositiu i l’entrada d’un altre dispositiu

La connectivitat a Internet és una necessitat

En realitat, aquí podeu triar. Podeu connectar Raspberry Pi amb el cable LAN o l’adaptador Nano USB sense fils per a la connectivitat WIFI. Sigui com sigui, el manifest és connectar-se a Internet, cosa que s’aconsegueix.

Alimentació del circuit

Connecteu el cable Micro USB a la presa d’alimentació de Raspberry Pi. Punch up i voilà! Tot està bé i començarem immediatament.

Connexió a la pantalla

Podem tenir el cable HDMI connectat a un monitor o a un televisor. Podem accedir a un Raspberry Pi sense connectar-lo a un monitor mitjançant -SSH (accediu a la línia d’ordres del Pi des d’un altre ordinador). També podeu utilitzar el programari PUTTY. Aquesta opció és per a usuaris avançats, de manera que no la tractarem detalladament aquí.

He sentit que hi haurà una recessió, he decidit no participar-hi

Pas 3: programació de Raspberry Pi a Java

Programació de Raspberry Pi a Java
Programació de Raspberry Pi a Java

El codi Java per al sensor Raspberry Pi i BME280. Està disponible al nostre dipòsit de Github.

Abans d’accedir al codi, assegureu-vos de llegir les instruccions del fitxer Llegeix-me i configurar el Raspberry Pi segons el mateix. Només trigarà un moment a fer-ho. Una estació meteorològica personal és un conjunt d’instruments de mesura del temps operats per un particular, club, associació o fins i tot empresa. Les estacions meteorològiques personals només es poden operar per al gaudi i l’educació del propietari, però molts operadors d’estacions meteorològiques personals també comparteixen les seves dades amb altres persones, ja sigui mitjançant la recopilació manual de dades i la distribució, o mitjançant l’ús d’internet o ràdio amateur.

El codi es troba en la forma més senzilla que podeu imaginar i no hauríeu de tenir cap problema, però pregunteu-vos-ho. Fins i tot si sabeu mil coses, pregunteu-ho a algú que ho sàpiga.

Podeu copiar el codi Java de treball d’aquest sensor també des d’aquí.

// Distribuïda amb una llicència de lliure voluntat.// Utilitzeu-la de la manera que vulgueu, de forma gratuïta o gratuïta, sempre que encaixi en les llicències de les seves obres associades. // BME280 // Aquest codi està dissenyat per funcionar amb el mini mòdul BME280_I2CS I2C disponible a ControlEverything.com. //

import com.pi4j.io.i2c. I2CBus;

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

classe pública BME280

{public static void main (String args ) throws Exception {// Crea bus I2C Bus I2CBus = I2CFactory.getInstance (I2CBus. BUS_1); // Obteniu un dispositiu I2C, l’adreça I2C de BME280 és 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Llegiu 24 bytes de dades de l'adreça 0x88 (136) byte b1 = byte nou [24]; device.read (0x88, b1, 0, 24); // Converteix les dades // coeficients temporals 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; } // coeficients de pressió 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; } // Llegiu 1 byte de dades de l'adreça 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Llegiu 7 bytes de dades de l'adreça 0xE1 (225) device.read (0xE1, b1, 0, 7); // Converteix les dades // coeficients d'humitat 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; } // Seleccioneu el registre d'humitat de control // Humitat sobre la freqüència de mostreig = 1 device.write (0xF2, (byte) 0x01); // Seleccioneu el registre de mesurament de control // Mode normal, temperatura i pressió sobre la freqüència de mostreig = 1 device.write (0xF4, (byte) 0x27); // Seleccioneu registre de configuració // Temps d'espera = 1000 ms device.write (0xF5, (byte) 0xA0); // Llegiu 8 bytes de dades de l'adreça 0xF7 (247) // pressió msb1, pressió msb, pressió lsb, temp msb1, temp msb, temp lsb, humitat lsb, humitat msb byte data = new byte [8]; device.read (0xF7, data, 0, 8); // Converteix les dades de pressió i temperatura a 19 bits de llarg adc_p = (((llarg) (dades [0] i 0xFF) * 65536) + ((llarg) (dades [1] i 0xFF) * 256) + (llarg) (dades [2] i 0xF0)) / 16; llarg adc_t = (((llarg) (dades [3] i 0xFF) * 65536) + ((llarg) (dades [4] i 0xFF) * 256) + (llarg) (dades [5] i 0xF0)) / 16; // Converteix les dades d'humitat llargues adc_h = ((llargues) (dades [6] i 0xFF) * 256 + (llargues) (dades [7] i 0xFF)); // Càlculs de compensació de temperatura doble var1 = (((doble) adc_t) / 16384.0 - ((doble) dig_T1) / 1024.0) * ((doble) 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); doble t_fine = (llarg) (var1 + var2); doble cTemp = (var1 + var2) / 5120,0; doble fTemp = cTemp * 1,8 + 32; // Càlculs de compensació de pressió 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; pressió doble = (p + (var1 + var2 + ((doble) dig_P7)) / 16,0) / 100; // Càlculs de compensació d'humitat doble 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))); doble humitat = var_H * (1.0 - dig_H1 * var_H / 524288.0); si (humitat> 100,0) {humitat = 100,0; } else if (humitat <0,0) {humitat = 0,0; } // Data de sortida a la pantalla System.out.printf ("Temperatura en centígrads:%.2f C% n", cTemp); System.out.printf ("Temperatura en Fahrenheit:%.2f F% n", fTemp); System.out.printf ("Pressió:%.2f hPa% n", pressió); System.out.printf ("Humitat relativa:%.2f %% RH% n", humitat); }}

Pas 4: la pràctica del codi

La pràctica del codi
La pràctica del codi

Ara, descarregueu (o git pull) el codi i obriu-lo al Raspberry Pi.

Executeu les ordres per compilar i penjar el codi al terminal i veure la sortida a Monitor. Al cap de pocs moments, es visualitzaran tots els paràmetres. Per assegurar-vos que teniu una transició de codi fluida i un resultat tranquil (ish), penseu en més idees per fer més modificacions (cada projecte comença amb una història).

Pas 5: Utilització al món constructiu

El BME280 aconsegueix un alt rendiment en totes les aplicacions que requereixen mesurament d’humitat i pressió. Aquestes aplicacions emergents són Context Awareness, per exemple. Detecció de la pell, detecció de canvis d’habitació, control de benestar / benestar, advertència sobre sequedat o altes temperatures, mesura de volum i cabal d’aire, control domòtic, control de calefacció, ventilació, aire condicionat, Internet de les coses (IoT), Millora del GPS (per exemple, millora del temps fins a la primera solució, recompte, detecció de pendents), navegació interior (detecció de canvi de pis, detecció d’ascensors), navegació exterior, aplicacions d’oci i esports, previsió meteorològica i indicació de velocitat vertical (pujada / lavabo) Velocitat).

Pas 6: Conclusió

Com podeu veure, aquest projecte és una demostració fantàstica de què són capaços el maquinari i el programari. En poc temps, es pot construir un projecte tan impressionant! Per descomptat, això és només el començament. Fer una estació meteorològica personal més sofisticada com les estacions meteorològiques personals d’aeroport automatitzat pot implicar alguns sensors més com anemòmetre (velocitat del vent), transmissòmetre (visibilitat), piranòmetre (radiació solar), etc. Tenim un vídeo tutorial a Youtube amb el funcionament bàsic del Sensor I²C amb Rasp Pi. És realment sorprenent veure els resultats i el funcionament de les comunicacions I²C. Comproveu-ho també. Diverteix-te construint i aprenent! Feu-nos saber què en penseu d’aquest instructiu. Ens agradaria fer algunes millores si cal.

Recomanat: