Sommario:

Calcolo di umidità, pressione e temperatura utilizzando BME280 e interfaccia fotonica: 6 passaggi
Calcolo di umidità, pressione e temperatura utilizzando BME280 e interfaccia fotonica: 6 passaggi

Video: Calcolo di umidità, pressione e temperatura utilizzando BME280 e interfaccia fotonica: 6 passaggi

Video: Calcolo di umidità, pressione e temperatura utilizzando BME280 e interfaccia fotonica: 6 passaggi
Video: Usare il sensore BMP280 per temperatura, pressione e umidità con Arduino - Video 313 2024, Dicembre
Anonim
Calcolo di umidità, pressione e temperatura utilizzando BME280 e interfaccia fotonica
Calcolo di umidità, pressione e temperatura utilizzando BME280 e interfaccia fotonica

Ci imbattiamo in vari progetti che richiedono il monitoraggio di temperatura, pressione e umidità. Quindi ci rendiamo conto che questi parametri giocano effettivamente un ruolo vitale nell'avere una stima dell'efficienza di lavoro di un sistema in diverse condizioni atmosferiche. Sia a livello industriale che personale è richiesto un livello ottimale di temperatura, umidità e pressione barometrica per il corretto funzionamento del sistema.

Ecco perché forniamo un tutorial completo su questo sensore, in questo tutorial spiegheremo il funzionamento del sensore di umidità, pressione e temperatura BME280 con fotone particellare.

Passaggio 1: esplorazione del BME280

BME280 Esplorazione
BME280 Esplorazione

Il settore elettronico ha intensificato il proprio gioco con il sensore BME280, un sensore ambientale con temperatura, pressione barometrica e umidità! Questo sensore è ottimo per tutti i tipi di rilevamento meteorologico/ambientale e può essere utilizzato anche in I2C.

Questo sensore di precisione BME280 è la migliore soluzione di rilevamento per misurare l'umidità con una precisione di ±3%, la pressione barometrica con una precisione assoluta di ±1 hPa e la temperatura con una precisione di ±1,0°C. Poiché la pressione cambia con l'altitudine e le misurazioni della pressione sono così buone, puoi anche usarlo come altimetro con una precisione di ± 1 metro o migliore! Il sensore di temperatura è stato ottimizzato per il rumore più basso e la risoluzione più alta e viene utilizzato per la compensazione della temperatura di il sensore di pressione e può essere utilizzato anche per la stima della temperatura ambiente. Le misurazioni con il BME280 possono essere eseguite dall'utente o eseguite a intervalli regolari.

Scheda tecnica: fare clic per visualizzare in anteprima o scaricare la scheda tecnica del sensore BME280.

Passaggio 2: elenco dei requisiti hardware

Elenco dei requisiti hardware
Elenco dei requisiti hardware

Abbiamo utilizzato interamente le parti del negozio Dcube perché sono facili da usare e qualcosa su tutto ciò che si adatta bene su una griglia di centimetri ci fa davvero andare avanti. Puoi usare quello che vuoi, ma lo schema elettrico presume che tu stia usando queste parti.

  • Mini modulo I²C sensore BME280
  • Scudo I²C per fotoni di particelle
  • Fotone particellare
  • Cavo I²C
  • Adattatore di alimentazione

Passaggio 3: interfacciamento

Interfaccia
Interfaccia

La sezione di interfacciamento spiega fondamentalmente i collegamenti di cablaggio richiesti tra il sensore e il fotone della particella. Garantire connessioni corrette è la necessità di base mentre si lavora su qualsiasi sistema per l'output desiderato. Quindi, i collegamenti necessari sono i seguenti:

Il BME280 funzionerà su I2C. Ecco lo schema elettrico di esempio, che mostra come cablare ciascuna interfaccia del sensore. Di default, la scheda è configurata per un'interfaccia I2C, pertanto ti consigliamo di utilizzare questa interfaccia se sei altrimenti agnostico. Tutto ciò di cui hai bisogno sono quattro fili! Sono necessarie solo quattro connessioni pin Vcc, Gnd, SCL e SDA e questi sono collegati con l'aiuto del cavo I2C. Queste connessioni sono mostrate nelle immagini sopra.

Passaggio 4: codice di monitoraggio di temperatura, pressione e umidità

Codice di monitoraggio di temperatura, pressione e umidità
Codice di monitoraggio di temperatura, pressione e umidità
Codice di monitoraggio di temperatura, pressione e umidità
Codice di monitoraggio di temperatura, pressione e umidità

La versione pulita del codice che utilizzeremo per eseguirlo è disponibile QUI.

Durante l'utilizzo del modulo sensore con Arduino, includiamo la libreria application.h e spark_wiring_i2c.h. La libreria "application.h" e spark_wiring_i2c.h contiene le funzioni che facilitano la comunicazione i2c tra il sensore e la particella.

Clicca QUI per aprire la pagina web per il monitoraggio del dispositivo

Carica il codice sulla tua scheda e dovrebbe iniziare a funzionare! Tutti i dati possono essere ottenuti sulla pagina web come mostrato nell'immagine.

Il codice è fornito di seguito:

