Самодельный пульт от ТВ на Arduino с 3D-корпусом и питанием от батарейки
Компоненты и материалы
| Arduino UNO | 1 |
| Крона 9В (generic) | 1 |
| Разъём 9В → Jack (barrel jack connector) | 1 |
| ИК-излучатель (generic) | 1 |
| Винт M3 | 4 |
| Винт M2.5 | 3 |
| Гайка M3 | 4 |
| Гайка M2.5 | 3 |
| Резистор 47 Ом (through-hole) | 2 |
| Макетная плата 2.54 мм | 1 |
| PCB-кнопка (тактовая) | 6 |
| Pin header 36 pin (однорядный, длинный) | 1 |
Необходимые инструменты и станки
- 3D-принтер (универсальный)
- Паяльник
- Припой без свинца
- PLA filament 1.75 мм
О проекте
Введение
У подруги сломанся пульт от телевизора. Можно было купить дешёвый универсальный, но мы оба инженеры — решили сделать свой вместе! Это веселый способ провести время на локдауне и разобраться, как работает эта бытовая технология. Домашний 3D-принтер тоже пригодился.
Как это работает
Чтение кнопок
Минимальный набор команд для нашего ТВ: 6 штук — Вкл/Выкл, Источник, Прог+, Прог-, Громк+, Громк-. Чтобы не ставить внешние подтягивающие резисторы, используем внутренние pull-up Arduino. Если пульт не в спящем режиме, каждый цикл loop опрашивает кнопки. Антидребезг реализован через millis().
Отправка ИК-сигналов
ИК-протокол обрабатывает библиотека IRremote.h (авторам уважение!). Надо выбрать протокол своего ТВ (у каждого бренда свой) и найти HEX-коды команд в гугле, привязать к кнопкам. В схеме ИК-светодиод обязан быть на пине 3 Arduino UNO (PWM).
Код поддерживает 3 типа ТВ: LG, Samsung, Sony — переключается закомментированием #define в начале скетча.
Экономия батареи
Для минимизации потребления (библиотеки avr/sleep.h, avr/power.h):
- В
setup()отключаем неиспользуемые периферийные модули: ADC, SPI, TWI (I2C), Timer1, USART. - Выключаем встроенный LED на пине 13 (PWM).
- Решили даже отпаять питание-LED на плате Arduino UNO (он всегда горит) — не рекомендуемая операция, но мы рискнули.
- Если 5 секунд ни одной кнопки не нажато — уходим в глубокий сон (
SLEEP_MODE_PWR_DOWN). Пробуждение — прерывание от кнопки Вкл/Выкл (пин 2, настроен как WIRED NOR).
Как это собрано
Электроника: сборка на макетке
Вся схема на макетной плате, рассчитанной под pin header Arduino UNO. Кнопки припаяны с учётом их позиции в корпусе. На нижней стороне два резистора 47 Ом параллельно (для тока ИК-светодиода). Проводники на макетке соединяют кнопки и ИК-светодиод с pin header — получается shield, надежно вставляемый в Arduino.
Корпус: CAD и CAM
Корпус рассчитан под батарею «Крона», Arduino UNO + shield, с выводами только кнопок сверху и ИК-светодиода спереди.
Две половинки, спроектированы в SolidWorks, слайсинг в Ultimaker Cura, печать на Anycubic Mega Zero из PLA.
- Arduino крепится к основанию 3 винтами M2.5 в вытянутые отверстия-стойки.
- ИК-светодиод выходит за край shield, входит в отверстие передней стенки; три мини-стойки фиксируют его ножки при сборе.
- Батарея вставляется в карман с натяжением (press-fit).
- Крышка с гравировкой символов функций кнопок.
- Сборка основания и крышки — 4 винта M3.
Фотогалерея




