Alarme de incêndio com ESP8266 NodeMCU 38

Neste post veremos como utilizar o sensor de gás MQ-7 e o de chama e fogo para criar um alarme de incêndio com ESP8266 NodeMCU. Se você preferir, é possível seguir o passo a passo com os demais modelos do ESP8266.

Antes de iniciar, eu sugiro a leitura do post Como programar o módulo ESP8266 NodeMCU pois iremos utilizar o firmware versão 1.5 do NodeMCU.

Alarme de incêndio com ESP8266 NodeMCU

As versões após a 1.0 devem ser criadas através do site NodeMCU custom builds, pois com a grande quantidade de módulos adicionados ao NodeMCU ficou complicado gerar uma versão pré-compilada. Para o projeto de hoje, os módulos GPIO, timer, WiFi e HTTP são necessários. É recomendado o uso dos módulos padrões file, net, node e UART.

No nosso exemplo iremos demonstrar como emitir um alarme caso detecte fogo ou gases, além de enviar uma notificação através do Pushbullet para o nosso Smartphone. Para quem ainda não conhece, o Pushbullet é um aplicativo gratuito que permite trocar notificações, links, arquivos e pequenos textos entre diversas plataformas.

Instale o Pushbullet em seu Smartphone ou computador. Após instalar acesse Sua conta e clique em Create Access Token para gerar uma chave de acesso a API do Pushbullet, que será utilizada mais abaixo.

Lista de componentes

Para montagem do alarme de incêndio com ESP8266, você vai precisar de:

Circuito alarme de incêndio com ESP8266

Ambos os sensores possuem pino analógico e digital, no nosso caso com a quantidade limitada de pinos analógicos iremos conecta-los através do pino digital, que irá retornar o valor 0 caso não detecte nenhum problema ou 1 se detectar gás ou fogo. Também utilizaremos um pino para ligar o buzzer, para emitir o alerta. Na imagem abaixo é possível observar o circuito montado. Lembre-se, o circuito é de 3.3 volts.

Circuito Sensor de Incêndio

Ambos os sensores possuem ajuste de sensibilidade, o que permite regulá-los de acordo com a necessidade.

Programa de monitoramento

Nas linhas 2, 4, e 6 definimos os pinos onde foram conectados os sensores e o buzzer. Já nas linha 85, 86, e 87 definimos os modos dos pinos, saída para o buzzer e entrada para os sensores.

Na linha 42 você deve informar o seu token de acesso da API do Pushbullet. Já na linha 91 você deve inserir o SSID e a senha do seu roteador.

-- Buzzer
BUZ_PIN  = 6 -- GPIO 12
-- Sensor de chama e fogo
FIRE_PIN = 7 -- GPIO 13
-- Sensor de Gás
GAS_PIN  = 5 -- GPIO 14
 
BUZZ_TMR = 1
FIRE_GAS_TMR = 2
 
 
-- liga o alarme que irá fazer um beep a cada 1 segundo.
function buz_on()
    is_buz_on = false
 
    tmr.alarm(BUZZ_TMR, 1000, tmr.ALARM_AUTO, function()
        if is_buz_on then
            gpio.write(BUZ_PIN, gpio.LOW) -- on
        else
            gpio.write(BUZ_PIN, gpio.HIGH) -- off
        end
 
        is_buz_on = not is_buz_on
    end)
end
 
-- desliga o alarme
function buz_off()
    gpio.write(BUZ_PIN, gpio.HIGH)
    tmr.unregister(BUZZ_TMR)
end
 
-- verifica se o alarme já está ligado
function is_buz_enable()
    running, mode = tmr.state(BUZZ_TMR)
    return running
end
 
-- envia notificação para o celular.
function notify_pushbullet()
    http.post('https://api.pushbullet.com/v2/pushes',
              'Content-Type: application/jsonrnAccess-Token: TOKEN_DO_PUSHBULLETrn',
              '{"body":"O sensor detectou fogo ou gás, verifique.","title":"Fogo detectado!!!","type":"note"}',
    function (code, data)
        print(code)
    end)
end
 
