Alarme de incêndio com ESP8266 NodeMCU

Alarme de incêndio com ESP8266 NodeMCU

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/json\r\nAccess-Token: TOKEN_DO_PUSHBULLET\r\n',
              '{"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 ? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP!

3
Alarme de incêndio com ESP8266 NodeMCU
10 votos, 4.00 classificação média (80% pontuação)

Formado em Ciência da Computação pela Universidade Regional de Blumenau, é colaborador do site FILIPEFLOP.

Compartilhe este Post

19 Comentários

  1. Concorra a um Kit completo de Sensores | Blog FILIPEFLOP - 21 de março de 2017

    […] tal fazer uma planta IoT que envia mensagem para o seu celular quando precisa ser regada? Ou um alarme de incêndio para sua casa? Você também pode desenvolver um relógio e até um bafômetro . Curtiu? Então […]

  2. bruno - 5 de janeiro de 2017

    Alguem tem esse programa para a IDE do arduino?

  3. Alex - 8 de dezembro de 2016

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

  4. Alexandre - 29 de novembro de 2016

    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!!

  5. Lucas - 29 de novembro de 2016

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

  6. Pedro - 26 de novembro de 2016

    da esse erro

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

  7. Pedro - 26 de novembro de 2016

    falta detalhes nesse post

  8. Luis - 26 de novembro de 2016

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

  9. Augusto Soares - 22 de novembro de 2016

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

Deixe uma resposta