I det här projektet ska vi skapa ett brandvarningssystem med ATMEGA8-mikrokontroller och brandsensor. Brandsensor kan vara av vilken typ som helst, men vi använder IR-sensor (infraröd). Även om IR-baserade brandsensorer har vissa nackdelar mestadels med felaktigheter, är det det billigaste och enklaste sättet att upptäcka brand.
IR-baserade brandsensorer har mindre avkänningssyn, så vi ska montera brandsensorn på en servomotor. Servon gör 180 pendelrotationer. Med brandgivaren monterad på den får vi en brandavkännande vision på över 270 grader. Servon kommer att rotera kontinuerligt vilket ger ett komplett brandvarningssystem för rummet. För mer noggrannhet kan vi lägga till en röksensor i systemet. Med det kunde vi få högre noggrannhet.
Kretskomponenter
Hårdvara: + 5v strömförsörjning, Servomotor (sg90), ATMEGA8, BUZZER, knapp, 10KΩ motstånd, 1KΩ motstånd, 220Ω motstånd, 100nF kondensator, AVR-ISP PROGRAMMER.
Programvara: Atmel studio 6.1, progisp eller flash magi.
Kretsdiagram och arbete
För att servoaxeln ska gå åt vänster hela vägen behöver vi ge 1/18 varv på ransonen, och för att axeln ska rotera hela vägen till vänster måste vi ge PWM med en arbetsration på 2/18. Vi ska programmera ATMEGA8 för att ge ut en PWM-signal som roterar servoaxeln till 180 och sedan till 0 efter en viss fördröjning.
Under hela tiden kommer brandsensorn att vara på och styrenheten kommer att vara i full varning. Om det är en brand, ger sensorn en hög puls denna puls när den detekteras av styrenheten sätter den ett larm. Larmet stängs av genom att trycka på en återställningsknapp som är ansluten till den.
I atmega8 för tre PWM-kanaler har vi utsett tre stift. Vi kan bara ta PWM-utdata endast på dessa stift. Eftersom vi använder PWM1 bör vi ta PWM-signalen vid OC1A-stift (PORTB 1: a PIN). Som visas i kretsschemat ansluter vi servosignalen till OC1A-stiftet. Här är en annan sak över tre PWM-kanaler, två är 8-bitars PWM-kanaler och en 16-bitars PWM-kanal. Vi ska använda en 16-bitars PWM-kanal här.
I ATMEGA finns det några sätt att generera PWM, det är de
1. Faskorrekt PWM.
2. Snabb PWM.
Här kommer vi att hålla allt enkelt, så vi kommer att använda FAST PWM-metoden för att generera PWM-signalen.
Först att välja frekvensen för PWM, Detta beror vanligtvis på applikation, för en lysdiod skulle någon frekvens som är större än 50Hz göra. Av den anledningen väljer vi motklockan 1MHZ, så vi väljer ingen prescalar. En prescalar är ett tal som är så valt att få en mindre motklocka. Till exempel om oscillatorklockan är 8Mhz, kan vi välja en förskalare på '8' för att få en 1MHz klocka för räknare. Prescalar väljs baserat på frekvens. Om vi vill ha fler tidsperioder måste vi välja högre prescalar.
För att få ut FAST PWM på 50Hz ur ATMEGA måste vi aktivera lämpliga bitar i " TCCR1B " -registret.
Här, CS10, CS11, CS12 (GUL) - välj prescalar för att välja motklocka. Tabellen för lämplig prescalar visas i nedanstående tabell. Så för förskalning av en (oscillatorklocka = motklocka).
så CS10 = 1, andra två bitar är noll.
RÖDT (WGM10-WGM13): ändras för att välja vågformgenereringslägen, baserat på tabellen nedan, för snabb PWM. Vi har WGM11, WGM12 och WGM12 är inställda på 1.
Nu vet vi att PWM är en signal med olika driftsförhållanden eller olika tändningstider. Hittills har vi valt frekvens och typ av PWM. Huvudtemat för detta kapitel ligger i detta avsnitt. För att få en annan tullration, kommer vi att välja ett värde mellan 0 och 255 (2 ^ 8 på grund av 8 bitar). Säg att vi väljer ett värde 180, eftersom räknaren börjar räkna från 0 och når värdet 180, kan utgångssvaret utlösas. Denna utlösare kan vara inverterande eller icke inverterande. Det vill säga att utgången kan sägas dras upp när man når räkningen, eller det kan sägas att man drar ner när den når räkningen.
GRÖN (COM1A1, COM1A0): Detta val av dragning uppåt eller nedåt väljs av CM1A0- och CM1A1-bitar.
Som visas i tabellen, för att utgången ska bli hög vid jämförelse och utgången förblir hög tills maxvärdet. Vi måste välja inverteringsläge för att göra det, så COM1A0 = 1; COM1A1 = 1.
Som visas i nedanstående figur är OCR1A (Output Compare Register 1A) den byte som lagrar det användarvalda värdet. Så om vi ändrar OCR1A = 180, utlöser styrenheten ändringen (hög) när räknaren når 180 från 0.
OCR1A måste vara 19999-600 för 180 grader och 19999-2400 för 0 grader.