V tomto projekte vyrobíme Fire Alert System pomocou mikrokontroléra ATMEGA8 a požiarneho senzora. Senzor požiaru môže byť ľubovoľného typu, používame však IR (infračervené) požiarne senzory. Aj keď IR senzory požiaru majú niektoré nevýhody hlavne z hľadiska nepresnosti, je to najlacnejší a najjednoduchší spôsob detekcie požiaru.
IR senzory požiaru majú menšie snímacie videnie, takže ideme namontovať senzor požiaru na servomotor. Servo bude robiť kyvadlo otočené o 180 stupňov. S namontovaným protipožiarnym senzorom získame víziu snímania ohňa viac ako 270 stupňov. Servo bude nepretržite rotovať, čo poskytne kompletný požiarny výstražný systém v miestnosti. Pre väčšiu presnosť môžeme do systému pridať dymový senzor. S tým by sme mohli získať vyššiu presnosť.
Súčasti obvodu
Hardvér: napájanie + 5 V, servomotor (sg90), ATMEGA8, BUZZER, gombík, odpor 10 KΩ, odpor 1 KΩ, odpor 220Ω, kondenzátor 100 nF, PROGRAMÁTOR AVR-ISP.
Softvér: Atmel studio 6.1, progisp alebo flash magic.
Schéma zapojenia a funkčnosť
Aby sa hriadeľ servopohonu mohol pohybovať doľava, musíme dať pomer otáčok 1/18 a aby sa hriadeľ otáčal úplne doľava, musíme dať PWM s pomerom otáčok 2/18. Budeme programovať ATMEGA8 tak, aby vydal PWM signál, ktorý po určitom oneskorení otočí servopohon na 180 a potom na 0.
Po celú dobu bude požiarny senzor zapnutý a ovládač bude v úplnej pohotovosti. Ak dôjde k požiaru, snímač poskytuje vysoký impulz, ktorý pri detekcii regulátorom nastaví alarm. Budík sa vypne stlačením resetovacieho tlačidla, ktoré je k nemu pripojené.
V atmega8 pre tri PWM kanály sme určili tri piny. Výstup PWM môžeme brať iba na týchto pinoch. Pretože používame PWM1, mali by sme vziať PWM signál na pin OC1A (PORTB 1. PIN). Ako je znázornené na schéme zapojenia, pripájame servo signál k pinu OC1A. Tu je ďalšia vec viac ako tri PWM kanály, dva sú 8-bitové PWM kanály a jeden 16-bitový PWM kanál. Tu použijeme 16-bitový PWM kanál.
V ATMEGA existuje niekoľko spôsobov, ako generovať PWM
1. Fázovo správne PWM.
2. Rýchle PWM.
Tu budeme všetko udržiavať jednoduché. Takže na generovanie signálu PWM použijeme metódu FAST PWM.
Najprv si vyberte frekvenciu PWM. Závisí to zvyčajne od aplikácie, pre LED by fungovala akákoľvek frekvencia vyššia ako 50 Hz. Z tohto dôvodu volíme počítadlo hodín 1MHZ. Nevyberáme teda žiaden preskalár. Prescalar je číslo, ktoré je vybrané tak, aby získalo menšie počítadlo hodín. Napríklad ak sú hodiny oscilátora 8Mhz, môžeme zvoliť prescalar '8', aby sme dostali 1MHz hodiny pre počítadlo. Prescalar sa vyberá na základe frekvencie. Ak chceme viac impulzov časového obdobia, musíme zvoliť vyššiu preskalárnu.
Teraz, aby sme z ATMEGA dostali FAST PWM s frekvenciou 50 Hz, musíme povoliť príslušné bity v registri „ TCCR1B “.
Tu, CS10, CS11, CS12 (ŽLTÁ) - vyberte predkalár pre výber počítadla hodín. Tabuľka pre príslušný predkallar je uvedená v nasledujúcej tabuľke. Takže na prednastavenie jednej (hodiny oscilátora = počítadlo hodín).
takže CS10 = 1, ďalšie dva bity sú nulové.
ČERVENÁ (WGM10-WGM13): sú zmenené tak, aby zvolili režimy generovania krivky na základe nasledujúcej tabuľky pre rýchle PWM. Máme WGM11, WGM12 a WGM12 sú nastavené na 1.
Teraz vieme, že PWM je signál s rôznymi pracovnými pomermi alebo rôznymi časmi zapnutia a vypnutia. Doteraz sme volili frekvenciu a typ PWM. Hlavná téma tejto kapitoly spočíva v tejto časti. Pre získanie rôznych pracovných pomerov vyberieme hodnotu medzi 0 a 255 (2 ^ 8 kvôli 8 bitom). Povedzme, že zvolíme hodnotu 180, pretože počítadlo začne počítať od 0 a dosiahne hodnotu 180, môže sa spustiť výstupná odozva. Tento spúšťač môže byť invertujúci alebo neinvertujúci. To znamená, že pri dosiahnutí počtu je možné povedať, že výstup sa vytiahne, alebo keď sa pri dosiahnutí počtu dá povedať, že sa vytiahne dole.
ZELENÁ (COM1A1, COM1A0): Túto voľbu ťahania nahor alebo nadol vyberajú bity CM1A0 a CM1A1.
Ako je uvedené v tabuľke, pri porovnaní ide o vysoký výstup, ktorý zostane vysoký až do maximálnej hodnoty. Aby sme to dosiahli, musíme zvoliť invertujúci režim, takže COM1A0 = 1; COM1A1 = 1.
Ako je znázornené na nasledujúcom obrázku, OCR1A (Register porovnania výstupu 1A) je bajt, ktorý ukladá hodnotu zvolenú používateľom. Takže ak zmeníme OCR1A = 180, regulátor spustí zmenu (vysokú), keď počítadlo dosiahne 180 od 0.
OCR1A musí byť 19999-600 pre 180 stupňov a 19999-2400 pre 0 stupňov.