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.
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:
- Buzzer
- Sensor de Gás MQ-7
- Sensor de chama fogo
- ESP8266 NodeMCU
- Protoboard
- Jumpers macho-macho e macho-fêmea
- Fonte 3.3v (opcional)
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.
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:
Gostou? Deixe seu comentário logo abaixo.
Muito bom! Excente projeto!
Boa noite, muito interessante o seu projeto você poderia disponibilizar o código em C++?
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
Boa noite, primeiramente gostaria de agradecer o post. Por favor, qual compilador foi usado no seu sketch? grato desde ja
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
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
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
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.
Olá Ricardo!
Você já deu uma olhada nesse post?
https://www.makerhero.com/blog/esp8266-nodemcu-como-programar/
Abraços!
André – Equipe MakerHero
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.
Olá Ricardo!
Você pode detalhar melhor o seu problema?
Abraços!
André – Equipe MakerHero
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 ?
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
Boa tarde, comprei o kit no site https://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
Poderia me ajudar a adaptar esse código para o ESP8266- ESP 01?
Obrigada, exatamente o que procurava
Teria como ajustar o programa para a programação em Arduíno? Obrigado 🙂
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.
O sensor MQ-2 pode operar com 3.3v? na especificação ele está falando em 5v.
Alguem tem esse programa para a IDE do arduino?
Vocês não vão arrumar esse programa? O meu também só apita mesmo tirando todos os sensores!!!!!!!!
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!!
Só fica fazendo o barulho de beep sem parar! Vcs não tem vergonha de postar isso no blog de vcs???
Se o beep é continuo então a ligação está errada. Se faz beep sem parar você tem que ajustar a sensibilidade dos sensores.
É 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?
da esse erro
PANIC: unprotected error in call to Lua API (stdin:14: attempt
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?
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.
Ajustamos o codigo.
falta detalhes nesse post
Eu programo pelo Esplorer? Esse código não está funcionando
Você compilou um firmware customizado como mencionado no artigo? Qual a versão do firmware que você está utilizando?
Eu to usando o firmware do site que vcs colocaram la
Qual o erro? Fizemos um ajuste no codigo que pode ser que resolva.
O erro sumiu mas ele não manda msg pro push
Eu também estou
Esse sensor funciona bem com 3.3V? Ele é descrito do datasheet como sendo de 5V
O MQ-2 é 5v. Ajustamos o modelo para o correto, que é o MQ-7. Esse é 3.3 e 5v.