Перейти к содержимому

Как сделать ик пульт из arduino

  • автор:

Урок 35. Универсальный ИК-пульт дистанционного управления

В этом уроке мы создадим универсальный ИК-пульт дистанционного управления. Шесть кнопок универсального ИК-пульта позволяют запрограммировать себя на передачу команды любого* другого ИК-пульта. Код кнопок сохраняется в энергонезависимую область памяти Arduino — EEPROM . Это значит, что Вам не придётся программировать кнопки при каждом включении универсального ИК-пульта.

*Универсальный ИК-пульт может воспроизводить сигналы только тех ИК-пультов, которые передают данные одним информационным пакетом не длиннее 32 бит, а также имеют (или нет) одинаковые пакеты удержания (пакеты повторов).

Нам понадобится:
  • Arduino Uno х 1шт.
  • Trema модуль — ИК-приёмник x 1шт.
  • Trema модуль — ИК-передатчик x 1шт.
  • Trema модуль — кнопка (синяя) x 7шт.
  • Trema модуль — зуммер x 1шт.
  • Trema Shield x 1шт.
  • Конструктор для создания каркаса.

Для реализации проекта нам необходимо установить библиотеку:

  • iarduino_IR для работы с ИК-приёмопередатчиками.
  • EEPROM — входит в стандартный набор Arduino IDE.

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

Видео:
Схема подключения:

Все используемые в уроке модули, можно подключать к любым выводам Arduino, как цифровым, так и аналоговым. Номера выводов к которым подключены модули, указываются в скетче.

  • Trema-кнопки подключены к цифровым выводам 2-8.
  • Trema ИК-приёмник подключён к цифровому выводу 9.
  • Trema ИК-передатчик подключён к цифровому выводу 10.
  • Trema-зуммер подключён к цифровому выводу 11.
  • Все модули подключены к Arduino Uno через Trema Shield.

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

Алгоритм работы:
Отправка команд:
  • При нажатии на одну из 6 кнопок универсального ИК-пульта, он отправит команду, соответствующую нажатой кнопке.
  • Если нажатой кнопке команда не присвоена, то ИК-пульт издаст звуковой сигнал, сигнализирующий об ошибке.
Назначение команд кнопкам:
  • Для назначения команд кнопкам универсального ИК-пульта, нужно выполнить следующие действия:
    • Нажать на кнопку «запись команды» и, не отпуская её, нажать на ту кнопку универсального ИК-пульта, которой мы хотим присвоить команду с другого ИК-пульта.
    • Универсальный ИК-пульт издаст два коротких звуковых сигнала, сигнализируя о готовности принять данные.
    • Нажать на кнопку другого ИК-пульта, код которой мы хотим считать.
    • Как только код будет считан, универсальный ИК-пульт издаст короткий звуковой сигнал, сигнализирующий об успешной записи кода. Теперь можно отпустить все кнопки.
    Код программы:
    #include // Подключаем библиотеку для работы с ИК-приёмником #include // Подключаем библиотеку для работы с ИК-передатчиком #include // Подключаем библиотеку для работы с EEPROM (энергонезависимой областью памяти) // Указываем выводы к которым подключены модули: const uint8_t PinButton1= 2; // Объявляем константу с указанием вывода к которому подключена кнопка 1 const uint8_t PinButton2= 3; // Объявляем константу с указанием вывода к которому подключена кнопка 2 const uint8_t PinButton3= 4; // Объявляем константу с указанием вывода к которому подключена кнопка 3 const uint8_t PinButton4= 5; // Объявляем константу с указанием вывода к которому подключена кнопка 4 const uint8_t PinButton5= 6; // Объявляем константу с указанием вывода к которому подключена кнопка 5 const uint8_t PinButton6= 7; // Объявляем константу с указанием вывода к которому подключена кнопка 6 const uint8_t PinButton7= 8; // Объявляем константу с указанием вывода к которому подключена кнопка 7 (запись) iarduino_IR_RX IR_Read ( 9); // Объявляем объект IR_Read с указанием вывода к которому подключён ИК-приёмник iarduino_IR_TX IR_Write (10); // Объявляем объект IR_Write с указанием вывода к которому подключён ИК-передатчик const uint8_t PinBuzzer= 11; // Объявляем константу с указанием вывода к которому подключен зуммер // Объявляем для хранения временных данных: uint8_t ValButton= 0; // Объявляем переменную для хранения номера нажатой кнопки uint32_t ValCode; // Объявляем переменную для хранения кода кнопки char ValProtocol[26]; // Объявляем строку для хранения 25 символов протокола передачи данных + символ конца строки void setup() < // Инициируем работу с ИК-приёмником и ИК-передатчиком: IR_Read.begin(); // Инициируем работу с ИК-приёмником IR_Write.begin(); // Инициируем работу с ИК-передатчиком // Конфигурируем выводы: pinMode(PinButton1, INPUT); // Конфигурируем вывод с подключенной кнопкой №1 в режим входа pinMode(PinButton2, INPUT); // Конфигурируем вывод с подключенной кнопкой №2 в режим входа pinMode(PinButton3, INPUT); // Конфигурируем вывод с подключенной кнопкой №3 в режим входа pinMode(PinButton4, INPUT); // Конфигурируем вывод с подключенной кнопкой №4 в режим входа pinMode(PinButton5, INPUT); // Конфигурируем вывод с подключенной кнопкой №5 в режим входа pinMode(PinButton6, INPUT); // Конфигурируем вывод с подключенной кнопкой №6 в режим входа pinMode(PinButton7, INPUT); // Конфигурируем вывод с подключенной кнопкой №7 в режим входа pinMode(PinBuzzer, OUTPUT); // Конфигурируем вывод с подключенным зуммером в режим выхода >void loop()< // Проверяем состояние кнопок: if(digitalRead(PinButton1))< ValButton=1;>else // Если нажата кнопка 1, записываем число 1 в переменную ValButton if(digitalRead(PinButton2))< ValButton=2;>else // Если нажата кнопка 2, записываем число 2 в переменную ValButton if(digitalRead(PinButton3))< ValButton=3;>else // Если нажата кнопка 3, записываем число 3 в переменную ValButton if(digitalRead(PinButton4))< ValButton=4;>else // Если нажата кнопка 4, записываем число 4 в переменную ValButton if(digitalRead(PinButton5))< ValButton=5;>else // Если нажата кнопка 5, записываем число 5 в переменную ValButton if(digitalRead(PinButton6))< ValButton=6;>else // Если нажата кнопка 6, записываем число 6 в переменную ValButton // Если кнопки 1-6 не нажаты, записываем число 0 в переменную ValButton и подавляем дребезг // Выполняем действия при нажатии на кнопку: if(ValButton) < // Если нажата кнопка 1-6 // Чтение данных: if(digitalRead(PinButton7))< // Если нажата кнопка 7 (запись), то . myTone(100); delay(100); myTone(100); // Выводим два коротких звуковых сигнала, сигнализирующих о готовности считать данные while(digitalRead(PinButton7))< // Входим в цикл while, пока не будет отпущена кнопка 7 (запись) if(IR_Read.check())< // Если в буфере имеются данные, принятые с другого пульта // Получаем данные, принятые с пульта strcpy(ValProtocol, IR_Read.protocol()); // Получаем протокол передачи данных пульта в строку ValProtocol ValCode = IR_Read.data; // Получаем код кнопки в переменную ValCode // Записываем принятые данные в EEPROM for(uint8_t i=0; i// Первые 26 байт заполняем данными из строки ValProtocol (это протокол передачи данных) else >((29-i)*8)));> // Последние 4 байта заполняем данными из переменной ValCode (это код кнопки) > myTone(100); // Выводим короткий звуковой сигнал, сигнализирующий об успешной записи > > // Отправка данных: >else < // Если не нажата кнопка 7, то . // Читаем протокол передачи данных и код кнопки из EEPROM: for(uint8_t i=0; i// Первые 26 байт записываем в строку ValProtocol (это протокол передачи данных) else // Последние 4 байта записываем в переменную ValCode (это код кнопки) > // Отправляем код кнопки с использованием указанного протокола передачи данных: if (IR_Write.protocol(ValProtocol))< // Устанавливаем прочитанный протокол передачи данных ValProtocol IR_Write.send(ValCode, true); // Передаём прочитанный код кнопки ValCode >else // Если строка ValProtocol не является протоколом передачи данных, то выводим звуковой сигнал, сигнализирующий об ошибке > > > // Функция генерирующая звуковой сигнал на выводе PinBuzzer void myTone(uint32_t i)< i+=millis(); while(i>millis()) >

    Для генерации звука написана функция myTone(), вместо стандартной функции tone(), так как стандартная функция использует 2 аппаратный таймер, который уже используется библиотекой iarduino_IR.

    Ссылки:
    • Библиотека iarduino_IR.
    • Wiki — Установка библиотек в Arduino IDE .
    • Wiki — ИК-приёмник (Trema-модуль).
    • Wiki — Trema Shield.
    • Код программы.

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

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

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

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

    Принцип работы 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 передатчик с одной частотой. После фильтра сигнал поступает на амплитудный детектор, интегрирующий фильтр и выходной транзистор.

    Ардуино: инфракрасный пульт и приемник

    Инфракрасный пульт дистанционного управления — один из самых простых способов взаимодействия с электронными приборами. Так, практически в каждом доме есть несколько таких устройств: телевизор, музыкальный центр, видеоплеер, кондиционер. Но самое интересное применение инфракрасного пульта — дистанционное правление роботом. Собственно, на этом уроке мы попытаемся реализовать такой способ управления с помощью популярного контроллера Ардуино Уно.

    ИК-пульт

    Что нужно для того, чтобы научить робота слушаться инфракрасного (ИК) пульта? Во-первых, нам потребуется сам пульт. Можно использовать обычный пульт от телевизора, а можно приобрести миниатюрный пульт от автомагнитолы. Именно такие пульты часто используются для управления роботами.

    Инфракрасный пульт

    На таком пульте есть 10 цифровых кнопок и 11 кнопок для манипуляции с музыкой: громкость, перемотка, play, stop, и т.д. Для наших целей более чем достаточно.

    ИК-датчик

    Во-вторых, для приема сигнала с пульта нам потребуется специальный ИК-датчик. Вообще, мы можем детектировать инфракрасное излучение обычным фотодиодом/фототранзистором, но в отличие от него, наш ИК-датчик воспринимает инфракрасный сигнал только на частоте 38 кГц (иногда 40кГц). Именно такое свойство позволяет датчику игнорировать много посторонних световых шумов от ламп освещения и солнца.

    Для этого урока воспользуемся популярным ИК-датчиком VS1838B, который обладает следующими характеристиками:

    • несущая частота: 38 кГц;
    • напряжение питания: 2,7 — 5,5 В;
    • потребляемый ток: 50 мкА.

    Можно использовать и другие датчики, например: TSOP4838, TSOP1736, SFH506.

    Список необходимых компонентов

    Для выполнения простого примера с VS1838B, кроме самого датчика, потребуется Ардуино-совместимый контроллер, макетная плата и немного проводов вилка-вилка. Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.

    Подключение

    Датчик имеет три вывода (три ноги). Если посмотреть на датчик со стороны приёмника ИК сигнала, как показано на рисунке,

    • то слева будет — выход на контроллер,
    • по центру — отрицательный контакт питания (земля),
    • и справа — положительный контакт питания (2.7 — 5.5В).

    Принципиальная схема подключения

    ardu-ir_схема

    Внешний вид макета

    ardu-ir_bb

    Программа

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

    #include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() < Serial.begin(9600); // выставляем скорость COM порта irrecv.enableIRIn(); // запускаем прием >void loop() < if ( irrecv.decode( &results )) < // если данные пришли Serial.println( results.value, HEX ); // печатаем данные irrecv.resume(); // принимаем следующую команду >>

    Загружаем программу на Ардуино. После этого, пробуем получать команды с пульта. Открываем монитор последовательного порта (Ctrl+Shift+M), берём в руки пульт, и направляем его на датчик. Нажимая разные кнопочки, наблюдаем в окне монитора соответствующие этим кнопкам коды.

    ir-sensor

    Проблема с загрузкой программы

    В некоторых случаях, при попытке загрузить программу в контроллер, может появиться ошибка:

    TDK2 was not declared In his scope

    Чтобы ее исправить, достаточно удалить два файла из папки библиотеки. Заходим в проводник. Переходим в папку, где установлено приложение Arduino IDE (скорее всего это «C:\Program Files (x86)\Arduino»). Затем в папку с библиотекой:

    , и удаляем файлы: IRremoteTools.cpp и IRremoteTools.h. Затем, перезапускаем Arduino IDE, и снова пробуем загрузить программу на контроллер.

    Управляем светодиодом с помощью ИК-пульта

    Теперь, когда мы знаем, какие коды соответствуют кнопкам пульта, пробуем запрограммировать контроллер на зажигание и гашение светодиода при нажатии на кнопки громкости. Для этого нам потребуется коды (могут отличаться, в зависимости от пульта):

    • FFA857 — увеличение громкости;
    • FFE01F — уменьшение громкости.

    В качестве светодиода, используем встроенный светодиод на выводе №13, так что схема подключения останется прежней. Итак, программа:

    #include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() < irrecv.enableIRIn(); // запускаем прием >void loop() < if ( irrecv.decode( &results )) < // если данные пришли switch ( results.value ) < case 0xFFA857: digitalWrite( 13, HIGH ); break; case 0xFFE01F: digitalWrite( 13, LOW ); break; >irrecv.resume(); // принимаем следующую команду > >

    Загружаем на Ардуино и тестируем. Жмем vol+ — светодиод зажигается. Жмем vol- — гаснет. Теперь, зная как это все работает, можно вместо светодиода управлять двигателями робота, или другими самодельными микроэлектронными устройствами!

    К размышлению

    Несмотря на то, что инфракрасные пульты всё еще сильно распространены, этот способ передачи данных сильно проигрывается более современным подходам. Для управления устройствами удобнее использовать bluetooth, wi-fi или zigbee. Также для создания самодельных устройств с дистанционным управлением подойдут низкоуровневые передатчики: самый простой RF433 или RF315, а также более серъёзный NRF24L01.

    Изменено: 19 Фев, 2015 13:06

    Ардуино: инфракрасный пульт и приемник : 75 комментариев

    Alexandr говорит 09.09.2015 в 19:11 :

    Во-первых спасибо за пример!
    но он не работал у меня( пришлось его доделать=) #include «IRremote.h» IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results;
    int Relay = 4; void setup()
    pinMode(Relay, OUTPUT);
    irrecv.enableIRIn(); // запускаем прием
    >
    void loop() if ( irrecv.decode( &results )) < // если данные пришли
    switch ( results.value ) case 0x40BF807F:
    digitalWrite( Relay, HIGH );
    break;
    case 0x40BF40BF:
    digitalWrite( Relay, LOW );
    break;
    >
    irrecv.resume(); // принимаем следующую команду
    >
    >

    Данило говорит 21.03.2019 в 18:45 :
    робосайпен говорит 16.08.2019 в 15:52 :

    у меня тоже не заработал скетч . вот скетч который у меня
    заработал. #include // подключаем библиотеку для IR приемника IRrecv irrecv(6); // указываем пин, к которому подключен IR приемник
    decode_results results; void setup() // процедура setup
    irrecv.enableIRIn(); // запускаем прием инфракрасного сигнала pinMode(11, OUTPUT); // пин 13 будет выходом (англ. «output»)
    pinMode(12, OUTPUT); // пин 12 будет выходом (англ. «output»)
    pinMode(A0, INPUT); // пин A0 будет входом (англ. «intput») Serial.begin(9600); // подключаем монитор порта
    > void loop() // процедура loop
    if (irrecv.decode(&results)) // если данные пришли выполняем команды
    Serial.println(results.value); // отправляем полученные данные на порт // включаем и выключаем светодиоды, в зависимости от полученного сигнала if (results.value == 12535991) digitalWrite(11, HIGH);
    >
    if (results.value == 12574751 ) digitalWrite(11, LOW);
    >
    if (results.value == 16718055) digitalWrite(12, HIGH);
    >
    if (results.value == 16724175) digitalWrite(12, LOW);
    >
    irrecv.resume(); // принимаем следующий сигнал на ИК приемнике
    >
    >

    А какая библиотека?
    Даниил говорит 15.07.2022 в 19:50 :
    Виталий говорит 08.04.2016 в 16:32 :

    Большое спасибо за познавательный урок, я бы хотел попросить вас усложнить задачку и сделать при помощи ШИМ плавное вкл/откл светодиода. Спасибо!

    Сергей говорит 12.06.2016 в 21:15 :

    Дополнить программу кодом в данном месте (для увеличения яркости)
    case 0xFFA857:
    // например
    int val = 0;
    val += 50; // значение может быть любым
    // или val++; для более плавного перехода
    if (val > 255) val = 255
    analogWrite( 13, val );
    break;

    Евгений говорит 07.04.2017 в 22:47 :
    не работает
    Евгений говорит 07.04.2017 в 22:49 :
    при этом коде светодиод просто включается, плавности нет.
    Случайный прохожий говорит 22.09.2017 в 02:26 :
    Нужно подключать к выходам с ШИМ (PWM)
    Никита говорит 30.07.2018 в 12:26 :

    У вас ошибка в коде. При таком алгоритме значение val всегда будет 50, так как постоянно при нажатии на кнопку пульта у вас будет переопределяться переменная val. Во избежание этого следует добавить слово «static» к типу данных val.

    Alex говорит 02.07.2016 в 14:54 :
    надо добавить, чтобы работало
    pinMode(13, OUTPUT);
    kek говорит 09.07.2016 в 03:54 :

    Подключил как в гайде, но все равно не работает( Имею в виду что монитор не показывает что я нажал пультом) но это не такой пульт как в этом гайде. В чем может быть проблема?

    Олег Евсегнеев говорит 13.07.2016 в 03:21 :

    Скетч залился успешно, без ошибок? Причины могут быть разные. Например, пульт дает сигнал на частоте 40КГц, а приемник скорее всего 38КГц.

    Я пробовал и таким же пультом и пультом от телевизора все работает. Посмотри все ли у тебя подключено правильно.

    Конституция говорит 10.10.2019 в 14:52 :

    Как сделать так что бы ик приемник получал один и тот же сигнал, у меня он принимает с одной кнопки разные коды

    070610 говорит 03.06.2021 в 18:21 :
    у меня просто нули пишет какую бы кнопку ни не нажимал.
    Ivan_dem говорит 18.06.2020 в 19:42 :
    У разных пультов разный код.
    Кирилл говорит 31.07.2016 в 20:49 :

    А почему на схеме и на внешнем виде макета отличается подключение выводов? На схеме у вас (слева направо) идёт земля выход вход, а на макете земля вход выход. Я просмотрел уже несколько сайтов по подключению этого приёмника — везде подключают по разному, у одних левый вывод это выход, у других земля. Чепуха какая-то.

    Олег Евсегнеев говорит 01.08.2016 в 16:46 :

    Спасибо за замечание! Оказалось, что в редакторе схем fritzing ИК-датчик отображается неверно. Заменили на правильный вариант. Теперь всё как надо. Если не заработает, ищите проблему в другом.

    разные выводы на сенсоре и на плате ky-022
    вносите корректировку.
    Дмитрий говорит 23.11.2016 в 18:12 :
    Можно ссылочку на деталь в Fritzing
    Олег Евсегнеев говорит 24.11.2016 в 02:43 :
    Вот тут можно взять:
    http://git.robotclass.ru/download/Fritzing/
    Константин говорит 10.12.2016 в 16:08 :

    Я пишу скетч на управление сервой с помощью ик приёмника и вылетает ошибка:
    ‘results’ was not declared in this scope Скетч:
    #include
    #include
    #include Servo MyServo; IRrecv irrecv(2); void setup() Serial.begin(9600);
    irrecv.enableIRIn(); // запускаем прием
    MyServo.attach(4); > void loop() if ( irrecv.decode( &results )) switch ( results.value ) case 0xFFA25D:
    MyServo.write(0);
    break;
    case 0xFF629D:
    MyServo.write(90); //поворот на 90 градусов
    break;
    >
    irrecv.resume(); // принимаем следующую команду
    >

    Роман говорит 18.05.2019 в 15:23 :
    Пропишите #include
    Роман говорит 18.05.2019 в 15:24 :
    Константин говорит 10.12.2016 в 16:10 :
    Почему- то не прописалось:
    #include <>
    #include <>
    #include <>
    Николай говорит 25.12.2016 в 22:59 :
    Спасибо за пример! Заработал с первого раза. Очень доходчиво и просто. Спасибо.
    Антон говорит 30.12.2016 в 13:10 :

    Добрый день! Использовал скетчи из этой темы для того, что бы сделать лазертаг мишень: принимает ИК сигнал выстрела, загорается и гаснет, но вот какие вопросы:
    1. Как только программа загружается в Ардуино — диод горит сразу.
    2. Что надо сделать, что бы принял сигнал — моргнул 500 мсек — погас? #include «IRremote.h» IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() Serial.begin(9600); // выставляем скорость COM порта
    irrecv.enableIRIn(); // запускаем прием
    pinMode(3, OUTPUT);
    > void loop() if ( irrecv.decode( &results )) < // если данные пришли
    switch ( results.value ) case 0x2FD58A7:
    digitalWrite ( 3, HIGH );
    delay (10);
    case 0x2FDD827:
    digitalWrite ( 3, LOW);
    delay (100);
    >
    Serial.println( results.value, HEX ); // печатаем данные
    irrecv.resume(); // принимаем следующую команду
    > >

    Му-му Герасим говорит 29.10.2017 в 00:56 :

    Автору респект.
    Alexandr, отдельная благодарность.
    Светодиод горел на авторском скетче вполнакала,
    с Вашей поправкой все заработало отлично.

    Дамир говорит 29.11.2017 в 15:35 :

    Добрый день.
    Не подскажете, в чем может быть проблема?
    #include «IRremote.h»
    void setup() <>
    void loop()<>
    Не компилируется:
    IRremote.h: No such file or directory Спасибо.

    Павел говорит 13.12.2017 в 22:15 :
    Скобки поставь одинарные #include
    Павел говорит 13.12.2017 в 22:17 :
    #include скобки щдинарные
    Name Secret говорит 09.01.2019 в 23:11 :
    Скачайте библиотеку IRremote.h
    Денис говорит 11.11.2019 в 23:03 :
    вместо «IRremote.h» напиши «IRremote.h»
    Михаил говорит 02.01.2018 в 23:38 :

    Использую код из ваших примеров, но среда упорно пишет «Ошибка компиляции для платы Arduino/Genuino Uno». Никаких подробностей не указано больше. В чем проблема может быть?

    Михаил говорит 02.01.2018 в 23:43 :
    Походу проблема в библиотеке
    ArduinoTester говорит 20.07.2018 в 14:08 :

    Проблема в библиотеке, В новой версии поддержка для UNO Выключена, Попробуйте скачать другую версию.
    Я пользуюсь библиотекой от сюда https://www.arduinolibraries.info/libraries/i-rremote

    Артем говорит 25.03.2019 в 14:24 :

    Бывает такое при подключении платы с уже запущенным приложением Arduino IDE. Закрой ИДЕшку, извлеки провод, с помощью которого прошиваешь плату, запусти ИДЕ, подключи плату(ардуинку). PROFIT

    Максим говорит 02.08.2019 в 20:39 :
    Можно сделать проще: зайти в программу, Инструменты, Порт и выбираем
    Сергей говорит 23.01.2018 в 16:06 :

    Добрый день? возможно ли подключить к uno серво шилд и wi-fi шилд? если нет, то какой вариант возможен?

    Антон говорит 02.03.2018 в 16:12 :
    извините,но в вашем коде какая то фигня… Вставте ваш код в word и вы поймёте.
    Иван говорит 24.05.2018 в 17:07 :
    собрал все по схеме светодиодом моргать получается а когда вместо светодиода цепляю реле неработает
    mindstation говорит 29.05.2018 в 12:57 :
    Скорее всего тока не хватает для управления реле.
    Какое реле подключаете?
    Alex говорит 25.06.2018 в 00:32 :

    Доброго времени суток!
    Господа, я новичок в освоении Ардуино, Но!
    Получаю команды с пульта всегда в двух числах, исходя из этого
    хотел бы спросить профессионалов — Почему 2 цифры?
    Как я понял одна из них и есть код сигнала, а вторая преселектор (т.е доп сигнал, для считывания нажатия комбинации кнопок в момент времени),.
    Так, как в моем случае, мне нужна быстрая реакция на нажатие, я включил их в обработку
    Пример ниже… Текст Кода #include «IRremote.h» IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() pinMode(13,OUTPUT);
    pinMode(12,OUTPUT);
    Serial.begin(9600); // выставляем скорость COM порта
    irrecv.enableIRIn(); // запускаем прием
    > void loop() if ( irrecv.decode( &results )) < // если данные пришли
    Serial.println( results.value ); // печатаем данные if (results.value ==32||results.value==2080)
    digitalWrite( 13, HIGH );
    >
    if (results.value ==33||results.value==2081)
    digitalWrite( 13, LOW );
    >
    if (results.value ==17||results.value==2065)
    digitalWrite( 12, HIGH );
    >
    if (results.value ==16||results.value==2064)
    digitalWrite( 12, LOW );
    >
    irrecv.resume(); // принимаем следующую команду
    >
    >

    Артём говорит 17.07.2018 в 11:33 :
    У меня при case пишет что неуказонное значение.Помогите
    ArduinoTester говорит 20.07.2018 в 14:10 :
    Покажите свой скетч
    Роман говорит 16.12.2018 в 22:33 :
    Допишите 0x Например у вас код кнопки получился CE1972FD, значит пишем case 0xCE1972FD
    ПОМОГИТЕ УМОЛЯЮ! ЗАГРУЖАЮ СКЕТЧ И ПИШЕТ ОШИБКУ!
    Роман говорит 16.12.2018 в 22:35 :
    Какая ошибка? case неверный? Допишите перед вашим значением кода 0x Например case 0xCE1972FD
    Виталий говорит 09.11.2018 в 09:05 :

    Почему приёмник иногда пишет в консоль разные коды на одну и ту же кнопку? Как эти коды можно контролировать в понятный для Android вид чтобы создать программный пульт?

    АРСЕНИЙ говорит 02.01.2019 в 13:25 :

    ТЫ НА ПУЛЬТЕ НАЖИМАЕШЬ РАЗНЫЕ КНОПКИ ПРОСТО СМОТРИ НА ПУЛЬТ И НАЖИМАЙ НОГТЕМ НА ОДНУ КНОПКУ НЕ УДЕРЖИВАЯ ПРИМЕРНО МЕНЬШЕ СЕКУНДЫ!

    Михаил говорит 01.12.2018 в 00:24 :
    Почему светодиод не на полную мощность работает?
    Роман говорит 09.05.2019 в 22:56 :
    Может, сопротивление поменьше поставьте
    АРСЕНИЙ говорит 02.01.2019 в 13:22 :

    ГДЕ ВЫ ПОКАЗАЛИ КАК ПОДКЛЮЧАТЬ ИК ДАТЧИК ТАМ НЕ ПРАВИЛЬНО МОЖНО БЫЛО ПОДКЛЮЧИТЬ НА 3 ВОЛЬТА А МОТОР НА 5 ИЛИ НА СЕМЬ ВОЛЬТ МЕНЬШЕ ПЯТИ ВОЛЬТ МОТОРУ НЕ ХВАТАЕТ МОЩНОСТИ!

    AlexeySamoilov говорит 28.01.2019 в 02:44 :

    Если использовать в одном скрипте + tone для пищалки, то вылетает ошибка
    >>
    Arduino: 1.8.8 (Windows XP), Плата:»Arduino/Genuino Uno»
    Tone.cpp.o (symbol from plugin): In function `timer0_pin_port’:
    (.text+0x0): multiple definition of `__vector_7′
    libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here
    collect2.exe: error: ld returned 1 exit status
    exit status 1
    Ошибка компиляции для платы Arduino/Genuino Uno.
    Куда копать?

    Роман говорит 09.05.2019 в 22:54 :

    Функция tone () использует таймер 2, который по умолчанию IRremote также использует при использовании чипа ATmega2560.
    В файле IRremoteInt.h вы можете определить, какой таймер использовать. Или скачайте библиотеку TonePlayer

    вова говорит 26.03.2019 в 15:33 :
    #include «IRremote.h»
    вот эту строка пишет что не правельная что делать?
    Роман говорит 18.05.2019 в 15:20 :
    Скобки одинарные поставьте.
    Шурик говорит 03.04.2019 в 18:21 :

    копировал, поменял на сигнал для своего пульта, закинул, выдает
    Arduino: 1.8.9 Hourly Build 2019/03/18 11:33 (Windows 10), Плата: «Arduino BT, ATmega328P» Скетч використовує 6502 байтів (22%) місця зберігання для програм. Межа 28672 байтів.
    Глобальні змінні використовують 236 байтів (11%) динамічної пам’яті, залишаючи 1812 байтів для локальних змінних. Межа 2048 байтів.
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x78
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x86
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x60
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x66
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x86
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x78
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x06
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x18
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x60
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xe6
    Сталася помилка при вивантаженні скетча Цей звіт міститиме більше інформації, якщо
    в меню Файл -> Налаштування увімкнути опцію
    «Показати докладний звіт при компіляції».

    Олег Евсегнеев говорит 06.04.2019 в 18:00 :

    Судя по ошибке, Arduino IDE не может залить скетч на плату по каким-то причинам. При этом скетч скомпилирован, к программе уже претензий нет. Проверьте кабель, подключение. Может загрузчик слетел с ардуины, такое тоже бывает.

    Универсальный IR пульт своими руками

    Сегодня я задумал сделать ИК пульт на Ардуино.
    Давайте определимся с аббривиатурой «ИК».
    ИК — в расшифровке означает Инфракрасный.
    Что такое инфра и почему оно красное, если его не видно?
    Все дело в спектре цвета, который мы видим и нет:

    Инфра означает выше чем что-либо, значит инфракрасный — это выше чем красный.
    Взгляните на рисунок, там показаны длины волн, так вот длины волн, значение которых выше чем 700, по рисунку, и есть ИК (IR) излучение.
    Но зачем же требуется мой пульт:

    • если основной пульт утерян, а устройство популярного типа, то можно с помощью всем известных кодов восстановить его;
    • копирование пульта. Это нужно в тех случаях, когда вам нужно отдавать кому-то путь, но при этом требуется и самому доступ к дистанционному управлению этого устройства;
    • управление ИК пультом в остальных Ардуино-проектах с доступом к настройке кодов.

    Коды. Коды. Так что же такое информационные коды для пульта?
    Коды ИК пульта — это порядок цифр, тактируемый передатчиком и принимающийся приемником.
    Чаще всего они передаются в 16-символьной системе счисления.

    Для того, что бы Ардуино понимала, что это не набор символов, а число в 16-символьной системы счисления, нужно к коду добавлять приписку 0x, думаю это мы уяснили.
    Что из себя представляет передатчик ИК кода?
    Это устройство, похожее на обычный светодиод, но при подключении питания — не светит.

    И тут возникает вопрос: как же проверить такой ИК светодиод? Ответ прост.
    Мы, люди, не видим ИК излучение, но зато его отлично видят камеры наших устройств. Для того что бы проверить такой светодиод, нужно:

    1. Подать напряжение на его катод и анод соответственно.
    2. Навести камеру любого устройства, имеющую ее.
    3. Посмотреть: если светит, то светодиод рабочий и наоборот.

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

    1. 4 тактовые, нормально разомкнутые, кнопки.
    2. ИК светодиод (его можно достать из старых пультов).
    3. любой светодиод (у меня красный), для сигнализации
    4. Резистор на 220 Ом.
    5. Ардино нано (или любая другая, которая Atmega 328).
    6. Аккумулятор и к нему плата TP4056.

    Вскоре продолжил собирать все вот по этой схеме:

    Но в этот раз я решил начать с корпуса свою сборку. Найдя такую пластмаску, я понял, что из этого может получиться отличный корпус:

    После я просверлил отверстия для кнопок:

    Там то и будут находиться мои 4 тактовые кнопки. Их я решил приклеить на термоклей, это очень удобно.

    Но мои кнопки были слишком коротки, поэтому я решил использовать винт от винтового зажима:

    Немного откусив их, чтобы не были такими длинными, я их приклеил к кнопкам, вот что получилось:

    На этом же фото вы можете видеть отверстие, которое нужно для сигнализирующего светодиода.
    Был также вырезан вход для USB штекера, чтобы заряжать аккумулятор:

    И да, отверстие для ИК светодиода, тоже было вырезано:

    Мне, ради компактности устройства, пришлось отрезать уголки плате TP4056:

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

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

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

    Теперь можно перейти к программной части, этот проект построен на библиотеке iarduino_IR_TX.h и на паре других, они будут на гугл-диске.
    Я сделал небольшую программу и сейчас объясню ее работу.
    Есть 3 вкладки:

    1. Основная, там происходят все процессы.
    2. Подсобная, нужна для разработчиков.
    3. Хранятся ваши странички с кодами.

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

    Вместо цифры 4, другая цифра.

    Когда добавляете новую функцию, добавьте новый case и номер который идет следующим, от прошлого числа.
    Вот я и рассказал вам о своем проекте, следите за новостями в моем инстаграмме (там все подробности, а также находится актуальная информация про новые изобретения), с вами был Robozit, всем пока!
    ссылка на Инстаграмм
    ссылка на гугл диск

    Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте.
    Так же у нас есть Telegram канал.
    Вам понравился наш материал? Поделитесь с коллегами!

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

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