Navigation Menu
Автоматическое управление освещением

Автоматическое управление освещением

27 Ноя 2007 в Проекты | Нет комментариев

В этой статье я постараюсь немного рассказать об автоматике управления освещением, как это реализовано у меня. Иногда возникает необходимость автоматического управления освещением, в данном случае мне понадобилось, чтобы освещение в коридоре выключалось и включалось автоматически. Почему это понадобилось — дневной свет в светлое время суток почти не попадает в коридор, а в сумерки и темное время суток там совсем темно. Выключатель расположен не у самой двери, и приходилось при выходе из квартиры, выключив свет в коридоре, пройти полтора метра и на ощупь открывать входную дверь, при входе тоже самое, в обратном порядке, что  не совсем удобно. Ставить дополнительные выключатели маленьком коридоре это бы выглядело не совсем эстетично, по этому было принято решение сделать автоматическое управление освещением. Алгоритм работы следующий:

  • при включении освещения выключателем свет включается немедленно;
  • при выключении освещения выключателем свет выключается с задержкой 30 секунд;
  • при открытии двери свет включается немедленно и выключается автоматически через 3 минуты

При выходе можно выключить освещение и спокойно пройти к двери, открыть её и выйти, свет выключится автоматически с задержкой. При входе свет включается от датчика движения, который у меня уже был и подключен к системе сигнализации, на время равное трем минутам, этого вполне достаточно чтобы пройти разуться и снять одежду, выключатель вообще можно не трогать.

Стоит задача согласовать работу автоматики с датчиком сигнализации. Для этого использовано твердотельное реле КР293КП3Б, включенное последовательно нормально замкнутому контакту датчика движения, оконечный резистор шлейфа сигнализации пришлось немного уменьшить, чтобы ток через светодиод реле гальванической развязки был достаточный для уверенного срабатывания оптореле. В итоге получилась такая схема:

В основе схемы микроконтроллер  PIC12C509A, для гальванической развязки использованы два оптореле КР293КП3Б.

Программа получилась совсем небольшая и была написана на ассемблере:

;*********************************************************
;**		СЕКЦИЯ ЗАГОЛОВКА			**
;*********************************************************

PROCESSOR  PIC12C509A
#include    P12C509A.INC
__CONFIG   _MCLRE_OFF&_CP_OFF&_WDT_OFF&_IntRC_OSC
;Регистры общего назначения
Reg_	EQU	08h
Reg_2	EQU	09h
Reg_3	EQU	0Ah
Reg_4	EQU	0Bh

;*********************************************************
;**		РАБОЧАЯ СЕКЦИЯ				**
;*********************************************************
	ORG	000h
	nop
	nop
	nop
	nop
	MOVWF	OSCCAL	; запись калибровочной информации
	nop
	nop
	GOTO	BEGIN
	ORG	030h	; помещаем программу по адресу 030h
BEGIN	CLRF	GPIO	;предустановки
	CLRW
	MOVLW	b'11111110'
	TRIS	GPIO	; линия GP0 устанавливается на вывод
			; остальные на ввод
;********************************************************
;*		ОСНОВНАЯ ПРОГРАММА			*
;********************************************************
L1	BTFSC	GPIO,02	; пропустить если GPIO2 = 0 
			;(ДАТЧИК НЕ СРАБОТАЛ)
	GOTO	Delay_1	; ВЫПОЛНИТЬ ПРОВЕРКУ НА ДРЕБЕЗГ
	BTFSS	GPIO,01	; пропустить если GPIO1 = 1
			; (ВЫКЛЮЧАТЕЛЬ НЕ ВКЛЮЧЕН)
	GOTO	Delay_1	; ВЫПОЛНИТЬ ПРОВЕРКУ НА ДРЕБЕЗГ
	BCF	GPIO,00	; **************ВЫКЛЮЧИТЬ СВЕТ***************
	GOTO	L1	; Возвращаемся и ЖДЕМ СОБЫТИЕ
L2			; ЗАДЕРЖКА АНТИДРЕБЕЗГ ОКОНЧЕНА
			; ПРОВЕРЯЕМ СОСТОЯНИЕ КОНТАКТОВ
	BTFSS	GPIO,01	; пропустить если GPIO1 = 1
			; (ВЫКЛЮЧАТЕЛЬ НЕ ВКЛЮЧЕН)
	GOTO	Delay_2	; ВКЛЮЧИТЬ СВЕТ ПО ВЫКЛЮЧАТЕЛЮ,
			; ВЫПОЛНИТЬ ЗАДЕРЖКУ 30 СЕКУНД
	BTFSC	GPIO,02	; пропустить если GPIO2 = 0
			; (ДАТЧИК НЕ СРАБОТАЛ)
	GOTO	Delay_3	; ВКЛЮЧИТЬ СВЕТ ПО ДАТЧИКУ ДВИЖЕНИЯ,
			; ВЫПОЛНИТЬ ЗАДЕРЖКУ 2 МИНУТЫ
	GOTO	L1
;********************************************************
;*			АНТИДРЕБЕЗГ			*
;*		Задержка 500 000 машинных циклов	*
;*		Длительность задержки 0.5 секунд	*
;********************************************************
;задержка 0,5 секунд (500 000 циклов)
Delay_1	movlw	.85
	movwf	Reg_1
	movlw	.138
	movwf	Reg_2
	movlw	.3
	movwf	Reg_3
	decfsz	Reg_1,F
	goto	$-1
	decfsz	Reg_2,F
	goto	$-3
	decfsz	Reg_3,F
	goto	$-5
	GOTO	L2
;********************************************************
;*		Задержка 30 000 000 машинных циклов	*
;*		Длительность задержки 30 секунд		*
;********************************************************
	Delay_2	BSF	GPIO,00		; включить оптрон
	movlw	.162
	movwf	Reg_1
	movlw	.49
	movwf	Reg_2
	movlw	.153
	movwf	Reg_3
	decfsz	Reg_1,F
	goto	$-1
	decfsz	Reg_2,F
	goto	$-3
	BTFSS	GPIO,01	; пропустить если GPIO1 = 1
			; (ВЫКЛЮЧАТЕЛЬ НЕ ВКЛЮЧЕН) если включен то:
	GOTO	Delay_2	; начать отсчет времени задержки с начала
	decfsz	Reg_3,F
	goto	$-7
	GOTO	L1

;********************************************************
;*	Задержка 180 000 000 машинных циклов		*
;*	Длительность задержки 3 минуты			*
;********************************************************
Delay_3	BSF	GPIO,00	; включить оптрон
	movlw	.215
	movwf	Reg_1
	movlw	.36
	movwf	Reg_2
	movlw	.146
	movwf	Reg_3
	movlw	.4
	movwf	Reg_4
	decfsz	Reg_1,F
	goto	$-1
	decfsz	Reg_2,F
	goto	$-3
	BTFSC	GPIO,02	; пропустить если GPIO2 = 0 
			; (ДАТЧИК выключен) если датчик включен то:
	GOTO	Delay_3	; начать отсчет времени задержки с начала
	decfsz	Reg_3,F
	goto	$-7
	decfsz	Reg_4,F
	goto	$-9
	GOTO	L1
	END

Скачать фал прошивки для микроконтроллера в формате HEX можно здесь

Для проверки была нарисована такая схема в программе симуляции Proteus:Выключатель SW1 является выключателем коридорного освещения, выключатель SW2 симулирует работу датчика движения. Скачать файл для Протеуса можно здесь

Схема была собрана на маленькой макетной плате и установлена в коридорный выключатель.

 


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *