Arduino + інфрачервоний приймач TSOP

Давно вже збирався і от знайшов час для цього посту. Сьогодні хочу поділитися своїм досвідом підключення інфрачервоного приймача TSOP 31236 до Arduino Uno. В якості передавача я використовував інфрачервоний (ІЧ) пульт, що першим потрапив мені до рук (взагалі можна брати будь-який ІЧ пульт). Приймач та пульт наведені на рис. 1.

IR_TSOP
Рисунок 1 – ІЧ пульт і приймач TSOP 31236




Підготовка до роботи Arduino з ІЧ приймачем

Для того, щоб Arduino гарно працювала з ІЧ пультом та приймачем, нам знадобиться бібліотека IRremote.
Керування здійснюється шляхом надсилання інфрачервоним пультом команд ІЧ приймачу. Кожна кнопка пульта має свій шістнадцятковий код. Тому при натисканні певної кнопки, приймачу надсилається код, що відповідає цій кнопці. Наше першочергове завдання полягає в тому, щоб дізнатися який код якій кнопці відповідає. І тоді ми зможемо написати скетч для Arduino, програмуючи конкретну кнопку пульта на конкретну дію.

Для цього підключимо наш приймач до Aduino (перший вивід –> земля, другий вивід –> живлення Arduino 3.3 В, третій –> цифровий контакт 11 Arduino)

arduino_tsop_connect
Рисунок 2 – Підключення TSOP до Arduino

Заливаємо на Arduino скетч для відображення кодів кнопок.

#include

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Запуск приймача
}

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Отримати наступне значення
}
}

Тепер з’ясуємо коди кнопок, щоб мати змогу використати ці коди для подальшого програмування конкретної кнопки на виконання певної дії Arduino. Просто відкриваємо Serial Monitor, наставляємо пульт в сторону приймача, натискаємо кнопки та запам’ятовуємо коди кнопок.
В моєму випадку кнопки R-червона, G-зелена та B-синя мають коди відповідно FF906F, FF10EF та FF50AF, адже, натиснувши червону кнопку, зелену, а тоді синю, я побачив це у Serial Monitor:

rgb

Тепер можемо запрограмувати Arduino. Для прикладу реалізуємо керування різнокольоровими світлодіодами. При натисканні червоної кнопки повинен вмикатися/вимикатися червоний світлодіод, зеленої – зелений, а синьої – синій.

#include

int RECV_PIN = 11;

int red = 5;
int green = 6;
int blue = 7;

int redStat = 0;
int greenStat = 0;
int blueStat = 0;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Запуск приймача
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);

}

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);

//червоний
if (results.value == 0xFF906F && redStat == 0)
{
digitalWrite(red, HIGH);
redStat = 1;
}
else
if (results.value == 0xFF906F && redStat == 1)
{
digitalWrite(red, LOW);
redStat = 0;
}

//зелений
if (results.value == 0xFF10EF && greenStat == 0)
{
digitalWrite(green, HIGH);
greenStat = 1;
}
else
if (results.value == 0xFF10EF && greenStat == 1)
{
digitalWrite(green, LOW);
greenStat = 0;
}

//синій
if (results.value == 0xFF50AF && blueStat == 0)
{
digitalWrite(blue, HIGH);
blueStat = 1;
}
else
if (results.value == 0xFF50AF && blueStat == 1)
{
digitalWrite(blue, LOW);
blueStat = 0;
}

irrecv.resume(); // Отримати наступне значення
}
}

Світлодіоди які вдома знайшов – такі й використав 😉

ir_arduino_led

В результаті маємо:

Оставить ответ

Обязательные поля помечены*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.