I dette prosjektet skal vi lage et brannvarslingssystem ved hjelp av ATMEGA8 mikrokontroller og brannsensor. Brannsensor kan være av hvilken som helst type, men vi bruker IR (infrarød) basert brannsensor. Selv om IR-baserte brannsensorer har noen ulemper med unøyaktighet, er det den billigste og enkleste måten å oppdage brann på.
IR-baserte brannsensorer har mindre sansesyn, så vi skal montere brannsensoren på en servomotor. Servoen vil gjøre pendulrotasjoner på 180 grader. Med brannsensoren montert på den får vi en brannfølsom visjon på over 270 grader. Servoen vil rotere kontinuerlig og dermed gi et komplett brannvarslingssystem for rommet. For mer nøyaktighet kan vi legge til en røyksensor i systemet. Med det kunne vi få høyere nøyaktighet.
Kretskomponenter
Maskinvare: + 5v strømforsyning, Servomotor (sg90), ATMEGA8, BUZZER, knapp, 10KΩ motstand, 1KΩ motstand, 220Ω motstand, 100nF kondensator, AVR-ISP PROGRAMMER.
Programvare: Atmel studio 6.1, progisp eller flash magi.
Kretsdiagram og arbeid
For at servoskaftet skal bevege seg til venstre, trenger vi å gi 1/18 sving på rasjonen, og for at skaftet skal rotere helt til venstre, må vi gi PWM med en driftsrasjon på 2/18. Vi skal programmere ATMEGA8 for å gi ut et PWM-signal som vil rotere servoakselen til 180 og deretter til 0 etter en viss forsinkelse.
I løpet av hele tiden vil brannføleren være på og kontrolleren vil være i full beredskap. Hvis det er brann, gir sensoren en høy puls denne pulsen når den oppdages av kontrolleren, setter den en alarm. Alarmen slås av ved å trykke på en tilbakestillingsknapp som er koblet til den.
I atmega8 for tre PWM-kanaler har vi utpekt tre pinner. Vi kan bare ta PWM-utgang på disse pinnene. Siden vi bruker PWM1 vi bør ta PWM-signalet på OC1A tapp (PORTB 1 st PIN). Som vist i kretsskjemaet kobler vi servosignalet til OC1A-pinnen. Her er en annen ting over tre PWM-kanaler, to er 8-biters PWM-kanaler og en 16-biters PWM-kanal. Vi skal bruke en 16-biters PWM-kanal her.
I ATMEGA er det noen måter å generere PWM på, det er de
1. Fase riktig PWM.
2. Rask PWM.
Her skal vi holde alt enkelt, så vi skal bruke FAST PWM-metoden for å generere PWM-signalet.
Først velger du frekvensen til PWM. Dette avhenger vanligvis av applikasjonen, for en LED vil enhver frekvens større enn 50Hz gjøre. Av den grunn velger vi motklokken 1MHZ, så vi velger ingen prescalar. En prescalar er et tall som er så valgt for å få en mindre motklokke. For eksempel hvis oscillatorklokken er 8Mhz, kan vi velge en prescalar på '8' for å få en 1MHz klokke for telleren. Prescalar velges basert på frekvens. Hvis vi vil ha flere tidsperioder, må vi velge høyere prescalar.
Nå for å få FAST PWM på 50Hz klokke ut av ATMEGA, må vi aktivere de aktuelle bitene i " TCCR1B " -registeret.
Her, CS10, CS11, CS12 (GUL) - velg prescalar for å velge motklokke. Tabellen for passende prescalar er vist i tabellen nedenfor. Så for å forhåndsskalere en (oscillatorklokke = motklokke).
så CS10 = 1, andre to biter er null.
RØD (WGM10-WGM13): endres for å velge bølgeformgenereringsmodus, basert på tabellen nedenfor, for rask PWM. Vi har WGM11, WGM12 og WGM12 er satt til 1.
Nå vet vi at PWM er et signal med forskjellig pliktrasjon eller forskjellige slå PÅ AV-tider. Inntil nå har vi valgt frekvens og type PWM. Hovedtemaet i dette kapitlet ligger i denne delen. For å få en annen pliktrasjon, skal vi velge en verdi mellom 0 og 255 (2 ^ 8 på grunn av 8 bit). Si at vi velger en verdi 180, da telleren begynner å telle fra 0 og når verdien 180, kan utgangssvaret utløses. Denne utløseren kan være inverterende eller ikke inverterende. Det vil si at utdataene kan bli fortalt å trekke opp når de når tellingen, eller det kan bli fortalt at de blir trukket ned når de når tellingen.
GRØNN (COM1A1, COM1A0): Dette valget av å trekke opp eller ned er valgt av CM1A0 og CM1A1 bits.
Som vist i tabellen, for at utgangen skal gå høyt når du sammenligner, og utdataene vil forbli høye til maksimumsverdien. Vi må velge inverteringsmodus for å gjøre det, så COM1A0 = 1; COM1A1 = 1.
Som vist i figuren nedenfor er OCR1A (Output Compare Register 1A) den byten som lagrer den valgte brukerverdien. Så hvis vi endrer OCR1A = 180, utløser kontrolleren endringen (høy) når telleren når 180 fra 0.
OCR1A må være 19999-600 i 180 grader og 19999-2400 i 0 grader.