Автоматическое включение света ИК датчиком приближения

Загорелся идеей создать устройство, которое бы управляло LED лентами при открытии дверцы шкафа. Причём нужно их в офис около 10 штук. Слышу, как кто-то уже советует не заниматься ерундой и поставить стандартный модуль ПИР датчика. Но проблема в том, что в комнате он работает отлично. А когда попробовал такой ПИР установить в шкафу , работа стала нестабильная.

Схема ИК датчика включения света на ATTINY

После недолгих размышлений над схемой и экспериментов , сделал работающее устройство, основанное на готовом приемнике инфракрасного сигнала TSOP4836. Но можно и фототранзистор LTR4206E поставить.

Аппаратная часть , стабилизатор LM78L05 с диодом 1N4148 (защита от неправильной полярности подключения), исполнительный элемент МОП-транзистор с N-каналом, управляемый уровнями TTL. ИК светодиод передатчика подключенный непосредственно к микроконтроллеру, резистор ограничивает ток до 20 мА. Микроконтроллер ATTINY13A (выбор диктуется ценой и доступностью).

Принцип действия устройства

МК сначала измеряет напряжение на фототранзисторе при выключенном ИК диоде, затем с включенным. Первое измерение является проверкой влияния фона, пока свет от ИК светодиодов не отразится от предмета, оба измерения буду идентичны, в противном случае второй замер будет меньше. Ещё применил что-то вроде гистерезиса, после включения выхода чувствительность измерения увеличивается (переменная „his”).

Прошивка микроконтроллера

#include &lt,avr\io.h&gt, #include &lt,inttypes.h&gt, #include &lt,avr/sleep.h&gt, #include &lt,avr/interrupt.h&gt, #include &lt,avr/power.h&gt,

//Definicje numerow portow #define LED 1 #define MOSFET 4 //ADC PB2 ADC1

//Deklaracja stalych #define HIS_ON 3, #define HIS_OFF 2,

int main(void) { uint8_t odczyt1, //Odczyt ADC bez wlaczonej LED_IR uint8_t odczyt2, //Odczyt ADC przy wlaczonej LED_IR uint8_t licz = 0, uint8_t his = HIS_OFF, //Zmienna histerezy

//Konfiguracja portow DDRB = 1&lt,&lt,LED | 1&lt,&lt,MOSFET | 1&lt,&lt,LED, //wyjscie LED IR, wyjscie MOSFET PORTB = 1&lt,&lt,3 | 1&lt,&lt,0 | 1&lt,&lt,LED, //PULL_UP PB3 i PB0 dla oczednosci energi

//Inicjacja ADC ADMUX = 1&lt,&lt,ADLAR | 1&lt,&lt,MUX0, //Napiecie referencyjne Vcc, PB2(ADC1) DIDR0 = ADC1D, //Wylaczenie bufora cyfrowego PB2(ADC1) power_timer0_disable(), //Calkowite wylaczenie TIMER0 sei(), //Globalne zalaczenie przerwan

for(,,) { ADCSRA = 1&lt,&lt,ADEN | 1&lt,&lt,ADSC, //Wlaczamy ADC i zaczynamy pomiar while(ADCSRA & (1&lt,&lt,ADSC)), //Czekamy na pomiar odczyt1 = ADCH, //Odczyt ppomiaru bez wlaczonej LED IR odczyt1 = odczyt1 , his, PORTB &= ~(1&lt,&lt,LED), //LED IR on ADCSRA |= 1&lt,&lt,ADSC, //ADC on while(ADCSRA & (1&lt,&lt,ADSC)), //Czekamy na pomiar odczyt2 = ADCH, //Odczyt pomiaru z wlaczon PORTB |= 1&lt,&lt,LED, //LED IR off ADCSRA &= ~((1&lt,&lt,ADEN) | (1&lt,&lt,ADSC)), //ADC off

if(odczyt2 &lt, odczyt1) { if(licz &lt, 10) { licz++, } else {

PORTB &= ~(1&lt,&lt,MOSFET), //MOSFET off his = HIS_OFF, } } else { if(licz&gt,0) { licz,, } else { PORTB |= 1&lt,&lt,MOSFET, //MOSFET on his = HIS_ON, } }

WDTCR = 1&lt,&lt,WDTIE, //Wlaczenie przerwania od WDT, czas 16ms sleep_enable(), //Przestawienie bitu SE sleep_cpu(), //Wprowadznie w stan snu

} return 0, }

ISR(WDT_vect) //Przerwanie od WDT { sleep_disable(), //Przestawienie bitu SE WDTCR = 0, //Wylaczenie przerwania od WDT }

Печатная плата спроектирована и изготовлена под монтаж SMD. Контакты для программирования вывел на штырьки. Корпус маленький из пластика.

Усилитель Холтон на MOSFET с индикатором уровня

Есть возможность увеличения дальности за счет уменьшения сопротивления резистора R2. Таймер T0 выключен и не используется, его можно использовать для генерации ШИМ и постепенного повышения и уменьшения яркости освещения. Можно было бы применить МК ATTINY10 (6 ног), резисторы и конденсаторы тоже в небольших корпусах, что позволило бы снизить размер до совсем миниатюрного.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
mosautorent.ru
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: