Sensor de chama

No tutorial de hoje vamos aprender como usar o sensor de chama para a detecção de chama:

Materiais necessários

  • Raspberry Pi
  • Sensor de chama
  • Conversor A/D (no nosso tutorial foi usado o modelo ADC0832)
  • Jumpers
  • Protoboard

Sobre o módulo

O sensor de chamas se baseia em um princípio físico muito simples. A maior quantidade de energia de uma chama é emitida em forma de raios infra-vermelhos, portanto se mede a quantidade de raios infra-vermelhos de certo comprimento de onda emitidos pela chama.

Para capturar essa frequência de luz, é usado o foto-transistor YG1006, que capta ondas entre 760-1100nm de comprimento. O módulo ainda contém um comparador que pode ser calibrado para setar uma distância que a chama vai ser detectada.

Quanto mais perto ou mais forte for a chama, maior vai ser o valor da saída analógica do módulo. O sensor tem um range de abertura de 60º de detecção da chama.

Especificações técnicas

  • Alimentação: 4.75~5.30 V
  • Corrente: 20 mA
  • Espectro: 760 – 1100 nm
  • Range de detecção: 1m
  • Tempo de resposta: 15 us
  • Temperatura de operação: -25 ~ 85 ºC

Conectando

  • Conecte o pino Vcc do sensor ao pino 2 (5.0 V) da Raspberry
  • Conecte o pino Gnd do sensor ao pino 6 (GND) da Raspberry
  • Conecte o pino S (saída digital) do sensor ao pino 40 da Raspberry (GPIO21)
  • Conecte o pino A (saída analógica) do sensor a alguma trilha do protoboard
  • Conecte o canal 0 do conversor na mesma trilha do protoboard
  • Conecte o pino Vcc e Gnd do conversor aos pinos 2 e 6, respectivamente
  • Conecte o pino Data do conversor ao pino 11 da RPi (GPIO17)
  • Conecte o pino CLK do conversor ao pino 15 da RPi (GPIO22)
  • Conecte o pino CS do conversor ao pino 13 da RPi (GPIO27)

Nota: Caso tenha alguma dúvida com relação ao GPIO, sugiro ler esse artigo.

Programando

Para facilitar o uso, criamos uma classe para realizar a leitura do sensor do conversor analógico-digital. Salve o código a seguir em um arquivo chamado adc.py.

import RPi.GPIO as GPIO
import time
 
class ADC(object):
 
    def __init__(self, cs, clk, dio):
        self.cs = cs
        self.clk = clk
        self.dio = dio
 
    def setup(self):
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(self.cs, GPIO.OUT)
        GPIO.setup(self.clk, GPIO.OUT)
 
    def destroy(self):
        GPIO.cleanup()
 
    def get_result(self):
        GPIO.setup(self.dio, GPIO.OUT)
        GPIO.output(self.cs, 0)
        GPIO.output(self.clk, 0)
        GPIO.output(self.dio, 1); time.sleep(0.000002)
        GPIO.output(self.clk, 1); time.sleep(0.000002)
        GPIO.output(self.clk, 0)
        GPIO.output(self.dio, 1); time.sleep(0.000002)
        GPIO.output(self.clk, 1); time.sleep(0.000002)
        GPIO.output(self.clk, 0)
        GPIO.output(self.dio, 0); time.sleep(0.000002)
        GPIO.output(self.clk, 1)
        GPIO.output(self.dio, 1); time.sleep(0.000002)
        GPIO.output(self.clk, 0)
        GPIO.output(self.dio, 1); time.sleep(0.000002)
 
        GPIO.setup(self.dio, GPIO.IN)
        data1 = 0
        for i in range(0, 8):
            GPIO.output(self.clk, 1); time.sleep(0.000002)
            GPIO.output(self.clk, 0); time.sleep(0.000002)
            data1 = data1 << 1 | GPIO.input(self.dio)
 
        data2 = 0
        for i in range(0, 8):
            data2 = data2 | GPIO.input(self.dio) << i
            GPIO.output(self.clk, 1); time.sleep(0.000002)
            GPIO.output(self.clk, 0); time.sleep(0.000002)
 
        GPIO.output(self.cs, 1)
        GPIO.setup(self.dio, GPIO.OUT)
 
        return data1 if data1 == data2 else 0

Agora, em outro arquivo, copie e cole o código abaixo. Esse código faz a leitura do conversor A/D e verifica se o módulo detectou a chama ou não, através da leitura do pino digital.

import time
import adc
import RPi.GPIO as GPIO
 
c = adc.ADC(13, 15, 11)
c.setup()
 
# Setup para a saida digital do sensor
def flame_callback(channel):
    if GPIO.input(channel):
        res = c.get_result() * 5.0 / 255.0
        print('Cuidado, fogo!!!', res)
    else:
        print('OK, tudo certo!!!') 
 
# Cadastra funcao de callback
flame_channel = 40
GPIO.setup(flame_channel, GPIO.IN)
GPIO.add_event_detect(flame_channel, GPIO.BOTH, bouncetime=300)
GPIO.add_event_callback(flame_channel, flame_callback)
 
try:
    while True:
        time.sleep(0.1)
 
except KeyboardInterrupt:
    pass
 
c.destroy()

Agora, com a utilização de um isqueiro (muito cuidado para não queimar a casa toda! Caso necessário, utilize a supervisão de um adulto), aproxime a chama do sensor e veja o range de detecção. Talvez seja necessário mexer no potenciômetro para adequar a distância que você deseja detectar.

E provavelmente, terá uma saída parecida com essa:

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *