Вы здесь

Управление arduino пультом ИК

У каждого дома есть пульт от телевизора, или другой пульт дистанционного управления(ДУ). Данное устройство позволяет на расстоянии управлять каким-либо устройством, что является очень удобным. Не надо тратить драгоценные калории и делать лишние движения. Если у вас есть какое-то устройство и вы хотели бы управлять им на расстоянии, тогда можно сделать дистанционное управление данным устройством. При желании можно сделать и пульт ДУ своими руками, но для этого нет необходимости и это другая история. Зачем может понадобиться дистанционное управление?! - все просто:

Лень — это качество, заставляющее прилагать огромные усилия к тому, чтобы снизить общие затраты энергии.

Шварц

Впервые дистанционное управление в действии миру показал изобретатель Никола Тесла, в 1898 году на выставке в Медисон-сквер-гарден он представил лодку с радиоуправлением под названием «телеавтомат». На сегодняшний день эта технология получила широчайшее распространение, только добавилось разные способы передачи команд(канал связи).

Из основных каналов связи можно выделить:

  • Радиоканал
  • Ультразвуковой
  • Инфракрасный

В данной статье мы будем говорить об управлении устройством инфракрасным пультом ДУ. Инфракрасное излучение — электромагнитное излучение, занимающее спектральную область между красным концом видимого света и микроволновым излучением. Инфракрасное излучение не видно человеческому глазу, но его можно увидеть с помощи фотокамеры или видеокамеры. Зачастую именно так проверяют работоспособность пульта от телевизора в домашних условиях.

Как то давно на старой работе взял пульт и "глазок"(ИК приемник) от списываемой охранной системы, он долго валялся без дела и наконец я добрался его проверить в работе.

Разобрав данный приемник Я увидел кое-какую хитрость, в данном "глазке" было спаяно вместе 4 ик приемника. Сделано это для того чтобы принимать ик волны с четырех сторон. И это удобно, не нужно ограничивать себя определенным углом приема.

Я так же набросал похожую схему с четырьмя приемниками, вдруг понадобиться. Ик приемники я использовал TSOP1836, но можно брать другие. Что бы обеспечить прием 360 градусов нужно выбрать соответственные ик приемники(с широким углом приема) и расположить максимально близко их между собой. С моим приемников проблем с приемом я не заметил. Так же забросил во вложение печатную плату и расположение элементов.

Для обработки команд я естественно буду использовать arduino uno, в качестве приемника ИК можно использовать
TSOP34836(обладает высокой дальностью приема, но дороже) или TL1838. Пульт можно взять любой ИК даже от телевизора. Ну если надо свой пульт то можно купить комплект для arduino.

Принцип работы:
При нажатии на кнопку пульта ду он посылает код кнопки в инфракрасном свете, после чего приемник принимает данный код кнопки и отправляет на исполнительное устройство, которое в зависимости от кнопки выполнит определенное действие.

Так же можно при помощи ИК волн можно передавать информацию на небольшое расстояние. Для передачи своих команд или информации можно использовать вторую arduino с ИК передатчиком. Но скорость такой передачи весьма небыстрая. К плюсам инфракрасного канала относится нечувствительность к электромагнитным помехам.

Для приема arduino ИК сигналов мы подключим ИК приемник следующим образом:

Обратите внимание что расположение ножек у приемника может отличаться.

Приемник имеет 3 ноги, «+» и «-» питания(в основном напряжение 3,3-5В) и нога данных именно она передает информацию на устройство(в нашем случае arduino). Напряжение питания для TSOP34836 является 2.7-5.5 вольт. Я буду использовать 5 вольт от стандартного выхода arduino.

Ну и естественно нужна прошивка для arduino. Алгоритм работы будет следующим: при нажатии на верхнюю кнопку пульта arduino включает реле, а при повторном нажатии выключает. С помощью этого реле можно запитать например подсветку, но не обязательно программировать нажатие кнопки на реле, можно выводить в компьютер команду или выполнить определенную операцию в arduino и т.д.
Для упрощения работы будем использовать готовую библиотеку. Код прошивки:

#include <IRremote.h>
int RECEIVE_PIN = 11;//контакт приемника
int RELAY_PIN = 3;//контакт реле
IRrecv irrecv(RECEIVE_PIN);//присваиваем пин приемника
decode_results results;//полученные данные



void setup() {
    Serial.begin(9600);
    irrecv.enableIRIn(); // включаем приемник
    pinMode(RELAY_PIN, OUTPUT); // настраиваем реле на выход
    digitalWrite(RELAY_PIN,HIGH); //устанавливаем высокое значение
}

void loop() {
    if (irrecv.decode(&results)) {//если получены данные
        Serial.print("0x");
        Serial.println(results.value, HEX);//вывод полученного в терминал
        if  ((results.value == 0x8FF40BF) ||(results.value == 0xD72040BF))  digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));//если код кнопки 0x8FF40BF или 0xD72040BF меняем состояние реле на противоположное
        delay(200);// задержка от двойного срабатывания
        irrecv.resume();// Получаем следующее значение
    }
}

Немного поясню по скетчу:

if  ((results.value == 0x8FF40BF) ||(results.value == 0xD72040BF))

Полученное значение сравнивается с "0x8FF40BF" и "0xD72040BF" - это коды кнопок в шестнадцатеричной системе исчисления. Два значения лишь потому что я использую два пульта с уникальными кодами.

digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));

Стандартная процедура цифровой записи пина за исключением "!digitalRead(RELAY_PIN)". Знак "!" обозначает инверсию, в нашем случае инверсия состояния цифрового выхода "RELAY_PIN".

        Serial.print("0x");
        Serial.println(results.value, HEX);//вывод полученного в терминал

Данные строки выводят все полученные коды в терминал. В рабочей программе это без надобности, но это нужно что бы узнать нужный код той или иной кнопки. То есть сначала загружаем скетч в ардуино, заходим в терминал и нажав на кнопку получим нужный код.

Так же в библиотеке IRremote есть несколько разных примеров, что может оказаться полезным.

Во вложении к статье:

  • скетч для arduino
  • печатная плата для 4 датчиков
Вложение: 
Всего голосов: 637