В статье рассматривается простой блок управления нагрузкой по хлопку в ладоши. Устройство имеет один канал для управления нагрузкой, но благодаря тому, что основой является микроконтроллер Atmel AVR ATmega8, возможно дальнейшее наращивание возможностей и количества каналов.
Аппаратная часть
Аппаратная часть устройства очень простая: микроконтроллер, электретный микрофон, реле и несколько дискретных компонентов.
Принципиальная схема устройства
Сигнал, полученный микрофоном, поступает на усилитель, собранный на транзисторе BC547. Далее, сигнал проходит через фильтр нижних частот, благодаря которому подавляются высокие частоты, и поступает на вход АЦП микроконтроллера (канал 0 АЦП).
Кнопки S1 и S2 служат для увеличения и уменьшения чувствительности.
Узел, собранный на микросхеме MAX232, представляет собой конвертер логических уровней интерфейса RS232, используемый в данном проекте для отладки ПО. Устройство по интерфейсу RS-232 посылает данные о текущем режиме работы и параметрах. Просмотр данных осуществляется в любой терминальной программе.
Список компонентов
Обозначение в схеме |
Наименование, номинал |
IC1 |
Микроконтроллер ATmega8 |
IC2 |
Микросхема MAX232 |
IC3 |
Регулятор напряжения LM78L05Z |
R1, R4 |
1 кОм |
R2 |
100 кОм |
R3, R6 |
10 кОм |
R5 |
470 Ом |
C1, C7 |
100 нФ |
C2, C3 |
220 нФ |
C4, C5, C6, C8 |
1 мкф × 25 В |
Q1, Q2 |
Транзистор BC547 |
D1 |
Диод 1N4148 |
K1 |
Реле |
LED1 |
Светодиод |
S1, S2 |
Кнопки |
X2 |
Разъем DB9F |
Напряжение питания устройства 7…12 В. Также следует отметить, что необходимо подобрать реле, соответствующее напряжению питания.
Программное обеспечение
Программное обеспечение для микроконтроллера было написано в среде AVR Studio с использованием библиотек WinAVR.
АЦП микроконтроллера работает и считывает данные непрерывно, и возвращаемые им данные сравниваются с переменной, значение которой может быть изменено пользователем при помощи кнопок S1 и S2. Таким образом, пользователь может изменить чувствительность, необходимую для срабатывания устройства.
Если значение АЦП меньше, чем значение переменной, то оно игнорируется. В другом случае активизируется Таймер0 и начинает считать. При каждом переполнении таймера инкрементируется значение переменной timer.
Значение переменной timer сравнивается со значениями трех констант: burst_time, ready_time и time_out. В случае равенства значения переменной timer и значения константы burst_time, глобальной переменной burst присваивается значение 1. Если значение timer равно значению константы ready_time, то переменной burst присваивается значение 0, а глобальной переменной ready – присваивается значение 1. Если значение timer равно значению константы time_out, то глобальным переменным burst и ready присваивается значение 0.
При детектировании звука очередного хлопка, если значение burst=1, микроконтроллер очищает все значения переменных и начинает цикл заново. Если burst=0 и ready=1, изменяется состояние выхода микроконтроллера PB2. Срабатывание реле происходит лишь тогда, когда время между хлопками приблизительно правильное, таким образом исключается случайное включение или выключение нагрузки.
Блок-схема ниже поясняет работу микроконтроллера.
Настройки терминальной программы: скорость передачи данных 4800 бит/с, 8 бит данных, проверка четности отсутствует, 1 стоповый бит, управление потоком отключено.
Внешний вид окна терминальной программы при подключенном и работающем устройстве
Загрузки
Принципиальная схема и рисунок печатной платы (Eagle) – скачать
Программное обеспечение для микроконтроллера – скачать
Проект полностью в формате .pdf (на английском языке) – скачать