Общеизвестно, что достаточно большие потери электроэнергии в домах и офисных зданиях часто происходят на лестницах (лестничных пролетах). Утром, когда мы спешим на работу, мы включаем свет на лестнице и забываем его выключить – в результате он бесполезно горит продолжительное время. В этой статье мы рассмотрим схему на микроконтроллере ATmega32, работающую от батарейки, которая будет включать свет на лестнице только когда на ней кто-нибудь находится, что позволит существенно экономить электроэнергию.
Общие принципы работы устройства
Схема работает при двух условиях – когда нет света (темно) в месте нахождения устройства и когда на лестнице присутствует человек. При выполнении этих двух условий микроконтроллер включает свет на лестнице. Эти два условия проверяются с помощью двух сенсоров – в качестве одного из них выступает фоторезистор, а в качестве второго – пассивный инфракрасный детектор движения. Фоторезистор определяет наличие света, а детектор движения – присутствие человека в радиусе его действия.
На представленном ниже рисунке слева представлен пример фоторезисторов, а справа – пример инфракрасного детектора движения. Детектор движения состоит из чувствительного инфракрасного приемника, который обнаруживает инфракрасные лучи в области его действия. И, поскольку любой живой организм (в том числе и человек) испускает инфракрасные лучи (поскольку выделяет тепло), то подобный детектор сможет определять присутствие человека по испускаемым им инфракрасным лучам.
Как только в области действия детектора движения появляется человек, его сенсор улавливает изменение в инфракрасных лучах, вызванное появлением человека. Это изменение фильтруется электроникой детектора движения и в результате этого на его выходе формируется импульс продолжительностью 5 секунд (по умолчанию). Таким образом, как только в области действия детектора движения появляется человек, мы имеем импульс на его выходе продолжительностью 5 секунд, который можно обработать на микроконтроллере.
Детектор движения имеет две предустановки: первая – регулировка области действия сенсора и вторая – длительность выходного импульса (при появлении человека). Длительность этого импульса можно настроить в диапазоне от нескольких секунд до нескольких минут.
Фоторезистор в рассматриваемой схеме работает как переменный резистор. Когда поток света, падающий на него, слабый, то его сопротивление большое. А когда интенсивность потока света большая, то сопротивление фоторезистора маленькое.
Необходимые компоненты
Аппаратное обеспечение
- Микроконтроллер ATmega32.
- Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
- Конденсатор 100 мкФ (купить на AliExpress).
- Светодиод (купить на AliExpress).
- Резисторы 220 Ом, 1 кОм (купить на AliExpress).
- Фоторезистор (купить на AliExpress).
- Переменный резистор 100 кОм (купить на AliExpress).
- Любой детектор движения (например, HC-SR501) (купить на AliExpress).
- Светодиод на 2 Ватта.
- Транзистор TIP122.
- Источник питания с напряжением 5 Вольт.
Программное обеспечение
- Atmel Studio версии 6.1 (или выше).
- Progisp или flash magic (необязательно).
Принцип работы схемы
Схема устройства приведена на следующем рисунке.
На данной схеме микроконтроллер ATmega32 работает от внутреннего RC-генератора (на частоте 1 МГц), поэтому нет необходимости в использовании внешнего кварцевого резонатора. Только если потребуется более точное измерение интервалов частоты может возникнуть необходимость в использовании внешнего кварца. При покупке микроконтроллера его фьюзы (fuse bits) сконфигурированы так, чтобы микроконтроллер работал от внутреннего RC-генератора.
Микроконтроллер в этой схеме должен обрабатывать 2 события:
- Наличие темноты.
- Наличие движения.
Как уже отмечалось ранее, когда поток света, падающий на фоторезистор, мал, его сопротивление велико. В этой схеме мы фоторезистор включаем последовательно с переменным резистором на 100 кОм и среднюю точку переменного резистора подключаем к контакту PB1 микроконтроллера. И теперь в нашей схеме если сопротивление фоторезистора велико (поток света мал), то напряжение на нем будет больше чем на переменном резисторе 100 кОм, следовательно, в средней точке переменного резистора будет маленькое напряжение. Таким образом, при наступлении темноты напряжение в средней точке переменного резистора сильно изменяется – и это изменение может быть обнаружено микроконтроллером (контакт PB1), что соответствует первому условию работы схемы.
Если же детектор движения обнаруживает изменение инфракрасных лучей в области своего действия (появился человек), то он подает уже рассмотренный нами ранее импульс на контакт PB0 микроконтроллера.
То есть как только выполнятся два рассмотренных условия (темнота и присутствие человека) микроконтроллер выдает управляющий сигнал на NPN транзистор чтобы он включил мощный светодиод.
Исходный код программы на языке C (Си) с пояснениями
Программа для рассматриваемой схемы представлена следующим фрагментом кода. Комментарии к коду программу поясняют принцип работы отдельных команд.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <avr/io.h> // заголовок чтобы задействовать контроль потока данных на контактах микроконтроллера #define F_CPU 1000000 // задание частоты внутреннему RC-генератору #include <util/delay.h> //заголовок чтобы задействовать функции задержки в программе int main(void) { DDRB = 0b11111100; //подаем логический "0" на контакты PB0,PB1 int x=0; // число целого типа while(1) { if (bit_is_clear(PINB,1)) // если темнота { if (bit_is_set(PINB,0)) //если есть движение (датчик движения формирует высокое напряжение в присутствии напряжения) { x=1; //если оба условия выполнены (темнота + движение), то присваиваем х=1 } } if (x==1) //когда оба условия выполнены { PORTB |=(1<<PINB2); //выдаем управляющую команду на транзистор чтобы он включил мощный светодиод _delay_ms(220); // ждем 220ms (можно поставить другую задержку) PORTB &=~(1<<PINB2); //непосредственно управляющая команда на транзистор x=0; // сбрасываем (обнуляем) x } } } |
Что то я не понял совсем... А микроконтроллер тут зачем??? Датчик освещения + датчик движения. Ну еще пара транзисторов для ключей и усиления...Все и так есть! Тем более есть копеечные готовые китайские девайсы с такими же возможностями, к тому же позволяющие регулировку чувствительности и задержку выключения...Да уж...
Да, для решения этой задачи можно легко обойтись и без микроконтроллера, но статья кроме решения практической задачи имеет и обучающую функцию — научить начинающего микроконтроллерщика подключать к микроконтроллеру датчик освещения и датчик движения. Да и стоимость создания этой схемы (если кто реально будет использовать ее для создания готового устройства) тоже ведь невелика — микроконтроллер стоит ведь менее 100 рублей.
Также на основе представленной конструкции легко можно реализовать и более сложные алгоритмы управления светом на лестнице, которые без микроконтроллера уже будет сложновато реализовать