Как управлять освещением в комнате с помощью пульта дистанционного управления, к примеру от телевизора.
Требуемый функционал:
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, нарисовал окончательную схему будущего выключателя. Блок питания использовал от зарядного устройства для мобильного телефона. Если нажать кнопочный выключатель и держать, то лампа будет мигать.
Соответствие выводам 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/
|