Arduino - Sensor de Chama

O sensor de chama é capaz de detectar e medir o nível de infravermelho emitido pela chama, podendo ser usado para detectar fogo. Ele também é chamado de sensor de chama infravermelho ou sensor de fogo. O sensor de chama infravermelho fornece duas saídas: uma saída digital (LOW/HIGH) e uma saída analógica.

Neste tutorial, vamos aprender a usar um Arduino e um sensor de chama para detectar e medir chama e fogo. Especificamente, vamos abordar o seguinte:

sensor de chama com arduino

Depois, você pode modificar o código para acionar uma sirene de alerta (via relé) quando ele detectar fogo.

Sobre o Sensor de Chama

módulo sensor de chama e fogo infravermelho

O sensor de chama infravermelho pode ser utilizado para detectar a presença de chama ou medir o nível de infravermelho emitido pela chama. Portanto, o sensor de chama pode ser usado para detectar fogo. O sensor de chama oferece duas opções, através de um pino de saída digital e de um pino de saída analógica.

Os sensores de chama infravermelhos são projetados para serem seletivos nos comprimentos de onda da radiação infravermelha que detectam, concentrando-se nos comprimentos de onda específicos associados às chamas. Eles são projetados para minimizar a probabilidade de alarmes falsos vindos de outras fontes de radiação infravermelha, como o calor do corpo humano ou a iluminação artificial. No entanto, como qualquer sensor, eles têm limitações e, sob certas condições, podem estar sujeitos a falsos positivos ou falsos negativos.

Pinagem

Existem dois tipos de módulos sensores de chama disponíveis:

Um sensor de chama simples inclui quatro pinos:

  • Pino VCC: Precisa ser conectado ao VCC (3.3V a 5V).
  • Pino GND: Precisa ser conectado ao GND (0V).
  • Pino DO: É um pino de saída digital. Fica em HIGH se a chama não for detectada e em LOW se for detectada. O valor limite para a detecção de chama pode ser ajustado usando um potenciômetro integrado.
  • Pino AO: É um pino de saída analógica. O valor de saída diminui à medida que o nível de infravermelho diminui e aumenta à medida que o nível de infravermelho aumenta.
Pinagem do Sensor de Chama
image source: diyables.io

Além disso, ele tem dois LEDs indicadores:

  • Um LED indicador PWR-LED para alimentação.
  • Um LED indicador DO-LED para o estado da chama no pino DO: ele acende quando há chama.

O sensor de chama 5 em 1 integra cinco sensores de chama individuais em uma única PCB. Embora compartilhem o mesmo potenciômetro, VCC e GND, os pinos DO (Saída Digital) e AO (Saída Analógica) de cada sensor funcionam de forma independente. Além disso, cada sensor está orientado em uma direção diferente, o que amplia efetivamente o alcance geral de detecção.

Como Funciona

Para o pino DO:

  • O módulo tem um potenciômetro integrado para definir o limite de infravermelho (sensibilidade).
  • Quando a intensidade de infravermelho está acima do valor limite, a chama é detectada, o pino de saída do sensor fica em LOW e o DO-LED acende.
  • Quando a intensidade de infravermelho está abaixo do valor limite, a chama NÃO é detectada, o pino de saída do sensor fica em HIGH e o DO-LED apaga.

Para o pino AO:

  • Quanto maior a intensidade de infravermelho no ambiente ao redor, maior o valor lido no pino AO.
  • Quanto menor a intensidade de infravermelho no ambiente ao redor, menor o valor lido no pino AO.

Observe que o potenciômetro não afeta o valor no pino AO.

Diagrama de Ligação

Como o módulo sensor de chama tem duas saídas, você pode escolher usar uma ou ambas, dependendo do que precisar.

  • O diagrama de ligação entre o Arduino e o sensor de chama usando apenas o DO.
Diagrama de ligação do Sensor de Chama com Arduino

This image is created using Fritzing. Click to enlarge image

  • O diagrama de ligação entre o Arduino e o sensor de chama usando apenas o AO.
Diagrama de ligação do sensor de fogo com Arduino

This image is created using Fritzing. Click to enlarge image

  • O diagrama de ligação entre o Arduino e o sensor de chama usando o AO e o DO.
Diagrama de ligação do sensor de chama infravermelho com Arduino

This image is created using Fritzing. Click to enlarge image

Código Arduino - Ler valor do pino DO

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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"); }

Passos Rápidos

  • Copie o código acima e abra-o com o Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
  • Aponte o sensor de chama para uma chama.
  • Veja o resultado no Serial Monitor.
∞
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

Lembre-se de que, se você notar que o LED permanece sempre aceso ou apagado mesmo quando o sensor está voltado para uma chama, você pode ajustar o potenciômetro para regular a sensibilidade do sensor.

Código Arduino - Ler valor do pino AO

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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); }

Passos Rápidos

  • Copie o código acima e abra-o com o Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
  • Aponte o sensor de chama para uma chama.
  • Veja o resultado no Serial Monitor.
∞
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

Vídeo

O vídeo de demonstração abaixo usa o código abaixo. Observe que o vídeo mostra o Arduino Uno R4, mas funciona de forma idêntica para o Arduino Uno R3:

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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); }

Referências de Funções

Tutoriais Relacionados

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!