Tabla de contenido:

Cálculo de humedad, presión y temperatura mediante BME280 e interfaz de fotones: 6 pasos
Cálculo de humedad, presión y temperatura mediante BME280 e interfaz de fotones: 6 pasos

Video: Cálculo de humedad, presión y temperatura mediante BME280 e interfaz de fotones: 6 pasos

Video: Cálculo de humedad, presión y temperatura mediante BME280 e interfaz de fotones: 6 pasos
Video: Estación metereológica con Raspberry Pi y sensor BME280. Mediremos temperatura, presión y humedad. 2024, Mes de julio
Anonim
Cálculo de humedad, presión y temperatura utilizando BME280 e interfaz de fotones
Cálculo de humedad, presión y temperatura utilizando BME280 e interfaz de fotones

Nos topamos con varios proyectos que requieren monitoreo de temperatura, presión y humedad. Por lo tanto, nos damos cuenta de que estos parámetros realmente juegan un papel vital en tener una estimación de la eficiencia de trabajo de un sistema en diferentes condiciones atmosféricas. Tanto a nivel industrial como de sistemas personales es requisito un nivel óptimo de temperatura, humedad y presión barométrica para el adecuado funcionamiento del sistema.

Es por eso que proporcionamos un completo tutorial sobre este sensor, en este tutorial vamos a explicar el funcionamiento del sensor de humedad, presión y temperatura BME280 con fotón de partículas.

Paso 1: Exploración de BME280

Exploración BME280
Exploración BME280

El sector electrónico ha intensificado su juego con el sensor BME280, un sensor ambiental con temperatura, presión barométrica y humedad. Este sensor es ideal para todo tipo de sensores climáticos / ambientales e incluso se puede usar en I2C.

Este sensor de precisión BME280 es la mejor solución de detección para medir la humedad con una precisión de ± 3%, la presión barométrica con una precisión absoluta de ± 1 hPa y la temperatura con una precisión de ± 1.0 ° C. Debido a que la presión cambia con la altitud y las mediciones de presión son tan buenas, ¡también puede usarlo como un altímetro con una precisión de ± 1 metro o más! El sensor de temperatura se ha optimizado para el ruido más bajo y la resolución más alta y se utiliza para la compensación de temperatura de sensor de presión y también se puede utilizar para estimar la temperatura ambiente. El usuario puede realizar las mediciones con el BME280 o realizarlas a intervalos regulares.

Hoja de datos: haga clic para obtener una vista previa o descargar la hoja de datos del sensor BME280.

Paso 2: Lista de requisitos de hardware

Lista de requisitos de hardware
Lista de requisitos de hardware

Usamos completamente Dcube Store Parts porque son fáciles de usar, y algo acerca de que todo encaja perfectamente en una cuadrícula de centímetros realmente nos pone en marcha. Puede usar lo que quiera, pero el diagrama de cableado asumirá que está usando estas piezas.

  • Mini módulo BME280 Sensor I²C
  • Escudo I²C para fotones de partículas
  • Fotón de partículas
  • Cable I²C
  • Adaptador de corriente

Paso 3: Interfaz

Interfaz
Interfaz

La sección de interfaz básicamente explica las conexiones de cableado necesarias entre el sensor y el fotón de partículas. Asegurar las conexiones correctas es la necesidad básica al trabajar en cualquier sistema para obtener la salida deseada. Entonces, las conexiones requeridas son las siguientes:

El BME280 funcionará sobre I2C. Aquí está el diagrama de cableado de ejemplo, que demuestra cómo cablear cada interfaz del sensor. De fábrica, la placa está configurada para una interfaz I2C, por lo que recomendamos utilizar esta interfaz si es agnóstico. ¡Todo lo que necesitas son cuatro cables! Solo se requieren cuatro conexiones Vcc, Gnd, SCL y pines SDA y estos se conectan con la ayuda del cable I2C. Estas conexiones se muestran en las imágenes de arriba.

Paso 4: Código de monitoreo de temperatura, presión y humedad

Código de monitoreo de temperatura, presión y humedad
Código de monitoreo de temperatura, presión y humedad
Código de monitoreo de temperatura, presión y humedad
Código de monitoreo de temperatura, presión y humedad

La versión limpia del código que usaremos para ejecutar esto está disponible AQUÍ.

Mientras usamos el módulo sensor con Arduino, incluimos la biblioteca application.hy spark_wiring_i2c.h. La biblioteca "application.h" y spark_wiring_i2c.h contiene las funciones que facilitan la comunicación i2c entre el sensor y la partícula.

Haga clic AQUÍ para abrir la página web de monitoreo de dispositivos

¡Sube el código a tu tablero y debería empezar a funcionar! Todos los datos se pueden obtener en la página web como se muestra en la imagen.

El código se proporciona a continuación:

// Distribuido con licencia de libre albedrío.// Úselo de la forma que desee, lucrativa o gratuita, siempre que encaje en las licencias de sus obras asociadas. // BME280 // Este código está diseñado para funcionar con el mini módulo BME280_I2CS I2C disponible en ControlEverything.com. #include #include // BME280 La dirección I2C es 0x76 (108) #define Addr 0x76 double cTemp = 0, fTemp = 0, pressure = 0, humedad = 0; void setup () {// Establecer variable Particle.variable ("i2cdevice", "BME280"); articulo.variable ("cTemp", cTemp); Particle.variable ("fTemp", fTemp); Particle.variable ("presión", presión); Particle.variable ("humedad", humedad); // Inicializar la comunicación I2C como MASTER Wire.begin (); // Inicializar la comunicación en serie, configurar la velocidad en baudios = 9600 Serial.begin (9600); retraso (300); } bucle vacío () {unsigned int b1 [24]; datos int sin firmar [8]; int dig_H1 = 0; for (int i = 0; i <24; i ++) {// Iniciar la transmisión I2C Wire.beginTransmission (Addr); // Seleccionar registro de datos Wire.write ((136 + i)); // Detener la transmisión I2C Wire.endTransmission (); // Solicitar 1 byte de datos Wire.requestFrom (Addr, 1); // Leer 24 bytes de datos if (Wire.available () == 1) {b1 = Wire.read (); }} // Convertir los datos // coeficientes temporales 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); // coeficientes de presión 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 ++) {// Iniciar la transmisión I2C Wire.beginTransmission (Addr); // Seleccionar registro de datos Wire.write ((225 + i)); // Detener la transmisión I2C Wire.endTransmission (); // Solicitar 1 byte de datos Wire.requestFrom (Addr, 1); // Leer 7 bytes de datos if (Wire.available () == 1) {b1 = Wire.read (); }} // Convertir los datos // coeficientes de humedad 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]; // Iniciar I2C Transmission Wire.beginTransmission (Addr); // Seleccionar registro de datos Wire.write (161); // Detener la transmisión I2C Wire.endTransmission (); // Solicitar 1 byte de datos Wire.requestFrom (Addr, 1); // Leer 1 byte de datos if (Wire.available () == 1) {dig_H1 = Wire.read (); } // Iniciar I2C Transmission Wire.beginTransmission (Addr); // Seleccionar registro de control de humedad Wire.write (0xF2); // Humedad sobre la frecuencia de muestreo = 1 Wire.write (0x01); // Detener la transmisión I2C Wire.endTransmission (); // Iniciar I2C Transmission Wire.beginTransmission (Addr); // Seleccionar registro de medida de control Wire.write (0xF4); // Modo normal, temperatura y presión sobre la frecuencia de muestreo = 1 Wire.write (0x27); // Detener la transmisión I2C Wire.endTransmission (); // Iniciar I2C Transmission Wire.beginTransmission (Addr); // Seleccione el registro de configuración Wire.write (0xF5); // Tiempo en espera = 1000ms Wire.write (0xA0); // Detener la transmisión I2C Wire.endTransmission (); for (int i = 0; i <8; i ++) {// Iniciar la transmisión I2C Wire.beginTransmission (Addr); // Seleccionar registro de datos Wire.write ((247 + i)); // Detener la transmisión I2C Wire.endTransmission (); // Solicitar 1 byte de datos Wire.requestFrom (Addr, 1); // Leer 8 bytes de datos if (Wire.available () == 1) {data = Wire.read (); }} // Convierta los datos de presión y temperatura a 19 bits de longitud adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (long) (datos [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Convierta los datos de humedad long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Cálculos de compensación de temperatura double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); double var2 = ((((doble) adc_t) / 131072.0 - ((doble) dig_T1) / 8192.0) * (((doble) adc_t) /131072.0 - ((doble) dig_T1) /8192.0)) * ((doble) dig_T3); doble t_fine = (largo) (var1 + var2); cTemp doble = (var1 + var2) / 5120.0; fTemp doble = cTemp * 1.8 + 32; // Cálculos de compensación de presión 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; presión doble = (p + (var1 + var2 + ((doble) dig_P7)) / 16.0) / 100; // Cálculos de compensación de humedad 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))); doble humedad = var_H * (1.0 - dig_H1 * var_H / 524288.0); si (humedad> 100,0) {humedad = 100,0; } else if (humedad <0.0) {humedad = 0.0; } // Salida de datos al tablero Particle.publish ("Temperatura en grados Celsius:", String (cTemp)); Particle.publish ("Temperatura en Fahrenheit:", String (fTemp)); Particle.publish ("Presión:", Cadena (presión)); Particle.publish ("Humedad relativa:", String (humedad)); retraso (1000); }

Paso 5: Aplicaciones:

Aplicaciones
Aplicaciones

El sensor de temperatura, presión y humedad relativa BME280 tiene varias aplicaciones industriales como monitoreo de temperatura, protección térmica periférica de computadora, monitoreo de presión en la industria. También hemos empleado este sensor en aplicaciones de estaciones meteorológicas, así como en sistemas de monitoreo de invernaderos.

Otras aplicaciones pueden incluir:

  1. Conciencia del contexto, p. Ej. detección de piel, detección de cambio de habitación.
  2. Monitoreo de la condición física / bienestar: advertencia sobre sequedad o altas temperaturas.
  3. Medida de volumen y caudal de aire.
  4. Control de domótica.
  5. Control de calefacción, ventilación, aire acondicionado (HVAC).
  6. Internet de las Cosas.
  7. Mejora del GPS (por ejemplo, mejora del tiempo hasta el primer punto fijo, navegación a estima, detección de pendientes).
  8. Navegación interior (cambio de detección de piso, detección de ascensor).
  9. Aplicaciones de navegación, ocio y deportes al aire libre.
  10. Pronóstico del tiempo.
  11. Indicación de velocidad vertical (velocidad de subida / bajada).

Paso 6: Tutorial en video

Vea nuestro video tutorial para seguir todos los pasos para interactuar y completar el proyecto.

Esté atento a los blogs de trabajo e interfaces de otros sensores.

Recomendado: