Arduino - sensor de llama

El sensor de llama es capaz de detectar y medir el nivel infrarrojo emitido por la llama. Puede usarse para detectar un incendio. También se le conoce como sensor de llama infrarrojo o sensor de incendio. El sensor de llama infrarrojo proporciona dos salidas: una salida digital (LOW/HIGH) y una salida analógica.

En este tutorial, aprenderemos cómo usar un Arduino y un sensor de llama para detectar y medir la llama y el fuego. Específicamente, cubriremos lo siguiente:

sensor de llama para Arduino

Después, puedes modificar el código para activar una sirena de advertencia (a través de un relé) cuando detecte fuego.

Acerca del Sensor de Llama

Módulo de sensor de llama infrarrojo

El sensor de llama infrarrojo se puede utilizar para detectar la presencia de una llama o medir el nivel infrarrojo emitido por la llama. Por lo tanto, el sensor de llama puede usarse para detectar el fuego. El sensor de llama ofrece dos opciones mediante una salida digital y una salida analógica.

Los sensores de llama infrarroja están diseñados para ser selectivos en las longitudes de onda de la radiación infrarroja que detectan, enfocándose en las longitudes de onda específicas asociadas con las llamas. Están diseñados para minimizar la probabilidad de falsas alarmas provenientes de otras fuentes de radiación infrarroja, como el calor del cuerpo humano o la iluminación artificial. Sin embargo, como cualquier sensor, pueden presentar limitaciones y, bajo ciertas condiciones, podrían generar falsos positivos o falsos negativos.

Diagrama de pines

Hay dos tipos de módulos sensores de llama disponibles:

Un solo sensor de llama incluye cuatro pines:

  • Pin VCC: Debe conectarse a VCC (3.3 V a 5 V).
  • Pin GND: Debe conectarse a GND (0 V).
  • Pin DO: Es un pin de salida digital. Es ALTO si no se detecta la llama y BAJO si se detecta. El valor umbral para la detección de llama se puede ajustar mediante un potenciómetro integrado.
  • Pin AO: Es un pin de salida analógica. El valor de salida disminuye a medida que disminuye el nivel infrarrojo, y aumenta a medida que aumenta el nivel infrarrojo.
Disposición de pines del sensor de llama
image source: diyables.io

Además, tiene dos indicadores LED:

  • Un indicador PWR-LED para la alimentación.
  • Un indicador DO-LED para el estado de la llama en el pin DO: está encendido cuando hay llama.

El sensor de llama 5 en 1 integra cinco sensores de llama individuales en una sola placa de circuito impreso (PCB). Aunque comparten el mismo potenciómetro, VCC y GND, los pines DO (Salida Digital) y AI (Entrada Analógica) de cada sensor funcionan de forma independiente. Además, cada sensor está orientado en una dirección diferente, lo que, en efecto, amplía el rango de detección global.

Cómo funciona

Para el pin DO:

  • El módulo tiene un potenciómetro integrado para ajustar el umbral infrarrojo (sensibilidad).
  • Cuando la intensidad infrarroja está por encima del valor umbral, se detecta la llama, el pin de salida del sensor está en nivel bajo y el DO-LED está encendido.
  • Cuando la intensidad infrarroja está por debajo del valor umbral, la llama no se detecta, el pin de salida del sensor está en nivel alto, y el DO-LED está apagado.

Para el pin AO:

  • Cuanto mayor sea la intensidad infrarroja en el entorno circundante, mayor será el valor leído del pin AO.
  • Cuanto menor sea la intensidad infrarroja en el entorno circundante, menor será el valor leído del pin AO.

Tenga en cuenta que el potenciómetro no afecta el valor del pin AO.

Diagrama de Cableado

Dado que el módulo del sensor de llama tiene dos salidas, puedes elegir usar una o ambas, dependiendo de lo que necesites.

  • El diagrama de cableado entre Arduino y el sensor de llama cuando se usa solo la salida digital.
Diagrama de cableado del sensor de llama para Arduino

This image is created using Fritzing. Click to enlarge image

  • El diagrama de cableado entre Arduino y el sensor de llama cuando se utiliza solo AO.
Diagrama de cableado del sensor de incendio para Arduino

This image is created using Fritzing. Click to enlarge image

  • El diagrama de cableado entre Arduino y el sensor de llama cuando se utilizan tanto AO como DO.
Diagrama de cableado del sensor de llama infrarrojo para Arduino

This image is created using Fritzing. Click to enlarge image

Código de Arduino - Leer valor del pin DO

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-flame-sensor */ #define DO_PIN 2 // Arduino's pin connected to DO pin of the flame sensor void setup() { // initialize serial communication Serial.begin(9600); // initialize the Arduino's pin as an input pinMode(DO_PIN, INPUT); } void loop() { int flame_state = digitalRead(DO_PIN); if (flame_state == HIGH) Serial.println("The flame is NOT present => The fire is NOT detected"); else Serial.println("The flame is present => The fire is detected"); }

Pasos R\u00e1pidos

  • Copie el código anterior y ábralo con el IDE de Arduino
  • Haga clic en Subir en el IDE de Arduino para cargar el código en Arduino
  • Apunte el sensor de llama hacia una llama
  • Vea el resultado en el monitor serie
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The flame is present => The fire is detected The flame is present => The fire is detected The flame is NOT present => The fire is NOT detected The flame is NOT present => The fire is NOT detected The flame is NOT present => The fire is NOT detected The flame is present => The fire is detected The flame is present => The fire is detected The flame is present => The fire is detected
Ln 11, Col 1
Arduino Uno on COM15
2