-- inicia o processo de verificação de gás ou fogo
function start()
    buz_off()
 
    tmr.alarm(FIRE_GAS_TMR, 500, tmr.ALARM_AUTO, function()
        turn_buz_on = false
 
        -- verifica se detectou chamas.
        if gpio.read(FIRE_PIN) == 1 then
            turn_buz_on = true
        end
 
        -- verifica se detectou gás.
        if gpio.read(GAS_PIN) == 1 then
            turn_buz_on = true
        end
 
        if turn_buz_on then
            if not is_buz_enable() then
                buz_on()
                notify_pushbullet()
            end
        else
            buz_off()
        end
    end)
end
 
-- termina o processo de verificação de gás ou fogo
function stop()
    buz_off()
    tmr.unregister(FIRE_GAS_TMR)
end
 
function configure()
    -- configura os GPIO.
    gpio.mode(BUZ_PIN, gpio.OUTPUT)
    gpio.mode(FIRE_PIN, gpio.INPUT)
    gpio.mode(GAS_PIN, gpio.INPUT)
 
    -- configura o ESP para conectar no Wifi.
    wifi.setmode(wifi.STATION)
    wifi.sta.config("SSID_WIFI", "SENHA_WIFI")
    wifi.sta.connect()
end
 
configure()
start()

A função buz_on tem por objetivo fazer com que o buzzer emita um beep a cada segundo caso detecte algum problema, como presença de gás ou fogo.

A função start é responsável por executar a cada meio segundo uma verificação nos sensores para detecção de gás ou fogo. Caso ela detecte a presença de um destes o alarme é iniciado. Caso tudo volte ao normal o alarme é desligado através da função buz_off.

A última linha com a chamada da função start é responsável por iniciar todo o processo de monitoramento.

E abaixo, temos a tela do smartphone com o aviso do nosso alarme de incêndio com ESP8266 NodeMCU:

Tela Push Bullet

Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

