Ebben a projektben tűzjelző rendszert fogunk készíteni ATMEGA8 mikrokontroller és tűzérzékelő segítségével. A tűzérzékelők bármilyen típusúak lehetnek, azonban IR (infravörös) alapú tűzérzékelőt használunk. Bár az IR-alapú tűzérzékelőknek vannak hátrányai, főleg a pontatlanság miatt, ez a legolcsóbb és legegyszerűbb módszer a tűz észlelésére.
Az IR alapú tűzérzékelők kevésbé érzékelik a látást, ezért a tűzérzékelőt egy szervomotorra fogjuk felszerelni. A szervo 180 fokos ingaforgatásokat fog végrehajtani. A rá szerelt tűzérzékelővel 270+ fokos tűzérzékelő látást kapunk. A szervo folyamatosan forog, így teljes helyiség tűzjelző rendszert ad. A nagyobb pontosság érdekében füstérzékelőt adhatunk a rendszerhez. Ezzel nagyobb pontosságot érhetünk el.
Áramköri alkatrészek
Hardver: + 5v tápegység, szervomotor (sg90), ATMEGA8, BUZZER, gomb, 10KΩ ellenállás, 1KΩ ellenállás, 220Ω ellenállás, 100nF kondenzátor, AVR-ISP PROGRAMMER.
Szoftver: Atmel studio 6.1, progisp vagy flash magic.
Áramkör diagram és munka
Ahhoz, hogy a szervo tengely teljesen balra mozogjon, 1/18 fordulatot kell adnunk a fordulatszámról, és hogy a tengely teljesen balra forogjon, meg kell adnunk a PWM-et 2/18 terhelési aránnyal. Programozni fogjuk az ATMEGA8-ot, hogy PWM jelet adjon ki, amely a szervo tengelyt bizonyos késleltetés után 180-ra, majd 0-ra forgatja.
A teljes idő alatt a Tűzérzékelő bekapcsol és a vezérlő teljes riasztásban lesz. Tűz esetén az érzékelő nagy impulzust ad, amikor a vezérlő észleli az riasztást. A riasztást a hozzá kapcsolt reset gomb megnyomásával kapcsolják ki.
Az atmega8-ban három PWM csatornához három csapot jelöltünk ki. PWM kimenetet csak ezeken a csapokon vehetünk fel. Mivel mi használ PWM1 kell vennünk PWM jelet OC1A pin (PORTB 1 st PIN). Amint az áramköri ábra mutatja, a szervo jelet az OC1A tűhöz csatlakoztatjuk. Itt egy másik dolog három PWM csatornán van, kettő 8 bites PWM és egy 16 bites PWM csatorna. Itt egy 16 bites PWM csatornát fogunk használni.
Az ATMEGA-ban többféle módszer áll rendelkezésre a PWM előállítására
1. Fázis helyes PWM.
2. Gyors PWM.
Itt mindent egyszerűnek fogunk tartani, tehát FAST PWM módszert fogunk használni a PWM jel előállításához.
Először válassza ki a PWM frekvenciáját. Ez általában az alkalmazástól függ, egy LED esetén bármely 50Hz-nél nagyobb frekvencia megtörténne. Emiatt az 1MHZ ellenórát választjuk. Tehát nem választunk preskalárt. Az előskála egy olyan szám, amelyet úgy választottak ki, hogy kisebb ellenórát kapjon. Például, ha az oszcillátor órája 8Mhz, akkor választhatunk egy „8” előskálát, hogy 1MHz-es órát kapjunk számlálóhoz. Az előskálát a frekvencia alapján választják ki. Ha több időperiódusú impulzust akarunk, akkor magasabb preskalárt kell választanunk.
Most, hogy az 50Hz-es óra GYORS PWM-jét kijussuk az ATMEGA-ból, engedélyeznünk kell a megfelelő biteket a „ TCCR1B ” regiszterben.
Itt, CS10, CS11, CS12 (SÁRGA) - válassza ki az előskálát az ellenóra kiválasztásához. A megfelelő preskalar táblázata az alábbi táblázatban látható. Tehát az egyik előkalkulálásához (oszcillátor óra = számláló óra).
tehát CS10 = 1, a másik két bit nulla.
VÖRÖS (WGM10-WGM13): módosulnak a hullámforma létrehozási módok kiválasztásához az alábbi táblázat alapján a gyors PWM érdekében. Van WGM11, WGM12 és WGM12 értéke 1.
Most már tudjuk, hogy a PWM egy jel, amelynek eltérő az adagolási aránya vagy más a bekapcsolási és kikapcsolási ideje. Eddig a PWM gyakoriságát és típusát választottuk. A fejezet fő témája ebben a részben található. A különféle adagok eléréséhez 0 és 255 közötti értéket fogunk választani (8 bit miatt 2 ^ 8). Tegyük fel, hogy 180 értéket választunk, mivel a számláló 0-tól kezd számolni és eléri a 180 értéket, a kimeneti válasz kiváltható. Ez az indító lehet invertáló vagy nem invertáló. Ez azt mondhatja, hogy a kimenetet fel kell húzni, amikor eléri a számlálást, vagy mondhatjuk, hogy húzzuk le, amikor elérjük a számot.
ZÖLD (COM1A1, COM1A0): Ezt a felfelé vagy lefelé húzás kiválasztását a CM1A0 és CM1A1 bitek választják.
Amint a táblázat mutatja, a kimenet magasra kerül az összehasonlításkor, és a kimenet magas marad a maximális értékig. Ehhez invertáló módot kell választanunk, tehát COM1A0 = 1; COM1A1 = 1.
Amint az az alábbi ábrán látható, az OCR1A (Output Compare Register 1A) a bájt, amely tárolja a felhasználó által választott értéket. Tehát, ha megváltoztatjuk az OCR1A = 180 értéket, a vezérlő kiváltja a változást (magas), amikor a számláló 0-tól eléri a 180-at.
Az OCR1A értékének 19999-600 kell lennie 180 fokos és 19999-2400 értéknek 0 fok esetén.