V tem projektu bomo izdelali sistem za opozarjanje na požar z uporabo mikrokrmilnika ATMEGA8 in požarnega senzorja. Požarni senzor je lahko katere koli vrste, vendar uporabljamo IR (infrardeči) požarni senzor. Čeprav imajo IR senzorji požara nekaj pomanjkljivosti, predvsem zaradi netočnosti, je to najcenejši in najlažji način za odkrivanje požara.
IR požarni senzorji imajo slabši senzorski vid, zato bomo požarni senzor namestili na servo motor. Servo bo vrtel nihalo za 180 stopinj. Z nameščenim požarnim senzorjem dobimo 270+ stopinj vida zaznavanja ognja. Servo se bo neprekinjeno vrtel in tako dobil popoln sistem za opozarjanje na požar v sobi. Za večjo natančnost lahko v sistem dodamo dimni senzor. S tem bi lahko dosegli večjo natančnost.
Komponente vezja
Strojna oprema: + 5v napajalnik, servo motor (sg90), ATMEGA8, BUZZER, gumb, 10KΩ upor, 1KΩ upor, 220Ω upor, 100nF kondenzator, AVR-ISP PROGRAMER.
Programska oprema: Atmel studio 6.1, progisp ali flash magic.
Shema vezja in delovanje
Če se servo gred premika levo, moramo dati razmerje 1/18 vklopa, za vrtenje gredi do konca v levo pa moramo dati PWM z razmerjem obratovanja 2/18. Programirali bomo ATMEGA8, da bo oddajal PWM signal, ki bo servo gred po določeni zakasnitvi zasukal na 180 in nato na 0.
Med celotnim časom bo vklopljen požarni senzor in krmilnik bo v polni pripravljenosti. Če pride do požara, senzor daje ta impulz visok impulz, ko ga krmilnik zazna in nastavi alarm. Alarm se izklopi s pritiskom na gumb za ponastavitev, ki je povezan z njim.
V atmega8 za tri PWM kanale smo določili tri nožice. Izhod PWM lahko sprejemamo samo na teh zatičih. Ker uporabljamo PWM1, moramo signal PWM sprejemati na pin OC1A (PORTB 1. st. PIN). Kot je prikazano na vezju, servo signal povezujemo z zatičem OC1A. Tu je še ena stvar v zvezi s tremi PWM kanali, dva sta 8-bitna PWM kanala in en 16-bitni PWM kanal. Tu bomo uporabili 16-bitni PWM kanal.
V ATMEGA obstaja nekaj načinov za ustvarjanje PWM
1. Fazna korekcija PWM.
2. Hiter PWM.
Tu bomo naredili vse preprosto, zato bomo uporabili metodo FAST PWM za generiranje PWM signala.
Najprej izberemo frekvenco PWM. To je običajno odvisno od uporabe, pri LED bi veljala katera koli frekvenca večja od 50 Hz. Iz tega razloga izberemo števec ur 1MHz, zato ne izberemo predkalarja. Predkalar je številka, ki je izbrana tako, da dobimo manjši števec ur. Na primer, če je takt oscilatorja 8 MHz, lahko izberemo preskalnik '8', da dobimo 1MHz uro za števec. Predkalar se izbere glede na frekvenco. Če želimo več impulzov v časovnem obdobju, moramo izbrati višji predkalar.
Zdaj, da iz ATMEGA izvlečemo FAST PWM 50Hz ure, moramo v registru “ TCCR1B ” omogočiti ustrezne bite.
Tukaj, CS10, CS11, CS12 (RUMENA) - izberite predkalar za izbiro števca. Tabela ustreznih predkalarjev je prikazana v spodnji tabeli. Torej za predkaliranje ene (oscilator ura = števec).
torej CS10 = 1, druga dva bita sta nič.
RDEČE (WGM10-WGM13): spremenjene so tako, da izberejo načine generiranja valovnih oblik na podlagi spodnje tabele za hiter PWM. Imamo WGM11, WGM12 in WGM12 nastavljeni na 1.
Zdaj vemo, da je PWM signal z drugačnim delovnim razmerjem ali različnimi časi vklopa in izklopa. Do zdaj smo izbirali frekvenco in vrsto PWM. Glavna tema tega poglavja je v tem poglavju. Za pridobitev različnih dajatev bomo izbrali vrednost med 0 in 255 (2 ^ 8 zaradi 8 bitov). Recimo, da izberemo vrednost 180, saj števec začne šteti od 0 in doseže vrednost 180, se lahko sproži izhodni odziv. Ta sprožilec je lahko obračalni ali neobratni. To pomeni, da se lahko pri doseganju štetja izpiše, ali naj se potegne navzdol, ko dosežemo štetje.
ZELENA (COM1A1, COM1A0): To izbiro vlečenja navzgor ali navzdol izberejo bitji CM1A0 in CM1A1.
Kot je prikazano v tabeli, se bo rezultat pri primerjavi primerjal visoko, rezultat pa bo ostal visok do največje vrednosti. Za to moramo izbrati način invertiranja, zato je COM1A0 = 1; COM1A1 = 1.
Kot je prikazano na spodnji sliki, je OCR1A (Output Compare Register 1A) bajt, ki shrani uporabniško izbrano vrednost. Torej, če spremenimo OCR1A = 180, krmilnik sproži spremembo (visoko), ko števec doseže 180 od 0.
OCR1A mora biti 19999-600 za 180 stopinj in 19999-2400 za 0 stopinj.