U ovom ćemo projektu izraditi sustav za dojavu požara pomoću ATMEGA8 mikrokontrolera i senzora požara. Vatrogasni senzor može biti bilo koje vrste, ali mi koristimo IR (infracrveni) senzor požara. Iako IR senzori požara imaju neke nedostatke, uglavnom zbog nepreciznosti, to je najjeftiniji i najlakši način za otkrivanje vatre.
IR senzori požara imaju slabiji osjet, tako da ćemo montirati senzor požara na servo motor. Servo će vrtjeti visak od 180 stupnjeva. S ugrađenim senzorom požara dobivamo viziju osjetljivosti požara od 270 + stupnjeva. Servo će se neprekidno okretati, dajući tako cjeloviti sustav upozorenja na požar u sobi. Za veću preciznost u sustav možemo dodati dimni senzor. Uz to bismo mogli dobiti veću točnost.
Komponente sklopa
Hardver: + 5v napajanje, servo motor (sg90), ATMEGA8, BUZZER, tipka, 10KΩ otpornik, 1KΩ otpornik, 220Ω otpornik, 100nF kondenzator, AVR-ISP PROGRAMER.
Softver: Atmel studio 6.1, progisp ili flash magic.
Kružni dijagram i rad

Da bi se osovina servoa krenula ulijevo, moramo dati omjer okreta 1/18, a da bi se osovina rotirala skroz ulijevo, moramo dati PWM s omjerom rada 2/18. Programirat ćemo ATMEGA8 da odašilje PWM signal koji će okretati servo vratilo na 180, a zatim na 0 nakon određenog kašnjenja.
Tijekom cijelog vremena senzor požara će biti uključen, a kontroler u potpunom stanju. Ako dođe do požara, senzor daje snažni impuls ovaj impuls kada ga kontroler detektira, postavlja alarm. Alarm će se isključiti pritiskom na gumb za resetiranje koji je povezan s njim.
U atmega8 za tri PWM kanala odredili smo tri pina. Izlaz PWM-a možemo uzeti samo na ovim pinovima. Budući da koristimo PWM1, trebali bismo uzeti PWM signal na OC1A pin (PORTB 1. st. PIN). Kao što je prikazano na shemi spojeva, povezujemo servo signal na OC1A pin. Ovdje je još jedna stvar preko tri PWM kanala, dva su 8-bitna PWM kanala i jedan 16-bitni PWM kanal. Ovdje ćemo upotrijebiti 16-bitni PWM kanal.
U ATMEGA-i postoji nekoliko načina za generiranje PWM-a
1. Faza ispravlja PWM.
2. Brzi PWM.
Ovdje ćemo sve učiniti jednostavnim, pa ćemo koristiti FAST PWM metodu za generiranje PWM signala.
Prvo odaberite frekvenciju PWM-a. To obično ovisi o primjeni za LED diode bilo koje frekvencije veće od 50 Hz. Iz tog razloga odabiremo brojač takta 1MHZ, pa ne odabiremo pretkalar. Pretkalar je broj koji je odabran tako da dobije manji brojač sati. Na primjer, ako je takt oscilatora 8 MHz, možemo odabrati preskalar od '8' da dobijemo 1MHz za brojač. Preskalar se odabire na temelju učestalosti. Ako želimo više impulsa u vremenskom razdoblju, moramo odabrati viši predkalar.
Sada da bismo iz ATMEGA-e izbacili BRZI PWM od 50 Hz takta, moramo omogućiti odgovarajuće bitove u registru " TCCR1B ".

Ovdje, CS10, CS11, CS12 (ŽUTO) - odaberite preskala za odabir brojača sata. Tablica za odgovarajući predkalar prikazana je u donjoj tablici. Dakle, za predkaliranje jednog (oscilatorni sat = brojač sati).
pa je CS10 = 1, druga dva bita su nula.

CRVENA (WGM10-WGM13): promijenjene su kako bi se odabrali načini generiranja valnog oblika, na temelju donje tablice, za brzi PWM. Imamo WGM11, WGM12 i WGM12 postavljeni su na 1.

Sada znamo da je PWM signal s drugačijim radnim odnosom ili različitim vremenima UKLJ. Do sada smo odabirali frekvenciju i vrstu PWM-a. Glavna tema ovog poglavlja leži u ovom odjeljku. Za dobivanje različitog radnog odnosa, odabrat ćemo vrijednost između 0 i 255 (2 ^ 8 zbog 8 bita). Recimo da odaberemo vrijednost 180, jer brojač počinje računati od 0 i dosegne vrijednost 180, izlazni odgovor se može aktivirati. Ovaj okidač može biti invertujući ili neinvertirajući. To je izlaz koji se može reći povući prema dolasku do brojanja ili mu se može reći da se povuče prema dolje na brojanje.
ZELENO (COM1A1, COM1A0): Ovaj izbor povlačenja prema gore ili dolje odabiru bitovi CM1A0 i CM1A1.
Kao što je prikazano u tablici, da bi izlaz bio visok pri usporedbi, a izlaz će ostati visok do maksimalne vrijednosti. Za to moramo odabrati način invertiranja, pa je COM1A0 = 1; COM1A1 = 1.

Kao što je prikazano na donjoj slici, OCR1A (Output Compare Register 1A) je bajt koji pohranjuje vrijednost koju je odabrao korisnik. Dakle, ako promijenimo OCR1A = 180, kontroler pokreće promjenu (visoku) kada brojač dosegne 180 od 0.

OCR1A mora biti 19999-600 za 180 stupnjeva i 19999-2400 za 0 stupnjeva.
