Упр.освещением на базе датчика движения
Добавлено: Сб сен 18, 2010 07:09:43
Чуть не убившись в собственной квартире ночью (ремонт) ,возникла необходимось в ВКЛ освещения по движению.Зайдя в магазин для себя ничего не выбрал.
Или не усраивает цена или дизайн или ТТД (у большенства датчиков таймер фиксированый).Как всегда пришлось изобретать велосипед.
Взял attiny13, заводской датчик движения,фотодиодный датчик освещенноси,светодиод 1W(драйвер на mc34063).Собрал в кучу и получилось то что мне было нужно.
Заходиш в помещение, срабатывает освещение и пока там находишся оно не выключается (при условии что шивелишся) ,уходиш через 15 сек откл.
Ввел выбор задержки 10 5 20 25 сек
Код:
$regfile = "attiny13.dat" ' говорим компилятору что у нас микропроцессор Attiny13 или что есть под рукой
$crystal = 128000 ' 128Khz тактовая частота (Если прод рукой чтото другое, слотрим PDF на это другое)
$hwstack = 24 ' Для Tiny13 по умоолчанию (32) не подходит.Будет возникать ошибка недостаточно SRAM
$swstack = 8 '
$framesize = 24 '
Config Pinb.0 = Input 'Вход датчика движения
Config Pinb.1 = Input 'Вхов датчика освещенности
Config Pinb.2 = Input 'Установка таймера 10 15 20 25 сек
Config Pinb.3 = Input '
Config Portb.4 = Output 'Выход управления осветительным прибором
Config Timer0 = Timer , Prescale = 256 'Настройка таймера (Если прод рукой чтото другое, слотрим PDF на это другое)
Dim A As Byte 'Время задержки
Dim B As Byte 'Переменная временных итервалов
On Timer0 Pulse: '|
Enable Interrupts '|Понятно
Enable Timer0 '|
'/Определение задердки таймера от позиции переключателя
If Pinb.2 = 1 And Pinb.3 = 1 Then A = 20
If Pinb.2 = 0 And Pinb.3 = 1 Then A = 30
If Pinb.2 = 1 And Pinb.3 = 0 Then A = 40
If Pinb.2 = 0 And Pinb.3 = 0 Then A = 50 'Задержка 15 сек (В среднем реле датчика двидения удержывается 3-10 сек зависит от модели)
'/Основной цыкл
Do
Startes:
B = 0 'обнулим счетчик временных интервалов
If Pinb.0 = 0 Then Goto Sensor 'Если сработка по движению
Loop
Sensor:
If Pinb.1 = 0 Then Goto Startes 'Если светло возврат в остовной цыкл
Set Portb.4 'Если темно ВКЛ освещение
Led_time:
If Pinb.0 = 0 Then B = 0 'Проверяем было-ли срабатывание датчика движения,если да обнулим счетчик временных интервалов
If B < A Then Goto Led_time 'Крутимся до выполнения условия
Reset Portb.4 'ВЫКЛ освещение
Goto Startes 'Возврат в основной цыкл
'/Обработка прерывания
Pulse:
B = B + 1 'Увеличим счетчик временных интервалов на 1
Return
End 'Даже переводить не буду
Возможно комуто понадобится.
Или не усраивает цена или дизайн или ТТД (у большенства датчиков таймер фиксированый).Как всегда пришлось изобретать велосипед.
Взял attiny13, заводской датчик движения,фотодиодный датчик освещенноси,светодиод 1W(драйвер на mc34063).Собрал в кучу и получилось то что мне было нужно.
Заходиш в помещение, срабатывает освещение и пока там находишся оно не выключается (при условии что шивелишся) ,уходиш через 15 сек откл.
Ввел выбор задержки 10 5 20 25 сек
Код:
$regfile = "attiny13.dat" ' говорим компилятору что у нас микропроцессор Attiny13 или что есть под рукой
$crystal = 128000 ' 128Khz тактовая частота (Если прод рукой чтото другое, слотрим PDF на это другое)
$hwstack = 24 ' Для Tiny13 по умоолчанию (32) не подходит.Будет возникать ошибка недостаточно SRAM
$swstack = 8 '
$framesize = 24 '
Config Pinb.0 = Input 'Вход датчика движения
Config Pinb.1 = Input 'Вхов датчика освещенности
Config Pinb.2 = Input 'Установка таймера 10 15 20 25 сек
Config Pinb.3 = Input '
Config Portb.4 = Output 'Выход управления осветительным прибором
Config Timer0 = Timer , Prescale = 256 'Настройка таймера (Если прод рукой чтото другое, слотрим PDF на это другое)
Dim A As Byte 'Время задержки
Dim B As Byte 'Переменная временных итервалов
On Timer0 Pulse: '|
Enable Interrupts '|Понятно
Enable Timer0 '|
'/Определение задердки таймера от позиции переключателя
If Pinb.2 = 1 And Pinb.3 = 1 Then A = 20
If Pinb.2 = 0 And Pinb.3 = 1 Then A = 30
If Pinb.2 = 1 And Pinb.3 = 0 Then A = 40
If Pinb.2 = 0 And Pinb.3 = 0 Then A = 50 'Задержка 15 сек (В среднем реле датчика двидения удержывается 3-10 сек зависит от модели)
'/Основной цыкл
Do
Startes:
B = 0 'обнулим счетчик временных интервалов
If Pinb.0 = 0 Then Goto Sensor 'Если сработка по движению
Loop
Sensor:
If Pinb.1 = 0 Then Goto Startes 'Если светло возврат в остовной цыкл
Set Portb.4 'Если темно ВКЛ освещение
Led_time:
If Pinb.0 = 0 Then B = 0 'Проверяем было-ли срабатывание датчика движения,если да обнулим счетчик временных интервалов
If B < A Then Goto Led_time 'Крутимся до выполнения условия
Reset Portb.4 'ВЫКЛ освещение
Goto Startes 'Возврат в основной цыкл
'/Обработка прерывания
Pulse:
B = B + 1 'Увеличим счетчик временных интервалов на 1
Return
End 'Даже переводить не буду
Возможно комуто понадобится.