Šiame projekte mes ketiname sukurti Avarinio įspėjimo apie gaisrą sistemą naudodami ATMEGA8 mikrovaldiklį ir gaisro jutiklį. Gaisro jutiklis gali būti bet kokio tipo, tačiau mes naudojame IR (infraraudonųjų spindulių) pagrindu veikiantį gaisro jutiklį. Nors IR pagrindu veikiantys priešgaisriniai jutikliai turi keletą netikslumų trūkumų, tai yra pigiausias ir lengviausias būdas aptikti gaisrą.
IR pagrindu veikiantys gaisro jutikliai mato silpniau, todėl priešgaisrinį jutiklį montuosime ant servo variklio. „Servo“ švytuoklė pasisuks 180 laipsnių kampu. Kai ant jo yra sumontuotas ugnies jutiklis, matome 270 + laipsnių ugnies jutimą. Servo serveris sukasi nuolat, todėl bus sukurta visa kambario priešgaisrinė signalizacija. Norėdami gauti daugiau tikslumo, galime į sistemą įtraukti dūmų jutiklį. Tai galėtume gauti didesnį tikslumą.
Grandinės komponentai
Aparatūra: + 5v maitinimo šaltinis, servovariklis (sg90), ATMEGA8, BUZZER, mygtukas, 10KΩ rezistorius, 1KΩ rezistorius, 220Ω rezistorius, 100nF kondensatorius, AVR-ISP PROGRAMMERIS.
Programinė įranga: „ Atmel studio 6.1“, „progisp“ arba „flash magic“.
Grandinės schema ir darbas
Kad servo velenas pasislinktų kairėn, reikia duoti 1/18 posūkio raciono, o kad velenas pasisuktų į kairę, turime suteikti PWM, kurio darbo racionas yra 2/18. Mes ketiname užprogramuoti ATMEGA8, kad gautume PWM signalą, kuris pasuktų servo veleną į 180, o po to į tam tikrą uždelsimą.
Visą laiką ugnies jutiklis bus įjungtas, o valdiklis bus visiškai budrus. Jei kyla gaisras, jutiklis suteikia didelį impulsą, kurį nustato pulsas, valdikliui aptikus, jis nustato aliarmą. Aliarmas bus išjungtas paspaudus prie jo prijungtą atstatymo mygtuką.
Atmintoje trims PWM kanalams mes paskyrėme tris kaiščius. PWM išvestį galime priimti tik prie šių kaiščių. Kadangi mes naudojame PWM1, mes turėtume paimti PWM signalą ties OC1A kaiščiu (PORTB 1 -as PIN kodas). Kaip parodyta grandinės schemoje, servo signalą jungiame prie OC1A kaiščio. Kitas dalykas yra per tris PWM kanalus, du yra 8 bitų PWM kanalai ir vienas 16 bitų PWM kanalas. Čia ketiname naudoti 16 bitų PWM kanalą.
ATMEGA yra keli būdai generuoti PWM
1. Fazinis teisingas PWM.
2. Greitas PWM.
Čia mes laikysimės visko paprasto, todėl PWM signalui generuoti naudosime FAST PWM metodą.
Pirmiausia reikia pasirinkti PWM dažnį. Paprastai tai priklauso nuo taikymo, jei šviesos diodui tinka bet kuris didesnis nei 50Hz dažnis. Dėl šios priežasties mes pasirenkame skaitiklio laikrodį 1MHZ. Taigi mes nesirenkame jokio išankstinio skalės. Išankstinis skalė yra skaičius, kuris taip parenkamas norint gauti mažesnį skaitiklį. Pvz., Jei osciliatoriaus laikrodis yra 8Mhz, galime pasirinkti išankstinį skalę „8“, kad gautume 1MHz laikrodį skaitikliui. Išankstinis skalė parenkama pagal dažnį. Jei norime daugiau laiko periodo impulsų, turime pasirinkti didesnį preskalarą.
Norėdami iš „ATMEGA“ išgauti FAST PWM 50Hz laikrodį, „ TCCR1B “ registre turime įgalinti atitinkamus bitus.
Čia
CS10, CS11, CS12 (GELTONA) - pasirinkite priešskalę, kad pasirinktumėte skaitiklį. Tinkamo preskalaro lentelė parodyta žemiau esančioje lentelėje. Taigi, norint iš anksto kalkinti vieną (osciliatoriaus laikrodis = skaitiklio laikrodis).
taigi CS10 = 1, kiti du bitai yra lygūs nuliui.
RED (WGM10-WGM13): pakeistos, norint pasirinkti greitos PWM bangos formos generavimo režimus, remiantis žemiau esančia lentele. Turime WGM11, WGM12 ir WGM12 nustatytas į 1.
Dabar mes žinome, kad PWM yra signalas, turintis skirtingą darbo normą arba skirtingą įjungimo išjungimo laiką. Iki šiol mes pasirinkome PWM dažnį ir tipą. Pagrindinė šio skyriaus tema yra šiame skyriuje. Norėdami gauti skirtingą darbo normą, mes pasirinksime vertę nuo 0 iki 255 (2 ^ 8 dėl 8 bitų). Tarkime, kad mes pasirenkame 180 reikšmę, nes skaitiklis pradeda skaičiuoti nuo 0 ir pasiekia 180 vertę, gali būti suaktyvintas išvesties atsakas. Šis aktyviklis gali būti atvirkštinis arba ne. Tai yra rezultatas, kurį galima pasakyti, kad jis turi būti ištrauktas pasiekus skaičių, arba gali būti pasakyta, kad jis turi būti sumažintas pasiekus skaičių.
ŽALIA (COM1A1, COM1A0): Ši parinktis traukiant aukštyn arba žemyn pasirenkama CM1A0 ir CM1A1 bitais.
Kaip parodyta lentelėje, norint, kad produkcija būtų aukšta lyginant, ir produkcija išliks aukšta iki didžiausios vertės. Tam turime pasirinkti invertuojantį režimą, taigi COM1A0 = 1; COM1A1 = 1.
Kaip parodyta žemiau esančiame paveikslėlyje, OCR1A (produkcijos palyginimo registras 1A) yra baitas, kuriame saugoma vartotojo pasirinkta vertė. Taigi, jei pakeisime OCR1A = 180, valdiklis paleidžia pokytį (aukštą), kai skaitiklis pasiekia 180 nuo 0.
OCR1A turi būti 19999-600 180 laipsnių ir 19999-2400 0 laipsnių.