В наборе начинающего ардуинщика почти всегда лежит чёрная деталька с выпуклым глазом и надписью VS1838B — или вообще без надписи. Я в своё время листал туториалы, а в них TSOP4838, TSOP1838, IRM-3638, — и каждый раз замирал: подойдёт мой или для него нужен другой скетч? Подойдёт. Все эти маркировки — разные фабрики, делающие одну и ту же вещь: приёмник несущей 38 килогерц с теми же тремя ногами. Поэтому первый шаг — не скетч, а деталь: код один на все маркировки, а ноги и питание у каждой партии свои.
Другое дело, что ноги у детали коварные: две из трёх путают на раз, и перепутанный приёмник выглядит не как ошибка, а как тишина. Никакого дыма, никакой ругани компилятора — просто кнопки не работают, и полчаса уходит на подозрения в адрес скетча, хотя виноват пин. Сама деталь при этом жива: ток покоя меньше миллиампера, и сгорать от перепутанных ног она почти не умеет — просто молчит. Схема собирается на обычной макетке из базового урока про breadboard — здесь больше ничего и не нужно.
Разберём деталь по ногам: как читать распиновку и зачем выходу подтяжка, почему даташит просит резистор и конденсатор в питании и кто глушит приёмник в комнате с лентами и лампами. Код возьмём уже знакомый — тройку begin-decode-resume из читалки кодов, а язык, которым пульт шепчет, мы разобрали в уроке про несущую.
Три ноги: OUT, GND и VCC
Положите приёмник выпуклой линзой к себе и ножками вниз. Слева направо будет OUT, GND и VCC: выход сигнала, земля, плюс питания. Рабочее напряжение VS1838B — от 2.7 до 5.5 вольт, так что пин 5V на Uno подходит без оговорок. Выход при этом сам напряжение не толкает: внутри стоит транзистор с открытым коллектором, который умеет только прижимать линию к земле. Отсюда и форма сигнала: во время вспышки несущей линия прижата к нулю, а между пачками подтяжка держит единицу — приёмник отдаёт перевёрнутую копию того, что светит пульт. Высокий уровень делает подтяжка — проще всего INPUT_PULLUP, по той же причине, что у кнопки на digitalRead: деталь молчит о высоком уровне, его должен кто-то держать. Сигнальную ногу я сажаю на пин 2 — пин с аппаратным прерыванием: приём в IRremote работает на любом пине, но запасное прерывание в проектах пригодится чаще, чем кажется.
Ножки у голой детали длиной около двух с половиной миллиметров и без подписей, поэтому порядок сверяйте не с памятью, а с даташитом конкретной модели: у клонов маркировка плавает. Мой первый экземпляр — безымянный клон — имел порядок как у TSOP4838, но я встречал партии, где OUT и GND менялись местами. Если новая деталь молчит, первое действие — прозвонить ноги и сравнить с даташитом, и только потом трогать код. Прозвонка занимает две минуты мультиметром в режиме звуковой проводимости — дешевле, чем вечер подозрений.
Модуль KY-022 — та же деталь на платке: три подписанных пина и резистор подтяжки, распаянный заранее. Дороже втрое, зато путать нечего. На макетке оба варианта живут одинаково: три перемычки из урока про провода — сигнал на пин, земля в минусовую рейку, питание в плюсовую.
#include <IRremote.hpp> const int IR_PIN = 2;const int LED_PIN = 13; void setup() { Serial.begin(9600); IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK); pinMode(LED_PIN, OUTPUT); Serial.println("Test priemnika: zhmi knopki");} void loop() { if (IrReceiver.decode()) { int cmd = IrReceiver.decodedIRData.command; digitalWrite(LED_PIN, HIGH); Serial.print("cmd="); Serial.println(cmd); delay(60); digitalWrite(LED_PIN, LOW); IrReceiver.resume(); }}Такой тестер — мой обязательный шаг перед любой схемой с приёмником. Вспышка на пине 13 и число в мониторе отвечают на главный вопрос «жива ли деталь и те ли ноги» за десять секунд. Если вспышки нет — проверяйте питание и распиновку, если вспышка есть, а числа дикие — виноват пульт или помехи, но не скетч. Любую новую деталь я гоняю именно так: тестер отдельно, схема отдельно, и тишина одного модуля не тонет в шуме остальных.
Даташит VS1838B рисует в цепи питания резистор на 100 Ом и конденсатор от 1 до 4.7 микрофарад между VCC и GND. На аккуратной макетке с короткими проводами схема работает и без них — я ставлю развязку, когда приёмник уезжает от платы дальше десяти сантиметров или делит питание с нагрузками. Условие простое: если по той же рейке ходит ШИМ, мотор или реле, резистор и конденсатор обязательны. Делить питание с нагрузками — отдельная боль, про которую у меня есть целый урок про общий провод: там же и приём первичный — минус один на всех, а плюс развязывать можно.
Заодно вспомните про вторую половину пары — пульт: дальность зависит и от его батарейки. Диод в импульсе требует сотни миллиампер, подсевший элемент пик не выдаёт, и пульт, живой с полуметра, отказывается с пяти. Если приёмника уже объявили виноватым, а он молчит не первый час, проверьте пульт камерой телефона с максимального расстояния: точка на экране слабая или пропадает — меняйте питание пульта, а не приёмник.
Дальность: паспортные 8–18 метров у Vishay и честные 5–8 метров у типовой детали из набора при свежих батарейках и прямой видимости. Замер для себя делайте честно: свежие батарейки, прямая видимость, комната без прямой засветки на приёмник. Через стену ИК не работает в принципе — свет отражается только от стен той же комнаты. Приёмник и пульт не обязаны смотреть точно друг на друга: сигнал хорошо отбивается от белого потолка, чем вы пользуетесь каждый день с пультом телевизора.
Помехи: кто глушит приёмник
Мой самый длинный вечер с VS1838B случился на ночнике с ШИМ-лентой. Приёмник сидел на одной плюсовой рейке с затвором полевика, управляющего лентой. Схема работала: команды читались, яркость крутилась. Но раз в несколько минут лента мигала сама, а в мониторе мелькала команда 67 без всякого пульта. Фантомы приходили пачками, будто кто-то прятался за диваном с дубликатом пульта.
Диагноз оказался двойным. Во-первых, наводки по питанию: ШИМ-нагрузка дёргала рейку, и приёмник превращал эти дёрганья в ложные пачки. Во-вторых, геометрия: лента светила в инфракрасной части спектра почти в упор к линзе. Лечилось комбинацией: приёмник получил собственное питание через резистор с конденсатором, отодвинулся от ленты на пятнадцать сантиметров и развернулся линзой в сторону комнаты. Фантомы исчезли полностью, и с тех пор я не отклоняю эту раскладку ни при каком «и так работает».
Отсюда моё правило: приёмник — на краю макетки, линзой от платы; питание — отдельным проводом от клемм, а не от рейки с нагрузками. Проверка занимает минуту: жмите кнопки при включённой нагрузке и при выключенной. Если число фантомных кадров меняется — проблема в питании, а не в пульте. И не экономьте на конденсаторе: электролит на 4.7 мкФ рядом с приёмником стоит копейки, а вечер отладки — дороже. Трёх основных кандидатов на роль приёмника сведём в таблицу — под вашу задачу подойдёт один из них.
Отдельная песня — отражения и ориентация. ИК-сигнал ведёт себя как свет от фонарика: до приёмника он долетает и напрямую, и через отражение от белой стены или потолка, поэтому пульт работает, даже когда смотрит мимо приёмника. Но каждый отскок режет силу сигнала: прямое попадание даёт паспортные восемь метров, отражение от потолка — вдвое-втрое меньше. Если в проекте приёмник прячется за декоративной панелью, оставьте ему отверстие с прямым лучом: два слоя пластика с текстурой съедают половину дальности.
| Деталь | Ноги (линзой к вам) | Питание | Несущая | Когда брать |
|---|---|---|---|---|
| VS1838B (голая деталь) | OUT, GND, VCC | 2.7–5.5 В | 38 кГц | дешёвая основа: лежит почти в каждом наборе, дальность 5–8 м |
| TSOP4838 (Vishay) | OUT, GND, VCC | 2.5–5.5 В | 38 кГц | оригинал с паспортной дальностью до 18 м и предсказуемыми параметрами |
| KY-022 (модуль) | подписаны: S, минус, середина — VCC | 5 В | 38 кГц | быстрая сборка: подтяжка распаяна, перепутать пины сложнее |
- VS1838B, TSOP4838 и модуль KY-022 — одно и то же с точностью до фабрики: 38 кГц, три ноги, питание 2.7–5.5 В
- Распиновка при линзе к вам: OUT, GND, VCC — но сверяйте с даташитом, у клонов порядок плавает
- Выход с открытым коллектором: высокий уровень делает подтяжка INPUT_PULLUP или резистор модуля
- Резистор 100 Ом и конденсатор 1–4.7 мкФ в питании — когда приёмник делит рейку с нагрузками или уехал дальше 10 см
- Фантомные команды без пульта — ищите наводки по питанию и ИК-соседей рядом с линзой
- Проверка без пайки: живой пульт даёт пульсирующую точку в камере телефона
- 1. Линза приёмника смотрит на вас, ножки вниз. Что слева?
- 2. Зачем выходу приёмника подтяжка?
- 3. Приёмник делит плюсовую рейку с ШИМ-лентой и ловит фантомные команды. Первое действие?
- 4. Чем модуль KY-022 отличается от голой VS1838B?
- 5. Схема собрана без ошибок, но пульт читается только с вытянутой руки. Виновник?
Деталь выбрана, ноги найдены, фантомы выловлены — приёмник готов встать в постоянный проект. Осталось положить под него библиотеку, которая превращает пачки света в числа: в следующем уроке ставим IRremote четвёртой версии, разбираем новый API и переводим старые скетчи по таблице. Держите приёмник подальше от окна и ламп: солнце — единственный соперник, против которого у AGC нет приёма.
Частые вопросы по теме урока
- Линза приёмника смотрит на вас, ножки вниз. Что слева?
- Стандартный порядок у TSOP-корпуса — OUT, GND, VCC слева направо; у клонов его всё равно сверяют с даташитом. OUT
- Зачем выходу приёмника подтяжка?
- Деталь прижимает линию к земле в момент вспышки; высокий уровень между вспышками держит подтяжка INPUT_PULLUP или резистор модуля. Открытый коллектор умеет только прижимать линию к нулю
- Приёмник делит плюсовую рейку с ШИМ-лентой и ловит фантомные команды. Первое действие?
- Наводки по питанию лечатся развязкой: резистор 100 Ом и конденсатор 1–4.7 мкФ, плюс физическое расстояние от ленты и разворот линзой в сторону комнаты. Дать приёмнику отдельное питание через резистор и конденсатор
- Чем модуль KY-022 отличается от голой VS1838B?
- Внутри модуля та же деталь на 38 кГц; удобство — в подписях и готовой подтяжке, поэтому путать ноги не приходится. Распаянной подтяжкой и подписанными пинами
- Схема собрана без ошибок, но пульт читается только с вытянутой руки. Виновник?
- Автоматика усиления при сильной засветке задирает порог: схема работает, но дальность падает до полуметра. Отведите приёмник от окна и ламп. Яркая фоновая засветка подняла порог AGC