工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

AlexaとArduinoIoTCloudを使用したテレビのフルコントロール

コンポーネントと消耗品

>
Arduino Nano 33 IoT
× 1
抵抗330オーム
× 1
IRレシーバー(汎用)
例VS1838B
× 1
IRトランスミッター(汎用)
× 1
ジャンパー線(汎用)
× 1
ブレッドボード(汎用)
× 1

アプリとオンラインサービス

>
ArduinoWebエディター
ArduinoIoTクラウド
Arduino AmazonAlexa公式Arduinoスキル

このプロジェクトについて

注:このチュートリアルは古くなっている可能性があります。どうぞ ここ 最新バージョンの場合。

イントロ:ArduinoIoTクラウド

Arduino IoT Cloudは、誰でも簡単にIoT接続オブジェクトを構築できるプラットフォームです。 Alexaを使用してテレビを制御するために、公式のArduinoAlexaスキルも使用します。

Arduino IoT Cloudを初めて使用する場合は、最初にこの入門プロジェクトを確認することをお勧めします。このプロジェクトでは、サポートされているボードの1つであるIoT Cloud Things およびプロパティ 乗船してください。

パート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

回路図


製造プロセス

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