Arduino керування світлом з пульта дистанційного керування

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

Потрібен функціонал :

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

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

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

Примітка: Для компіляції коду потрібно додати бібліотеку IRRemote до Arduino IDE

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

Перед заливкою скетчу в Ардуїно, замінюємо код кнопки, що у рядку містить код кнопки (на той, який ви записали раніше):

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

Власне сам скетч

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; якщо (LampState) digitalWrite(RELAY_PIN1,HIGH); > інакше digitalWrite(RELAY_PIN1,LOW); > time = millis(); lastButtonState=digitalRead(BUTTON_PIN1); >

if ((digitalRead(BUTTON_PIN2)==LOW) && (millis() - time > 500)) LampState2 = !LampState2; якщо (LampState2) digitalWrite(RELAY_PIN2,HIGH); > інакше digitalWrite(RELAY_PIN2,LOW); > time = millis(); lastButtonState2=digitalRead(BUTTON_PIN2); >

if (irrecv.decode(&results)) if (results.value == 1641453671) //Код 1 кнопки ИКпульта LampState = !LampState; якщо (LampState) digitalWrite(RELAY_PIN1,HIGH); > інакше digitalWrite(RELAY_PIN1,LOW); > > if (results.value == 1641465911) //Код 2 кнопки ИКпульта LampState2 = !LampState2; якщо (LampState2) digitalWrite(RELAY_PIN2,HIGH); > інакше digitalWrite(RELAY_PIN2,LOW); > > irrecv.resume(); // Получаємо наступне значення > >

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

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

світлом

Розпакуйте цей файл у каталозі з бібліотеками, наприклад, C:\electronics\arduino-1.0.5\libraries. Якщо ім’я бібліотеки вам здається надто довгим, ви можете переіменувати її, допустимо, в IR.

Додаємо бібліотеку до скетчу :

У новому скетчі виберіть Sketch->Імпорт бібліотеки->IR

пульта

Робота вимикача:

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

Принципова схема вимикача:

дистанційного

Відповідність висновків ATMEGA328P-PU до Arduino Uno R3: