Управление arduino с ик приемником tsop 1833

Инструкция по изготовлению лодки с пультом

Проверку работы ИК-приемника и сервомотора на Ардуино лучше проводить с отключенным электромоторчиком, поскольку он будет создавать сильные вибрации при работе. На этом этапе тестирования проекта следует лишь оценить подвижность киля и отцентровать рычаг привода на сервомоторе. Необходимо сделать так, чтобы при нажатии кнопки «вперед» или «стоп» на пульте, киль вставал по центру.

1. Изготовление корпуса лодки из пеноплекса

Изготовление корпуса лодки на Ардуино своими руками

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

2. Изготовление деталей для привода и управления

Изготовление деталей для привода и управления лодкой

Киль можно изготовить из любого материала — пластик, дерево и т.д. Стержень от ручки, прикрепленный к килю служит осью, на котором он поворачивается. Скрепка на киле обеспечивает подвижное соединение киля и рычага сервомотора из проволоки. Размер и конструкция привода сервомотора будет зависеть от конструкции лодки. Винт изготавливается из стержня шариковой ручки и куска пластиковой баночки.

Сборка деталей для привода радиоуправляемой лодки

3. Сборка лодки на Ардуино с управлением

Для начала следует установить плату, сервопривод и двигатель

В этом проекте мы обошлись без использования макетной платы. Если вспомнить схему подключения ИК приемника к Ардуино, то она очень проста (слева-направо): A0 — GND — 5V  и не требует расходов на приобретение макетной платы. Транзистор мы использовали в этой схеме для включения советского электромоторчика от 3,3 V.

Сборка электрической схемы лодки на ИК управлении

Транзистор размещен на пинах 12, 11 и 10. На Pin11 (средняя ножка транзистора — это база) мы подаем напряжение для включения электродвигателя. Pin12 и Pin10 в скетче не используются, поэтому служат нам эмиттером и коллектором. К Pin12 подключен выход 3,3 V, а к Pin10 подключен электромоторчик (красный плюсовой провод).

4. Крепление привода винта на валу двигателя

Разогрейте стержень от ручки над паяльником и он зайдет на вал двигателя

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

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

#include <IRremote.h> // библиотека для IR-приемника
#include <Servo.h>      // библиотека для сервомотора

// Замените коды команд от пульта ДУ на свои значения
#define forward 16736925
#define left 16769565
#define right 16754775
#define turm_left 16712445
#define turm_right 16711935
#define stope 16755285

Servo servo; // присваиваем имя сервомотору

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

void setup() {
  Serial.begin(9600); // подключаем монитор, чтобы узнать коды кнопок пульта
  irrecv.enableIRIn();
  pinMode(11, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(A0, INPUT);
  servo.attach (7);
}

void loop() {
  
    if (irrecv.decode(&results)) {
    
    Serial.println(results.value); // выводим на монитор порта коды с пульта ДУ

    if (results.value == left) {
    servo.write(60);
    digitalWrite(11, HIGH);
   }
   
    if (results.value == right) {
    servo.write(120);
    digitalWrite(11, HIGH);
   }
   
    if (results.value == turm_left) {
    servo.write(10);
    digitalWrite(11, HIGH);
   }
   
    if (results.value == turm_right) {
    servo.write(170);
    digitalWrite(11, HIGH);  
   }
   
    if (results.value == forward) {
    servo.write(90);
    digitalWrite(11, HIGH);
   }
   
    if (results.value == stope) {
    servo.write(90);
    digitalWrite(11, LOW);
   }
   
    irrecv.resume(); // Ждем следующий сигнал от пульта
  }  
}

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

Начинаем работать с ИК приемником, или будем управлять светодиодами с пульта.

Для реализации этого проекта нам понадобиться немного
радиодеталей: ИК приемник (VS 1838B), пульт ДУ (подойдет любой, но я буду
использовать пока пульт от набора ардуино), два резистора на 100-200 Ом,
конденсатор 10 мкФ, три светодиода разных цветов, и макетные провода с макетной
платой.

Теперь немного теории (без этого никуда). Инфракрасный
пульт дистанционного управления — один из самых простых способов взаимодействия
с электронными приборами. Наверняка в каждом доме найдётся немало таких
устройств: телевизор, музыкальный центр, видеоплеер, кондиционер. А можно ли с
помощью ПДУ (пульт дистанционного управления) управлять нашей Arduino Uno?
Оказывается да! Для начала поставим скромную задачу: с помощью ПДУ зажигать и
гасить светодиоды.

Для начала нам понадобиться любой ИК пульт (если у вас
остались старые ИК ПДУ, то вот можно найти им применение).  Такие устройства ИК работают испуская на
инфракрасном светодиоде импульсы ИК излучения определённой частоты
(приблизительно от 38 до 40 кГц). Соответственно приемник (в нашем случае это VS1838B)
может принимать любой ИК излучение, но «ненужное» излучение (несущая) должно
быть отфильтровано (иначе будут ложные срабатывания), и в итоге остаётся только
«нужный» сигнал данных (который передается при нажатии на кнопку ПДУ).

Но вернемся к нашему приемнику ИК VS1838B

Важно его
грамотно подключить. А для этого давайте сначала познакомимся с его выводами.
Он имеет три вывода: если посмотреть на датчик со стороны приёмника ИК сигнала,
как показано на рисунке, то слева будет — выход на контроллер, по центру —
отрицательный контакт питания (земля), и справа — положительный контакт питания
(2.7 — 5.5В)

 Далее собираем
схему и давайте подключим библиотеку IRremote (ее можно будет загрузить с Яндекс диска по этой ссылке). Если кто еще не знает как это
сделать, то вот здесь можно будет все наглядно посмотреть (ссылка на видео).
Следующим этапом нам нужно убедиться, что наш ПДУ действительно подает сигналы
на ИК приемник и все отображается в мониторе порта. Вообще для этого есть
отдельный скетч (который можно загрузить из примера в библиотеке IRremote), но
давайте сразу убьём обоих зайцев: возьмём готовый скетч (который мы в
дальнейшем будем настраивать).

/*

 Arduino, ИК(IR)
приемник и пульт управления

*/

// Подключаем библиотеку для работы с IR приемником

#include
<IRremote.h>

#define
LED_PIN

int IRRECV_PIN = 2;

// Для управления цветом светодиода используем 3 ШИМ
порта

int
bluePin = 9;

int
greenPin = 10;

int
redPin = 11;

// Выставляем, на каком порту весит выход IR приемника

IRrecv
irrecv(IRRECV_PIN);

decode_results
res;

void setup() {

  // Включаем
последовательное соединение с ПК

 
Serial.begin(9600);

  // Включаем IR
приемник

 
irrecv.enableIRIn();

  // НАстраиваем
выходы для нашего RGB светодиода

  pinMode(bluePin, OUTPUT);

  pinMode(greenPin, OUTPUT);

  pinMode(redPin, OUTPUT);

}

void
loop() {

  // Принимаем и декодируем сигнал

  if (irrecv.decode(&res)) {

// Сохраняем полученное значение в
переменной

    int value =
res.value;

    // Выводим на
монитор последовательного порта значения.

   
Serial.println(value);

    // В
зависимости от кода полученного сигнала, выполняем действия.

    // Для
используемого пульта кнопки 1,2,3 — RGB свечение, 9 — выключение

    if (value == 26775){

      setColor(255, 0, 0);

    } else if (value == 12495){

      setColor(0, 255, 0);

    } else if (value == 6375){

      setColor(0, 0, 255);

} else if (value == 31365){

      setColor(0,
0, 0);

    }

    // Даем команду
получать следующее значение

   
irrecv.resume();

  }

}

// Функция включения необходимого цвета на нашем RGB
светодиоде

void
setColor(int red, int green, int blue) {

  analogWrite(redPin, red);

  analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

Как определить цоколевку инфракрасного приёмника

Для примера я взял совершенно неизвестную мне микросхему, которая лежал в коробке с элементами, «минус», был определён, по точке, которая имеется на обратной стороне элемента, «плюс», опытным путём через резистор. Я ни чем, не рисковал, в то, что он изначально рабочий, надежды не было.

Для определения цоколёвки ик-приемника, если он впаян в плату, смотрите на ней, возможно, есть маркировка выводов. Если там ни чего не написано, осмотрите сам элемент, ищите его название, а затем в интернете поищите характеристики и данные, такое ведение дела, весьма грамотное. Следуя инструкции, ик-приемник как проверить самому.

схема из журнала «Юный Техник».

Интересное направление радиоэлектроники, которая дополнила эту электронику новыми преимуществами «невидимого» света (инфракрасный свет). Вот я и предлагаю схему простого (для примера) приемника и передатчика основанного на инфракрасных лучах. Основа: операционный усилитель к140уд7 (у меня тут уд708), излучающий и принамющие ИК-фотодиоды, УНЧ (к548ун1а(б,в — индексами)- на два канала)(правда куда второй канал усилителя «включите» решать вам — схема предатчика рассчитана на один канал, т.е. моно). Питание устройства: вообще рекомендую с приличной стабилизацией токов (а так «дендюшный» адаптер раздражает фоном «сети»). Способ: амплитудно-модулированный сигнал передатчика усиливается приемником в 1000 раз.

Как работает устройство. Предлагаю Вам просмотреть небольшой видеоролик тестирование ИК-пульта «на слух». Можно быстро проверить работоспособность и мощность сигнала по звуку.

Схема ИК-приемника и ИК-передатчика

При сборке конденсаторы С1 и С2 должны быть как можно ближе к усилителю! К выходу можно подключить высокоомные наушники (для низкоомных нужен отдельный УНЧ). Фотодиод ФД7(у меня ФД5.. какой-то: «таблетка» такая с фокусирующей линзой — не помню точно наименование); 0.125Вт резисторы: R1 с R4 задают коэффициент услиния сигнала в 1000 раз. Приемник налаживается просто: фотодиод направляется на источник ИК-излучения, например, лампу 220в-50Гц: нить накала будет фонит с частотой 50Гц или пульт ДУ от телевизора (видео и т.д.).Чувствителность приемника большая: нормально принимает сигналы отражённые от стен.

На передатчике ИК светодиоды АЛ107а: подойдёт любой. R2 2 кОм, С1 1000мкФх25в, С2 200мкФх25В, трансформатор тоже любой. Хотя вполне можно обойтись без трансфорсматора — подать усиленный аудиосигнал на конденсатор С2.

Схема устройств

Недавно по необходимости собрал ИК приемник для проверки ИК пультов (телевизоров и DVD). После доработки схемы — установил моно УНЧ TDA7056. Данный усилитель имеет хорошие харакетеристики усиления около 42 дБ; работает в диапазоне напряжении от 3В до 18В, что позволило ИК приемнику работать даже при напряжении 3В; диапазон усиления TDA от 20 Гц до 20кГц (УД708 проспукает до 800 кГц) вполне достаточно для использования приемника в качетсве аудио сопровождения; имеет защиту от короткого замыкания на всех «ножках»; защиту от «перегрева»; слабый коэффициент собственных помех. В целом мне понравился этот компактный и надежный УНЧ (у нас он стоит 90р.).
Есть к нему с . На рис.1 отображен пример использования усилителя.

Фото TDA7056


Рис.1. Схема усилителя с TDA7056

В итоге получился ИК приемник рис.2, который работает в диапазоне напряжении от 3В до 12В. Рекомендую применять для питания приемника батареи, либо аккумуляторы. При использованиии блока питания необходим стабилизированный источник, иначе будет слышен фон сети 50Гц, который усиливает УД708. Если устройство находится вблизи источника сетевого напряжения или радиоизлучения, то могут возникнуть наводки. Для уменьшения помех в схему необходимо включить конденсатор С5. TDA7056 рассчитан на выходной динамик в 16 Ом, к сожалению у меня такого нет. Пришлось использовать 4-омный динамик на 3 Вт, который был подключен через одноваттный резистор 50 Ом. Слишком низкое сопротивление катушки динамика вызывает избыток мощности и перегревает усилитель. В целом из-за дополнительного резистора УНЧ не греется, но обеспечивает вполне приемлемое усиление.


Рис.2. Схема ИК приемника с УНЧ


Фото ИК приемника

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

1Описание и принцип действия ИК датчика препятствий

Инфракрасное (ИК) или infrared (IR) излучение – это невидимое человеческим глазом электромагнитное излучение в диапазоне длин волн от 0,7 до 2000 мкм. Вокруг нас существуют огромное количество объектов, которые излучают в данном диапазоне. Его иногда называют «тепловое излучение», т.к. все тёплые предметы генерируют ИК излучение.

Длины волн разных типов электромагнитного излучения

Модули на основе ИК излучения используются, в основном, как детекторы препятствий для различного рода электронных устройств, начиная от роботов и заканчивая «умным домом». Они позволяют обнаруживать препятствия на расстоянии от нескольких сантиметров до десятков сантиметров. Расстояние до препятствия при этом определить с помощью ИК-сенсора невозможно.

Если оснастить, для примера, своего робота несколькими такими ИК модулями, можно определять направление приближения препятствия и менять траекторию движения робота в нужном направлении.

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

Модуль с ИК излучателем и ИК приёмником

Когда перед сенсором нет препятствия, на выходе OUT модуля напряжение логической единицы. Когда сенсор детектирует отражённое от препятствия ИК излучение, на выходе модуля напряжение становится равным нулю, и загорается зелёный светодиод модуля.

Помимо инфракрасного свето- и фотодиода важная часть модуля – это компаратор LM393 (скачать техническое описание на LM393 можно в конце статьи). С помощью компаратора сенсор сравнивает интенсивность отражённого излучения с некоторым заданным порогом и устанавливает «1» или «0» на выходе. Потенциометр позволяет задать порог срабатывания ИК датчика (и, соответственно, дистанцию до препятствия).

Hardware Requirements

TODO: Add part numbers of known-good infrared LEDs and receivers. The LED
in this photo is Lumex OED-EL-8L (Digikey 67-1000-ND) and the receiver is
probably Sharp GP1UD281YK0F (now discontinued, Digikey 425-1987-ND).

TODO: Test Vishay TSOP39338 receiver (Digikey 751-1390-5-ND). It’s very
likely to work. Update this photo. Maybe PJRC should sell a known-good
LED & receiver pair?

For transmitting, you must connect the LED to a specific pin. The receiver
output may be connected to any pin.

Board ReceivePin TransmitPin TimerUsed PWM PinsDisabled
Teensy 4.1 / 4.0 Any 8 FlexPWM1.3 None
Teensy 3.6 / 3.5 Any 5 CMT None
Teensy 3.2 / 3.1 Any 5 CMT None
Teensy 3.0 Any 5 CMT None
Teensy LC Any 16 FTM1 17
Teensy 2.0 Any 10 4 12
Teensy 1.0 Any 17 1 15, 18
Teensy++ 2.0 Any 1 2
Teensy++ 1.0 Any 1 2

Часто задаваемые вопросы

Вопрос:

Один из наших читателей хотел узнать, как использовать функцию DECODE, чтобы сравнить две даты (то есть: date1 и date2), где date1 > date2, функция DECODE должна вернуть date2. В противном случае функция DECODE должна вернуть date1.

Ответ:

Для этого, используйте функцию DECODE следующим образом:

DECODE((date1 — date2) — ABS(date1 — date2), 0, date2, date1)

Приведенная ниже формула будет равна 0, если date1 больше date2:

(date1 — date2) — ABS(date1 — date2)

Полезный совет № 1:

Один из наших читателей предложил объединить функцию SIGN с функцией DECODE следующим образом:

Пример с датами выше, может быть модифицированы следующим образом:

DECODE(SIGN(date1-date2), 1, date2, date1)

Сочетание SIGN / DECODE также полезно для цифровых сравнений например продажа бонусов.

DECODE(SIGN(actual-target), -1, ‘Нет бонусов для тебя’, 0,’Просто сделай это’, 1, ‘Поздравляю, вы победитель’)

Полезный совет № 2:

Один из наших читателей предложил использовать функцию LEAST (вместо функции DECODE) следующим образом:

Пример с датами выше, может быть модифицированы следующим образом:

LEAST(date1, date2)

Вопрос:

Я хотел бы знать, если это возможно, чтобы использовать функцию DECODE для диапазонов чисел, то есть 1-10 = ‘категория 1’, 11-20 = ‘категорию 2’, вместо того, чтобы индивидуально декодировать каждый номер.

Ответ:

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

Например:

Oracle PL/SQL

SELECT supplier_id,
DECODE(TRUNC ((supplier_id — 1) / 10), 0, ‘category 1’,
1, ‘category 2’,
2, ‘category 3’,
‘unknown’) result
FROM suppliers;

1
2
3
4
5
6

SELECTsupplier_id,

DECODE(TRUNC((supplier_id-1)/10),0,’category 1′,

1,’category 2′,

2,’category 3′,

‘unknown’)result

FROMsuppliers;

Этот пример, на основе формулы:

TRUNC((supplier_id — 1) / 10)

Формула будет оценивать 0, если supplier_id находится между 1 и 10.
Формула будет оценивать в 1, если supplier_id между 11 и 20.
Формула будет оценивать по 2, если supplier_id между 21 и 30.

Вопрос:

Мне нужно написать запрос DECODE, который будет возвращать следующие:

Если yrs_of_service <1, то вернуть 0,04 Если yrs_of_service> = 1 и <5, то вернуть 0,04 Если yrs_of_service> 5 затем вернуть 0,06

Как я могу это сделать?

Ответ:

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

Например:

Oracle PL/SQL

SELECT emp_name,
DECODE(TRUNC ((yrs_of_service + 3) / 4), 0, 0.04,
1, 0.04,
0.06) as perc_value
FROM employees;

1
2
3
4
5

SELECTemp_name,

DECODE(TRUNC((yrs_of_service+3)/4),0,0.04,

1,0.04,

0.06)asperc_value

FROMemployees;

Вопрос:

Есть ли ограничение на количество аргументов, которые вы можете указать в одном операторе DECODE? Я получаю сообщение об ошибке «ORA-00939: слишком много аргументов для функции».

Ответ:

Да, максимальное количество компонентов, которые вы можете иметь в функции DECODE 255. Это включая expression, search и result аргументы.

How to Connect an IR Receiver to the Arduino

There are several different types of IR receivers, some are stand-alone, and some are mounted on a breakout board. Check the datasheet for your particular IR receiver since the pins might be arranged differently than the HX1838 IR receiver and remote set I am using here. However, all IR receivers will have three pins: signal, ground, and Vcc.

Lets get started with the hardware connections. The pin layout on most breakout boards looks like this:

The pinout of most stand-alone diodes is like this:

To connect a breakout board mounted IR receiver, hook it up to the Arduino like this:

To connect a stand-alone receiver diode, wire it like this:

9.4 Передача ИК сигналов между двумя Arduino

9.4.3 Программируем ИК-передатчик

void setup()
{
  pinMode(4, OUTPUT);
}
 
void loop()
{
  digitalWrite(4, HIGH);
  delay(1000); // Wait for 1000 millisecond(s)
  digitalWrite(4, LOW);
  delay(1000); // Wait for 1000 millisecond(s)
}

9.4.4 Программируем ИК-приемник

#include "IRremote.h" 	//подключаем библиотеку
IRrecv irrecv(2);    	// указываем вывод, к которому подключен приемник
decode_results results; //создаем переменную, хранящую результат
int led = 6;         	//объявляем светодиод
 
void setup() {
  pinMode(led, OUTPUT);	//настраиваем пин светодиода как выход
  Serial.begin(9600); 	//настраиваем работу с монитором порта
  irrecv.enableIRIn();	//запускаем прием ИК сигнала
}
 
void loop() {
  if ( irrecv.decode( &results )) {        //если данные пришли
    digitalWrite(led, HIGH);
  else {
    digitalWrite(led, LOW);
  }    
  irrecv.resume();        	//принимаем следующую команду
}

Объяснение программы для Arduino

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

После этого необходимо подключить заголовочный файл библиотеки в программу.

Arduino

#include <IRremote.h>

1 #include <IRremote.h>

Затем в программе необходимо указать контакт платы Arduino, к которому подключен контакт данных (Data pin) инфракрасного приемника. В нашем случае он подключен к контакту D2 платы Arduino.

Arduino

int IRPIN = 2;

1 intIRPIN=2;

После этого необходимо создать объект для работы с инфракрасным приемником.

Arduino

IRrecv irrecv(IRPIN);

1 IRrecvirrecv(IRPIN);

Далее объявим объект класса decode_results – он будет использоваться инфракрасным приемником для передачи декодированной информации.

Arduino

decode_results result;

1 decode_resultsresult;

Внутри функции setup() инициализируем последовательную связь и инфракрасный приемник при помощи вызова функции irrecv.enableIRIn().

Arduino

void setup()
{
Serial.begin(9600);
Serial.println(«Enabling IRin»);
irrecv.enableIRIn();
Serial.println(«Enabled IRin»);
Initialize_streamer();
}

1
2
3
4
5
6
7
8

voidsetup()

{

Serial.begin(9600);

Serial.println(«Enabling IRin»);

irrecv.enableIRIn();

Serial.println(«Enabled IRin»);

Initialize_streamer();

}

В функции loop() мы с помощью функции irrecv.decode будем непрерывно проверять наличие нового сигнала и если новый сигнал был принят, то его код мы будем сохранять в переменной result.value.

Arduino

void loop()
{
if (irrecv.decode(&result))
{
Serial.print(«Value: «);
Serial.println(result.value, HEX);
Write_streamer();
irrecv.resume();
}
delay(500);
}

1
2
3
4
5
6
7
8
9
10
11

voidloop()

{

if(irrecv.decode(&result))

{

Serial.print(«Value: «);

Serial.println(result.value,HEX);

Write_streamer();

irrecv.resume();

}

delay(500);

}

Для передачи данных из Arduino в лист Excel мы будем использовать плагин PLX-DAQ (ранее мы его уже использовали в проекте логгера данных температуры и влажности на основе Arduino). С помощью функции Write_streamer() мы будем передавать данные последовательно в специальном формате (фактически, это формат файлов .csv, которые можно считать с помощью Excel), которые нам будут затем необходимы для вывода информации в лист Excel.

Arduino

void Write_streamer()
{
Serial.print(«DATA»); //всегда передавайте «DATA» чтобы показать что следующая информация будет представлять собой данные
Serial.print(«,»); // переходим к следующему столбцу используя символ «,»
Serial.print(result.value, HEX); //сохраняем данные в Excel
Serial.print(«,»); // переходим к следующему столбцу используя символ «,»
Serial.print(button); // сохраняем данные в Excel
Serial.print(«,»); // переходим к следующему столбцу используя символ «,»
Serial.println(); //конец строки, переходим к следующей строке
}

1
2
3
4
5
6
7
8
9
10

voidWrite_streamer()

{

Serial.print(«DATA»);//всегда передавайте «DATA» чтобы показать что следующая информация будет представлять собой данные

Serial.print(«,»);// переходим к следующему столбцу используя символ «,»

Serial.print(result.value,HEX);//сохраняем данные в Excel

Serial.print(«,»);// переходим к следующему столбцу используя символ «,»

Serial.print(button);// сохраняем данные в Excel

Serial.print(«,»);// переходим к следующему столбцу используя символ «,»

Serial.println();//конец строки, переходим к следующей строке

}

После того как аппаратная и программная части проекта будут готовы, можно будет загружать программу в плату Arduino. После загрузки кода в плату направьте пульт ДУ на спроектированный нами декодер и начинайте нажимать на нем кнопки. Шестнадцатеричный код (hex code) каждой кнопки будет печататься в окне монитора последовательной связи (serial monitor).

This is a short comparison and may not be complete or correct

I created this comparison matrix for myself in order to choose a small IR lib for my project and to have a quick overview, when to choose which library.
It is dated from 03.02.2021. If you have complains about the data or request for extensions, please send a PM or open a discussion.

Subject IRMP IRLremote IRLib2mostly unmaintained IRremote Minimal NEC
Number of protocols 50 Nec + Panasonic + Hash * 12 + Hash * 17 + Hash * NEC
3.Party libs needed % PinChangeInterrupt if not pin 2 or 3 % % %
Timing method receive Timer2 or interrupt for pin 2 or 3 Interrupt Timer2 or interrupt for pin 2 or 3 Timer2 or interrupt for NEC Interrupt
Timing method send PWM and timing with Timer2 interrupts Timer2 interrupts Timer2 and blocking wait PWM with Timer2 and blocking wait with delayMicroseconds() %
Send pins All All All ? Timer dependent %
Decode method OnTheFly OnTheFly RAM RAM OnTheFly
Encode method OnTheFly OnTheFly OnTheFly OnTheFly or RAM %
Callback suppport x % % % x
Repeat handling Receive + Send (partially) % ? Receive + Send x
LED feedback x % x x x
FLASH usage (simple NEC example with 5 prints) 1820(4300 for 15 main / 8000 for all 40 protocols)(+200 for callback)(+80 for interrupt at pin 2+3) 1270(1400 for pin 2+3) 4830 1770 900
RAM usage 52(73 / 100 for 15 (main) / 40 protocols) 62 334 227 19
Supported platforms avr, megaAVR, attiny, Digispark (Pro), esp8266, ESP32, STM32, SAMD 21, Apollo3(plus arm and pic for non Arduino IDE) avr, esp8266 avr, SAMD 21, SAMD 51 avr, attiny, esp8266, esp32, SAM, SAMD All platforms with attachInterrupt()
Last library update 2/2021 4/2018 9/2019 2/2021 2/2021
Remarks Decodes 40 protocols concurrently.39 Protocols to send.Work in progress. Only one protocol at a time. Consists of 5 libraries. Project containing bugs — 45 issues, no reaction for at least one year. Decoding and sending are easy to extend.Supports Pronto codes. Requires no timer.

* The Hash protocol gives you a hash as code, which may be sufficient to distinguish your keys on the remote, but may not work with some protocols like Mitsubishi

Contributing

If you want to contribute to this project:

  • Report bugs and errors
  • Ask for enhancements
  • Create issues and pull requests
  • Tell other people about this library
  • Contribute new protocols

Check here for some guidelines.