În acest proiect, vom realiza un sistem de alertă de incendiu utilizând microcontrolerul ATMEGA8 și senzorul de incendiu. Senzorul de incendiu poate fi de orice tip, totuși folosim senzor de incendiu pe bază de IR (infraroșu). Deși senzorii de incendiu pe bază de IR au unele dezavantaje, în mare parte inexactitate, este cel mai ieftin și mai simplu mod de a detecta focul.
Senzorii de incendiu pe bază de IR au o viziune senzorială mai mică, așa că vom monta senzorul de foc pe un servomotor. Servo-ul va face rotații de pendul de 180 de grade. Cu senzorul de foc montat pe acesta, obținem o viziune de detectare a focului de peste 270 de grade. Servo-ul se va roti continuu, oferind astfel un sistem complet de alertă la incendiu. Pentru mai multă precizie, putem adăuga un senzor de fum la sistem. Cu aceasta am putea obține o precizie mai mare.
Componentele circuitului
Hardware: alimentare + 5v, servomotor (sg90), ATMEGA8, BUZZER, buton, rezistor 10KΩ, rezistor 1KΩ, rezistor 220Ω, condensator 100nF, PROGRAMATOR AVR-ISP.
Software: Atmel studio 6.1, progisp sau flash magic.
Diagrama circuitului și funcționarea
Pentru ca arborele servo să se deplaseze la stânga, trebuie să dăm o rotație de 1/18 de rotație, iar pentru ca arborele să se rotească până la stânga, trebuie să oferim PWM cu o rație de 2/18. Vom programa ATMEGA8 pentru a emite un semnal PWM care va roti arborele servo la 180 și apoi la 0 după o anumită întârziere.
În timpul complet, senzorul de incendiu va fi pornit, iar controlerul va fi în alertă completă. Dacă există un incendiu, senzorul oferă un impuls ridicat, acest impuls este detectat de către controler și stabilește o alarmă. Alarma va fi dezactivată prin apăsarea unui buton de resetare care este conectat la aceasta.
În atmega8 pentru trei canale PWM, am desemnat trei pini. Putem lua ieșire PWM numai la acești pini. Deoarece folosim PWM1 ar trebui să luăm semnalul PWM la pinul OC1A (PORTB 1 st PIN). După cum se arată în schema de circuit, conectăm semnalul servo la pinul OC1A. Aici un alt lucru este peste trei canale PWM, două sunt canale PWM pe 8 biți și un canal PWM pe 16 biți. Vom folosi un canal PWM pe 16 biți aici.
În ATMEGA există câteva moduri de a genera PWM, sunt
1. Faza corectă PWM.
2. PWM rapid.
Aici vom păstra totul simplu, deci vom folosi metoda FAST PWM pentru a genera semnalul PWM.
Mai întâi să alegeți frecvența PWM, aceasta depinde de aplicație, de obicei, pentru un LED orice frecvență mai mare de 50Hz ar face. Din acest motiv, alegem ceasul contor 1MHZ, deci nu alegem prescalar. Un prescalar este un număr atât de selectat pentru a obține un contor mai mic. De exemplu, dacă ceasul oscilatorului este de 8Mhz, putem alege un prescalar de '8' pentru a obține un ceas de 1MHz pentru contor. Prescalarul este selectat pe baza frecvenței. Dacă dorim mai multe impulsuri de perioadă de timp, trebuie să alegem prescalar mai mare.
Acum, pentru a scoate din ATMEGA ceasul PWM RAPID de 50Hz, trebuie să activăm biții corespunzători în registrul „ TCCR1B ”.
Aici, CS10, CS11, CS12 (GALBEN) - selectați prescalarul pentru alegerea contorului. Tabelul pentru prescalar adecvat este prezentat în tabelul de mai jos. Deci pentru prescalarea unuia (ceasul oscilatorului = ceasul contorului).
deci CS10 = 1, alți doi biți sunt zero.
RED (WGM10-WGM13): sunt modificate pentru a alege modurile de generare a formelor de undă, pe baza tabelului de mai jos, pentru PWM rapid. Avem WGM11, WGM12 și WGM12 sunt setate la 1.
Acum știm că PWM este un semnal cu o rație de funcționare diferită sau cu timpi diferiți de pornire și oprire. Până acum am ales frecvența și tipul PWM. Tema principală a acestui capitol se află în această secțiune. Pentru a obține o rație de serviciu diferită, vom alege o valoare între 0 și 255 (2 ^ 8 din cauza a 8 biți). Să presupunem că alegem o valoare 180, deoarece contorul începe să numere de la 0 și atinge valoarea 180, răspunsul de ieșire poate fi declanșat. Acest declanșator poate fi inversant sau neinversibil. Aceasta este ieșirea care se poate spune să fie ridicată la atingerea numărului sau se poate spune că este trasă în jos la atingerea numărării.
VERDE (COM1A1, COM1A0): Această selecție de tragere în sus sau în jos este aleasă de biții CM1A0 și CM1A1.
Așa cum se arată în tabel, pentru ca ieșirea să se ridice la comparare și ieșirea va rămâne ridicată până la valoarea maximă. Trebuie să alegem modul de inversare pentru a face acest lucru, deci COM1A0 = 1; COM1A1 = 1.
Așa cum se arată în figura de mai jos, OCR1A (Output Compare Register 1A) este octetul care stochează valoarea aleasă de utilizator. Deci, dacă schimbăm OCR1A = 180, controlerul declanșează schimbarea (ridicată) atunci când contorul atinge 180 de la 0.
OCR1A trebuie să fie 19999-600 pentru 180 de grade și 19999-2400 pentru 0 grade.