
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:04

Привет! В этом руководстве я покажу вам, как создать и запрограммировать свой собственный универсальный пульт дистанционного управления, который будет работать с большинством устройств, использующих инфракрасный пульт, и который также будет «слушать» и декодировать инфракрасный сигнал, отправляемый различными другими пультами дистанционного управления.
Немного предыстории того, что вдохновило меня на создание этого пульта - я, как и большинство из вас, постоянно теряю свои пульты, и эта беда очень расстраивает, поэтому я думаю, давайте решим ее! Я построил этот пульт и незаметно встроил его в каркас своей кровати (я тоже плотник) - я не могу потерять пульт, если он является частью каркаса моей кровати!
Запасы
Вещи, которые вам понадобятся: -Arduino UNO или Nano - пробег может отличаться от других плат
- Макетная плата без пайки (или паяльная плита, если вы хотите сделать ее более прочной)
-Перемычки разного цвета и длины.
-Мгновенные кнопки (5) (вы можете добавить больше кнопок, но вам нужно будет использовать цифровые контакты, так как используются все аналоговые контакты, кроме одного - вам нужно будет убедиться, что вы правильно используете подтягивающие резисторы, или подтянуть резисторы, и нажать кнопки)
-10 кОм резистор (5) (если вам нужно больше кнопок, вам понадобится их больше)
-470 Ом резистор (2)
-Инфракрасный светодиод
-Красный светодиод
-Инфракрасный датчик (я использовал номер детали VS1838B, вы можете использовать другой, просто проверьте распиновку)
(Необязательно) Паяльник, припой, припой.
Шаг 1: Построение схемы:

