発行済み 2026-04-19
このガイドは、システムを制御するための完全で実用的なソリューションを提供します。サーボ標準の赤外線 (IR) リモコンを使用したモーター。以下の手順に従うことで、正確に位置を決めることができます。サーボ一般的な IR リモコン (テレビやセットトップ ボックスのリモコンなど) のボタンを押してモーターを動かします。ブランド固有のコンポーネントは必要なく、その手順は広く入手可能な低コストのモジュールに基づいています。
IR リモコンは目に見えない光のパルスを放射します。 IR 受信機はこれらのパルスを検出し、各ボタンに固有のデジタル コードに変換します。マイクロコントローラーはこのコードを読み取り、対応するパルス幅変調 (PWM) 信号をサーボモーターのシャフトを特定の角度に設定します。
シナリオ例:一般的な TV リモコンの「音量を上げる」ボタンはサーボを 90° 回転させます (たとえば、小さなラッチを開きます)、「音量を下げる」ボタンはサーボを 0° に戻します。この原理は、DIY ロボット アーム、ペット自動給餌器、遠隔制御カメラ パンチルト システムなどに使用されています。
重要:ほとんどのサーボはかなりの電流 (200 ~ 500 mA) を消費します。 500 mA を超える電力が必要な場合は、マイクロコントローラーの 5V ピンからサーボに直接電力を供給しないでください。共通グラウンドを持つ外部 5V 電源を使用してください。
以下のようにコンポーネントを接続します。この配線は標準の 5V システムでテストされています。
IR レシーバー モジュール (平らな面から見た):
左ピン:信号→マイコンデジタルピン11(例)
センターピン:GND→共通グランド
右ピン:VCC→5V出力
サーボモーター:
茶/黒線:GND→共通アース
赤い線: 5V → 外部 5V 電源 (または小型サーボの場合のみマイクロコントローラー 5V)
オレンジ/黄色の線: 信号 → マイコン PWM ピン 9 (例)
共通点:外部電源のGNDをマイコンのGNDに接続してください。これは安定した動作のために必須です。
すべての IR リモコンは異なるコードを送信します。まず、特定のリモコンからコードを読み取る必要があります。
典型的なケース:Sony TV のリモコンが送信する可能性があります0x10「1」ボタンの場合は、Samsung のリモコンが送信します。0x80。コードはボタンのラベルではなく、ボタン + リモコンのブランドに固有の 16 進数です。
アクション:単純な IR デコーダ スケッチ (「IRremote」などの一般的なライブラリで利用可能) をマイクロコントローラにアップロードします。シリアル モニターを開き、使用する各ボタンを押して、コードを書き留めます。例えば:
上矢印→0xFF629D
下矢印→0xFFA857
OK/選択→0xFF02FD
どのボタンでサーボをどの角度に動かすかを決めます。標準のサーボ角度は 0° ~ 180° です。
マッピングの例 (ステップ 1 のコードを使用):
ボタン0xFF629D→ サーボ角度0°
ボタン0xFFA857→ サーボ角90°
ボタン0xFF02FD→ サーボ角180°
以下は、一般的な IRremote ライブラリ (バージョン 3.x 以降) で動作する一般的なコード例です。交換するREMOTE_CODE_1, REMOTE_CODE_2など、ステップ 1 の実際のコードを使用します。
#含む#含むconst int IR_PIN = 11; const int SERVO_PIN = 9; IRrecv irrecv(IR_PIN); decode_results 結果;サーボmyServo; // これらをリモコンの実際のコード (ステップ 1 の 16 進値) に置き換えます const unsigned long CODE_ANGLE_0 = 0xFF629D; // 例、上ボタン const unsigned long CODE_ANGLE_90 = 0xFFA857; // 例: 下ボタン const unsigned long CODE_ANGLE_180 = 0xFF02FD; // 例: OK ボタン void setup() { Serial.begin(9600); irrecv.enableIRIn(); // IR レシーバーを開始 myServo.attach(SERVO_PIN); myServo.write(0); // 0°から開始 Serial.println("準備完了。リモコンのボタンを押してください。"); void loop() { if (irrecv.decode(&results)) { unsigned long selectedCode = results.value; } Serial.print("受信コード: 0x"); Serial.println(受信コード, 16 進数); // 受信したコードをサーボ角度にマッピング if (receivedCode == CODE_ANGLE_0) { myServo.write(0); Serial.println("サーボ → 0°"); } else if (receivedCode == CODE_ANGLE_90) { myServo.write(90); Serial.println("サーボ → 90°"); } else if (receivedCode == CODE_ANGLE_180) { myServo.write(180); Serial.println("サーボ → 180°"); } else { Serial.println("マップされていないボタン。無視されます。"); irrecv.resume(); // 次の信号を待ちます } }
注記:リモコンが別のプロトコル (NEC、Sony、RC5 など) を使用している場合、ライブラリはそれを自動的に検出します。上記のコードは、ほとんどの消費者向けリモコンで機能します。
1. 回路に電力を供給します (必要に応じて外部サーボ電力)。
2. シリアル モニターを 9600 ボーで開きます。
3. マップされたボタンを押します。サーボは 0.5 秒以内にプリセット角度に移動します。
4. サーボがジッターする場合、または動かない場合は、以下を確認してください。
共通アース接続。
サーボ電源容量(標準サーボでは最小500mA)。
IR レシーバーは、直射日光や蛍光灯にさらされないようにします (これらは干渉を引き起こします)。
核心的な結論を改めて述べます:低コストの IR レシーバーおよびマイクロコントローラーと組み合わせた標準の IR リモートにより、独自のハードウェアを使用せずに正確なワイヤレス サーボ制御が可能になります。
実装を強化するための 3 つの実用的な推奨事項:
1. 複数のサーボを追加します。サーボ オブジェクトの配列を使用し、異なるボタンを異なるサーボに割り当てます。たとえば、ボタン「1」はサーボ A を 0°に制御し、ボタン「2」はサーボ B を 45°に制御します。
2. スムーズな動きを実装します。交換するサーボライト(角度)角度を段階的に増加させるループを使用します (例: 現在の角度から 15 ミリ秒の遅延で 1° ずつ増加する目標角度まで)。これにより、プロフェッショナルで段階的な動きが生まれます。
3. ボタンのマッピングを EEPROM に保存します。コードを再アップロードせずに新しいボタンを学習できる小さな調整ルーチンを作成します。これは、元のリモコンを紛失して別のブランドに切り替えた場合に特に便利です。
最終検証:プロジェクトを実際のアプリケーション (リモコンのドア ラッチやロボット グリッパーなど) にデプロイする前に、すべてのボタンの押下をそれぞれ少なくとも 50 回テストしてください。 IR 信号は物体や明るい光によってブロックされる可能性があります。システムが動作していることを確認するために、視覚的なインジケーター (コードを受信すると点滅する LED など) を常に含めてください。
更新時間:2026-04-19