Недавно мне понадобилось управлять пультом от телевизора маленький проект на arduino. Суть заключалась в том, чтобы управлять кондиционером через саму arduino с датчиком температуры. К моему кондиционеру идёт достаточно удобный пульт, но нам ведь необходимо автоматизировать включение, выставление температуры и выключение. В результате долгих поисков смог найти для себя решение. О нём подробно под катом.

Как это работает

Подключаем IR приёмник, направляем пульт ДУ на приёмник, записываем сигнал и выводим его на Serial. (т.к. это первая часть статьи мы не рассматриваем отправку сигнала. Речь об отправке пойдёт как раз во второй части).

Что нам понадобится

  • Arduino (или аналоги, я использую Tosduino — подешевле раза в 2, полная совместимость с обычным arduino)
  • Светодиод (LED)
  • Резистор на 220 ?
  • IR приёмник из серии TSOP22

Подключение

IR Receiver (Приёмник)

**Arduino** **IR Receiver**
GND (GrouND) левая нога
5 V средняя нога
digital pin 2 правая нога

Светодиод LED:

**Arduino** **Breadboard** **Arduino**
pin number 11 резистор 220 ? GND (GrouND)

Arduino+IR-Receiver2

IR технология

Самый дешевый способ для удаленного управления устройством в видимой доступности с помощью инфракрасного излучения. Почти всей аудио и видео техникой можно управлять таким образом. Благодаря широкому распространению необходимые компоненты довольно дешевы, что делает эту технологию идеальной для нас, любителей использовать ИК-пульта для наших собственных проектов. Инфракрасное излучение на самом деле нормальный свет с определенным цветом. Мы, люди, не можем видеть этот цвет,  потому что его длина волны 950 нм, что ниже видимого спектра. Это одна из причин, почему ИК выбран для нужд телемеханики, мы хотим использовать его, но мы не заинтересованы его видеть. Хотя мы не можем видеть инфракрасный свет, излучаемый от пульта дистанционного управления, но это не означает, что мы не можем сделать его видимым. Видеокамера или цифровой фотоаппарат «видит» инфракрасный свет, как вы можете видеть на видео ниже. Даже самые дешевые сотовые телефоны имеют встроенные камеры. Просто наведите пульт на такую ??камеру, нажмите любую кнопку, и вы увидите светодиодные мерцания.


TSOP22

TSOP22 — Серия миниатюрных приемников для инфракрасных систем дистанционного управления. PIN диод и предусилитель собраны на выводной рамке, и выполнен в виде ИК-фильтра. Демодулированный выходной сигнал может быть непосредственно декодирован с помощью микропроцессора. TSOP22 — это стандартный приемник, поддерживает все основные коды передачи. tsop22

Part Carrier Frequency
TSOP2230 30 kHZ
TSOP2233 33 kHZ
TSOP2236 36 kHZ
TSOP2237 36.7 kHZ
TSOP2238 38 kHZ
TSOP2240 40 kHZ
TSOP2256 56 kHZ

IRremote.h

Скачать библиотеку IRremote можно с Github.com

Для установки данной библиотеки скопируйте содержимое архива в: arduino-1.x/libraries/IRremote Где arduino-1.x — это папка куда установлена Arduino IDE После чего должен быть доступен файл arduino-1.x/libraries/IRremote/IRremote.cpp и IRremote.h

Пример №1 — получаем код кнопки пульта ДУ

Данный скетч прочитает код нажатой на пульте кнопки и отправит информацию об этой кнопке в Serial порт для того чтобы мы могли потом этим кодом воспользоваться.

#include <IRremote.h>
int RECEIVE_PIN = 2;
IRrecv irrecv(RECEIVE_PIN);
decode_results results;

void setup() {
    Serial.begin(9600);
    irrecv.enableIRIn(); // Start the receiver
}

void loop() {
    if (irrecv.decode(&results)) {
        Serial.print("0x");
        Serial.println(results.value, HEX);
        delay(50);
        irrecv.resume();// Receive the next value
    }
}

