Sommario:

Stazione meteorologica personale utilizzando Raspberry Pi con BME280 in Java: 6 passaggi
Stazione meteorologica personale utilizzando Raspberry Pi con BME280 in Java: 6 passaggi

Video: Stazione meteorologica personale utilizzando Raspberry Pi con BME280 in Java: 6 passaggi

Video: Stazione meteorologica personale utilizzando Raspberry Pi con BME280 in Java: 6 passaggi
Video: Usare il sensore BMP280 per temperatura, pressione e umidità con Arduino - Video 313 2024, Luglio
Anonim
Image
Image
Distinta delle attrezzature essenziali
Distinta delle attrezzature essenziali

Il cattivo tempo sembra sempre peggio attraverso una finestra

Siamo sempre stati interessati a monitorare il nostro meteo locale e ciò che vediamo fuori dalla finestra. Volevamo anche un controllo migliore sul nostro sistema di riscaldamento e aria condizionata. Costruire una stazione meteorologica personale è una grande esperienza di apprendimento. Al termine della creazione di questo progetto, avrai una migliore comprensione di come funzionano le comunicazioni wireless, come funzionano i sensori e quanto potente può essere la piattaforma Raspberry Pi. Con questo progetto come base e l'esperienza acquisita, sarai in grado di costruire facilmente progetti più complessi in futuro.

Passaggio 1: Distinta dell'attrezzatura essenziale

Distinta dell'attrezzatura essenziale
Distinta dell'attrezzatura essenziale
Distinta delle attrezzature essenziali
Distinta delle attrezzature essenziali
Distinta delle attrezzature essenziali
Distinta delle attrezzature essenziali

1. Un lampone pi

Il primo passo è mettere le mani su una scheda Raspberry Pi. Raspberry Pi è un computer a scheda singola alimentato da Linux. Il suo obiettivo è migliorare le capacità di programmazione e la comprensione dell'hardware. È stato rapidamente adottato da hobbisti e appassionati di elettronica per progetti innovativi.

2. Scudo I²C per Raspberry Pi

L'INPI2 (adattatore I2C) fornisce al Raspberry Pi 2/3 una porta I²C da utilizzare con più dispositivi I²C. È disponibile su Dcube Store

3. Sensore digitale di umidità, pressione e temperatura, BME280

Il BME280 è un sensore di umidità, pressione e temperatura che ha tempi di risposta rapidi e un'elevata precisione complessiva. Abbiamo acquistato questo sensore da Dcube Store

4. Cavo di collegamento I²C

Avevamo il cavo di collegamento I²C disponibile presso Dcube Store

5. Cavo micro USB

Il cavo micro USB L'alimentatore è la scelta ideale per alimentare il Raspberry Pi.

6. Interpretare l'accesso a Internet tramite cavo Ethernet/adattatore WiFi

Una delle prime cose che vorrai fare è connettere il tuo Raspberry Pi a Internet. Possiamo connetterci usando un cavo Ethernet. Un'altra possibilità è la connessione a una rete wireless utilizzando un adattatore wireless USB.

7. Cavo HDMI (cavo display e connettività)

Qualsiasi monitor HDMI/DVI e qualsiasi TV dovrebbe funzionare come display per il Pi. Ma è facoltativo. Anche la possibilità di accesso remoto (come SSH) non può essere esclusa. Puoi anche accedere con il software PUTTY.

Passaggio 2: connessioni hardware per l'installazione

Connessioni hardware per l'installazione
Connessioni hardware per l'installazione
Connessioni hardware per l'installazione
Connessioni hardware per l'installazione

Realizzare il circuito secondo lo schema mostrato.

Durante l'apprendimento, abbiamo approfondito le basi dell'elettronica per quanto riguarda la conoscenza dell'hardware e del software. Volevamo redigere un semplice schema elettronico per questo progetto. Gli schemi elettronici sono come un progetto per l'elettronica. Disegna un progetto e segui attentamente il progetto. Abbiamo applicato alcune basi dell'elettronica qui. La logica ti porta da A a B, l'immaginazione ti porterà ovunque!

Collegamento di Raspberry Pi e I²C Shield

Prima di tutto prendi il Raspberry Pi e posiziona l'I²C Shield (con la porta I²C rivolta verso l'interno) su di esso. Premi delicatamente lo scudo sui pin GPIO di Pi e abbiamo finito con questo passaggio facile come una torta (vedi la foto).

Collegamento del sensore e Raspberry Pi

