ИК-приёмник VS1838B и Arduino: схема подключения, библиотека IRremote и скетч
VS1838B — та самая чёрная капелька на три ноги, которая лежит в каждом стартовом наборе. Внутри фотодиод, усилитель и демодулятор: приёмник ловит инфракрасный свет, отсеивает всё, что не мигает с частотой тридцать восемь килогерц, и выдаёт на выход готовую последовательность импульсов.
Подключается тремя проводами, но с одной особенностью, на которой спотыкаются почти все: выводы расположены не в привычном порядке. Слева направо, если смотреть на выпуклую сторону, идут выход, земля и питание — то есть сигнал крайний, а не средний.
Схема подключения
Распиновка
| Провод | Куда и зачем |
|---|---|
| OUT | Выход. Крайний вывод, если смотреть на выпуклую сторону — слева. Любой цифровой пин. |
| GND | Земля. Средний вывод. |
| VCC | Питание 3,3 или 5 В. Второй крайний вывод. |
Характеристики
- Частота несущей
- 38 кГц
- Дальность
- до 8 м по прямой
- Угол приёма
- около 45° в каждую сторону
- Питание
- 2,7–5,5 В
- Ток потребления
- около 1,5 мА
- Уровень в покое
- высокий, приём тянет линию вниз
Библиотека
IRremote— Ставится через менеджер библиотек. Сама распознаёт протокол пульта — NEC, Sony, RC5 и другие, — поэтому заранее знать, какой у вас пульт, не нужно.
Готовый скетч
#include <IRremote.hpp>
const int PIN_IR = 2;
void setup() {
Serial.begin(9600);
IrReceiver.begin(PIN_IR, ENABLE_LED_FEEDBACK);
Serial.println("Наведите пульт и нажмите кнопку");
}
void loop() {
if (IrReceiver.decode()) {
unsigned long code = IrReceiver.decodedIRData.decodedRawData;
// повтор при удержании кнопки приходит как нулевой код
if (code != 0) {
Serial.print("Код кнопки: 0x");
Serial.println(code, HEX);
}
IrReceiver.resume(); // обязательно: готовим приёмник к следующей команде
}
}Скетч собирается arduino-cli под Arduino UNO
Вызов resume нельзя пропускать: без него приёмник останется с уже разобранной командой и следующее нажатие не увидит. Скетч сначала используют как определитель кодов, а потом подставляют полученные числа в свою программу.
Частые ошибки
Приёмник греется и не отвечает
Перепутаны питание и земля. У VS1838B земля посередине, а питание крайнее — порядок не такой, как у большинства трёхногих деталей. Пара минут в неправильном включении обычно убивает приёмник.
Команды приходят через раз
Рядом мигает энергосберегающая или дешёвая светодиодная лампа. Они дают инфракрасную засветку на близкой частоте. Отверните приёмник от лампы или закройте боковую засветку трубкой.
Библиотека не компилируется после обновления
В четвёртой версии IRremote сменился интерфейс: вместо IRrecv.h подключают IRremote.hpp, а объект называется IrReceiver. Старые примеры из интернета написаны под вторую версию.
Удержание кнопки даёт странный код
Это не ошибка: при удержании пульт шлёт специальную посылку-повтор, у которой нет своего кода. Её отсеивают проверкой на ноль, как в скетче.
Дальность метр вместо восьми
Скорее всего, у пульта другая несущая частота. Приёмники бывают на 36, 38, 40 и 56 килогерц; при несовпадении связь остаётся, но дальность падает в разы.
Что понадобится
- ИК-приёмник VS1838B или модуль KY-022
- Любой пульт от бытовой техники
- Arduino UNO
- Провода «папа-мама»