Как работает ввод с ИК-приемника на плату Arduino UNO?

У меня есть очень простая схема с модулем ИК-приемника Elegoo, подключенным к Arduino UNO. Три провода подключены правильно, а провод данных (Y) подключен к контакту 8. Код работает нормально, так как каждый раз, когда я нажимаю кнопку на пульте дистанционного управления, Serial Monitor отображает соответствующее описание кнопки.

Однако я не понимаю, как контакт 8 Arduino знает, какая ИК-кнопка была нажата. Насколько я понимаю, контакт 8 может считывать либо 5 В, либо 0 В, но чтобы узнать, какая из 20+ кнопок дистанционного управления была нажата, ему нужно будет прочитать ШИМ. Но рядом с контактом 8 нет значка ШИМ, и все же он работает нормально. Разве значок ШИМ не относится только к выходу контакта? Или есть другой способ, о котором я не смог найти информацию?

Спасибо!

, 👍1

Обсуждение

Что вы на самом деле подразумеваете под «значком» ШИМ?, @Sim Son

@yannism означает, что контакт 8 не является контактом ШИМ, посмотрите на расположение контактов Arduino UNO., @MatsK

Последовательный RX тоже работает на одном контакте., @Juraj

Значок ШИМ говорит о том, что вывод можно использовать как выход ШИМ. Пульт отправляет серию импульсов (например, [здесь](https://techdocs.altium.com/display/FPGA/NEC+Infrared+Transmission+Protocol) есть краткий анализ протокола NEC — имейте в виду, что там существует гораздо больше). Вам нужно будет декодировать длину импульсов, чтобы получить код, представляющий ключ. В помощь в этой задаче была сделана библиотека [IRRemote](http://z3t0.github.io/Arduino-IRremote/) (я использовал ее один раз для управления роботом с помощью пульта дистанционного управления), @frarugi87


2 ответа


1

Пульт дистанционного управления излучает закодированные ИК-импульсы (каждая кнопка имеет свой код), которые датчик преобразует в электрические импульсы (ссылка 6. здесь: http://eeshop.unl.edu/pdf/VS1838-Infrared-Receiver-datasheet.pdf). На Arduino эти импульсы декодируются с помощью соответствующей библиотеки. Это означает, что контакт 8 считывает не аналоговый или ШИМ-сигнал, а логику ТТЛ при напряжении 5 В.

,

Спасибо. Буду читать подробнее о TTL-логике., @yannism


4

Здесь вы путаете разные технологии.

  1. ШИМ – это только выход, а не вход. Таким образом, каждый контакт, отмеченный символом PWM, может ВЫВОДИТЬ сигнал PWM. Чтение сигнала — это совершенно другая задача, требующая использования другого оборудования.

  2. ИК-приемник не выводит ШИМ-сигнал (что означает широтно-импульсную модуляцию) на Arduino. Он выводит демодулированный ИК-сигнал.

Итак, вот что происходит: Пульт дистанционного управления представляет собой код, состоящий из разных периодов включения и выключения света (импульсы разной длины, которые кодируют данные из двоичного формата). Поскольку вы хотите отделить сигнал пульта от любого другого ИК-сигнала, который может бродить по воздуху, пульт также модулирует импульсы со специальной частотой (часто это 38 кГц, но может быть и другая частота). Это означает, что каждый импульс будет разбит на более короткие импульсы с заданной частотой. Это означает что-то вроде: "свет включается и выключается с частотой 38 кГц на время x" --> "свет выключается" --> "свет включается и выключается с частотой 38 кГц на время y" --> ...

Модуль приемника улавливает поступающий ИК-свет и электронным образом отбрасывает все сигналы, не имеющие специальной частоты, и выполняет демодуляцию. Выходной сигнал больше не имеет частоты 38 кГц. Просто импульсы разной длины, которые кодируют данные, т.е.

Затем Arduino считывает длину импульсов (состоящих только из последовательностей 0 В и 5 В) и декодирует их в число. Это число представляет собой нажатую кнопку.

Подходящая библиотека для Arduino может считывать различные протоколы данных, используемые в обычных ИК-пультах.

,

Потрясающий! В общем, мое понимание было правильным в том смысле, что входной контакт Arduino считывает импульсы, но я думал, что это просто еще один экземпляр ШИМ, а это не так. Спасибо!, @yannism