Prendi il sensore e collega il cavo I²C con esso. Assicurati che l'uscita I²C si colleghi SEMPRE all'ingresso I²C. Lo stesso deve essere seguito per il Raspberry Pi con lo shield I²C montato sopra i pin GPIO. Abbiamo lo Shield I²C e i cavi di collegamento dalla nostra parte come un grande sollievo e un grande vantaggio in quanto ci rimane solo il opzione plug and play. Niente più pin e problemi di cablaggio e quindi la confusione è sparita. Immagina di essere nella rete di fili e di entrarci. Un sollievo da questo. Questo rende le cose semplici.

Nota: il filo marrone dovrebbe sempre seguire la connessione di terra (GND) tra l'uscita di un dispositivo e l'ingresso di un altro dispositivo

La connettività Internet è una necessità

Hai una scelta qui in realtà. Puoi collegare Raspberry Pi con il cavo LAN o l'adattatore wireless Nano USB per la connettività WIFI. In entrambi i casi, il manifest è quello di connettersi a Internet che è realizzato.

Alimentazione del circuito

Collega il cavo Micro USB alla presa di alimentazione di Raspberry Pi. Dai un pugno e voilà! È tutto a posto e inizieremo subito.

Collegamento al display

Possiamo avere il cavo HDMI collegato a un monitor o a una TV. Possiamo accedere a un Raspberry Pi senza collegarlo a un monitor usando -SSH (Accedi alla riga di comando del Pi da un altro computer). Puoi anche usare il software PUTTY per quello. Questa opzione è per utenti avanzati, quindi non la tratteremo in dettaglio qui.

Ho sentito che ci sarà una recessione, ho deciso di non partecipare

Passaggio 3: programmazione Raspberry Pi in Java

Programmazione Raspberry Pi in Java
Programmazione Raspberry Pi in Java

Il codice Java per il sensore Raspberry Pi e BME280. È disponibile nel nostro repository Github.

Prima di passare al codice, assicurati di leggere le istruzioni fornite nel file Leggimi e imposta il tuo Raspberry Pi in base ad esso. Ci vorrà solo un momento per farlo. Una stazione meteorologica personale è un insieme di strumenti di misurazione del tempo gestiti da un privato, un club, un'associazione o persino un'azienda. Le stazioni meteorologiche personali possono essere gestite esclusivamente per il divertimento e l'istruzione del proprietario, ma molti operatori di stazioni meteorologiche personali condividono i loro dati anche con altri, sia compilando manualmente i dati e distribuendoli, sia attraverso l'uso di Internet o della radio amatoriale.

Il codice è nella sua forma più semplice che puoi immaginare e non dovresti avere problemi con esso, ma chiedi se lo hai. Anche se sai mille cose, chiedi comunque a qualcuno che lo sa.

Puoi anche copiare il codice Java funzionante per questo sensore da qui.

// Distribuito con una licenza di libero arbitrio.// Usalo come vuoi, a scopo di lucro o gratuito, a condizione che si adatti alle licenze delle opere associate. // BME280 // Questo codice è progettato per funzionare con il Mini Modulo BME280_I2CS I2C disponibile su ControlEverything.com. //

import com.pi4j.io.i2c. I2CBus;

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

classe pubblica BME280

{ public static void main(String args) genera un'eccezione { // Crea bus I2C bus I2CBus = I2CFactory.getInstance(I2CBus. BUS_1); // Ottieni il dispositivo I2C, l'indirizzo I2C BME280 è 0x76(108) I2CDevice device = bus.getDevice(0x76); // Legge 24 byte di dati dall'indirizzo 0x88(136) byte b1 = new byte[24]; device.read(0x88, b1, 0, 24); // Converti i dati // coefficienti di temperatura 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; } // coefficienti di pressione 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; } // Legge 1 byte di dati dall'indirizzo 0xA1(161) int dig_H1 = ((byte)device.read(0xA1) & 0xFF); // Legge 7 byte di dati dall'indirizzo 0xE1(225) device.read(0xE1, b1, 0, 7); // Converti i dati // coefficienti di umidità 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; } // Seleziona il registro dell'umidità di controllo // Umidità sulla frequenza di campionamento = 1 device.write(0xF2, (byte)0x01); // Seleziona il registro di misurazione del controllo // Modalità normale, temperatura e pressione oltre la frequenza di campionamento = 1 device.write(0xF4, (byte)0x27); // Seleziona il registro di configurazione // Stand_by time = 1000 ms device.write(0xF5, (byte)0xA0); // Legge 8 byte di dati dall'indirizzo 0xF7(247) // pressione msb1, pressione msb, pressione lsb, temp msb1, temp msb, temp lsb, umidità lsb, umidità msb byte data = new byte[8]; device.read(0xF7, data, 0, 8); // Converti i dati di pressione e temperatura in una lunghezza di 19 bit adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (long) (dati[2] & 0xF0)) / 16; long adc_t = (((long)(data[3] & 0xFF) * 65536) + ((long)(data[4] & 0xFF) * 256) + (long)(data[5] & 0xF0)) / 16; // Converti i dati di umidità long adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF)); // Calcoli dell'offset di temperatura double var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2); double var2 = ((((doppio)adc_t) / 131072.0 - ((doppio)dig_T1) / 8192.0) * (((doppio)adc_t)/131072.0 - ((doppio)dig_T1)/8192.0)) * ((doppio)dig_T3); double t_fine = (long)(var1 + var2); double cTemp = (var1 + var2) / 5120.0; doppia fTemp = cTemp * 1,8 + 32; // Calcoli dell'offset di pressione var1 = ((double)t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((doppio)dig_P6) / 32768.0; var2 = var2 + var1 * ((doppio)dig_P5) * 2.0; var2 = (var2 / 4.0) + (((doppio)dig_P4) * 65536.0); var1 = (((doppio) dig_P3) * var1 * var1 / 524288.0 + ((doppio) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((doppio)dig_P1); doppio p = 1048576,0 - (doppio)adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((doppio) dig_P9) * p * p / 2147483648.0; var2 = p * ((doppio) dig_P8) / 32768.0; doppia pressione = (p + (var1 + var2 + ((double)dig_P7)) / 16,0) / 100; // Calcoli dell'offset dell'umidità 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))); doppia umidità = var_H * (1.0 - dig_H1 * var_H / 524288.0); if(umidità > 100,0) { umidità = 100,0; }else if(umidità < 0,0) { umidità = 0,0; } // Invia i dati allo schermo System.out.printf("Temperature in Celsius: %.2f C %n", cTemp); System.out.printf("Temperatura in Fahrenheit: %.2f F %n", fTemp); System.out.printf("Pressione: %.2f hPa %n", pressione); System.out.printf("Umidità relativa: %.2f %% RH %n", umidità); } }

Passaggio 4: la praticità del codice

Il Codice Praticità
Il Codice Praticità

Ora scarica (o git pull) il codice e aprilo nel Raspberry Pi.

Esegui i comandi per compilare e caricare il codice sul terminale e vedere l'output su Monitor. Dopo pochi istanti, verranno visualizzati tutti i parametri. Assicurandoti di avere una transizione del codice fluida e un risultato calmo (ish), pensi a più idee per apportare ulteriori modifiche (Ogni progetto inizia con una storia).

Passaggio 5: utilizzo nel mondo costruttivo

Il BME280 raggiunge prestazioni elevate in tutte le applicazioni che richiedono la misurazione dell'umidità e della pressione. Queste applicazioni emergenti sono Context Awareness, ad es. Rilevamento pelle, rilevamento cambio stanza, monitoraggio fitness/benessere, avviso per secchezza o temperature elevate, misurazione del volume e del flusso d'aria, controllo dell'automazione domestica, controllo del riscaldamento, ventilazione, aria condizionata (HVAC), Internet of Things (IoT), Miglioramento del GPS (ad es. miglioramento del tempo per la prima correzione, calcolo della stima, rilevamento della pendenza), navigazione interna (rilevamento cambio di piano, rilevamento ascensore), navigazione all'aperto, applicazioni per il tempo libero e lo sport, previsioni del tempo e indicazione della velocità verticale (aumento/discesa Velocità).

Passaggio 6: conclusione

Come puoi vedere, questo progetto è una grande dimostrazione di ciò di cui sono capaci hardware e software. In un breve lasso di tempo, si può costruire un progetto così impressionante! Naturalmente, questo è solo l'inizio. Realizzare una stazione meteorologica personale più sofisticata come le stazioni meteorologiche personali aeroportuali automatizzate può coinvolgere alcuni sensori in più come anemometro (velocità del vento), trasmissometro (visibilità), piranometro (radiazione solare) ecc. Abbiamo un video tutorial su Youtube con il funzionamento di base del Sensore I²C con Rasp Pi. È davvero sorprendente vedere i risultati e il funzionamento delle comunicazioni I²C. Controlla anche tu. Divertiti a costruire e imparare! Fateci sapere cosa ne pensate di questo istruibile. Ci piacerebbe apportare alcuni miglioramenti, se necessario.

Consigliato: