Sa proyektong ito, gagawa kami ng isang Fire Alert System na gumagamit ng ATMEGA8 microcontroller at fire sensor. Ang Fire sensor ay maaaring may anumang uri, subalit gumagamit kami ng IR (Infrared) batay sa Fire Sensor. Bagaman ang IR based Fire Sensors ay may ilang mga kawalan na karamihan sa kawastuhan, ito ang pinakamura at pinakamadaling paraan upang makita ang sunog.
Ang mga IR Base Fire sensor ay may mas kaunting pang-unawa sa pang-unawa, kaya ilalagay namin ang sensor ng sunog sa isang servo motor. Ang Servo ay gagawa ng 180 degree pendulum rotations. Gamit ang naka-mount na sensor ng Fire dito, nakakakuha kami ng isang 270+ degree na pangitain na pandama ng sunog. Ang servo ay patuloy na umiikot kaya nagbibigay ng isang kumpletong sistema ng alerto sa sunog ng silid. Para sa higit na kawastuhan maaari kaming magdagdag ng isang sensor ng usok sa system. Sa pamamagitan nito makakakuha tayo ng mas mataas na kawastuhan.
Mga Bahagi ng Circuit
Hardware: + 5v power supply, Servo motor (sg90), ATMEGA8, BUZZER, Button, 10KΩ resistor, 1KΩ resistor, 220Ω resistor, 100nF capacitor, AVR-ISP PROGRAMMER.
Software: Atmel studio 6.1, progisp o flash magic.
Circuit Diagram at Paggawa
Para makagalaw ang servo shaft sa kaliwa lahat kailangan namin upang bigyan ang 1/18 turn on ration, at upang paikutin ang poste hanggang sa kaliwa kailangan naming bigyan ang PWM na may rasyon ng tungkulin na 2/18. Pupunta kami sa programa ng ATMEGA8 upang magbigay ng isang signal ng PWM na paikutin ang servo shaft sa 180 at pagkatapos ay 0 pagkatapos ng isang tiyak na pagkaantala.
Sa panahon ng kumpletong oras ang Fire Sensor ay nasa at ang controller ay nasa kumpletong alerto. Kung may sunog, ang sensor ay nagbibigay ng isang mataas na pulso ng pulso na ito kapag napansin ng controller na nagtatakda ito ng isang alarma. Ang alarma ay papatayin sa pamamagitan ng pagpindot sa isang pindutan ng pag-reset na konektado dito.
Sa atmega8 para sa tatlong mga PWM channel, nagtalaga kami ng tatlong mga pin. Maaari lamang kaming kumuha ng output ng PWM sa mga pin na ito lamang. Dahil gumagamit kami ng PWM1 dapat kaming kumuha ng signal ng PWM sa OC1A pin (PORTB 1 st PIN). Tulad ng ipinakita sa circuit diagram, kinokonekta namin ang signal ng servo sa OC1A pin. Narito ang isa pang bagay ay higit sa tatlong mga PWM channel, dalawa ang 8-bit na mga PWM channel at isang 16-bit na PWM channel. Gagamitin namin ang isang 16-bit na PWM channel dito.
Sa ATMEGA maraming mga paraan upang makabuo ng PWM, ang mga ito
1. Tamang yugto na PWM.
2. Mabilis na PWM.
Dito ay panatilihin naming simple ang lahat, Kaya gagamitin namin ang FAST PWM na pamamaraan upang makabuo ng PWM signal.
Una upang piliin ang dalas ng PWM, Ito ay nakasalalay sa application na karaniwang, para sa isang LED anumang dalas na mas malaki sa 50Hz ang gagawin. Para sa kadahilanang iyon ay pipiliin namin ang counter clock na 1MHZ. Kaya't pumili kami ng walang prescalar. Ang isang prescalar ay isang numero na napili upang makakuha ng isang mas kaunting counter na orasan. Halimbawa kung ang oscillator na orasan ay 8Mhz, maaari kaming pumili ng isang prescalar na '8' upang makakuha ng isang 1MHz na orasan para sa counter. Ang prescalar ay napili batay sa dalas. Kung nais natin ng mas maraming pulse ng tagal ng panahon kailangan nating pumili ng mas mataas na prescalar.
Ngayon upang makuha ang FAST PWM na 50Hz na orasan mula sa ATMEGA, kailangan naming paganahin ang mga naaangkop na piraso sa rehistro ng " TCCR1B ".
Dito, CS10, CS11, CS12 (DILAW) —piliin ang prescalar para sa pagpili ng counter orasan. Ang talahanayan para sa naaangkop na prescalar ay ipinapakita sa ibaba ng talahanayan. Kaya para sa prescaling isa (oscillator clock = counter orasan).
kaya CS10 = 1, ang iba pang dalawang piraso ay zero.
PULA (WGM10-WGM13): binago upang pumili ng mga mode ng pagbuo ng waveform, batay sa talahanayan sa ibaba, para sa mabilis na PWM. Mayroon kaming WGM11, WGM12 at WGM12 ay nakatakda sa 1.
Ngayon alam namin na ang PWM ay isang senyas na may iba't ibang rasyon ng tungkulin o magkakaibang turn ON na turn OFF beses. Hanggang sa ngayon pinili namin ang dalas at uri ng PWM. Ang pangunahing tema ng kabanatang ito ay nakasalalay sa seksyong ito. Para sa pagkuha ng iba't ibang rasyon ng tungkulin, pipili kami ng isang halaga sa pagitan ng 0 at 255 (2 ^ 8 dahil sa 8 bit). Sabihin na pumili kami ng halagang 180, habang nagsisimulang bilangin ang counter mula sa 0 at naabot ang halagang 180, maaaring ma-trigger ang tugon sa output. Ang nag-uudyok na ito ay maaaring pag-invert o hindi pag-invert. Iyon ang output ay maaaring sabihin sa hinila hanggang sa maabot ang bilang, o masasabi na hilahin pababa sa pag-abot sa bilang.
GREEN (COM1A1, COM1A0): Ang pagpipiliang ito ng paghila pataas o pababa ay pinili ng mga CM1A0 at CM1A1 na mga piraso.
Tulad ng ipinakita sa talahanayan, para sa output na maging mataas sa ihambing at ang output ay mananatiling mataas hanggang sa max na halaga. Kailangan nating pumili ng inverting mode upang magawa iyon, kaya't COM1A0 = 1; COM1A1 = 1.
Tulad ng ipinakita sa figure sa ibaba, ang OCR1A (Output Compare Register 1A) ay ang byte na nag-iimbak ng halaga na pinili ng gumagamit. Kaya't kung binago natin ang OCR1A = 180, ang controller ay nagpapalitaw ng pagbabago (mataas) kapag ang counter ay umabot sa 180 mula sa 0.
Ang OCR1A ay dapat na 19999-600 para sa 180 degree at 19999-2400 para sa 0 degree.