В този проект ще направим система за предупреждение за пожар, използвайки ATMEGA8 микроконтролер и пожарен сензор. Пожарният сензор може да бъде от всякакъв тип, но ние използваме IR (инфрачервен) базиран пожарен сензор. Въпреки че IR сензорите за пожар имат някои недостатъци, най-вече поради неточността, това е най-евтиният и лесен начин за откриване на пожар.
IR базирани пожарни сензори имат по-слабо зрително зрение, така че ще монтираме пожарния сензор на серво мотор. Servo ще прави въртене на махало на 180 градуса. С монтирания на него пожарен сензор, ние получаваме 270+ градуса зрително зрение. Сервомеханизмът ще се върти непрекъснато, като по този начин се получава пълна система за предупреждение за пожар в стаята. За по-голяма точност можем да добавим датчик за дим към системата. С това бихме могли да получим по-висока точност.
Компоненти на веригата
Хардуер: + 5v захранване, серво мотор (sg90), ATMEGA8, BUZZER, бутон, 10KΩ резистор, 1KΩ резистор, 220Ω резистор, 100nF кондензатор, AVR-ISP ПРОГРАММЕР.
Софтуер: Atmel studio 6.1, progisp или flash magic.
Електрическа схема и работа
За да се движи серво шахтата наляво навсякъде, трябва да дадем 1/18 включване на дажбата, а за шахтата да се върти докрай наляво, трябва да дадем ШИМ с мито 2/18. Ще програмираме ATMEGA8 да издава ШИМ сигнал, който ще завърти серво вала на 180 и след това на 0 след известно забавяне.
През цялото време пожарният датчик ще бъде включен, а контролерът ще бъде в пълна аларма. Ако има пожар, сензорът осигурява силен импулс на този импулс, когато бъде открит от контролера, той задава аларма. Алармата ще бъде изключена чрез натискане на бутона за нулиране, който е свързан към нея.
В atmega8 за три ШИМ канала сме определили три пина. Можем да вземем PWM изход само на тези изводи. Тъй като използваме PWM1, трябва да вземем PWM сигнал на OC1A пин (PORTB 1- ви PIN). Както е показано на схемата, ние свързваме серво сигнала към OC1A щифт. Тук друго нещо е над три ШИМ канала, два са 8-битови ШИМ канали и един 16-битов ШИМ канал. Тук ще използваме 16-битов ШИМ канал.
В ATMEGA има няколко начина за генериране на ШИМ, те са
1. Фаза правилна ШИМ.
2. Бърза ШИМ.
Тук ще направим всичко просто, така че ще използваме FAST PWM метод за генериране на PWM сигнал.
Първо да изберете честотата на ШИМ, Това обикновено зависи от приложението, за светодиод всяка честота по-голяма от 50 Hz би направила. Поради тази причина ние избираме брояч 1MHZ, така че не избираме прескалар. Прескаларът е число, което е така избрано, за да получи по-малък брояч. Например, ако часовникът на осцилатора е 8Mhz, можем да изберем прескалар от '8', за да получим 1MHz часовник за брояч. Прескаларът се избира въз основа на честотата. Ако искаме повече импулси от времеви период, трябва да изберем по-висок предскаларен.
Сега, за да извадим от ATMEGA БЪРЗАТА ШИМ от 50Hz часовник, трябва да активираме подходящите битове в регистъра “ TCCR1B ”.
Тук, CS10, CS11, CS12 (ЖЪЛТ) - изберете прескалара за избор на брояч. Таблицата за подходящ прескалар е показана в долната таблица. Така че за предварително мащабиране на един (часовник на осцилатора = брояч).
така че CS10 = 1, другите два бита са нула.
ЧЕРВЕНО (WGM10-WGM13): са променени, за да се изберат режими на генериране на форма на вълната, въз основа на таблицата по-долу, за бърз ШИМ. Имаме WGM11, WGM12 и WGM12 са настроени на 1.
Сега знаем, че ШИМ е сигнал с различен режим на работа или различно време за включване и изключване. Досега сме избирали честота и тип ШИМ. Основната тема на тази глава се крие в този раздел. За да получим различна мито, ще изберем стойност между 0 и 255 (2 ^ 8 поради 8 бита). Да кажем, че избираме стойност 180, тъй като броячът започва да брои от 0 и достига стойността 180, може да се задейства изходният отговор. Този спусък може да е инвертиращ или неинвертиращ. Това е изходът, който може да се каже да се изтегли при достигане на брояча, или може да се каже да се изтегли при достигане на брояча.
ЗЕЛЕН (COM1A1, COM1A0): Този избор на изтегляне нагоре или надолу се избира от битове CM1A0 и CM1A1.
Както е показано в таблицата, за да се постигне висок резултат при сравняване и изходът ще остане висок до максимална стойност. Трябва да изберем инвертиращ режим, за да направим това, така че COM1A0 = 1; COM1A1 = 1.
Както е показано на фигурата по-долу, OCR1A (Output Compare Register 1A) е байтът, който съхранява избраната от потребителя стойност. Така че, ако променим OCR1A = 180, контролерът задейства промяната (висока), когато броячът достигне 180 от 0.
OCR1A трябва да бъде 19999-600 за 180 градуса и 19999-2400 за 0 градуса.