En aquest projecte, farem un sistema d'alerta contra incendis mitjançant microcontrolador ATMEGA8 i sensor d'incendi. El sensor d'incendi pot ser de qualsevol tipus, però utilitzem un sensor d'incendis basat en IR (infraroig). Tot i que els sensors de foc basats en IR presenten alguns desavantatges principalment de la inexactitud, és la forma més senzilla i barata de detectar foc.
Els sensors de foc basats en IR tenen una visió sensorial menor, de manera que muntarem el sensor de foc en un servomotor. El Servo farà rotacions de pèndol de 180 graus. Amb el sensor de foc muntat a sobre, obtenim una visió de detecció de foc de més de 270 graus. El servo girarà contínuament donant així un sistema complet d’alerta contra incendis. Per obtenir més precisió, podem afegir un sensor de fum al sistema. Amb això, podríem obtenir una precisió més alta.
Components del circuit
Maquinari: font d'alimentació + 5v, servomotor (sg90), ATMEGA8, BUZZER, botó, resistència de 10KΩ, resistència de 1KΩ, resistència de 220Ω, condensador 100nF, PROGRAMADOR AVR-ISP.
Programari: Atmel studio 6.1, progisp o flash magic.
Diagrama de circuit i treball

Perquè l’eix del servo es mogui cap a l’esquerra, hem de donar una ració de 1/18 de volta i perquè l’eix giri completament cap a l’esquerra, hem de donar PWM amb una ració de 2/18. Anem a programar ATMEGA8 per donar un senyal PWM que girarà l’eix servo a 180 i després a 0 després d’un cert retard.
Durant el temps complet, el sensor d'incendi estarà engegat i el controlador estarà en alerta completa. Si hi ha un incendi, el sensor proporciona un pols elevat quan el controlador el detecta i estableix una alarma. L'alarma s'apagarà prement un botó de restabliment que hi està connectat.
A atmega8 per a tres canals PWM, hem designat tres pins. Només podem prendre sortida PWM només en aquests pins. Com que estem utilitzant PWM1, hauríem de prendre el senyal PWM al pin OC1A (PORTB 1 er PIN). Com es mostra al diagrama del circuit, estem connectant el senyal de servo al pin OC1A. Aquí una altra cosa consisteix en tres canals PWM, dos són canals PWM de 8 bits i un canal PWM de 16 bits. Utilitzarem un canal PWM de 16 bits aquí.
A ATMEGA hi ha un parell de maneres de generar PWM
1. Fase PWM correcta.
2. PWM ràpid.
Aquí ho farem senzill, de manera que farem servir el mètode FAST PWM per generar el senyal PWM.
Primer a triar la freqüència de PWM, això depèn de l'aplicació normalment, per a un LED qualsevol freqüència superior a 50Hz faria. Per aquest motiu, estem escollint el comptador de rellotge de 1 MHz, de manera que no escollim cap prescalar. Un prescalar és un número que està tan seleccionat per obtenir un comptador de rellotge menor. Per exemple, si el rellotge de l'oscil·lador és de 8 MHz, podem triar un prescalar de '8' per obtenir un rellotge d'1 MHz per al comptador. El prescalar es selecciona en funció de la freqüència. Si volem més impulsos de període de temps, hem de triar un prescalar superior.
Ara, per treure el rellotge PWM RÀPID de 50Hz de l’ATMEGA, hem d’habilitar els bits adequats al registre “ TCCR1B ”.

Aquí, CS10, CS11, CS12 (GROC): seleccioneu el prescalar per triar el rellotge de comptador. La taula de prescalar adequada es mostra a la taula següent. Així doncs, per prescalificar-ne un (rellotge oscil·lador = rellotge comptador).
de manera que CS10 = 1, els altres dos bits són nuls.

VERMELL (WGM10-WGM13): s’alteren per triar els modes de generació de formes d’ona, basades en la taula següent, per a un PWM ràpid. Tenim WGM11, WGM12 i WGM12 s'estableixen a 1.

Ara sabem que PWM és un senyal amb una ració de treball diferent o diferents temps d’APAGADA d’ACTIVACIÓ. Fins ara hem escollit la freqüència i el tipus de PWM. El tema principal d’aquest capítol es troba en aquesta secció. Per obtenir una ració de treball diferent, escollirem un valor entre 0 i 255 (2 ^ 8 a causa de 8 bits). Suposem que escollim un valor 180, ja que el comptador comença a comptar a partir de 0 i arriba al valor 180, la resposta de sortida es pot activar. Aquest activador pot ser invertit o no invertit. És a dir, es pot dir que la sortida es tira cap amunt en arribar al recompte o es pot dir que es tira cap avall en arribar al recompte.
VERD (COM1A1, COM1A0): aquesta selecció de tirar cap amunt o cap avall és escollida pels bits CM1A0 i CM1A1.
Com es mostra a la taula, perquè la sortida pugui ser alta en comparar i la sortida es mantingui alta fins al valor màxim. Hem de triar el mode d'inversió per fer-ho, així que COM1A0 = 1; COM1A1 = 1.

Com es mostra a la figura següent, OCR1A (registre de comparació de sortida 1A) és el byte que emmagatzema el valor triat per l'usuari. Per tant, si canviem OCR1A = 180, el controlador activa el canvi (alt) quan el comptador arriba a 180 des de 0.

OCR1A ha de ser 19999-600 per a 180 graus i 19999-2400 per a 0 graus.
