Sensor BME680 para Gas, Temp., Hum. y Presión Atmosferica
El BME680 es un sensor de medición de temperatura, humedad, presión barométrica y compuestos orgánicos volátiles (VOC). Detectar gases como monóxido de carbono, butano, etanol, acetona etc. No detecta directamente CO2. El sensor puede medir la suma de contaminantes VOC en el aire circundante, como de pintura, muebles o desechos, altos niveles de VOC de cocinar y el aire exhalado o la sudoración. El sensor mide solo 3x3mm con consumos de pocos µA y esta pensado para ser integrado en teléfonos móviles. La comunicación se realiza a través de SPI o I²C (address 0x76) que uso en este montaje. Está conectado a un esp8266 a 3,3v. He usado la librería de Adafruit que mide los cuatro parámetros antes mencionados y también puede calcular el Air Quality Index (IAQ) que yo no he usado porque solo me interesaba la detección de gases inflamables. También es posible emplear la librería de Bosch. Es algo más compleja que la de Adafruit, y proporciona más valores del sensor como, por ejemplo, la estimación de CO2 equivalente.
Con la idea de tener una alarma en el móvil he empleado un esp8266. Aparte del BMP680 uso una pantalla de 0,96'' y un zumbador. Sensor y pantalla están conectados en paralelo por I²C. Así, el circuito es muy simple.
Decir que los valores del sensor de gas no son fijos ni estables. Por ello no puede ponerse un valor fijo de "disparo" Cuando detecta gas se produce una disminución de su resistencia en KOhms. Así, la alarma la he determinado cuando hay una disminución del 5% sobre el valor anteriormente medido. En ese momento suena el zumbador durante unos segundos y envía una llamada a la URL de Telegram que a su vez puede mandarme una notificación o en este caso una llamada con aviso por voz.
const char* ssid = "Jopapa"; const char* password = "xxxxxxxxxxxxxxxx"; int gasA=0; int gasN=0; int gasB = 0;
//Mi Domain name with URL path or IP address para Telegram en https://www.callmebot.com/ //Llamada de teléfono String serverName = "http://api.callmebot.com/start.php?user=@XXXXXXXXXXXX&text=Mensaje+por+alarma+de+gas+en+cocina&lang=es-ES-Standard-B&rpt=5"; //o por mensage Telegram //String serverName = "http://api.callmebot.com/text.php?user=XXXXXXXXXXX&text=Alarma+por+gas+en+la+cocina";
void setup() { Serial.begin(9600); delay(100); WiFi.begin(ssid, password); while(WiFi.status() != WL_CONNECTED){ delay(500);} if (!bme.begin()){Serial.println("Not se encuentra BME680");} display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Pantalla OLED en dirección 0x3C
// Set up oversampling and filter initialization bme.setTemperatureOversampling(BME680_OS_8X); bme.setHumidityOversampling(BME680_OS_2X); bme.setPressureOversampling(BME680_OS_4X); bme.setIIRFilterSize(BME680_FILTER_SIZE_3); bme.setGasHeater(320, 150); // 320*C for 150 ms
display.setTextSize(2); //Tamaño texto display.setTextColor(SSD1306_WHITE); pinMode(D7, OUTPUT); //Para el Buzzer Serial.println("Temp Hum Gas"); delay(20000); //estabiliza un poco el sensor de gas }
void loop() { if (! bme.performReading()){ Serial.println("Fallo de lectura:("); return;} display.clearDisplay(); display.setCursor(0, 0);