- PVSM.RU - https://www.pvsm.ru -

Продолжение ранее опубликованных статей, первая [1], вторая [2].
В этой статье речь пойдет о программируемом выключателе света с дистанционным управлением. Как и прошлых проектах для отладки и прототипирования, я использую Carduino Nano V.7 [3]
Возможность управлять выключателем любым бытовым ИК пультом управления.
Программировать выключатель на любую кнопку бытового ИК пульта управления.
Включать/выключать свет, как от клавиши выключателя, так и с пульта, не зависимо друг от друга.

Для сборки прототипа использовал следующие компоненты:
Контроллер Carduino Nano V.7 [3]
Relay Module [4]
ИК приемник TSOP [5]
Макетная плата [6]
Звуковой излучатель [7]
Фотография компонентов

Сначала добавляем в память выключателя код кнопки пульта управления. Для этого мы берем наиболее подходящий нам пульт управления (пульт от кондиционера не подойдет) и выбираем на нем свободную кнопку, которой Вы никогда не пользуетесь (обычно это цветные кнопки телетекста). Входим в режим программирования выключателя, для этого нужно нажать на клавишу вкл/выкл и подержать 5 секунд, раздастся длинный звуковой сигнал «Бип», после этого остается нажать ранее выбранную кнопку пульта и ваш выключатель готов к работе. Теперь выключатель света будет понимать добавленную в него команду Вашего ИК пульта. Код кнопки сохраняется в энергонезависимой памяти контроллера и будет храниться в памяти даже после отключения питания схемы.
Работу прототипа выключателя смотрите на видео
#include <IRremote.h>
#include <avr/delay.h>
#include <EEPROM.h>
#define button 7
#define speaker 11
#define lamp 6
IRrecv irrecv(2); //вход для ик приемника
decode_results results;
unsigned long ir_command;
uint8_t swt, count, state = 0; //статус лампочки
void setup()
{
pinMode(speaker, OUTPUT);//громкоговоритель
pinMode(button, INPUT);//вход для кнопки
digitalWrite(button,HIGH);//включить подтяжку
pinMode(lamp, OUTPUT);//лампочка
irrecv.enableIRIn(); // включить приемник
}
void loop()
{
swt=digitalRead(button);
count=0;
while(swt==0)
{
if(count>30)
{
beep(100,400);
for(unsigned long i=0; i<2000000; i++)
{
if (irrecv.decode(&results))
{
SaveEEPROM(results.value);
irrecv.resume();
break;
}
}
beep(30,900);
break;
}
count++;
swt=digitalRead(button);
_delay_ms(100);
}
ir_command=LoadEEPROM();
if (irrecv.decode(&results))
{
if(ir_command==results.value)
{
state=~state;
digitalWrite(lamp, state);
beep(10,300);
_delay_ms(700);
}
irrecv.resume();
} else if(count>1)
{
state=~state;
digitalWrite(lamp, state);
beep(10,500);
_delay_ms(100);
}
}
void SaveEEPROM(unsigned long ir_code)
{
EEPROM.write(0, ir_code & 0xFF);
EEPROM.write(1, (ir_code & 0xFF00) >> 8);
EEPROM.write(2, (ir_code & 0xFF0000) >> 16);
EEPROM.write(3, (ir_code & 0xFF000000) >> 24);
}
unsigned long LoadEEPROM()
{
byte val = EEPROM.read(3);
unsigned long ir_code=val;
val = EEPROM.read(2);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(1);
ir_code= (ir_code << 8) | val;
val = EEPROM.read(0);
ir_code= (ir_code << 8) | val;
return ir_code;
}
void beep(byte dur, word frq)
{
dur=(1000/frq)*dur;
for(byte i=0; i<dur; i++)
{
digitalWrite(speaker, HIGH);
_delay_us(frq);
digitalWrite(speaker, LOW);
_delay_us(frq);
}
}
После отладки устройства на arduino, нарисовал окончательную схему будущего выключателя. Так как я уже писал ранее, что Arduino это удобное средство для отладки и написания кода, но для окончательной схемы он не подойдет.

Hex фаил [8] для прошивки контроллера Atmega168
Блок питания можно использовать от зарядного устройства для мобильного телефона.
Схемы [9] блоков питания.
Если будут вопросы задавайте, с удовольствием отвечу на них.
Автор: CyberLab
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/arduino/10553
Ссылки в тексте:
[1] первая: http://habrahabr.ru/post/144180/
[2] вторая: http://habrahabr.ru/post/145639/
[3] Carduino Nano V.7: http://carmonitor.ru/ru/product_info.php?products_id=120
[4] Relay Module: http://carmonitor.ru/ru/product_info.php?products_id=172
[5] ИК приемник TSOP: http://carmonitor.ru/ru/product_info.php?products_id=117
[6] Макетная плата: http://carmonitor.ru/ru/product_info.php?products_id=126
[7] Звуковой излучатель: http://www.chipdip.ru/product/hc0905a.aspx
[8] Hex фаил: http://cyber-place.ru/attachment.php?attachmentid=382&d=1339082814
[9] Схемы: http://cyber-place.ru/showthread.php?t=333
Нажмите здесь для печати.