リモコンで音楽再生を制御:シンプルなArduinoプロジェクト
必要な部品と材料
| Arduino UNO | ×1 |
| リモコン(赤外線) | ×1 |
| IR受信モジュール(汎用) | ×1 |
| ブザー(圧電ブザー) | ×1 |
| LCDディスプレイ 16×2(白文字/青背景、Adafruit標準品) | ×1 |
| 可変抵抗器(ボリューム、汎用) | ×1 |
| 抵抗 221Ω | ×1 |
使用するアプリとオンラインサービス
- Arduino IDE
プロジェクト概要
こんにちは、Hacksterコミュニティの皆さん!Simone Adobsです。これが私のこのサイトでの2作目のプロジェクトになります。
動作の仕組み
このプロジェクトのロジックは非常にシンプルです:
- リモコンで演奏したい曲(メロディ)を選択する
- Arduinoとブザーがそのメロディを演奏する
- LCD画面に再生中の音符名が表示される
コードの解説
メロディは以下のような形式で定義されています:
void melody_example() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Song title");
delay(1000);
lcd.clear();
nota_mi(duration,pause); // ミの音
nota_do(duration,pause); // ドの音
lcd.clear();
delay(100);
Reset_AVR(); // ボタンを押さずにArduinoをリセット
}
Reset_AVR() を使用するには、スケッチの冒頭に以下を追加します:
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
どのメロディを再生するかは、受信したIRコードで判断します:
if (result==12495) { // ボタン1のコード
melody_1();
} else if (result==6375) { // ボタン2のコード
melody_2();
} else if (result==31365) { // ボタン3のコード
melody_3();
} else if (result==4335) { // ボタン4のコード
melody_4();
}
各音符を再生する関数の例:
void nota_example(int duration, int pause) {
shut(); // 停止チェック関数を呼び出し
lcd.setCursor(0, 0);
lcd.print("Example "); // 音符名を表示
NewTone(11, 262, duration); // ピン11、周波数262Hz(ド)
delay(pause);
}
再生中にメロディを止めたい場合は?
shut() 関数のおかげで、いつでも再生を停止できます。この関数はIR信号をチェックし、特定のボタン(私のリモコンではシャットダウンボタン、コード-23971)が押されたらArduinoをリセットします。
void shut() {
if (irrecv.decode(&results)) {
result = results.value, HEX;
Serial.println(result);
if (result == -23971) {
Reset_AVR();
}
}
irrecv.resume(); // 次のコード受信を許可
}
このプロジェクトが気に入っていただけたら幸いです。前作もぜひご覧ください。
良い一日を!
イタリアより Simone <3
スケッチ(全文)
以下のコードをArduino IDEにコピーして使用してください。NewTone、IRremote、LiquidCrystal ライブラリが必要です。
#include <LiquidCrystal.h>
#include <IRremote.h>
#include <NewTone.h>
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
#define buzzer 11
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
int result;
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("-----Choose-----");
lcd.setCursor(0, 1);
lcd.print("----A Song!!----");
pinMode(buzzer, OUTPUT);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
result = results.value, HEX;
Serial.println(result);
if (result == 12495) { ode(); }
else if (result == 6375) { london(); }
else if (result == 31365) { fur(); }
else if (result == 4335) { pirate(); }
irrecv.resume();
}
delay(100);
}
// 以下、各曲のメロディ関数(fur: エリーゼのために、london: ロンドン橋、ode: 喜びの歌、pirate: 彼は海賊)と、
// 各音符関数(nota_do, nota_re, nota_mi 等)、shut() 関数が続く
回路図

製造プロセス
- LIRCなしでRaspberry PiにIRリモコンを接続 - Python UARTアプローチ
- Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
- ESP32-CAMで作る動体検知セキュリティカメラ:Discord通知対応
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduino Nanoで37LEDルーレットゲームを自作:ヨーロピアンスタイル完全再現
- 自作Arduino TVリモコン:電池駆動・3Dプリントケース・省電力設計
- Arduino Cloud連携でどこからでも家の温度を監視
- ATtiny85ミニアーケード:スネークゲーム - 手のひらサイズOLEDゲーム機の製作
- ポータブル距離検出器:Arduino Nano自作キット(HC-SR04、18650電源、3Dプリントケース付き)
- Windows 10 CortanaでBluetooth経由でArduinoのLEDを制御
- 高度なリモートコントロールグリッパーロボット: 精密ハンドリング向け