38 Comentários

  1. Muito bom! Excente projeto!

  2. Boa noite, muito interessante o seu projeto você poderia disponibilizar o código em C++?

  3. ola bacana progeto mais ta dando erro ao copilar no ide do arduino nessa linha

    — termina o processo de verificação de gás ou fogo

    erro,exit status 1
    stray ‘\303’ in program

    pode me ajudar ? desde ja agradeço leo

  4. Boa noite, primeiramente gostaria de agradecer o post. Por favor, qual compilador foi usado no seu sketch? grato desde ja

    1. Olá Jonicler,

      Foi utilizado o Termite. Dê uma olhadinha nesse tutorial, acho que pode te ajudar: https://www.makerhero.com/blog/esp8266-nodemcu-como-programar/

      Abraço!
      Rosana – Equipe MakerHero

  5. Boas Alexandre, Gostei do teu post, no entanto temho duvidas por ser novato nestas areas,… Tenho um wemos mini pro 8286 com antena exterior e gostaria de saber se é possivel aplicar sonda de temperatura e humidade em pinout digital e qual programação podemos utilizar para que este possa usar a rede wifi home e poder de forma externa aceder aos dados que este esteja a digitalizar ou a marcar. Não sei se fui esclarecedor, mas tá fico aguardar teu fid.back

    1. Olá Manuel!

      Ambos os sensores têm saída digital, então não teria problema em conectá-los com o Wemos.

      Abraços!

      André – Equipe MakerHero

  6. Olá, comprei essa semana no site Filipe Flop o kit para montar o alarme de incêndio. Só fiquei na quanto carregar o programa no arduino ESP8266. Vi que é ambiente LUA. Como posso efetuar a carga ? fico no aguardo de um breve contato. Obrigado.

    1. Olá Ricardo!

      Você já deu uma olhada nesse post?
      https://www.makerhero.com/blog/esp8266-nodemcu-como-programar/

      Abraços!

      André – Equipe MakerHero

      1. Olá, agradeço. Já consegui progredir instalei o Lua no NodeMCU e instalei o programa do alarme. O que não funciona é a chamada https do push bullet que precisa ser https e o lua não tem suporte.

        1. Olá Ricardo!

          Você pode detalhar melhor o seu problema?

          Abraços!

          André – Equipe MakerHero

  7. Alexandre, obrigado pr compartilhar. Eu tenho uma dúvida. Pensei em usar dois sensores de gás. Um próximo ao ponto que alimenta o fogão e outro próximo ao aquecedor de agua do chuveiro. Os 2 controlados pelo mesmo ESP. Qual a distância máxima dos cabos entre o sensor e o ESP ?

    1. Olá Gerson!

      A distância dos cabos depende muito. O que eu sugiro você fazer é usar um fio um pouco mais grosso e fazer testes. Veja se chega o sinal certinho.

      Abraços!

      André – Equipe MakerHero

  8. Boa tarde, comprei o kit no site http://www.makerhero.com.br chegou tudo ok. Montei o circuito também tudo ok. Agora estou na parte do software que copiei no site do MakerHero mais está dando erro ao realizar a verificação, ou seja, o software está com erros diversos. O primeiro deles é que os comentários estão como: — e não da forma correta: // mais tudo bem já fiz os ajustes.

    Gostaria de saber se tem algum repositório a versão deste software para baixar ?

    Obrigado !

    Segue os erros:

    Arduino: 1.8.6 (Mac OS X), Placa:”NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, 4M (1M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200″

    Alarme-de-Incendio:8:1: error: ‘BUZZ_TMR’ does not name a type
    BUZZ_TMR = 1;
    ^
    Alarme-de-Incendio:9:1: error: ‘FIRE_GAS_TMR’ does not name a type
    FIRE_GAS_TMR = 2;
    ^
    Alarme-de-Incendio:12:1: error: ‘function’ does not name a type
    function buz_on()
    ^
    exit status 1
    ‘BUZZ_TMR’ does not name a type

  9. Poderia me ajudar a adaptar esse código para o ESP8266- ESP 01?

  10. Teria como ajustar o programa para a programação em Arduíno? Obrigado 🙂

  11. Buonasera,nel programma di allarme gas con esp8266,crea errori perche’ non riesco a definire i sensori,buzzer.Potete aiutarmi a mettere il programma completo.E’ un bel progetto,complimenti. Grazie mille.

  12. O sensor MQ-2 pode operar com 3.3v? na especificação ele está falando em 5v.

  13. Alguem tem esse programa para a IDE do arduino?

  14. Vocês não vão arrumar esse programa? O meu também só apita mesmo tirando todos os sensores!!!!!!!!

  15. Eu programa só fica fazendo o beep também. Não é a sensibilidade dos sensores pq mesmo tirando eles do circuito o beep continua. Não envia msg nenhuma!!

  16. Só fica fazendo o barulho de beep sem parar! Vcs não tem vergonha de postar isso no blog de vcs???

    1. Se o beep é continuo então a ligação está errada. Se faz beep sem parar você tem que ajustar a sensibilidade dos sensores.

      1. É um beep sem parar, mas se ele está constando que está pegando fogo não deveria aparecer a mensagem no meu pushbullet? E como eu ajusto a sensibilidade ideal?

  17. da esse erro

    PANIC: unprotected error in call to Lua API (stdin:14: attempt

    1. Falta uma parte do erro, podes mandar completo?

      Você compilou um firmware customizado como mencionado no artigo? Qual a versão do firmware que você está utilizando?

      1. O erro completo é esse: PANIC: unprotected error in call to Lua API (stdin:14: attempt to call global ‘is_buz_on’ (a boolean value))

        Eu usei o site que vocês recomendaram, baixei no e-mail e coloquei naquele exe do ‘nodemcu-flasher-master’ e configurei a porte certa.

        1. Ajustamos o codigo.

  18. falta detalhes nesse post

  19. Eu programo pelo Esplorer? Esse código não está funcionando

    1. Você compilou um firmware customizado como mencionado no artigo? Qual a versão do firmware que você está utilizando?

      1. Eu to usando o firmware do site que vcs colocaram la

        1. Qual o erro? Fizemos um ajuste no codigo que pode ser que resolva.

          1. O erro sumiu mas ele não manda msg pro push

  20. Esse sensor funciona bem com 3.3V? Ele é descrito do datasheet como sendo de 5V

    1. O MQ-2 é 5v. Ajustamos o modelo para o correto, que é o MQ-7. Esse é 3.3 e 5v.