В этом проекте мы собираемся создать систему оповещения о пожаре с использованием микроконтроллера ATMEGA8 и датчика пожара. Датчик пожара может быть любого типа, однако мы используем датчик огня на основе инфракрасного излучения. Хотя инфракрасные датчики огня имеют некоторые недостатки, в основном неточность, это самый дешевый и простой способ обнаружения пожара.
Инфракрасные датчики пожара имеют меньшее зрение, поэтому мы собираемся установить датчик огня на серводвигатель. Сервопривод будет вращать маятник на 180 градусов. С установленным на нем датчиком пожара мы получаем зрение на 270+ градусов. Сервопривод будет вращаться непрерывно, обеспечивая полную систему оповещения о пожаре в помещении. Для большей точности мы можем добавить в систему датчик дыма. Благодаря этому мы могли бы получить более высокую точность.
Компоненты схемы
Аппаратное обеспечение: источник питания +5 В, серводвигатель (SG90), ATMEGA8, ЗУММЕР, кнопка, резистор 10 кОм, резистор 1 кОм, резистор 220 Ом, конденсатор 100 нФ, ПРОГРАММАТОР AVR-ISP.
Софт: Atmel studio 6.1, прогисп или flash magic.
Принципиальная схема и работа
Для того, чтобы серво-вал полностью сдвинулся влево, нам нужно дать 1/18 оборота на пайку, а для того, чтобы вал вращался полностью влево, нам нужно дать ШИМ с долей 2/18. Мы собираемся запрограммировать ATMEGA8 на выдачу сигнала ШИМ, который будет вращать вал сервопривода на 180, а затем на 0 после определенной задержки.
В течение всего времени датчик пожара будет включен, а контроллер будет находиться в состоянии полной тревоги. В случае пожара датчик выдает высокий импульс этого импульса, когда контроллер обнаруживает, что он подает сигнал тревоги. Аварийный сигнал будет отключен нажатием кнопки сброса, которая к нему подключена.
В atmega8 для трех каналов ШИМ мы обозначили три контакта. Мы можем принимать только выход ШИМ на этих выводах. Поскольку мы используем PWM1, мы должны принимать сигнал PWM на выводе OC1A (1- й контакт PORTB). Как показано на принципиальной схеме, мы подключаем серво сигнал к выводу OC1A. Здесь еще три канала ШИМ, два из которых являются 8-битными каналами ШИМ и один 16-битный канал ШИМ. Мы собираемся использовать здесь 16-битный канал ШИМ.
В ATMEGA есть несколько способов генерации ШИМ, они
1. Правильная фаза ШИМ.
2. Быстрый ШИМ.
Здесь мы собираемся сделать все просто, поэтому мы собираемся использовать метод FAST PWM для генерации сигнала PWM.
Сначала нужно выбрать частоту ШИМ. Обычно это зависит от приложения, для светодиода подойдет любая частота выше 50 Гц. По этой причине мы выбираем счетчик с частотой 1 МГц, поэтому мы не выбираем прескалярную функцию. Прескаляр - это число, выбранное таким образом, чтобы получить меньшие часы счетчика. Например, если частота генератора составляет 8 МГц, мы можем выбрать прескаляр «8», чтобы получить частоту 1 МГц для счетчика. Прескаляр выбирается в зависимости от частоты. Если нам нужно больше импульсов периода времени, мы должны выбрать более высокий прескаляр.
Теперь, чтобы получить FAST PWM с частотой 50 Гц из ATMEGA, нам нужно включить соответствующие биты в регистре « 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 (выходной регистр сравнения 1A) - это байт, в котором хранится выбранное пользователем значение. Таким образом, если мы изменим OCR1A = 180, контроллер активирует изменение (высокий уровень), когда счетчик достигнет 180 с 0.
OCR1A должен быть 19999-600 для 180 градусов и 19999-2400 для 0 градусов.