Arduino IoT CloudとAlexaでテレビを音声操作:ステップバイステップガイド
必要な部品と用品
| Arduino Nano 33 IoT | ×1 |
| 抵抗 330Ω | ×1 |
| IR受信モジュール(例: VS1838B) | ×1 |
| IR送信LED(赤外線LED) | ×1 |
| ジャンパーワイヤー | ×1式 |
| ブレッドボード | ×1 |
使用するアプリとオンラインサービス
- Arduino Web Editor
- Arduino IoT Cloud
- Arduino Amazon Alexa 公式スキル
プロジェクト概要
注意: このチュートリアルは古い可能性があります。最新版は こちら を参照してください。
イントロ:Arduino IoT Cloud
Arduino IoT Cloudは、誰でも簡単にIoTデバイスを構築できるプラットフォームです。Alexaでテレビを操作するには、公式Arduino Alexaスキルも併用します。初心者はまず 入門プロジェクト でThing/Propertyの設定、ボードのオンボーディングを学ぶことを推奨します。
パート1:テレビを制御する仕組み
テレビのリモコン信号(赤外線)をArduinoで「学習」し、再送信することで制御します。回路組み立て後、以下のスケッチを書き込み、シリアルモニタを見ながらリモコンの各ボタンを押して生データ(rawData配列)を取得・記録します。
対象ボタン:
- 電源/スタンバイ
- チャンネル 1〜9
- 音量アップ/ダウン
- ミュート
- チャンネルアップ/ダウン
取得例(サムスン製リモコンの場合):
CHANNEL 1 unsigned int chan1[67] = {4450,4500, 550,1700, ... };
CHANNEL 2 unsigned int chan2[67] = {4500,4500, 550,1700, ... };
...(以下同様)
VOLUME UP unsigned int volUp[67] = {...};
VOLUME DOWN unsigned int volDown[67] = {...};
CHANNEL UP unsigned int chanUp[67] = {...};
CHANNEL DOWN unsigned int chanDown[67] = {...};
パート2:Arduino IoT Cloud設定
- IoT Cloudトップから新規Thing作成、名前を「TVRemoteController」等に設定
- 使用ボードを選択(本チュートリアルはNano 33 IoT)
- Propertyを1つ追加:カテゴリ「Smart Home」→ タイプ「TV」、Read/Write、更新トリガー「値変更時」

パート3:Arduino Web Editorでコード追加
「EDIT SKETCH」ボタンでWeb Editorを開き、自動生成されたスケッチにカスタムコードを追加します。
1. IRライブラリ読み込み
#include <IRremote.h>
2. 信号配列定義
const unsigned int chan[9][67] = { {chan1}, {chan2}, ..., {chan9} };
const unsigned int volUp[67] = {...};
const unsigned int volDown[67] = {...};
const unsigned int chanUp[67] = {...};
const unsigned int chanDown[67] = {...};
const unsigned int onoff[67] = {...}; // 電源トグル用
const unsigned int mute[67] = {...}; // ミュート用
3. IR送信設定
IRsend irsend;
const int freq = 38; // 38kHz搬送波
4. 送信ヘルパー関数
void sendIR(const unsigned int buf[]) {
digitalWrite(LED_BUILTIN, HIGH);
irsend.sendRaw(buf, 67, freq);
delay(300); // テレビによって調整必要
digitalWrite(LED_BUILTIN, LOW);
}
5. プロパティ変更コールバック実装
void onTvChange() {
Serial.println("==================");
Serial.println("Switch:"+String(tv.getSwitch()));
Serial.println("Volume:"+String(tv.getVolume()));
Serial.println("Channel:"+String(tv.getChannel()));
Serial.println("Mute:"+String(tv.getMute()));
Serial.println("==================");
if (first) {
prevSwitch = tv.getSwitch(); prevVolume = tv.getVolume();
prevChannel = tv.getChannel(); prevMute = tv.getMute();
first = false; return;
}
// 音量変更
if (tv.getVolume() > prevVolume) {
tv.setMute(false); prevMute = false;
for (int k = prevVolume+1; k <= tv.getVolume(); k++) {
sendIR(volUp);
Serial.println("Volume requested:"+String(tv.getVolume())+" Set:"+String(k));
}
prevVolume = tv.getVolume();
} else if (tv.getVolume() < prevVolume) {
tv.setMute(false); prevMute = false;
for (int k = prevVolume-1; k >= tv.getVolume(); k--) {
sendIR(volDown);
Serial.println("Volume changed:"+String(tv.getVolume())+" Set:"+String(k));
}
prevVolume = tv.getVolume();
}
// ミュート変更
if (tv.getMute() != prevMute && tv.getMute()) {
prevMute = tv.getMute(); sendIR(mute);
Serial.println("Mute changed:"+String(tv.getMute()));
} else if (tv.getMute() != prevMute && !tv.getMute()) {
prevMute = tv.getMute(); sendIR(mute);
Serial.println("Mute changed:"+String(tv.getMute()));
}
// チャンネル変更
if (tv.getChannel() != prevChannel) {
int newChannel = tv.getChannel();
if (newChannel > 0 && newChannel < 10) {
sendIR(chan[newChannel-1]);
} else if (newChannel > 9) {
if (newChannel > prevChannel) {
for (int ch = prevChannel; ch < newChannel; ch++) {
sendIR(chanUp);
Serial.println("Chan requested:"+String(newChannel)+" Set:"+String(ch));
}
} else {
for (int ch = prevChannel; ch > newChannel; ch--) {
sendIR(chanDown);
Serial.println("Chan requested:"+String(newChannel)+" Set:"+String(ch));
}
}
}
prevChannel = newChannel;
Serial.println("Channel changed:"+String(tv.getChannel()));
}
// 電源オン/オフ
if (tv.getSwitch() != prevSwitch) {
prevSwitch = tv.getSwitch();
if (tv.getSwitch()) sendIR(chan[6]); // 例: チャンネル7ボタンで電源オン
else sendIR(onoff);
Serial.println("Switch changed:"+String(tv.getSwitch()));
}
}
パート4:Amazon Alexa設定
- Amazon Alexaアプリをインストール(iOS/Android)し、アカウントログイン
- スキルストアで「Arduino」を検索し、公式スキルを有効化
- Arduinoアカウントでリンク認証
- デバイス検出を実行 → 「TVRemoteController」が検出される
- デバイス名を「TV」等に設定











音声コマンド例
- 「アレクサ、テレビの音量を上げて」
- 「アレクサ、テレビをミュートにして」 / 「アレクサ、テレビのミュートを解除して」
- 「アレクサ、テレビの次のチャンネル」
Enjoy! 質問や作品報告はコメント欄へ。— Arduino Team
回路図

製造プロセス
- Alexaでシーリングファンを音声制御:ステップバイステップガイド
- Arduinoで超音波レベーション(浮遊)装置を自作:ステップバイステップガイド
- Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- IoTで遠隔操作する自作ロボットアーム:Arduino MKR1000とSimulink、ThingSpeak活用
- ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
- Arduino Cloud連携でどこからでも家の温度を監視
- FirmataとXbox OneコントローラーでArduinoローバーをシームレス操作
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー