AlexaとArduinoIoTCloudを使用したテレビのフルコントロール
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
アプリとオンラインサービス
> ![]() |
| |||
![]() |
| |||
![]() |
|
このプロジェクトについて
注:このチュートリアルは古くなっている可能性があります。どうぞ ここ 最新バージョンの場合。
イントロ:ArduinoIoTクラウド
Arduino IoT Cloudは、誰でも簡単にIoT接続オブジェクトを構築できるプラットフォームです。 Alexaを使用してテレビを制御するために、公式のArduinoAlexaスキルも使用します。
Arduino IoT Cloudを初めて使用する場合は、最初にこの入門プロジェクトを確認することをお勧めします。このプロジェクトでは、サポートされているボードの1つであるIoT Cloud Things の概要とセットアッププロセスについて説明します。 em> およびプロパティ 乗船してください。
パート1:テレビを制御する方法
あらゆる種類のテレビを制御する最も簡単な方法は、私たちがそれ自体のリモート赤外線コントローラーであるかのように振る舞うことです。そのためには、聞く必要があります。 リモコンが送信する信号については、データをキャプチャし、Arduinoボードで模倣します。回路が組み立てられたら、このスケッチをボードにアップロードします。リモートボタンを押すことによって生成されたIR信号バーストを符号なし整数の配列に変換します。リモコンをArduinoの IRレシーバーに向けましょう 次のボタンを作成して押しました:
- 電源/スタンバイ
- 1から9までのチャンネル
- ボリュームアップ
- 音量を下げる
- ミュート
- チャンネルアップ
- チャンネルダウン
シリアルモニターからの値が表示されます 、 rawData
として報告されます 。今のところ、それらをテキストファイルに書き留めて、各リストに独自の配列名( chan1
)を割り当てましょう。 、 chan2
等々)。次の値は参考用であり、Samsungのテレビのリモコンによって生成されます。
CHANNEL 1unsigned int chan1 [67] ={4450,4500、550,1700、500,1700、550,1700、550,550、550,600、500,600、550,550、550,600、500,1700、550,1700、550 、1700、500、600、500、600、550、550、550、600、500、600、550、550、550、600、500、1700、550、600、500、600、550、550、550、600、500、600、550、1700、500、1700、550、600、500、1700、550、1700、550 、1700、500、1700、550、1700、500}; CHANNEL 2unsigned int chan2 [67] ={4500,4500、550,1700、500,1700、550,1700、550,550、550,550、550,600、500,600、550,600、500 、1700、550、1700、500、1700、550、600、500、600、550、550、550、600、500、600、550、1700、500、600、550、1700、500、600、550、550、550、600、500、600、550、550、550、650、450、1700、550、600、500 、1700、550、1700、500、1700、550、1700、550、1700、500}; CHANNEL 3unsigned int chan3 [67] ={4500,4500、500,1700、550,1700、550,1700、500,600、550,550 、550,600、500,600、550,550、550,1700、500,1700、550,1700、550,550、550,600、500,600、550,550、550,600、500,600、550,1700、500,1700、550,600、550,550、550,550、550,600、550,550 、1700、500 、600、550、550、550、1700、550、1650、550、1700、550、1700、500、1700、600};チャンネル4unsigned int chan4 [67] ={4450,4450、550,1700、550,1700、500 、1700、550、600、500、600、550、550、600、550、500、600、550、1700、500、1700、550、1700、550、550、550、600、500、600、550、550、550、600、500、600、550、550、550、600、500、1700、550、600、500、600、 、550、600、500、1700、550、1700、550、1700、500、600、550、1700、500、1700、550、1700、550、1700、500}; CHANNEL 5unsigned int chan5 [67] ={4500,4500、500,1700、550,1700、550,1700、550,550、550,550、550,550、600,550、550,550、550,1700、550,1650、550,1700、550,550、550,600 、500、600、550、550、550、600、500、1700、550、600、500、600、550、1700、500、600、550、550、550、600、550、550、550、550、550、1700、550、1700、500、600、550、1700、500、1700、550、1700 、550、1700、500}; CHANNEL 6unsigned int chan6 [67] ={4500,4500、550,1650、550,1700、550,1700、500,600、550,550、550,600、500,600、500,600、550,1700、500,1700、550,1700、550,550、600,550 、500、600、550、550、600、550、550、550、550、1700、500、600、550、1700、500、600、550、550、550、600、500、600、550、1700、500、600、550、1700、500、600、550、1650、600、1650、550、1700 、550、1650、600}; CHANNEL 7unsigned int chan7 [67] ={4500,4500、550,1700、500,1700、550,1750、500,550、550,600、500,650、500,550、550,550、550,1750、500,1700、500,1700、550,650、450,650 、500,550、550,600、500,650、500,550、550,600、500,1700、550,1750、500,600、500,550、550,600、500,650、500,1750、450,1700、550,600、500,650、500,1700、500,1700、550,1750 、500、1700、500}; CHANNEL 8unsigned int chan8 [67] ={4450,4550、500,1700、550,1700、550,1650、550,600、500,600、550,550、550,600、500,600、550,1700、500,1700、550,1700、550,550、550,600 、500、600、550、550、550、600、500、1700、550、600、500、1700、550、1700、500、600、550、550、550、650、450、600、550、550、550、1700、550、550、550、600、500、1700、550、1700、550、1700 、500、1700、550}; CHANNEL 9unsigned int chan9 [67] ={4450,4500、550,1700、550,1700、500,1700、550,600、500,600、550,550、550,600、500,600、550,1700、500,1700、550,1700、500,600、550,550 、550、600、500、600、550、550、550、600、500、1700、550、1700、550、1700、500、600、550、550、550、550、550、600、500、1700、550、600、500、600、550、550、550、1700、550、1700、500、1700 、550、1700、550}; VOLUME UPunsigned int volUp [67] ={4500,4500、550,1700、500,1750、500,1700、550,600、500,600、500,600、550,550、550,600、500,1700、550,1700、550,1700、500,650、450,600 、550、600、500、650、450、650、500、1700、500、1750、500、1750、500、550、550、600、500、650、500、550、550、600、500、650、500、600、500、600、500、1700、550、1750、450、1750、500、1700 、550、1700、500}; VOLUME DOWNunsigned int volDown [67] ={4450,4550、500,1700、550,1700、550,1650、550,600、550,550、550,600、500,600、500,600、550,1700、500,1700、550,1700、550,550、550,600 、500、600、550、550、550、600、500、1700、550、1700、550、600、500、1700、550、600、500、600、500、600、550、550、550、600、500、650、500、1700、500、650、500、1700、500、1750、500、1700 、550、1700、500}; CHANNEL UPunsigned int chanUp [67] ={4500,4450、550,1700、550,1650、550,1700、550,550、550,600、550,550、550,550、600,550、550,1650、550,1700、550,1650、600,550、550,550 、550、600、500、600、550、550、550、550、550、1700、550、550、600、550、550、1650、550、600、550、550、550、550、550、1700、550、550、550、1700、550、1700、550、550、550、1650、600、1650 、550、1700、550}; CHANNEL DOWNunsigned int chanDown [67] ={4500,4450、600,1650、550,1700、550,1650、550,600、550,550、550,550、550,600、500,600、550,1700、500,1700、550,1700、550,550、550,600 、550、550、550、550、550、550、600、550、550、550、550、600、500、600、550、1650、600、550、550、550、550、550、600、1650、550、1700、500、1700、600、1650、550、550、600、1650、550、1700 、500、1700、550};
パート2:ArduinoIoTクラウド
メインの ArduinoIoTクラウドから ページでは、新しい Thing を作成します 意味のある名前を付けます。それを TVRemoteController と呼びましょう 。次に、使用するボードを選択します。このチュートリアルでは、Arduino Nano 33 IoTを使用しましたが、互換性のある別のボードがある場合でも問題ありません。ピン配置とIRライブラリの動作が変わる可能性があることに注意してください。この時点でボードが表示されない場合は、はじめにをスキップした可能性があります。 上記の手順で、この場合は、そのプロセスに戻ります。
完了したら、1つのプロパティを追加します 私たちのものに 、それは私たちのテレビセットを表します。 スマートホームの下 カテゴリで、プロパティタイプとして[TV]を選択し、[読み取りと書き込み]に設定し、[更新]で[値が変更されたとき]を選択します。
これがプロパティです この時点で、Thingのビューは次のようになります。
<図>
パート3:ArduinoWebエディター
[スケッチの編集]ボタンをクリックするときが来ました。このボタンをクリックすると、IoTクラウドによって自動的に生成されたスケッチにカスタムコードを追加できるWebエディターが表示されます。
最初に含める必要があるのは、KenShirriffによるIRRemoteライブラリです。
#include
次に、チャネル用に1つの2次元配列を設定し、必要なコマンド用に6つの配列を設定する必要があります。覚えているかと思いますが、パート1では、アレイを埋めるために使用するIRデータをキャプチャしました
const unsigned int chan [9] [67] ={{chan1}、{chan2}、{chan3}、{chan4}、{chan5}、{chan6}、{chan7}、{chan8}、 {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] ={...};
次に、IRライブラリと必要な周波数を設定しましょう(この種のアプリケーションでは、常に38KHzになります)
IRsend irsend; const int freq =38;
また、IRコマンドを送信して内蔵LEDを点滅させる機能も必要です(この段階では主にデバッグ目的で)。使用される遅延値は、テレビのメーカーとモデルによって異なります。期待どおりに機能しない場合(コマンドが間違っているか、コマンドが受信されない場合)は、自由に調整してください。
void sendIR(const unsigned int buf []){digitalWrite(LED_BUILTIN、HIGH); irsend.sendRaw(buf、67、freq); delay(300); digitalWrite(LED_BUILTIN、LOW);}
最後のステップは、生成されたコールバック onTvChange()
を完了することです。 TVプロパティがAlexaコマンドによって変更されたときにIRコマンドを送信するためのいくつかのカスタムコードを使用します。たとえば、音量を上げる場合は、音量を上げるボタンを仮想的に押す必要があります。 チャネルが7に設定されている場合は、チャネル7ボタンのシーケンスを送信する必要があります。
void onTvChange(){Serial.println( "=================="); Serial.println( "Switch:" + String(tv.getSwitch())); Serial.println( "ボリューム:" + String(tv.getVolume())); Serial.println( "Channel:" + String(tv.getChannel())); Serial.println( "ミュート:" + String(tv.getMute())); Serial.println( "=================="); if(first){prevSwitch =tv.getSwitch(); prevVolume =tv.getVolume(); prevChannel =tv.getChannel(); prevMute =tv.getMute();最初=false;戻る; } //音量が変更されたif(tv.getVolume()> prevVolume){tv.setMute(false); prevMute =false; for(int k =prevVolume + 1; k <=tv.getVolume(); k ++){sendIR(volUp); Serial.println( "要求されたボリューム:" + String(tv.getVolume())+ "セット:" + String(k)); } prevVolume =tv.getVolume(); } else if(tv.getVolume() =tv.getVolume(); k-){sendIR(volDown); Serial.println( "ボリュームが変更されました:" + String(tv.getVolume())+ "セット:" + String(k)); } prevVolume =tv.getVolume(); } //ミュートが変更されたif(tv.getMute()!=prevMute &&tv.getMute()){prevMute =tv.getMute(); sendIR(ミュート); Serial.println( "ミュートが変更されました:" + String(tv.getMute())); } else if(tv.getMute()!=prevMute &&!tv.getMute()){prevMute =tv.getMute(); sendIR(ミュート); Serial.println( "ミュートが変更されました:" + 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(chanDown); Serial.println( "Chan requested:" + String(newChannel)+ "Set:" + String(ch)); }}} prevChannel =newChannel; Serial.println( "チャンネルが変更されました:" + String(tv.getChannel())); } //オン/オフが変更されたif(tv.getSwitch()!=prevSwitch){prevSwitch =tv.getSwitch(); if(tv.getSwitch()){sendIR(chan [6]); } else {sendIR(onoff); } Serial.println( "スイッチが変更されました:" + String(tv.getSwitch())); }
パート4:Amazon Alexa
AmazonAlexaアプリが必要になります これは、Apple AppStoreまたはGooglePlayストアからダウンロードできます。インストールしたら、既存のアカウントでログインするか、新しいアカウントを作成します。
Arduino Alexaスキルをインストールし、テレビにアクセスして制御するように構成するために必要な手順を実行してみましょう。以下の一連の画像に従って、必要なすべての手順を確認します。
<図>










これで完了です。今度は、テレビの音声制御で次のような質問をします。
- 「アレクサ、テレビの音量を上げてください。」
- 「アレクサ、テレビをミュート」または「アレクサ、テレビをミュート解除」
- 「アレクサ、テレビの次のチャンネル。」
AlexaとIoTクラウドで遊んで楽しんでください。質問がある場合、および/またはこのプロジェクトを構築する場合は、以下のコメントでお知らせください。
ありがとう、
Arduinoチーム
コード
Arduino
回路図

製造プロセス
- シーリングファンに対してAlexaコントロールを有効にする
- ARDUINOを使用した超音波浮揚機
- Arduino、1Sheeld、Androidを使用したユニバーサルリモコン
- Arduinoとスマートフォンを使用したDIY電圧計
- IoTを使用した心拍数モニター
- IoTを使用してロボットアームをリモート制御する
- IOT-ESP8266、Arduino、超音波センサーを使用したスマートジャー
- Arduinoクラウドでどこからでもあなたの家の温度を知る!
- FirmataとXboxOneControllerを使用してArduinoRoverを制御する
- Arduino加湿器制御
- arduinoを使用したソナーと処理IDEでの表示