Код
TV_remote.ino (Arduino)
#include
#include
#include
// Пины кнопок
#define OnOff 1
#define Source 0
#define CH_plus 4
#define CH_minus 5
#define Vol_plus 6
#define Vol_minus 7
#define Interrupt_Pin 2 // Только пин 2 или 3 на Uno
// Выбор модели ТВ (раскомментируйте нужное)
//#define LG_TV
//#define SAMSUNG_TV
#define SONY_TV
// HEX-коды команд для каждого бренда
#ifdef LG_TV
unsigned long on_off_code = 551489775; // 0x20DF10EF
unsigned long vol_plus_code = 551502015; // 0x20DF40BF
unsigned long vol_minus_code = 551534655; // 0x20DFC03F
unsigned long ch_plus_code = 551485695; // 0x20DF00FF
unsigned long ch_minus_code = 551518335; // 0x20DF807F
unsigned long source_code = 551538735; // 0x20DFD02F
#endif
#ifdef SAMSUNG_TV
unsigned long on_off_code = 3772793023; // 0xE0E040BF
unsigned long vol_plus_code = 3772833823; // 0xE0E0E01F
unsigned long vol_minus_code = 3772829743; // 0xE0E0D02F
unsigned long ch_plus_code = 3772795063; // 0xE0E048B7
unsigned long ch_minus_code = 3772778743; // 0xE0E008F7
unsigned long source_code = 3772809343; // 0xE0E0807F
#endif
#ifdef SONY_TV
unsigned long on_off_code = 2704; // 0xA90
unsigned long vol_plus_code = 1168; // 0x490
unsigned long vol_minus_code = 3216; // 0xC90
unsigned long ch_plus_code = 144; // 0x090
unsigned long ch_minus_code = 2192; // 0x890
unsigned long source_code = 2640; // 0xA50
#endif
//#define DEBUG
IRsend irsend;
unsigned long debounce_time;
unsigned long last_time;
void setup() {
analogWrite(13,0); // выкл встроенный LED
pinMode(OnOff, INPUT_PULLUP);
pinMode(Source, INPUT_PULLUP);
pinMode(CH_plus, INPUT_PULLUP);
pinMode(CH_minus, INPUT_PULLUP);
pinMode(Vol_plus, INPUT_PULLUP);
pinMode(Vol_minus, INPUT_PULLUP);
pinMode(Interrupt_Pin, INPUT_PULLUP);
// Power saving
power_adc_disable();
power_spi_disable();
power_timer1_disable();
power_usart0_disable();
power_twi_disable();
#ifdef DEBUG
Serial.begin(9600);
#endif
}
void loop() {
// Опрос каждой кнопки с антидребезгом 40 мс
// При нажатии: отправка ИК-кода через irsend (NEC/SAMSUNG/Sony)
// Обновление last_time = millis()
// ...
// Сон через 5 сек бездействия
if (millis() - last_time > 5000) {
#ifdef DEBUG
Serial.println("Going to sleep...");
#endif
going_to_sleep();
#ifdef DEBUG
Serial.println("Waking up...");
#endif
}
}
void going_to_sleep() {
sleep_enable();
attachInterrupt(digitalPinToInterrupt(Interrupt_Pin), wake_up, LOW);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_cpu();
}
void wake_up() {
sleep_disable();
detachInterrupt(digitalPinToInterrupt(Interrupt_Pin));
}
Схемы
Принципиальная схема пульта:
Fritzing-файл: remote_sketch_r4f8a47oWX.fz
Производственный процесс
- Интегрированная система контроля доступа с QR, RFID и верификацией температуры
- Перехват команд ИК-пульта на Raspberry Pi без LIRC: подход через Python UART
- PiCy: Создайте своего компактного робота на Raspberry Pi
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Камера охраны с детектором движения на ESP32-CAM и отправкой фото в Discord
- Умная копилка: управление монетоприёмником на Arduino Nano
- Unopad: Бесшовный Arduino MIDI-контроллер для Ableton Live
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- ЧПУ-точарный станок Millport SmartLathez 1740 — точность и мощь
- 5 ключевых преимуществ удаленного контроля производства для современной промышленности