Проход по ссылкам навигацииГлавная : Статьи :

Программируемый выключатель света с дистанционным управлением

Программируемый выключатель света с дистанционным управлением

Программируемый выключатель света с дистанционным управлением

В этой статье речь пойдет о программируемом выключателе света с дистанционным управлением.

Функционал:
Возможность управлять выключателем любым бытовым ИК пультом управления.
Программировать выключатель на любую кнопку бытового ИК пульта управления.
Включать/выключать свет, как от клавиши выключателя, так и с пульта, не зависимо друг от друга.

Схема и комплектующие:
Программируемый выключатель света с дистанционным управлением


Для сборки прототипа использовал следующие компоненты:
- Контроллер Carduino Nano V.7
- Relay Module
- ИК приемник TSOP
- Макетная плата
- Звуковой излучатель

Фотография компонентов:
Программируемый выключатель света с дистанционным управлением


Описание работы с выключателем

Сначала добавляем в память выключателя код кнопки пульта управления. Для этого мы берем наиболее подходящий нам пульт управления (пульт от кондиционера не подойдет) и выбираем на нем свободную кнопку, которой Вы никогда не пользуетесь (обычно это цветные кнопки телетекста). Входим в режим программирования выключателя, для этого нужно нажать на клавишу вкл/выкл и подержать 5 секунд, раздастся длинный звуковой сигнал «Бип», после этого остается нажать ранее выбранную кнопку пульта и ваш выключатель готов к работе. Теперь выключатель света будет понимать добавленную в него команду Вашего ИК пульта. Код кнопки сохраняется в энергонезависимой памяти контроллера и будет храниться в памяти даже после отключения питания схемы.

Видео работы выключателя:


Код для контроллера Arduino:
#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); 
  }  
} 


Для компиляции кода нужно добавить библиотеку IRemote - Вы не можете скачивать файлы с нашего сервера
Библиотека отличается от оригинальной, так как я добавил к ней еще несколько протоколов, в том числе и новый протокол LED телевизоров Samsung

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

Программируемый выключатель света с дистанционным управлением


Прошивка контроллера Atmega168 - Вы не можете скачивать файлы с нашего сервера

Блок питания можно использовать от зарядного устройства для мобильного телефона или можно воспользоватся такими схемами:
Программируемый выключатель света с дистанционным управлением
Программируемый выключатель света с дистанционным управлением
Программируемый выключатель света с дистанционным управлением
Программируемый выключатель света с дистанционным управлением


Источник: habrahabr.ru