AlexaとArduinoを使用したアニメーションスマートライト
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
| ||||
| ||||
|
このプロジェクトについて
ライトストリップを選ぶ理由
私は常にアドレス指定可能なRGBLEDストリップに魅了されていました。無限のカラーエフェクトとアニメーション機能は常に私の創造性を捉えてきたので、数年前、ALA(Arduino Light Animations)と呼ばれるArduinoボード用のライブラリを開発することにしました。 Alexaは今、私の声で部屋の照明と効果を制御する可能性を与えてくれています。それは素晴らしいことです!
プロジェクトの概要
このプロジェクトに必要なコンポーネントがあります。
- アマゾン アレクサ: カスタムAlexaスキル(ライトストリップ)は、音声インタラクションモデルを定義し、Lambda関数に発行されるコマンド(インテント)を変換します。
- Amazon Lambda :Alexaからメッセージを受信し、IoTサービスに更新を送信するPythonスクリプト。
- Amazon IoT :IoTサービスは、RGBストリップの状態を表す「モノの影」を保存します。シャドウが更新されるたびに、サブスクライブされたMQTTクライアント(Raspberry PI)に通知されます。
- ラズベリーPI :この小さなPCは、MQTTクライアントを実行して、AmazonIoTサービスからメッセージを受信します。反対側では、USBポートを介してArduinoボードに電力を供給してコマンドを送信します。
- Arduino :この優れたマイクロコントローラーは、ALAライブラリを実行して、USBシリアルポートを介してRaspberryPIからコマンドを受信するLEDストリップを駆動します。 Arduino Uno、Nano、Megaボードを使用できます。
- WS8212 RGBLEDストリップ :これらはアドレス指定可能なLEDストリップであるため、各LEDを個別に制御できます。これにより、美しくカラフルな光のアニメーションが可能になります。
プロジェクトには非常に難しいものはありませんが、相互に関連する部分がたくさんあります。次のステップに進む前に、提案された構造に従って、強固な基盤の上にプロジェクトを構築することをお勧めします。できるだけ簡単にするために、プロジェクトを2つのサブプロジェクトに分割しました。
最初の部分 プロジェクトの概要は、RaspberryPiおよびArduinoHackster.ioプロジェクトを使用したWeb制御LEDアニメーションで説明されており、Raspberry PI、Arduinoボード、およびWS8212LEDストリップを接続するために必要な手順をガイドします。このフェーズの終わりに、Webブラウザを使用してスマートフォンまたはPCからLEDアニメーションを制御できるようになります。
<図>第2部 ここで説明するプロジェクトの一部では、AmazonAlexaを使用した以前の実装に音声制御が追加されます。チェーン全体を正しくセットアップするには、いくつかの手順を実行する必要があります。辛抱強く、指示に注意深く従ってください。
Amazon IoT
ハードウェア部分を完了しましたか?さあ、クラウドに行きましょう! AWS IoTプラットフォームを使用して、インターネットからの「モノ」を管理します。
モノの状態のコピーである「デバイスシャドウ」を、必要な変更とともに使用します。 Raspberry PIは、このシャドウへの変更(「デルタ」)を公開する通知フィードをサブスクライブします。 AWS IoTプラットフォームとAPIの詳細については、このリンクを確認してください。
IoTモノを作成する
AWSコンソールにログインします。まだ作成していない場合は、無料のアカウントを作成する必要があります。
US East(N。Virginia)にログインしていることを確認してください または EU(アイルランド) 右上隅のゾーン。
「IoT」を検索し、 AWS IoT を選択します サービス。 はじめにをクリックします ボタン(ある場合)をクリックして、紹介チュートリアルを閉じます。
まず、セキュリティポリシーを作成する必要があります 私たちの「もの」のために。 セキュア>ポリシーに移動します メニューをクリックし、ポリシーの作成をクリックします。 ボタンをクリックして、次の情報を入力します:
- 名前:LightStripPolicy
- アクション:*
- リソース:*
- 効果-許可:チェック済み
- [作成]をクリックします
これで、 IoTを作成できます もの 。
- 管理を選択します > 物事 メニューをクリックし、 Register a Thing をクリックして、新しいAWS IoTThingを作成します ボタン(または作成 右上隅のボタン)、次に単一のものを作成 。
- [名前]フィールドに「LS01」と入力します。他のフィールドはデフォルトのままにして、[次へ]をクリックします 。
- 証明書の作成をクリックします ワンクリック証明書作成のボタン セクション。
- デバイスとルートCAの3つの証明書をダウンロードします。ルートCAの場合、右クリックして保存する必要がある場合があります。
- 証明書をダウンロードしたら、アクティブ化をクリックします。 ボタン。
- ポリシーの添付をクリックします ボタンをクリックし、 LightStripPolicy を選択します 以前に作成したものを作成してから、[登録]をクリックします。 。
先に進む前に、AWSIoTエンドポイントを書き留めておく必要があります。 設定をクリックします AWS IoT Webページの左下隅にあるメニューを開き、それを開いてエンドポイントをメモします。
<図>「Thing」をリッスンするようにRaspberryPIを構成します
まず、 AWS IoT Device SDK for Python をインストールする必要があります RaspberryPIコマンドラインで次のコマンドを使用します。
sudopip3インストールAWSIoTPythonSDK
次に、GitHubからLightStripリポジトリをダウンロードし、解凍します。
mkdircd / home / pi / LightStripwget https://github.com/bportaluri/LightStrip/archive/master.zipunzip master.zip
/ home / pi / LightStrip / LightStrip-master / pi でIoTThingを作成したときにダウンロードした4つの証明書をコピーします フォルダ。
lightstripcfg.py を編集します 脚本。任意のテキストエディタを使用できます。 nano のコマンドは次のとおりです 編集者。
cd /home/pi/LightStrip/LightStrip-master/pinanolightstripcfg.py
次に、構成に一致するように設定を編集します。
- AWSIOT:前にメモしたAWSIoTエンドポイントを入力します。
- ROOT_CA:ルートCA証明書のファイル名
- 証明書:証明書のファイル名
- PRIVATE_KEY:秘密鍵のファイル名
- DEVICE_NAME:「LS01」のままにしておきます
nanoエディターを閉じ、「Ctrl + X」を押してから「Y」を押してファイルを保存します。
次のようにlightstrip.pyスクリプトを起動します。
sudo python3 Lightstrip.py
スクリプトは、接続されているUSBポートを一覧表示します。 Arduinoは/ dev / ttyACM0に接続する必要があるため、このようにポートを渡すスクリプトを実行します。
sudo python3 Lightstrip.py / dev / ttyACM0
テストクライアントはAmazonThing Shadowサービスに接続し、 LS01 の変更をサブスクライブします。 シャドウデバイス。接続が成功すると、クライアントスクリプトはそのステータスをLS01デバイスシャドウに更新し、次のような確認メッセージを受信します。
<図>すべてが正しく機能していることを確認するには、AWS IoTコンソールに戻り、管理>モノを選択します。 メニューをクリックして、 LS01 を開きます。 端末。 シャドウを選択します メニューをクリックすると、デバイスのシャドウ状態が表示されます。
編集をクリックします [シャドウドキュメント]セクションのリンクをクリックし、次のJSONドキュメントを[シャドウ状態]ボックスに貼り付けます。
{"desired":{"animation": "101"}}
表示される内容は次のとおりです。
<図>[保存]リンクをクリックすると、「デルタ」メッセージがRaspberry PIのMQTTクライアントに送信され、LEDストリップがオンになります。
次のJSONドキュメントは、色を青に変えます。
{"desired":{"color": "0066CC"}}
この時点で、ASW IoTサービスからLEDストリップを制御できるため、誇りに思う必要があります。
AWSLambda関数
AWS Lambdaを使用すると、サーバーをプロビジョニングまたは管理することなく、クラウドでコードを実行できます。これは、このプロジェクトの最後のステップで音声制御を可能にするAlexaスキルキット間の完璧な架け橋です。
AWSコンソールにログインします。サービスのリストから、ラムダを選択します 。
前の手順で使用したのと同じリージョンにログインしていることを確認します: US East(N。Virginia) または EU(アイルランド) 右上隅のゾーン。
関数の作成をクリックします ボタン。 最初から作成をクリックします 次のように構成します:
- 名前=LightStrip
- ランタイム=Python 3.6
- ロール=カスタムロールを作成します。これにより、新しいタブが起動します。 「許可」ボタンをクリックするだけで、lambda_basic_executionという名前の新しいロールを作成できます。
- 既存のロール:lambda_basic_execution
- [関数の作成]をクリックします ボタン
右上隅にあるLambdaARNIDをメモします。
<図>LightStrip をクリックします 機能コードセクションを表示するボックス。
コード入力タイプ:コードをインラインで編集
- ランタイム:Python 3.6
- ハンドラー:lambda_function.lambda_handler
lambda_function.py スクリプトはすでに定義されている必要があります。 LightStrip \ lambda \ lambda_function.py からコードを貼り付けます ファイルをコードエディタに入れます。
ala_controller.py という名前の別のファイルを作成します LightStrip \ lambda \ ala_controller.py からコードを貼り付けます ファイルをコードエディタに入れます。
これが全体の外観です。
<図>完了したら、オレンジ色の保存をクリックします 右上隅のボタン。
Alexaスキル
これで、Alexaのライトストリップカスタムスキルを作成できます。
Amazon Developer Consoleに移動し、必要に応じてサインインします。最初にアカウントを登録する必要があるかもしれません。
Alexa> Alexaスキルキット(はじめに)に移動します 。
<図>新しいスキルの追加をクリックします 右上隅にあるボタンをクリックし、スキル情報に次のデータを入力します タブ:
- スキルタイプ:カスタムインタラクションモデル
- 言語:英語(米国)
- 名前:LightStrip
- 呼び出し名:ライトストリップ
- [保存]をクリックします
これによりスキルが作成されます。スキルIDをメモします。
<図>相互作用モデルを選択します メニューをクリックし、 Launch Skill Builder をクリックします。 ボタン。
コードエディタをクリックします ボタンを押して、 LightStrip / alexaskill / lightstrip_skill.json のコンテンツを貼り付けます テキストボックスにファイルを入力します。
<図>モデルの保存をクリックします およびビルドモデル ボタン。モデルの作成には数分かかりますので、しばらくお待ちください。 スキル情報をクリックします ボタンをクリックして、スキル設定ページに戻ります。
次に、構成をクリックします。 メニュー。
サービスエンドポイントタイプで、 AWS Lambda ARN を選択します 次に、上記のLambda関数ARNを貼り付けます。
すべてのデフォルト値を残して、保存をクリックします 下のボタン。
AlexaスキルをLambda関数に接続します
Lambda関数に戻ります。右側には、事前定義されたトリガーのリストがあります。 Alexa Skills Kit を選択します 関数に追加されます。
<図>次のように構成します。
- アプリケーションID =上記でメモしたスキルID
- [追加]をクリックします
- [保存]をクリックします
完了です
これでプロジェクトは完了です。次の音声コマンドを試してください:
- オープンライトストリップ
- 電源を入れます
- 明るさを20パーセントに設定します
- 明るさを50パーセントに設定します
- 色を赤に設定
- 色をターコイズに設定
- 電源を切る
- エキサイティングなアニメーションを実行する
- リラックスできるアニメーションを実行する
LightStripスキルにより、より高度な音声対話も可能になります
- 私:Alexa、ライトストリップを開く
- Alexa:LightStripへようこそ-LEDストリップは青いライトで光ります
- 私:アニメーションを起動します
- Alexa:リラックスしたアニメーションまたはエキサイティングなアニメーションが必要ですか?
- 私:リラックス
- Alexa:OK-LEDストリップにランダムなアニメーションが表示されます
- 私:次のアニメーション
- Alexa:OK-別のランダムなアニメーションが表示されます
ここでの相互作用モデルをよりよく理解するために、スキルの完全なVUI図を示します。
<図>
機能強化と改良
起動時にAlaWebを自動的に起動します
プロジェクトの小さな拡張機能は、起動時にlightstrip.pyスクリプトを自動的に開始することです。これにより、Raspberry PIに電源を入れるたびに手動で起動する必要がなくなり、問題が発生してリセットする必要がなくなります。この指示に従ってください。
アニメーションの追加と調整
ライトストリップcskillには、すでに20のアニメーションバリエーションが定義されています。ただし、ALAライブラリを使用すると、アニメーションプリセット、カラーパレット、および速度を選択して、独自のアニメーションを簡単に設定できます。 ala_controller.pyスクリプトで、独自のアニメーションを追加したり、既存のアニメーションを微調整したりできます。 80行目あたりに、好みに応じて変更または拡張できるアニメーション設定のリストが表示されます。
コード
LightStrip
このプロジェクトに必要なすべてのコードhttps://github.com/bportaluri/LightStrip 回路図
製造プロセス
- フライトシミュレータ用のArduinoを備えたLCDパネル
- FS2020用のArduinoを備えたスイッチ/ LEDパネル
- LEDを制御するBluetoothを搭載したArduino!
- スマートシューズ(自動レーシングおよび発電)
- Arduino Quadruped
- ArduinoとMPU6050によるサーボモーターの制御
- BoltとArduinoを使用したLEDの明るさの制御
- u-blox LEA-6H 02GPSモジュールとArduinoおよびPython
- Arduinoを使用したシンプルでスマートなロボットアーム
- Arduinoによる音声認識と合成
- ArduinoUnoでLEDマトリックスを制御する