Я буду использовать эти коды кнопок во всех следующих примерах: Apple_remote1

Пример №2 — присваиваем имя для кнопки ПДУ

Отправим названия кнопок в Serial порт. (предварительно мы должны поймать коды этих кнопок и привязать им названия, смотрите в код, думаю там всё понятно будет).

#include <IRremote.h>
int RECEIVE_PIN = 2;
IRrecv irrecv(RECEIVE_PIN);
decode_results results;

void setup() {
    Serial.begin(9600);
    irrecv.enableIRIn();
}

void loop() {
    if (irrecv.decode(&results)) {

        switch (results.value) {
            case 0x77E1A0CB:
            Serial.println("Center");
            break;

            case 0x77E160CB:
            Serial.println("Right");
            break;

            case 0x77E190CB:
            Serial.println("Left");
            break;

            case 0x77E150CB:
            Serial.println("Up");
            break;

            case 0x77E130CB:
            Serial.println("Down");
            break;
        }

        irrecv.resume();
    }
}

Пример №3 — включаем LED по кнопке ПДУ

Теперь научим нашу Arduino включать светодиод (LED) на PIN 11 через кнопку на пульте

#include <IRremote.h>
int LED = 11;
int state = 0;   // 0 = LED off while 1 = LED on
int RECEIVE_PIN = 2;
IRrecv irrecv(RECEIVE_PIN);
decode_results results;

void setup() {
    Serial.begin(9600);
    irrecv.enableIRIn();
    pinMode(LED, OUTPUT);
}

void loop() {
    if ((irrecv.decode(&results)) && (results.value==0x77E1A0CB) ) {
        if (state == 0) {
            state = 1;
            digitalWrite(LED, HIGH); 
            Serial.println("Center - HIGH");
            } else {
            state = 0;
            digitalWrite(LED, LOW);
            Serial.println("Center - LOW");
        }
        delay(50);
        irrecv.resume();
    }
}

Пример №4 — ШИП с ПДУ

Теперь давайте будем управлять яркостью нашего светодиода (так как он подключен к 11 порту, который имеет ШИМ то проблем не должно возникнуть). Для управления яркостью будут использоваться кнопки вверх и вниз на пульте ДУ.

#include <IRremote.h>
int RECEIVE_PIN = 2;
int brightness = 0;
int LED = 11;
IRrecv irrecv(RECEIVE_PIN);
decode_results results;

void setup() {
    Serial.begin(9600);
    irrecv.enableIRIn();
}

void loop() {
    if (irrecv.decode(&results)) {      
        switch (results.value) {
            case 0x77E150CB:
            if(brightness < 255) {
            brightness+=15;
            Serial.println(brightness);
            }
            break;

            case 0x77E130CB:   
            if(brightness > 0) {
            brightness-=15;
            Serial.println(brightness);
            }
            break;
        }    
        analogWrite(LED, brightness);
        irrecv.resume();
    }
}

Ну вот как то так. Во второй части статьи пойдёт речь о том, как полученный сигнал нам отправить на нашу технику. В моём случае это был кондиционер. Так же во второй части будет видео, которое покажет сборку под ключ, от начала и до конца + пример работы.

Фото Arduino + IR приёмник и пульт ДУ

foto arduino tsop22 ir receiver

И конечно же даташит под tsop

<p>
  <a class="dw-b dw-b_green" title="Сохранить на Яндекс.Диск" data-disk-hash="hukzICbGH3Pyu2cqX/1iQP/u0aV/Quyr2kvLaMkWQ/Q=" data-disk-widget="saveToDisk" href="http://yadi.sk/d/CxigwjpdAGgHa"><span class="dw-b__t dw-b__t_b"><i class="dw-i"></i>Сохранить на Яндекс.Диск</span></a></div> </div> </h3>

Комментарии

comments powered by Disqus