Por favor, tenga en cuenta que si nota que el estado del LED permanece encendido de forma constante o apagado incluso cuando el sensor está orientado hacia una llama, puede ajustar el potenciómetro para afinar la sensibilidad del sensor.

Código de Arduino - Leer valor desde el pin AO

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-flame-sensor */ #define AO_PIN A0 // Arduino's pin connected to AO pin of the flame sensor void setup() { // initialize serial communication Serial.begin(9600); } void loop() { int flameValue = analogRead(AO_PIN); Serial.println(flameValue); }

Pasos R\u00e1pidos

  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para cargar el código en Arduino
  • Apunta el sensor de llama hacia una llama.
  • Mira el resultado en el Monitor Serial.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
245 246 246 573 677 949 955 1004 1007 1013 1018 641 543 340 179
Ln 11, Col 1
Arduino Uno on COM15
2

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

La demostración en video a continuación utiliza el siguiente código. Ten en cuenta que el video muestra el Arduino Uno R4, pero funciona de manera idéntica para el Arduino Uno R3:

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-flame-sensor */ #include <Wire.h> #include <DIYables_LCD_I2C.h> //================================================== // PIN CONFIG //================================================== #define FLAME_PIN 2 #define BUZZER_PIN 3 #define LED_PIN 4 //================================================== // ACTIVE LEVEL //================================================== // LED active LOW #define LED_ON LOW #define LED_OFF HIGH // Buzzer active LOW #define BUZZER_ON LOW #define BUZZER_OFF HIGH // Flame sensor #define FIRE_DETECTED_LEVEL LOW #define FIRE_NORMAL_LEVEL HIGH //================================================== DIYables_LCD_I2C lcd(0x27, 20, 4); //================================================== enum SystemState { STATE_SAFE, STATE_FIRE }; SystemState currentState = STATE_SAFE; SystemState previousState = STATE_FIRE; //================================================== unsigned long blinkTimer = 0; unsigned long fireStartTime = 0; bool blinkState = false; //================================================== void setup() { Serial.begin(115200); pinMode(FLAME_PIN, INPUT); pinMode(LED_PIN, OUTPUT); pinMode(BUZZER_PIN, OUTPUT); digitalWrite(LED_PIN, LED_OFF); digitalWrite(BUZZER_PIN, BUZZER_OFF); lcd.init(); lcd.backlight(); // Splash Screen lcd.clear(); lcd.setCursor(6,0); lcd.print("DIYables"); lcd.setCursor(4,1); lcd.print("FIRE MONITOR"); lcd.setCursor(3,2); lcd.print("Arduino UNO R4"); delay(2000); lcd.clear(); } //================================================== void loop() { bool fireDetected = (digitalRead(FLAME_PIN) == FIRE_DETECTED_LEVEL); currentState = fireDetected ? STATE_FIRE : STATE_SAFE; //------------------------------------------------ // State Changed //------------------------------------------------ if(currentState != previousState) { lcd.clear(); if(currentState == STATE_SAFE) { drawSafeScreen(); digitalWrite(LED_PIN, LED_OFF); digitalWrite(BUZZER_PIN, BUZZER_OFF); } else { fireStartTime = millis(); drawFireScreen(); } previousState = currentState; } //------------------------------------------------ // State Handler //------------------------------------------------ switch(currentState) { case STATE_SAFE: updateSafeMode(); break; case STATE_FIRE: updateFireMode(); break; } } //================================================== // SAFE SCREEN //================================================== void drawSafeScreen() { lcd.setCursor(0,0); lcd.print("FIRE MONITOR"); lcd.setCursor(0,1); lcd.print("Status : SAFE "); lcd.setCursor(0,2); lcd.print("Flame : NONE "); lcd.setCursor(0,3); lcd.print("Alarm : OFF "); } //================================================== void updateSafeMode() { digitalWrite(LED_PIN, LED_OFF); digitalWrite(BUZZER_PIN, BUZZER_OFF); } //================================================== // FIRE SCREEN //================================================== void drawFireScreen() { lcd.setCursor(0,0); lcd.print("!!! FIRE ALERT !!!"); lcd.setCursor(0,1); lcd.print("Status : DANGER"); lcd.setCursor(0,2); lcd.print("Flame : DETECTED"); } //================================================== void updateFireMode() { unsigned long now = millis(); //---------------------------------------------- // LED + BUZZER FLASH //---------------------------------------------- if(now - blinkTimer >= 250) { blinkTimer = now; blinkState = !blinkState; if(blinkState) { digitalWrite(LED_PIN, LED_ON); digitalWrite(BUZZER_PIN, BUZZER_ON); } else { digitalWrite(LED_PIN, LED_OFF); digitalWrite(BUZZER_PIN, BUZZER_OFF); } } //---------------------------------------------- // FIRE TIMER //---------------------------------------------- unsigned long sec = (now - fireStartTime) / 1000; char buffer[21]; sprintf(buffer, "Alarm : %02lu:%02lu", sec / 60, sec % 60); lcd.setCursor(0,3); lcd.print(buffer); }

Referencias de Funciones

Tutoriales Relacionados

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!