Среда, 27.11.2024
TiM
Меню сайта
Категории раздела
Мои статьи [9]
1С Бухгалтерия [1]
Arduino / ATMEGA [10]
ESP8266 [1]
OrangePi PC и Raspberry Pi 2 Model B V1.1 [4]
Шаговые двигатели [1]
PHPProBid [0]
CMS DLE (DataLife Engine) [0]
CMS Joomla [13]
SugarCRM [5]
Базы данных [5]
PHP скрипты [16]
Bash и скрипты [27]
IP АТС Elastix / Asterisk [12]
CentOS [6]
Debian [8]
Lubuntu / LinuxMINT [29]
Windows [28]
Умный дом [1]
Сервера [16]
Natural Selection [1]
System Shock 2 [1]
Форма входа
Главная » Статьи » Arduino / ATMEGA

Arduino: управление светом с пульта дистанционного управления

Как управлять освещением в комнате с помощью пульта дистанционного управления, к примеру от телевизора.

Требуемый функционал:

1) Возможность управлять выключателем с помощью бытового ИК пульта (38кГц, большинство такие, у меня от ТВ-тюнера Beholder M6).
2) Включать/выключать свет, как от клавиши выключателя, так и с пульта, не зависимо друг от друга.

Для начала, нам необходимо узнать коды кнопок пульта, которые мы хотим использовать для управления освещением.

Для этого заливаем в память Arduino следующий скетч, подключаем IR приемник TSOP1138 к нему (ниже на картинке его распиновка) и при нажатии кнопок на пульте, в мониторе порта смотрим какой код у кнопки:

Примечание: Для компиляции кода нужно добавить библиотеку IRRemote в Arduino IDE

https://github.com/shirriff/Arduino-IRremote

/*************************************************************
description: Выводит в консоль код нажатой кнопки пульта
IDE: Arduino 1.0.5
*************************************************************/
#include <IRremote.h>
 
int RECV_PIN = 3; //пин подключения IR приёмника
 
IRrecv irrecv(RECV_PIN);
decode_results results;
 
void setup()
{
 Serial.begin(9600);
 pinMode(7,OUTPUT);
 irrecv.enableIRIn(); // Start the receiver
}
 
void loop()
{
 if (irrecv.decode(&results)) 
 {
 Serial.println(results.value);
 irrecv.resume(); // Receive the next value
 }
}

 

Прошивка (работает у меня, под пульт от ТВ-тюнера Beholder M6):

Скетч для контроллера ATMEGA328P-PU для выключателя без фиксации (сделал добавив в двухклавишый выключатель VISAGE, пружины из авторучки) и двух ламп люстры, схема ниже, прошив с помощью Arduino Uno R3, микроконтроллер ATMEGA328P-PU, я использовал его отдельно без Ардуино.

Перед заливкой скетча в Ардуино, заменяем код кнопки, в строчке содержащую код кнопки (на тот, который вы записали ранее):

if (results.value == 1641453671) //Код кнопки

Собственно сам скетч

/*************************************************************
author: timur.at.ua
description: Управление освещением с IR ПДУ
IDE: 1.0.5
10 марта 2015
*************************************************************/
#include <IRremote.h>
#include <IRremoteInt.h>
 
int RECV_PIN = 11; //пин подключения IR приёмника
int RELAY_PIN1 = 8; //пин подключения реле1
int BUTTON_PIN1 = A5; //пин выключателя1
int RELAY_PIN2 = 7; //пин подключения реле2
int BUTTON_PIN2 = A4; //пин выключателя2
 
IRrecv irrecv(RECV_PIN);
decode_results results;
bool LampState = false;
unsigned long time = millis();
int lastButtonState;
int lastButtonState2;
bool LampState2 = false;
 
void setup()
{
  pinMode(RELAY_PIN1, OUTPUT);
  pinMode(BUTTON_PIN1, INPUT);
  digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(BUTTON_PIN1, HIGH);
  irrecv.enableIRIn(); // Включаем ресивер
  lastButtonState = digitalRead(BUTTON_PIN1);
  pinMode(RELAY_PIN2, OUTPUT);
  pinMode(BUTTON_PIN2, INPUT);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(BUTTON_PIN2, HIGH);
  lastButtonState2 = digitalRead(BUTTON_PIN2);
}
 
void loop()
{
  if ((digitalRead(BUTTON_PIN1)==LOW) && (millis() - time > 500))
  {
    LampState = !LampState;
    if (LampState)
    {
      digitalWrite(RELAY_PIN1,HIGH);
    }
    else
    {
      digitalWrite(RELAY_PIN1,LOW);
    }
    time = millis();
    lastButtonState=digitalRead(BUTTON_PIN1);    
  }
 
  if ((digitalRead(BUTTON_PIN2)==LOW) && (millis() - time > 500))
  {
    LampState2 = !LampState2;
    if (LampState2)
    {
      digitalWrite(RELAY_PIN2,HIGH);
    }
    else
    {
      digitalWrite(RELAY_PIN2,LOW);
    }
    time = millis();
    lastButtonState2=digitalRead(BUTTON_PIN2);    
  }
 
  if (irrecv.decode(&results))
  {
    if (results.value == 1641453671) //Код 1 кнопки ИКпульта
    {
      LampState = !LampState;
      if (LampState)
      {
        digitalWrite(RELAY_PIN1,HIGH);
      }
      else
      {
        digitalWrite(RELAY_PIN1,LOW);
      }
    }
    if (results.value == 1641465911) //Код 2 кнопки ИКпульта
    {
      LampState2 = !LampState2;
      if (LampState2)
      {
        digitalWrite(RELAY_PIN2,HIGH);
      }
      else
      {
        digitalWrite(RELAY_PIN2,LOW);
      }
    }
    irrecv.resume(); // Получаем следующее значение
  }
}

 

Работа проверялась с Arduino IDE v1.0.5

Примечание: Для компиляции кода нужно добавить библиотеку IRRemote в Arduino IDE

https://github.com/shirriff/Arduino-IRremote

Распакуйте этот файл в каталог с библиотеками, например, C:\electronics\arduino-1.0.5\libraries. Если имя библиотеки вам кажется слишком длинным то можете переименовать ее, допустим, в IR.

Добавляем библиотеку к скетчу:

В новом скетче выберите Sketch->Import Library->IR

Работа выключателя:

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

Принципиальная схема выключателя:

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

Arduino: управление светом с пульта дистанционного управления

 

Соответствие выводам ATMEGA328P-PU к Arduino Uno R3:

По материалам:

http://habrahabr.ru/post/145653

http://student-proger.ru/2013/03/arduino-upravlenie-svetom-s-pulta-distancionnogo-upravleniya/

http://www.getchip.net/posts/076-upravlenie-nagruzkami-pri-pomoshhi-ir-pulta-attiny13/

Категория: Arduino / ATMEGA | Добавил: Timofey (10.03.2015)
Просмотров: 13209
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
YANDEX
Яндекс.Метрика
Сайты
  • Харьковский Юридический Альянс
  • Оцифровка кинопленки
  • TiM ©
    Харьков 2024