У цьому проекті ми збираємося створити систему оповіщення про пожежу з використанням мікроконтролера ATMEGA8 та датчика пожежі. Датчик пожежі може бути будь-якого типу, однак ми використовуємо ІЧ (інфрачервоний) датчик пожежі. Хоча ІЧ-датчики пожежі мають деякі недоліки, в основному через неточність, це найдешевший і найпростіший спосіб виявлення пожежі.
ІЧ-датчики пожежі мають менше чутливого зору, тому ми збираємось встановити пожежний датчик на сервомотор. Сервопривід буде робити обертання маятника на 180 градусів. За допомогою встановленого на ньому датчика пожежі ми отримуємо зір зондування вогню 270+ градусів. Сервопривід буде обертатися безперервно, таким чином забезпечуючи повну систему оповіщення про пожежу в приміщенні. Для більшої точності ми можемо додати в систему датчик диму. Завдяки цьому ми могли б отримати більш високу точність.
Компоненти схеми
Апаратне забезпечення: джерело живлення + 5 В, сервомотор (sg90), ATMEGA8, ЗУМОВИК, кнопка, резистор 10 кОм, резистор 1 кОм, резистор 220 Ом, конденсатор 100 нФ, програматор AVR-ISP.
Програмне забезпечення: Atmel studio 6.1, progisp або flash magic.
Електрична схема та робота
Для того, щоб серво вал рухався вліво, нам потрібно дати пайок обертання на 1/18, а для обертання валу до кінця вліво нам потрібно надати ШІМ з коефіцієнтом обороту 2/18. Ми збираємося запрограмувати ATMEGA8 для подачі ШІМ-сигналу, який поверне сервопривід на 180, а потім на 0 через певну затримку.
Протягом усього часу пожежний датчик буде ввімкнено, а контролер буде в повній готовності. Якщо виникає пожежа, датчик забезпечує сильний імпульс цим імпульсом, коли його виявляє контролер, він встановлює сигнал тривоги. Будильник буде вимкнено натисканням кнопки скидання, яка підключена до нього.
У atmega8 для трьох ШІМ-каналів ми позначили три висновки. Ми можемо взяти вихід ШІМ лише на цих штифтах. Оскільки ми використовуємо ШІМ1, ми повинні приймати ШІМ-сигнал на вивід OC1A (1- й PIN-код PORTB). Як показано на схемі, ми підключаємо сервосигнал до виводу OC1A. Тут ще одна річ - це три ШІМ-канали, два - 8-бітові ШІМ-канали і один 16-розрядний ШІМ-канал. Тут ми будемо використовувати 16-розрядний ШІМ-канал.
В ATMEGA існує кілька способів генерування ШІМ, вони є
1. Фаза коректна ШІМ.
2. Швидка ШІМ.
Тут ми будемо робити все простим, тому ми будемо використовувати метод ШВИДКО ШІМ для генерації ШІМ-сигналу.
Спочатку виберіть частоту ШІМ. Це залежить від програми, як правило, для світлодіодів підійде будь-яка частота більше 50 Гц. З цієї причини ми вибираємо лічильник годин 1 МГц, тому ми не обираємо прескаляр. Прескаляр - це число, яке вибрано таким чином, щоб отримати менший лічильник годин. Наприклад, якщо тактовий генератор становить 8 МГц, ми можемо вибрати прескаляр 8, щоб отримати тактову частоту 1 МГц для лічильника. Прескаляр вибирається на основі частоти. Якщо ми хочемо більше імпульсів періоду часу, ми повинні вибрати вищий прескаляр.
Тепер, щоб вивести ШВИРКУ ШІМ з тактовою частотою 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 градусів.