Друг принёс мне однажды три пульта в пакете: от телевизора, от приставки и от люстры — купил на барахолке набор, а продавец честно сказал, что работает что-то одно. Тыкать в чужой телевизор было нельзя, в люстру — далеко, и я собрал стенд: приёмник на макетке, скетч-диагност, пять минут ожидания. Вердикт вышел таким: пульт от приставки жив, пульт от люстры работал только с полуметра — подсевшая батарейка, у телевизионного молчала треть кнопок. Десять минут на всё, включая перепайку питания пульта.
Стенд — это прибор-диагност из трёх инструментов. Первый: печать паспорта каждого кадра — протокол, адрес, команда, число бит; поля структуры decodedIRData мы разбирали в уроке про decode, здесь они превращаются в вердикт. Второй: счётчик кадров за минуту — пульс пульта, по которому видно жизнь без всяких таблиц. Третий: таблица срабатываний по каждой кнопке, где молчащие кнопки видны как нули.
Бонус стенда — ранняя диагностика питания. Подсевшая батарейка выдает себя по кадрам раньше, чем кнопки перестают работать: дальность уползает, интервалы плывут. Если вы прошли урок про несущую, то помните: диод в импульсе требует сотни миллиампер, и именно питание режет дальность первой — стенд делает это число видимым.
Почему минуты, а не секунды: короткое окно в десять секунд ловит и паузы между вашими же нажатиями, и ход работы за клавиатурой — счётчик скачет в разы без всякой причины. Минута усредняет ритм: удержание даёт стабильные полсотни кадров, сценарий из двадцати нажатий — стабильные двадцать, и любые отклонения уже сигнал, а не шум. Заодно минутное окно не требует от вас спешки: нажали — отошли — записали.
Паспорт кадра и минутный пульс
Сердце стенда — печать паспорта одной строкой: IrReceiver.printIRResultShort(&Serial) выдаёт протокол, адрес, команду и число бит. По паспорту читаются три вещи сразу: чужой протокол (климатическая техника и экзоты печатают UNKNOWN — про сырые кадры мы говорили в уроке про RC5 и RAW), адрес пульта — паспорт отправителя для фильтра чужих кнопок, и команда, с которой кнопка попадает в вашу таблицу кодов.
Второй инструмент — счётчики за минуту. Полные кадры считаю отдельно, повторы — отдельно: у живого пульта при удержании кнопки повторы идут каждые 108-110 миллисекунд, около девяти в секунду, около 540 в минуту. Двадцать коротких нажатий — двадцать полных кадров в минуту. Ноль кадров при нажимаемых кнопках — пульт мёртв или батарейки на нуле; экспресс-проверка камерой телефона из урока про несущую займёт десять секунд и отсечёт половину версий до стенда.
Разделение полного кадра и повтора — отдельная диагностика. Удержание даёт сотни повторов и один-два полных кадра; если в минуту видны только повторы без единого полного кадра — у пульта проблемы с мощностью: пачка доезжает, а длинная преамбула уже нет. Такое я встречал на пульте с батарейками, смешанными из старых и новых: пик тока просел, и стенд показал это раньше мультиметра.
#include <IRremote.hpp> const int IR_PIN = 2;unsigned long minStart = 0;int kadrMin = 0;int repMin = 0; void setup() { Serial.begin(9600); IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK); Serial.println("Stend: zhmi knopki, derzhite dlya repeat"); minStart = millis();} void loop() { if (IrReceiver.decode()) { kadrMin = kadrMin + 1; if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT) { repMin = repMin + 1; } else { IrReceiver.printIRResultShort(&Serial); } IrReceiver.resume(); } if (millis() - minStart >= 60000UL) { Serial.print("kadr_min="); Serial.println(kadrMin); Serial.print("repeat_min="); Serial.println(repMin); kadrMin = 0; repMin = 0; minStart = millis(); }}Третий инструмент — таблица кнопок. Скетч держит счётчики по номерам команд и по вашей команде печатает отчёт: какая кнопка сколько раз сработала. Пройдите по всем кнопкам пульта по одному разу, распечатайте отчёт — и нули покажут мёртвые кнопки раньше, чем вы начнёте гадать, почему люстра включается через раз. У барахолочных пультов типовая причина — стёртая токопроводящая подкладка резинки: кнопка нажимается, а кадра нет. Номера команд сверяйте с таблицей из урока про приём кодов — так заодно проверяется, что пульт шлёт то, что написано на кнопках.
Второй проход таблицы ловит коварную поломку — кнопку, которая шлёт чужой номер. Такой пульт выглядит живым: кадры идут, а поведение странное — камера включается вместо звука. В таблице это видно мгновенно: под клавишей громкости стоит номер камеры. Заодно отчёт помогает при разборе пультов без подписей: жмёте кнопку — смотрите строку в паспорте — подписываете. Мой ящик с тремя безымянными пультами после такого вечера получил наклейки с номерами команд на каждой кнопке.
Ту же таблицу я печатаю после каждой замены батареек и вклеиваю в крышку отсека питания. Через год никто не помнит, какой номер у кнопки TIMER, а бумажка помнит. Заодно отчёт работает приёмкой самодельного передатчика: словарь команд из урока про связь двух плат ложится в таблицу кнопок один в один.
Пульт слабеет: три симптома подсевшей батарейки
Симптом первый — дальность. Рабочая дальность пульта меряется по методике меток из урока про геометрию ИК: разметьте 0.5, 1, 2 и 4 метра, на каждой сделайте по десять коротких нажатий и смотрите счётчик. Последняя метка с десятью из десяти — рабочая дальность. У пульта от вентилятора метка уползла до полуметра; свежая батарейка вернула четыре метра за минуту. Кнопки при этом продолжали работать — вплотную всё выглядело исправно, в этом и ловушка.
Симптом второй — UNKNOWN в паспорте. Интервалы кадра плывут от слабого питания, шаблон протокола перестаёт сходиться, и декодер честно печатает UNKNOWN на каждое второе-третье нажатие. Дамп длительностей покажет честные, но кривые интервалы — это не экзотический протокол, а батарейка на издыхании. Симптом третий — падение минутного счётчика при обычном сценарии: сотни кадров в минуту превращаются в единицы, хотя кнопки нажимаются те же. Мнение с границей: батарейки меняю пачкой, а не по одной — смешанные элементы дают тот же провал по импульсному току, что и полностью севшие.
Отдельный случай — расхождение полных кадров и повторов. У исправного пульта при удержании они идут в паре: один полный кадр и девять повторов в секунду, и соотношение в счётчиках стабильное. Когда повторов в избытке, а полных кадров мало, мощность падает ровно там, где кадр длиннее: короткую пачку повтора диод ещё вывозит, а полнокадровую преамбулу с тридцатью двумя битами — уже нет. Этот симптом стенд показывает парой чисел kadr_min и repeat_min без всякого осциллографа, и по динамике этих чисел видно, как батарейка стареет неделями.
| Симптом | Что видит стенд | Диагноз |
|---|---|---|
| Ни одного кадра за минуту | счётчики по нулям при нажимаемых кнопках | батарейки пульта; проверка камерой за 10 секунд |
| Кадры только с полуметра | kadr_min мал, паспорта при близости исправны | пик тока просел: питание пульта, не приёмник |
| UNKNOWN на каждом втором кадре | паспорт печатает UNKNOWN, дамп показывает кривые интервалы | интервалы плывут от слабого питания или чужой протокол |
| Нули в таблице кнопок | кнопка нажимается, кадра нет | стёртая подкладка кнопки — механика, не электроника |
- Стенд — три инструмента: паспорт кадра через printIRResultShort, счётчик кадров за минуту, таблица срабатываний по кнопкам
- Пульс живого пульта: удержание — около 540 повторов в минуту (девять в секунду), двадцать коротких нажатий — двадцать полных кадров
- Полные кадры и повторы считайте раздельно: повторы без полного кадра — проблема мощности передатчика, не приёмника
- Слабеющая батарейка: дальность уползает к полуметру, паспорта печатают UNKNOWN, минутный счёт падает в разы — питание меняйте пачкой
- Таблица кнопок с нулями показывает мёртвые подкладки; распечатку со словарём команд вклейте в крышку пульта
- 1. Сколько кадров в минуту шлёт живой пульт при удержании кнопки?
- 2. Кнопки работают вплотную, но дальность упала до полуметра. Кто виноват?
- 3. Стенд печатает UNKNOWN на каждое второе нажатие. Типовая причина?
- 4. Что показывает таблица кнопок стенда?
- 5. Удержание даёт сотни повторов, а полных кадров нет вообще. Вердикт?
Стенд приживается в хозяйстве на удивление быстро: проверка пультов с барахолки перед покупкой, разбор жалоб на глючные кнопки, приёмка самодельных передатчиков по словарю из урока про связь двух плат. На этом тройка замыкается: вы знаете, как далеко летит кадр и почему не летит через стену, как договориться между двумя платами на языке NEC и как за десять минут вынести пульту вердикт. Дальше каналу можно наращивать словарь и устройства — фундамент под этим уже стоит.
И последнее: вердикту стенда я доверяю больше, чем своим пальцам. Глаз за вечер привыкает к отказам и начинает нажимать сильнее, ближе, по два раза — и сам не замечает, как рисует пульту запас прочности. Счётчик не умеет жалеть: ноль кадров — значит ноль, и спорить с ним бесполезно. Когда пакет с тремя пультами вернулся к другу, я приложил к нему распечатку со счётчиками и таблицей кнопок — и спорить о качестве покупки было больше не с чем.
Частые вопросы по теме урока
- Сколько кадров в минуту шлёт живой пульт при удержании кнопки?
- Кадр-повтор NEC идёт каждые 108-110 мс — около девяти в секунду, 540 в минуту. Это эталон живого пульса, на нём стоит счётчик стенда. Около 540 — девять повторов в секунду
- Кнопки работают вплотную, но дальность упала до полуметра. Кто виноват?
- Диод в пачке требует сотен миллиампер; подсевший элемент отдаёт пик неохотно — пачка доезжает только вблизи. Свежая батарейка возвращает дальность за минуту. Батарейка пульта: импульсный пик тока просел
- Стенд печатает UNKNOWN на каждое второе нажатие. Типовая причина?
- Слабое питание искажает длительности пачек и пауз, шаблон протокола перестаёт сходиться. Дамп интервалов покажет честные, но кривые числа — меняйте питание. Интервалы плывут из-за подсевшего питания пульта
- Что показывает таблица кнопок стенда?
- Счётчики по номерам команд собираются в отчёт: нулевые строки — кандидаты на дефект, обычно стёртую подкладку резиновой клавиши. Какая кнопка сколько раз сработала — молчащие видны как нули
- Удержание даёт сотни повторов, а полных кадров нет вообще. Вердикт?
- Повтор — короткий кадр без длинной преамбулы с данными. Если доезжают только он, мощности хватает на пачку, но не на полный кадр — типовой симптом просевшего питания. Пачки доезжают, а полные кадры нет — смотрите мощность передатчика и питание