自作Arduino TVリモコン:電池駆動・3Dプリントケース・省電力設計
プロジェクト概要
彼女のTVリモコンが壊れたのをきっかけに、エンジニアカップルで自作リモコンを制作しました。ロックダウン中の楽しい共同作業になり、日常技術の仕組みを学ぶ良い機会となりました。家庭用3Dプリンターも大いに役立ちました。
仕様・機能
必要最小限の6コマンド:電源ON/OFF、入力切替、チャンネル±、音量±
ボタン読み取り
Arduino内部プルアップ抵抗を使用し、外付け抵抗なしで6ボタンを読み取り。スリープモードでない限り毎ループでポーリングし、millis()ベースの簡易デバウンスで多重検知を防止。
赤外線信号送信
IRremote.hライブラリを使用。メーカーごとのプロトコルに対応し、LG/Samsung/Sonyの3種類を#defineで切り替え可能。各コマンドのHEXコードをネット検索して設定。IR LEDはArduino PWMピン3に接続必須。
省電力設計
- 未使用ペリフェラル無効化:ADC、SPI、TWI、Timer1、USART(
avr/power.h使用) - 内蔵LED(ピン13)をPWMで消灯
- Arduino UNOのパワーLEDをはんだ除去(非推奨だが効果大)
- 5秒間操作なしでスリープモード突入(
avr/sleep.h、SLEEP_MODE_PWR_DOWN) - 電源ボタン(割り込みピン2)でウェイクアップ
ハードウェア構成
電子回路組み立て
ユニバーサル基板をArduino UNOのピンヘッダーに合わせてカットし、シールド形式で実装。ボタンは最終的な筐体上の位置に合わせてはんだ付け。IR LED用に47Ω抵抗を2個並列接続して所望電流を確保。基板上の配線はハンダでパターン形成し、ピンヘッダーでArduinoと確実に接続。
筐体設計・3Dプリント
SolidWorksで設計、Ultimaker Curaでスライス、Anycubic Mega ZeroでPLA出力。ベースとカバーの2パーツ構成。ベースにはArduino固定用M2.5ネジ穴(3箇所)、バッテリー圧入スペース、IR LED位置合わせ用ミニポストを配置。カバーにはボタン露出穴と機能アイコン刻印。M3ネジ4本で組み立て。
フォトギャラリー
完成品の各種写真(外観、内部基板、組み立て過程、ボタン配置)を掲載。
完全コード (TV_remote.ino)
#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
// TVモデル選択(いずれか1つを有効化)
//#define LG_TV
//#define SAMSUNG_TV
#define SONY_TV
// 各モデルのHEXコード定義(省略)
IRsend irsend;
unsigned long debounce_time, 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_adc_disable();
power_spi_disable();
power_timer1_disable();
power_usart0_disable();
power_twi_disable();
#ifdef DEBUG
Serial.begin(9600);
#endif
}
void loop() {
// 各ボタン: デバウンス後、対応プロトコルでIR送信、last_time更新
// 5秒無操作で going_to_sleep() 呼び出し
}
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));
}
回路図・CADデータ
Fritzing回路図 (remote_sketch_r4f8a47oWX.fz) とピン配置図を提供。3Dモデルファイルは要問い合わせ。
製造プロセス
- QR・RFID・体温検知統合アクセス制御システム(Raspberry Piベース)
- LIRCなしでRaspberry PiにIRリモコンを接続 - Python UARTアプローチ
- PiCy:自分だけの小さな Raspberry Pi 搭載ロボットを作ろう
- Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
- ESP32-CAMで作る動体検知セキュリティカメラ:Discord通知対応
- スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
- Unopad: Ableton Live連携シームレスなArduino MIDIコントローラー
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- Arduinoでシンプルな障害物センサーを自作 – IR LEDとフォトダイオード入門
- モダン産業におけるリモート生産制御の5つの主要メリット
- Millport SmartLathez 1740 CNC旋盤 – 精度とパワー