Рассмотрим на этом занятии подключение ИК приемника к Ардуино. Расскажем какую библиотеку следует использовать для IR приемника, продемонстрируем скетч для тестирования работы инфракрасного приемника от пульта дистанционного управления и разберем команды в языке C++ для получения сигнала. Сразу отметим, что IR датчик Ардуино подходит не к каждому пульту, частота сигнала может отличаться.

Подключение ИК приемника к Ардуино

Устройство ИК приемника. Принцип работы

Приемники инфракрасного излучения получили сегодня широкое применение в бытовой технике, благодаря доступной цене, простоте и удобству в использовании. Эти устройства позволяют управлять приборами с помощью пульта дистанционного управления и их можно встретить практически в любом виде техники. Но, несмотря на это, постепенно Bluetooth модуль набирает все большую популярность.

Принцип работы IR ресивера. Обработка сигнала
Принцип работы IR ресивера. Обработка сигнала от пульта ДУ

ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. Используется при изготовлении датчика препятствия и дальномера для Arduino. Обычно ИК-приемник имеет три ножки и состоит из следующих элементов: PIN-фотодиод, усилитель, полосовой фильтр, амплитудный детектор, интегрирующий фильтр и выходной транзистор.

Под действием инфракрасного излучения в фотодиоде, у которого между p и n областями создана дополнительная область из полупроводника (i-область), начинает течь ток. Сигнал поступает на усилитель и далее на полосовой фильтр, который настроен на фиксированную частоту: 30; 33; 36; 38; 40 и 56 килогерц и защищает приемник от помех. Помехи могут создавать любые бытовые приборы.

Как подключить ИК приемник к Ардуино

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • IR приемник и пульт ДУ;
  • макетная плата;
  • 1 светодиод и резистор 220 Ом;
  • севомотор;
  • провода «папа-папа» и «папа-мама».

Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде. Для подключения IR приемника к Arduino UNO используют три ножки, которые соединяют с — GND, 5V и A1. Советуем для начала использовать 3,3 Вольта, чтобы не сжечь ИК датчик при настройке.

Схема подключения ИК приемника к Ардуино
Управление светодиодом с пульта на Ардуино Уно

Подключите IR приемник по схеме, представленной выше, и подключите светодиоды к 12 и 13 пину. Перед загрузкой программы, вам потребуется установить библиотеку IRremote.h, если она не была еще установлена. Данная библиотека не относится к стандартным библиотекам среды программирования Arduino IDE. Скачать библиотеку IRremote.h и готовый скетч можно одним архивом с Google Диск по ссылке здесь.

Скетч для ИК датчика Ардуино со светодиодом

#include "IRremote.h" // подключаем библиотеку для ик датчика

IRrecv irrecv(A1); // указываем пин, к которому подключен ик датчик
decode_results results;

void setup() {
   irrecv.enableIRIn();  // запускаем прием инфракрасного сигнала
   Serial.begin(9600); // подключаем монитор порта

   pinMode(12, OUTPUT); // пин 12 будет выходом (англ. «output»)
   pinMode(A1, INPUT); // пин A1 будет входом (англ. «intput»)
}

void loop() {
   if (irrecv.decode(&results)) // если данные пришли выполняем команды
   {
      Serial.println(results.value); // отправляем полученные данные на порт
    
      // включаем и выключаем светодиод, в зависимости от полученного сигнала  
      if (results.value == 16718055) { 
      digitalWrite(12, HIGH);
   }
      if (results.value == 16724175) { 
      digitalWrite(12, LOW);
   }
      irrecv.resume(); // принимаем следующий сигнал на ИК приемнике
   }
}

Пояснения к коду:

  1. библиотека IRremote.h содержит набор команд и позволяет упростить скетч;
  2. оператор decode_results присваивает получаемым сигналам от пульта дистанционного управления имя переменной results.



ИК датчик можно применять во многих устройствах на микроконтроллере Ардуино, в том числе, можно сделать дистанционное управление сервоприводом на Ардуино от ИК приемника. При настройке следует включить монитор порта Arduino IDE и узнать какой сигнал отправляет та или иная кнопка на пульте ДУ. Полученные коды следует использовать в скетче после знака двойного равенства в условиях if ().