1). Мне всегда нравится начинать с размещения компонентов, так как это всегда определяет макет на макетной плате.
-Нажмите на кнопки
-СВЕТОДИОДЫ: красный светодиод и ИК-светодиоды соединены тандемно, поэтому вы можете видеть, что делает ИК-светодиод.
-Датчик
2). Резисторы
- Пять резисторов 10 кОм, которые мы прикрепили к кнопкам, называются «понижающими» резисторами. Понижающие резисторы гарантируют, что, когда кнопка не нажата, соответствующий вывод Arduino получает 0 вольт (или, по крайней мере, близко к нему). Для получения дополнительной информации о понижающих (или повышающих) резисторах вот подробное руководство:
www.electronics-tutorials.ws/logic/pull-up…
Эти резисторы могут не быть полностью необходимыми, но если вы получаете "призрачные" толчки, это, скорее всего, вызвано емкостной связью, и понижающие резисторы предотвращают это.
3). Цепь проводов
4). 5V и заземляющие провода
Используйте предоставленное изображение для справки! не бойтесь менять его под свои нужды!
Шаг 2: Код:
# включить const int RECV_PIN = 7; // Вывод считывания ИК-датчика int Button1 = A4; // Крайний левый int Button2 = A3; // 2-я слева int Button3 = A2; // Средний int Button4 = A1; // 2-я справа int Button5 = A0; // Крайний правый int LED = 3; // ИК-светодиод и красный светодиод int val = 0; // Изменение значения IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results результаты;
void setup () {pinMode (Button1, INPUT); pinMode (Кнопка2, ВХОД); pinMode (Button3, ВХОД); pinMode (Button4, ВХОД); pinMode (Button5, ВХОД); pinMode (светодиод, ВЫХОД); Serial.begin (9600); irrecv.enableIRIn (); irrecv.blink13 (true);} void loop () {{{если (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // использование аналогового чтения вместо цифрового, чтобы избежать проблем с связанной емкостью. Кроме того, помогает ослабить кнопки. // Аналоговое считывание на 900 дает некоторое пространство для маневра в значениях, а это означает, что инфракрасный сигнал будет посылаться, даже если на вывод не поданы полные 5В. // но значение 900 достаточно велико, чтобы не было ошибочного чтения из-за задержки емкостной связи (100);} // Включение и выключение полосы RGB {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // изменение значения в "i <3" изменит количество немедленных повторов сигнала. поэтому «i <2» повторит сигнал дважды. // вам может потребоваться поиграть с этим номером, если ваш телевизор не отвечает, обычно 1 или 3 работают больше всего, если нет, попробуйте нечетные числа. // вам также может потребоваться поиграть со значениями времени задержки внутреннего сигнала, например, для моего телевизора 10 работает, а 30 - нет. {irsend.sendSony (0xa90, 12); // Код мощности телевизора Sony, для моего телевизора код должен быть отправлен 3x3, поэтому 3 импульса, три отдельных времени задержки (10); // "задержка внутри сигнала" для (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // «12» - это номер бита, разные протоколы вызывают разные номера бит. NEC - 32, Sony - 12, вы можете посмотреть задержку остальных (10); for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // Задержка уменьшения громкости телевизора Sony (100);}}} delay (100);} if (irrecv.decode (& results)) // приведенная ниже часть кода позволяет интерпретировать инфракрасные сигналы от различных пультов дистанционного управления. {Serial.println (results.value, HEX); // он сгенерирует процедуру «NEC, Sony, Etc..» и ТВ-код «c90, a90, FF02FD», вам нужно будет добавить 0x перед переключателем ТВ-кода (results.decode_type) {case DENON: Serial.println ("ДЕНОН"); перерыв; case NEC: Serial.println ("NEC"); перерыв; case PANASONIC: Serial.println ("PANASONIC"); перерыв; case SONY: Serial.println ("СОНИ"); перерыв; корпус RC5: Serial.println ("RC5"); перерыв; case JVC: Serial.println ("JVC"); перерыв; case SANYO: Serial.println ("SANYO"); перерыв; корпус MITSUBISHI: Serial.println («MITSUBISHI»); перерыв; case SAMSUNG: Serial.println ("SAMSUNG"); перерыв; корпус LG: Serial.println («LG»); перерыв; корпус RC6: Serial.println ("RC6"); перерыв; case БЛЮДО: Serial.println ("БЛЮДО"); перерыв; case SHARP: Serial.println ("SHARP"); перерыв; case WHYNTER: Serial.println ("WHYNTER"); перерыв; case AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); перерыв; по умолчанию: case UNKNOWN: Serial.println ("UNKNOWN"); break;} irrecv.resume ();}}
Шаг 3: Код в деталях: отправка ИК-сигналов
Я буду ссылаться на строки кода по их номерам - чтобы продолжить, используйте эту ссылку:
pastebin.com/AQr0fBLg
Во-первых, нам нужно включить удаленную библиотеку IR от z3t0.
Вот ссылка на библиотеку:
github.com/z3t0/Arduino-IRremote
Если вам нужно руководство о том, как правильно загрузить библиотеку и установить ее в IDE:
www.arduino.cc/en/guide/libraries
Строка 1 включает библиотеку.
Далее нам нужно объявить несколько переменных, это делают строки 2-12.
Мы используем «cost int» для определения переменных, которые не изменятся, все, кроме одной, попадают в эту категорию.
Мы используем int для определения переменных, которые будут меняться.
Мы должны использовать вывод с импульсной модуляцией (PWM) для нашего вывода светодиода - любого вывода, рядом с которым стоит символ «~», будет достаточно, в моем коде - мы используем цифровой вывод 3.
Затем нам нужно выполнить некоторую настройку - этот код будет запускаться только один раз при включении или сбросе Arduino.
Обратите внимание, что мы определяем наши входы и выходы (15-20), запускаем последовательный монитор (21), включаем ИК-датчик (22) и говорим Arduino мигать встроенным светодиодом каждый раз, когда мы получаем сигнал в датчике (23).
Затем мы построим наш цикл - этот код будет выполняться многократно, переходя сверху вниз несколько раз в секунду.
В строке 25 мы используем оператор if, который сообщает Arduino: «Ищите этот конкретный критерий, если этот критерий соответствует, сделайте это конкретное действие». В этом случае критерием является analogRead (Button1)> 900, или другими словами - «Arduino, посмотрите на button1, который мы определили как контакт A4 ранее, если полученный аналоговый сигнал больше 900, переходите к нашим следующим инструкциям., если нет, продолжайте ". Здесь есть кое-что, что нужно распаковать, так что давайте углубимся: аналоговый сигнал на Arduino имеет значение, равное или меньшее 5 В, при этом 5 В равно 1023, а 0 В равно 0. Любое заданное напряжение от 0 до 5 В может быть определено следующим образом: число, и с помощью математики мы можем вычислить это число или, наоборот, напряжение. Разделите 1024 (мы включаем 0 как единицу) на 5, получаем 204,8. Например, мы используем число 900, чтобы перевести его в напряжение, мы просто делим 900 на 204,8, что дает нам ~ 4,4 В. Мы говорим Arduino искать напряжение выше ~ 4,4 вольт, и если оно есть, выполните нашу следующую инструкцию.
Говоря о следующих инструкциях (строка 25), мы видим irsend.sendNEC (0xFF02FD, 32). Это говорит: «Arduino, отправьте модулированный импульс, который следует протоколу NEC, в частности, сигнал FF02FD, и убедитесь, что его длина составляет 32 бита». Это заставит наш ИК-светодиод мигать так, как это могут понять другие устройства. Думайте об этом как о азбуке Морзе, но только с невидимым светом! Существует множество различных протоколов, каждый с сотнями, если не тысячами отдельных сигналов, и каждый со своим определенным битовым числом - наше устройство сможет распознавать большое количество этих сигналов, но мы рассмотрим это позже!
В строке 28 у нас есть первая задержка - она здесь, чтобы предотвратить непреднамеренное повторение сигналов, после нажатия кнопки и отправки ИК-сигнала у нас есть 100 миллисекунд, чтобы убрать палец с кнопки. Кажется, это не так уж и много времени, но на практике, похоже, все работает нормально. функция задержки сообщает Arduino «ничего не делать в течение X миллисекунд», и для справки, это 1000 миллисекунд в секунду.
Переходим к нашей следующей кнопке в строке 29, button5 (изначально у меня было 4 кнопки на этом пульте, добавлена пятая, поэтому мы вышли из строя). По сути, это то же самое, что и кнопка 1, но с несколькими ключевыми отличиями. Первое отличие, которое вы увидите, - это оператор for - по сути, это еще один цикл - цикл с другим, более крупным циклом, loopception. В частности, у нас есть «for (int i = 0; i <3; i ++)», читаем это как «Arduino, давайте начнем с 0, повторяем следующие инструкции, пока не дойдем до 3 раз». Функция for используется потому, что многие устройства запрограммированы на поиск повторяющегося сигнала, а в нашем случае - 3 раза. Вы можете просто заменить цифру 3 на другую цифру, если ваше устройство требует другого графика повторения. Еще одно ключевое отличие от button5 заключается в том, что он повторяется снова, 3 раза или 3x3. Другими словами, мы отправляем сигнал 3 раза, ждем 10 миллисекунд, отправляем его снова 3 раза, ждем еще 10 миллисекунд, а затем снова отправляем его 3 раза. Этот тип связи является обычным для включения и выключения устройств и может быть именно тем, что требует ваш телевизор или устройство - ключ к этому - поиграть со всеми переменными, пока вы не получите желаемый результат. Измените значение короткой задержки, измените значение для повтора, отправьте 6 пакетов вместо 3 и т. Д. Устройства намеренно запрограммированы с произвольными правилами сигналов, представьте, если бы ваш пульт от телевизора отправлял сигнал того же типа, что и ваша звуковая панель; Каждый раз, когда вы переключаете канал на телевизоре, звуковая панель отключается - поэтому существуют другие правила сигнала.
Следующие три кнопки запрограммированы с теми же принципами, по крайней мере частично, описанными выше, поэтому мы можем полностью перейти к строке 55.
Шаг 4: Код в деталях: прием ИК-сигналов

В строке 55 мы начинаем программировать Arduino для интерпретации ИК-сигналов, отправляемых другими пультами - это необходимо, чтобы вы могли выяснить протоколы и сигналы, которые используют ваши пульты. Первая строка кода в строке 55: if (irrecv.decode (& results) прочтите это как «Arduino, найдите ИК-код, если вы его найдете, верните истинное значение, если ничего не найдено, верните ложь. Если истина, запись информацию в «результаты» ».
Переходя к строке 56, у нас есть Serial.println (results.value, HEX), в котором говорится: «Ardunio, распечатай результаты в последовательном мониторе в формате HEX». Hex, то есть шестнадцатеричный, - это способ сократить двоичную строку (только нули и единицы) до чего-то более простого для ввода. Например, 101010010000 - это «a90», код, используемый для включения и выключения моего телевизора, а 111111110000001011111101 - это 0xFF02FD, который управляет моей полосой RGB. Вы можете использовать приведенную выше диаграмму для преобразования двоичного кода в шестнадцатеричный и наоборот, или вы можете использовать следующую ссылку:
www.rapidtables.com/convert/number/hex-to-…
До строки 57 у нас есть новая функция, которая называется switch case.
По сути, случай переключения позволяет нам указывать разные инструкции на основе результатов данной переменной (случая). break выходит из оператора switch и используется в конце каждого оператора.
Здесь мы используем корпус коммутатора, чтобы изменить способ печати на последовательном мониторе на основе протоколов, которые наш Arduino распознает с различных пультов дистанционного управления.
Шаг 5: Заключение
Если у вас есть вопросы - обращайтесь ко мне здесь! Я рада помочь вам как можно лучше.
Надеюсь, вы узнали кое-что, что можно использовать, чтобы сделать свою жизнь немного лучше!
-RB
Рекомендуемые:
Пульт от телевизора становится радиочастотным пультом -- NRF24L01 + Учебное пособие: 5 шагов (с изображениями)

Пульт от телевизора становится радиочастотным пультом || NRF24L01 + Учебное пособие: в этом проекте я покажу вам, как я использовал популярную микросхему nRF24L01 + RF для беспроводной регулировки яркости светодиодной ленты с помощью трех бесполезных кнопок на пульте дистанционного управления телевизором. Давайте начнем
Универсальный пульт дистанционного управления с использованием ESP8266 (под управлением Wi-Fi): 6 шагов (с изображениями)

Универсальный пульт дистанционного управления с использованием ESP8266 (управляемый Wi-Fi): этот проект призван заменить обычный пульт дистанционного управления для всей бытовой техники, такой как кондиционер, телевизор, DVD-плееры, музыкальная система, SMART-техника !!! Создавая целый мусор из удаленного мусора вокруг, заставляя нас ломать голову !!! Этот проект спасет нас от
Пульт дистанционного управления от телевизора: 9 шагов

Пульт дистанционного управления для телевизора: ВВЕДЕНИЕ На этой веб-странице мы собираемся шаг за шагом показать проект, который мы сделали для Usos Académicos en la terminología del Inglés subject. Все задокументировано, поэтому, если вы хотите воссоздать проект, вы можете. Программное обеспечение, которое мы использовали для
Универсальный портативный универсальный аккумулятор: 11 шагов (с изображениями)

Универсальный портативный универсальный блок питания: отключение нагрузки или постоянное отключение электроэнергии - очень частое явление в развивающихся странах, таких как Индия, Южная Африка, Бангладеш и т. Д. Сезон отключения нагрузки не является любимым временем для кого-либо. Это сильно влияет на нашу повседневную деятельность и, в основном, на наше мычание
Как найти потерянный пульт от телевизора с помощью Arduino и Bluetooth: 5 шагов

Поиск потерянного телевизионного пульта с Arduino и Bluetooth: поиск потерянного телевизионного пульта очень простая схема и код настолько прост, просто используя Arduino Nano с модулем Bluetooth и небольшой зуммер с усилителем заряда от 3,7 до 5 В, и я создал приложение в MIT App Inventor * вы можете подключиться