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

ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

必要なパーツと材料

パーツ数量備考
Arduino UNO1Arduino Nanoでも代用可能。より多くのLEDピクセルを駆動する場合はArduino Megaが適しています。
Raspberry Pi 3 Model B1
NeoPixelストリップ (WS2812)1WS2812ベースのアドレサブルLEDストリップであれば何でも使用可能。

使用するアプリとオンラインサービス

プロジェクトの概要

アドレサブルRGB LEDストリップの無限の色表現とアニメーション機能に魅了され、筆者は数年前にArduino用ライブラリ「ALA (Arduino Light Animations)」を開発しました。今回はAmazon Alexaを使って、音声で照明とエフェクトを制御できるようにします。

システム構成

本プロジェクトは以下のコンポーネントで構成されます。

ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

各パーツ自体は難しくありませんが、相互接続が多いため、ステップバイステップで着実に構築することをお勧めします。プロジェクトは2つのフェーズに分けて説明します。

第1フェーズ: ハードウェアとWeb制御の構築

筆者のHackster.ioプロジェクト「Web-Controlled LED Animations with Raspberry Pi and Arduino」を参照し、Raspberry Pi、Arduino、WS2812 LEDストリップの接続から、スマートフォンやPCのブラウザからアニメーションを制御できるところまでを完了させます。

ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

第2フェーズ: Alexaによる音声制御の追加

ここからは音声制御を実現するためのクラウド側の設定を行います。手順が多いため、焦らず丁寧に進めてください。

AWS IoTの設定

IoTモノの作成

  1. AWSコンソールにログイン (アカウントがない場合は無料枠で作成)。
  2. リージョンを「米国東部 (バージニア北部)」または「EU (アイルランド)」に設定。
  3. 「IoT」で検索し、「AWS IoT」サービスを開く。「Get Started」があればクリックしてチュートリアルを閉じる。
  4. セキュリティポリシーの作成: 「Secure」→「Policies」→「Create a Policy」
    • Name: LightStripPolicy
    • Action: *
    • Resource: *
    • Effect: Allow にチェック
    • 「Create」をクリック
  5. IoTモノの作成: 「Manage」→「Things」→「Register a Thing」→「Create a single thing」
    • Name: LS01 (他はデフォルト)
    • 「Next」→「Create certificate」 (ワンクリック証明書作成)
    • デバイス用の3つの証明書とルートCAをダウンロード (ルートCAは右クリックで保存)
    • 「Activate」→「Attach a Policy」で先ほどの LightStripPolicy を選択 →「Register Thing」
  6. エンドポイントの確認: 左下の「Settings」メニューを開き、エンドポイントをメモしておく。
ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

Raspberry Piでモノのシャドウを購読する設定

  1. AWS IoT Device SDK for Pythonをインストール:
    sudo pip3 install AWSIoTPythonSDK
  2. GitHubからLightStripリポジトリを取得:
    mkdir -p /home/pi/LightStrip
    cd /home/pi/LightStrip
    wget https://github.com/bportaluri/LightStrip/archive/master.zip
    unzip master.zip
  3. 手順4でダウンロードした4つの証明書を /home/pi/LightStrip/LightStrip-master/pi にコピー。
  4. lightstripcfg.py を編集 (nanoエディタの場合):
    cd /home/pi/LightStrip/LightStrip-master/pi
    nano lightstripcfg.py
    以下の項目を環境に合わせて設定:
    • AWSIOT: 先ほどメモしたエンドポイント
    • ROOT_CA: ルートCA証明書のファイル名
    • CERTIFICATE: 証明書のファイル名
    • PRIVATE_KEY: 秘密鍵のファイル名
    • DEVICE_NAME: LS01 のまま
    Ctrl+X → Y で保存。
  5. スクリプトを実行:
    sudo python3 lightstrip.py
    接続されているUSBポートが表示されるので、Arduinoが /dev/ttyACM0 にある場合:
    sudo python3 lightstrip.py /dev/ttyACM0

正常に接続されると、クライアントスクリプトがLS01デバイスシャドウにステータスを更新し、ACKメッセージを受信します。

ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

動作確認

AWS IoTコンソールで「Manage」→「Things」→「LS01」→「Shadow」を開き、「Edit」をクリック。以下のJSONを「Shadow state」に貼り付けて「Save」:

{ "desired": { "animation": "101" } }

LEDストリップが点灯すれば成功です。色を青に変えるには:

{ "desired": { "color": "0066CC" } }
ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

AWS Lambda関数の作成

AWS Lambdaはサーバーレスでコードを実行できるサービスで、Alexa Skills KitとIoTの間を橋渡しします。

  1. AWSコンソールで「Lambda」を選択 (同じリージョンを使用)。
  2. 「Create Function」→「Author from scratch」
    • Name: LightStrip
    • Runtime: Python 3.6
    • Role: 「Create a custom role」→新しいタブで「Allow」をクリックし、lambda_basic_execution ロールを作成
    • Existing role: lambda_basic_execution を選択
    • 「Create Function」
  3. 右上の Lambda ARN ID をメモ。
  4. 「LightStrip」ボックスをクリックし、コードエントリタイプを「Edit code inline」に。Runtime: Python 3.6、Handler: lambda_function.lambda_handler。
  5. GitHubリポジトリの LightStrip/lambda/lambda_function.py と ala_controller.py の内容をそれぞれ貼り付け、「Save」。
ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方
ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

Alexaスキルの作成

  1. Amazon Developer Console にサインイン。「Alexa」→「Alexa Skills Kit (Get Started)」。
  2. 「Add a New Skill」→「Skill Information」タブ:
    • Skill Type: Custom Interaction Model
    • Language: English (U.S.)
    • Name: LightStrip
    • Invocation Name: light strip
    • 「Save」→ Skill IDをメモ
  3. 「Interaction Model」→「Launch Skill Builder」→「Code Editor」に LightStrip/alexaskill/lightstrip_skill.json の内容を貼り付け。「Save Model」→「Build Model」 (数分かかります)。
  4. 「Configuration」メニューで、Service Endpoint Type を「AWS Lambda ARN」にし、先ほどのLambda ARNを貼り付け。「Save」。
ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方
ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方
ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

AlexaスキルとLambda関数の連携

  1. Lambda関数の画面に戻り、右側のトリガー一覧から「Alexa Skills Kit」を選択して追加。
  2. Application Id にスキルIDを入力、「Add」→「Save」。
ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

完成! 音声コマンドで試そう

以下のコマンドで動作を確認できます:

より高度な対話も可能です:

ユーザー: Alexa, open Light Strip
Alexa: Welcome to LightStrip - LEDストリップが青く光ります
ユーザー: Launch an animation
Alexa: Do you want a relaxing or exciting animation?
ユーザー: Relaxing
Alexa: OK - ランダムなリラックス系アニメーションを表示
ユーザー: Next animation
Alexa: OK - 別のランダムアニメーションを表示

ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

機能拡張と改良のヒント

起動時に自動でスクリプトを実行

Raspberry Pi起動時に lightstrip.py が自動実行されるよう設定しておくと、手動起動の手間が省けます。systemdサービスや /etc/rc.local への登録などで対応可能です。

アニメーションの追加と調整

Light Stripスキルには20種類のアニメーションバリエーションが定義されていますが、ALAライブラリを使えばプリセット、カラーパレット、速度を組み合わせて独自のアニメーションを簡単に作れます。ala_controller.py の80行目付近にあるアニメーション設定リストを編集・追加してください。

コードとリソース

全コードはGitHubで公開されています: https://github.com/bportaluri/LightStrip

回路図

ArduinoとAlexaで制御するアニメーション対応スマートLEDストリップの作り方

製造プロセス

  1. Arduino Nano 33 IoT製 フライトシミュレーター2020用コックピットパネル - LCD&CDI表示
  2. Microsoft Flight Simulator 2020用Arduinoスイッチ&LEDパネル
  3. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  4. スマート自動靴紐シューズ:発電機能内蔵で実用性抜群
  5. スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
  6. Arduino & MPU6050:SG90 & MG996Rサーボの精密制御
  7. Bolt IoTとArduino UNOでLED輝度をシームレス制御
  8. u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
  9. スマートなArduino制御ロボットアームの製作:簡単DIYチュートリアル
  10. Arduino Dueでマスターする音声認識と音声合成
  11. Arduino Unoで8×8 LEDマトリックスを制御:ステップバイステップガイド