Схема подключения ИК приемника и серво
Управление серво с пульта ДУ на Ардуино Уно

Скетч для ИК приемника Ардуино и серовомотора

#include "IRremote.h" // подключаем библиотеку для ик пульта
IRrecv irrecv(A1);         // указываем пин, к которому подключен ик датчик
decode_results results;

#include "Servo.h" // подключаем библиотеку для серво
Servo myservo;       // создаем объект для управления серво

void setup() {
   irrecv.enableIRIn();  // запускаем прием инфракрасного сигнала
   Serial.begin(9600); // подключаем монитор порта

   myservo.attach(9); // указываем пин для подключения серво
}

void loop() {
   if (irrecv.decode(&results)) // если данные пришли выполняем команды
   {
      Serial.println(results.value); // отправляем полученные данные на порт
    
      // поворачиваем серво, в зависимости от ИК сигнала
      if (results.value == 16718055) { 
      myservo.write(0);
   }
      if (results.value == 16724175) { 
      myservo.write(90);
   }
     irrecv.resume(); // принимаем следующий сигнал на ИК приемнике
  }
}

Пояснения к коду:

  1. в условиях if (results.value == 16724175) следует поставить свои значения, они будут появляться на мониторе порта при нажатии кнопок на пульте ду.

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



18 Replies to “Подключение IR приемника и пульта к Ардуино”

  1. Вы пропустили в кодировке сигнала ИК пульта перед кодом поставить «0x»

    1. Еще раз все перепроверил. Все правильно написано в скетче для подключения ИК приемника к Arduino

    2. В данном случае прописаны числа в десятичной системе, переведи число в 16-ую систему и поставь 0х — результат будет тотже

  2. У вас на рисунках на одном правая нога 5В, левая А0, на следующем рисунке наоборот.

    1. Спасибо, исправим. Но не у всех ИК приемников распиновка именно такая, как изображено на рисунке, может и отличаться

  3. Попробуйте разные варианты подключения ИК датчика. Если не получилось, то, возможно, не совпадает частота ИК приемника и пульта. Надо взять другой пульт или другой ИК датчик.

  4. А как сделать так чтоб включать/выключать светодиод одной кнопкой пульта?
    Лично пробовал не получилось, только разными. Любая информация будет полезна.

      1. if (results.value == 16718055)digitalWrite(led2, !digitalRead(led2));
        нажатие одной кнопки вкл выкл

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

    1. Думаю что это для удержания или «залипания» кнопки.
      Вопрос в том как это использовать в ардуино?
      К примеру — нажал и держу кнопку — моторчик работает, а отпустил — остановился.

  6. Если с подключением не ошиблись и пульт ДУ рабочий, то скорее всего причина в сгоревшем ИК датчике. Еще может не совпадать частота сигнала — проверьте несколько пультов, от разных производителей.

  7. «а если удерживать любую кнопку, то все кнопки с кодом 4294967295» — просто игнорируйте эти данные
    «при подключенной серве в мониторе адски шум бежит» — поставьте конденсатор к серво, а еще лучше запитайте серво отдельно

    1. Кислота и флюс на работу IR приемника не влияют, они могут замыкать контакты на плате. Припаяйте резистор и проверьте — что сложного? Это намного быстрее, чем задавать очевидные вопросы и ждать на них ответы.

  8. Проверяйте пожалуйста, что за картинки в статью включаете. Подключил по неправильной картинке, спалил датчик… Он не дорогой, но обидно. Перепроверил. Точно спалил. Подключил по картинке, нагрелся и появился запах гари. Прошу внимательнее относится к тому, что пишете

  9. Там и электролитический конденсатор на схеме с сервой подключен неправильно. Белая полоска это всегда катод, то бишь земля или -…. А на схеме он подключен к +. Работать он так конечно же не будет, и через короткое время его разрушит обратный ток.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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