Neste projeto, vamos fazer um Sistema de Alerta de Incêndio usando microcontrolador ATMEGA8 e sensor de incêndio. O sensor de incêndio pode ser de qualquer tipo, no entanto, estamos usando um sensor de incêndio baseado em IR (infravermelho). Embora os sensores de incêndio baseados em infravermelho tenham algumas desvantagens principalmente de imprecisão, é a maneira mais fácil e barata de detectar fogo.
Sensores de incêndio baseados em infravermelho têm menor visão sensível, então vamos montar o sensor de fogo em um servo motor. O Servo fará rotações pendulares de 180 graus. Com o sensor de fogo montado nele, temos uma visão de detecção de fogo de 270+ graus. O servo estará girando continuamente, dando um sistema completo de alerta de incêndio na sala. Para mais precisão, podemos adicionar um sensor de fumaça ao sistema. Com isso, poderíamos obter maior precisão.
Componentes de Circuito
Hardware: Fonte de alimentação + 5v, servo motor (sg90), ATMEGA8, BUZZER, botão, resistor 10KΩ, resistor 1KΩ, resistor 220, capacitor 100nF, AVR-ISP PROGRAMMER.
Software: Atmel studio 6.1, progisp ou flash magic.
Diagrama de circuito e funcionamento
Para que o eixo do servo se mova para a esquerda, precisamos dar uma ração de 1/18 de volta, e para que o eixo gire totalmente para a esquerda, precisamos dar PWM com uma ração de serviço de 2/18. Vamos programar o ATMEGA8 para emitir um sinal PWM que irá girar o servo eixo para 180 e então para 0 após um certo atraso.
Durante o tempo completo, o sensor de incêndio estará ligado e o controlador estará em alerta total. Se houver um incêndio, o sensor fornece um pulso alto, este pulso, quando detectado pelo controlador, ele define um alarme. O alarme será desligado pressionando um botão de reset conectado a ele.
Em atmega8 para três canais PWM, designamos três pinos. Só podemos obter saída PWM nesses pinos. Como estamos usando PWM1 devemos tomar sinal PWM em OC1A pin (PORTB 1 st PIN). Conforme mostrado no diagrama de circuito, estamos conectando o sinal do servo ao pino OC1A. Aqui, outra coisa são três canais PWM, dois são canais PWM de 8 bits e um canal PWM de 16 bits. Vamos usar um canal PWM de 16 bits aqui.
Em ATMEGA, existem algumas maneiras de gerar PWM, são
1. PWM correto de fase.
2. PWM rápido.
Aqui vamos manter tudo simples, então vamos usar o método FAST PWM para gerar o sinal PWM.
Primeiro, escolha a frequência do PWM. Isso geralmente depende da aplicação, para um LED qualquer frequência maior que 50Hz serviria. Por essa razão, estamos escolhendo o contador de 1 MHz. Portanto, não estamos escolhendo nenhum pré-escalar. Um pré-escalar é um número selecionado para obter um contador de tempo menor. Por exemplo, se o relógio do oscilador é de 8 MHz, podemos escolher um pré-escalar de '8' para obter um relógio de 1 MHz como contador. O pré-escalar é selecionado com base na frequência. Se quisermos mais pulsos de período de tempo, temos que escolher um pré-escalar mais alto.
Agora, para obter o FAST PWM do clock de 50 Hz do ATMEGA, precisamos habilitar os bits apropriados no registro “ TCCR1B ”.
Aqui, CS10, CS11, CS12 (AMARELO) - selecione o pré-escalar para escolher o contador de tempo. A tabela para o pré-escalar apropriado é mostrada na tabela abaixo. Portanto, para pré-escalar um (relógio do oscilador = relógio do contador).
então CS10 = 1, outros dois bits são zero.
VERMELHO (WGM10-WGM13): são alterados para escolher os modos de geração de forma de onda, com base na tabela abaixo, para PWM rápido. Temos WGM11, WGM12 e WGM12 definidos como 1.
Agora sabemos que PWM é um sinal com ração de dever diferente ou diferentes tempos de liga e desliga. Até agora, escolhemos a frequência e o tipo de PWM. O tema principal deste capítulo encontra-se nesta seção. Para obter uma relação de trabalho diferente, vamos escolher um valor entre 0 e 255 (2 ^ 8 por causa de 8 bits). Digamos que escolhemos um valor 180, quando o contador começa a contar a partir de 0 e atinge o valor 180, a resposta de saída pode ser disparada. Este gatilho pode ser invertido ou não invertido. Ou seja, a saída pode ser puxada para cima ao atingir a contagem ou pode ser puxada para baixo ao atingir a contagem.
VERDE (COM1A1, COM1A0): Esta seleção de puxar para cima ou para baixo é escolhida pelos bits CM1A0 e CM1A1.
Conforme mostrado na tabela, para a saída ir alta na comparação e a saída permanecerá alta até o valor máximo. Temos que escolher o modo de inversão para fazer isso, então COM1A0 = 1; COM1A1 = 1.
Conforme mostrado na figura abaixo, OCR1A (Output Compare Register 1A) é o byte que armazena o valor escolhido pelo usuário. Portanto, se alterarmos OCR1A = 180, o controlador acionará a alteração (alta) quando o contador chegar a 180 de 0.
OCR1A deve ser 19999-600 para 180 graus e 19999-2400 para 0 graus.