// 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. #include #include // L'indirizzo I2C del BME280 è 0x76(108) #define Addr 0x76 double cTemp = 0, fTemp = 0, pressione = 0, umidità = 0; void setup() { // Imposta variabile Particle.variable("i2cdevice", "BME280"); articolo.variabile("cTemp", cTemp); Particle.variable("fTemp", fTemp); Particle.variable("pressione", pressione); Particle.variable("umidità", umidità); // Inizializza la comunicazione I2C come MASTER Wire.begin(); // Inizializza la comunicazione seriale, imposta baud rate = 9600 Serial.begin(9600); ritardo(300); } void loop() { unsigned int b1[24]; dati int non firmati[8]; int dig_H1 = 0; for(int i = 0; i < 24; i++) { // Avvia la trasmissione I2C Wire.beginTransmission(Addr); // Seleziona il registro dati Wire.write((136+i)); // Arresta la trasmissione I2C Wire.endTransmission(); // Richiedi 1 byte di dati Wire.requestFrom(Addr, 1); // Legge 24 byte di dati if(Wire.available() == 1) { b1 = Wire.read(); } } // Converti i dati // coefficienti temporanei int dig_T1 = (b1[0] & 0xff) + ((b1[1] & 0xff) * 256); int dig_T2 = b1[2] + (b1[3] * 256); int dig_T3 = b1[4] + (b1[5] * 256); // coefficienti di pressione int dig_P1 = (b1[6] & 0xff) + ((b1[7] & 0xff) * 256); int dig_P2 = b1[8] + (b1[9] * 256); int dig_P3 = b1[10] + (b1[11] * 256); int dig_P4 = b1[12] + (b1[13] * 256); int dig_P5 = b1[14] + (b1[15] * 256); int dig_P6 = b1[16] + (b1[17] * 256); int dig_P7 = b1[18] + (b1[19] * 256); int dig_P8 = b1[20] + (b1[21] * 256); int dig_P9 = b1[22] + (b1[23] * 256); for(int i = 0; i < 7; i++) { // Avvia la trasmissione I2C Wire.beginTransmission(Addr); // Seleziona il registro dati Wire.write((225+i)); // Arresta la trasmissione I2C Wire.endTransmission(); // Richiedi 1 byte di dati Wire.requestFrom(Addr, 1); // Legge 7 byte di dati if(Wire.available() == 1) { b1 = Wire.read(); } } // Converti i dati // coefficienti di umidità int dig_H2 = b1[0] + (b1[1] * 256); int dig_H3 = b1[2] & 0xFF; int dig_H4 = (b1[3] * 16) + (b1[4] & 0xF); int dig_H5 = (b1[4] / 16) + (b1[5] * 16); int dig_H6 = b1[6]; // Avvia la trasmissione I2C Wire.beginTransmission(Addr); // Seleziona il registro dati Wire.write(161); // Arresta la trasmissione I2C Wire.endTransmission(); // Richiedi 1 byte di dati Wire.requestFrom(Addr, 1); // Legge 1 byte di dati if(Wire.available() == 1) { dig_H1 = Wire.read(); } // Avvia la trasmissione I2C Wire.beginTransmission(Addr); // Seleziona il registro dell'umidità di controllo Wire.write(0xF2); // Umidità sulla frequenza di campionamento = 1 Wire.write(0x01); // Arresta la trasmissione I2C Wire.endTransmission(); // Avvia la trasmissione I2C Wire.beginTransmission(Addr); // Seleziona il registro di misura di controllo Wire.write(0xF4); // Modalità normale, temperatura e pressione oltre la frequenza di campionamento = 1 Wire.write(0x27); // Arresta la trasmissione I2C Wire.endTransmission(); // Avvia la trasmissione I2C Wire.beginTransmission(Addr); // Seleziona il registro di configurazione Wire.write(0xF5); // Tempo di attesa = 1000ms Wire.write(0xA0); // Arresta la trasmissione I2C Wire.endTransmission(); for(int i = 0; i <8; i++) { // Avvia la trasmissione I2C Wire.beginTransmission(Addr); // Seleziona il registro dati Wire.write((247+i)); // Arresta la trasmissione I2C Wire.endTransmission(); // Richiedi 1 byte di dati Wire.requestFrom(Addr, 1); // Legge 8 byte di dati if(Wire.available() == 1) { data = Wire.read(); } } // Converte i dati di pressione e temperatura in una lunghezza di 19 bit adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (lungo)(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 al dashboard Particle.publish("Temperature in Celsius: ", String(cTemp)); Particle.publish("Temperature in Fahrenheit: ", String(fTemp)); Particle.publish("Pressione: ", String(pressione)); Particle.publish("Umidità relativa: ", String(umidità)); ritardo(1000); }

Passaggio 5: applicazioni:

Applicazioni
Applicazioni

Il sensore di temperatura, pressione e umidità relativa BME280 ha varie applicazioni industriali come il monitoraggio della temperatura, la protezione termica delle periferiche del computer, il monitoraggio della pressione nell'industria. Abbiamo anche utilizzato questo sensore in applicazioni per stazioni meteorologiche e sistemi di monitoraggio delle serre.

Altre applicazioni possono includere:

  1. Consapevolezza del contesto, ad es. rilevamento della pelle, rilevamento del cambiamento di stanza.
  2. Monitoraggio fitness/benessere - Avvertenza per secchezza o temperature elevate.
  3. Misura del volume e del flusso d'aria.
  4. Controllo domotico.
  5. Controllo riscaldamento, ventilazione, aria condizionata (HVAC).
  6. Internet delle cose.
  7. Miglioramento del GPS (ad es. miglioramento del tempo per il primo fix, stima stimata, rilevamento della pendenza).
  8. Navigazione indoor (rilevamento cambio piano, rilevamento ascensore).
  9. Navigazione outdoor, applicazioni per il tempo libero e lo sport.
  10. Previsioni del tempo.
  11. Indicazione della velocità verticale (velocità di salita/discesa)..

Passaggio 6: video tutorial

Guarda il nostro video tutorial per seguire tutti i passaggi per interfacciare e completare il progetto.

Resta sintonizzato per l'interfacciamento di altri sensori e per i blog funzionanti.

Consigliato: