En este proyecto, vamos a hacer un Sistema de Alerta de Incendios utilizando un microcontrolador ATMEGA8 y un sensor de incendios. El sensor de fuego puede ser de cualquier tipo, sin embargo, estamos usando un sensor de fuego basado en IR (infrarrojos). Aunque los sensores de incendio basados en infrarrojos tienen algunas desventajas, principalmente de inexactitud, es la forma más barata y fácil de detectar incendios.
Los sensores de incendio basados en infrarrojos tienen una visión de detección menor, por lo que vamos a montar el sensor de incendio en un servomotor. El Servo hará rotaciones de péndulo de 180 grados. Con el sensor de fuego montado en él, obtenemos una visión de detección de fuego de más de 270 grados. El servo girará continuamente, lo que proporcionará un sistema completo de alerta de incendios en la sala. Para mayor precisión, podemos agregar un sensor de humo al sistema. Con eso podríamos obtener una mayor precisión.
Componentes del circuito
Hardware: Fuente de alimentación de + 5v, Servo motor (sg90), ATMEGA8, BUZZER, Botón, Resistencia de 10KΩ, Resistencia de 1KΩ, Resistencia de 220Ω, Condensador de 100nF, PROGRAMADOR AVR-ISP.
Software: Atmel studio 6.1, progisp o flash magic.
Diagrama de circuito y funcionamiento
Para que el eje del servo se mueva hacia la izquierda, necesitamos dar 1/18 de vuelta a la ración, y para que el eje gire completamente hacia la izquierda, necesitamos dar PWM con una ración de trabajo de 2/18. Vamos a programar ATMEGA8 para que emita una señal PWM que rotará el eje del servo a 180 y luego a 0 después de un cierto retraso.
Durante todo el tiempo, el sensor de incendios estará encendido y el controlador estará en alerta completa. Si hay un incendio, el sensor proporciona un pulso alto, este pulso cuando el controlador lo detecta, establece una alarma. La alarma se apagará presionando un botón de reinicio que está conectado a ella.
En atmega8 para tres canales PWM, hemos designado tres pines. Solo podemos tomar la salida PWM solo en estos pines. Como estamos usando PWM1, deberíamos tomar la señal PWM en el pin OC1A (PORTB 1er PIN). Como se muestra en el diagrama del circuito, estamos conectando la señal del servo al pin OC1A. Aquí otra cosa es sobre tres canales PWM, dos son canales PWM de 8 bits y un canal PWM de 16 bits. Vamos a utilizar un canal PWM de 16 bits aquí.
En ATMEGA hay un par de formas de generar PWM, son
1. Fase correcta PWM.
2. PWM rápido.
Aquí vamos a mantener todo simple, así que usaremos el método FAST PWM para generar la señal PWM.
Primero para elegir la frecuencia de PWM, esto generalmente depende de la aplicación, para un LED cualquier frecuencia superior a 50Hz sería suficiente. Por esa razón estamos eligiendo el contador de reloj 1MHZ, por lo que no elegimos prescalar. Un prescalar es un número que se selecciona para obtener un contador de reloj menor. Por ejemplo, si el reloj del oscilador es de 8Mhz, podemos elegir un prescalar de '8' para obtener un reloj de 1MHz para el contador. El prescalar se selecciona en función de la frecuencia. Si queremos más pulsos de período de tiempo, debemos elegir un prescalar más alto.
Ahora para obtener el FAST PWM de 50Hz de reloj fuera de ATMEGA, necesitamos habilitar los bits apropiados en el registro “ TCCR1B ”.
Aquí, CS10, CS11, CS12 (AMARILLO): seleccione el preescalar para elegir el reloj contador. La tabla para el prescalar apropiado se muestra en la siguiente tabla. Entonces, para preescalar uno (reloj del oscilador = reloj del contador).
entonces CS10 = 1, otros dos bits son cero.
ROJO (WGM10-WGM13): se modifican para elegir los modos de generación de formas de onda, según la tabla siguiente, para un PWM rápido. Tenemos WGM11, WGM12 y WGM12 se establecen en 1.
Ahora sabemos que PWM es una señal con diferente relación de trabajo o diferentes tiempos de encendido y apagado. Hasta ahora hemos elegido frecuencia y tipo de PWM. El tema principal de este capítulo se encuentra en esta sección. Para obtener una ración de servicio diferente, elegiremos un valor entre 0 y 255 (2 ^ 8 debido a 8 bits). Digamos que elegimos un valor 180, ya que el contador comienza a contar desde 0 y alcanza el valor 180, la respuesta de salida puede activarse. Este disparador puede ser inverso o no. Es decir, se puede decirle a la salida que se levante al alcanzar el conteo, o se le puede decir que se levante al alcanzar el conteo.
VERDE (COM1A1, COM1A0): Esta selección de subir o bajar es elegida por los bits CM1A0 y CM1A1.
Como se muestra en la tabla, para que la salida sea alta en la comparación y la salida se mantendrá alta hasta el valor máximo. Tenemos que elegir el modo de inversión para hacer eso, entonces COM1A0 = 1; COM1A1 = 1.
Como se muestra en la siguiente figura, OCR1A (registro de comparación de salida 1A) es el byte que almacena el valor elegido por el usuario. Entonces, si cambiamos OCR1A = 180, el controlador activa el cambio (alto) cuando el contador llega a 180 desde 0.
OCR1A debe ser 19999-600 para 180 grados y 19999-2400 para 0 grados.