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

スマート3Dセンサー: WalabotとAlexaで声によるランプ制御 – LattePanda活用

必要なパーツと用品

Amazon Echo(Alexa搭載スマートスピーカー) ×1
Walabot Creator(3Dイメージングセンサー) ×1
Arduino Leonardo(LattePanda内蔵のATMega32u4として機能) ×1
リレーモジュール ×2
LattePanda 2G/32GB(Windows 10搭載SBC) ×1
LattePanda 7インチ 1024×600 IPSディスプレイ ×1
ランプ(照明器具) ×2

プロジェクト概要

課題: スマートホームデバイスの名前管理

Alexaなどのスマートスピーカーで複数のデバイスを制御する際、「どのデバイス名で呼べばいいか覚えてられない」「間違えて別のデバイスが動く」「イライラして手動操作に戻る」といった問題が起きがちです。「Alexa、このランプをつけて」と言っただけで、自分の近くにあるランプを特定して点灯できたら便利ではないでしょうか。

解決策: Walabotによる位置検出

カメラを部屋に設置して画像認識するのはプライバシーの観点から避けたいところです。そこで Walabot を使います。Walabotは電波(RF)を用いた3Dイメージングセンサーで、カメラなしで人の位置や動きを検出できます。手持ちサイズでプログラマブル、SDK/APIが提供されており、カスタムアプリ開発が可能です。

スマート3Dセンサー: WalabotとAlexaで声によるランプ制御 – LattePanda活用

LattePandaの役割

LattePandaはIntel Atom x8300(クアッドコア)搭載のWindows 10動作SBCです。オンボードでArduino Leonardo互換のATMega32u4コプロセッサーとGPIOを備え、Walabot(USB接続)とArduino制御(リレー駆動)を1台で完結できます。

スマート3Dセンサー: WalabotとAlexaで声によるランプ制御 – LattePanda活用
スマート3Dセンサー: WalabotとAlexaで声によるランプ制御 – LattePanda活用

Node-REDでロジック構築

Node-REDはブラウザベースのフローエディターで、IoTデバイス連携ロジックを視覚的に組めます。以下のノードを使用:

スマート3Dセンサー: WalabotとAlexaで声によるランプ制御 – LattePanda活用

システム動作の流れ

スマート3Dセンサー: WalabotとAlexaで声によるランプ制御 – LattePanda活用

3つのステップで構成:

  1. Walabotサービス処理(Python): Walabotから検出された物体(人)の座標を読み取り、TCPポート1890でJSONストリームとして配信。
  2. Walabotオブジェクトデータ取得・保存(Node-RED): ポート1890からJSONを受信、パースして最新の検出位置(X, Y, Z)をグローバル変数に保存。
  3. Alexaコマンド処理(Node-RED): Alexaからの制御コマンド受信時、保存されている最新位置に基づき、どのランプ(どのArduinoピン/リレー)を操作するか判定・実行。

ハードウェア構成

インストール手順

  1. Walabot SDKインストール: 公式サイトからダウンロード・インストール。
  2. LattePandaでArduinoピンアクセス有効化: Windowsの「開発者モード」をONにする(設定→更新とセキュリティ→開発者向け)。
  3. Arduino IDEでStandardFirmata書き込み:
    1. Arduino IDEを開き、「ファイル」→「スケッチ例」→「Firmata」→「StandardFirmata」を選択
    2. ボード:「Arduino Leonardo」、ポート: LattePandaのCOMポートを選択
    3. 書き込み実行
  4. リレーをLattePandaのGPIOに接続(デジタルピン制御)。
  5. Node.jsとNode-REDインストール: Node.js インストール後、npm install -g node-red でNode-RED導入。LattePanda公式ガイドも参照。
  6. Python 3インストール(Walabot Python SDK用)。
  7. プロジェクトリポジトリをクローン・実行:
    git clone https://github.com/rondagdag/smart3DSensorForAlexa
    cd smart3DSensorForAlexa
    npm install
    npm start
    
  8. Alexaアプリでスマートホームスキル有効化: 同一WiFiネットワーク上で「Alexa, discover devices」と話しかけ、ランプを検出させる。Node-REDエディターは https://localhost:8080/red/ でアクセス可能。

主要コード断片

Walabot Python サービス(TCP 1890でJSON配信)

from __future__ import print_function
from sys import platform
from os import system
from imp import load_source
import socket, sys

WalabotAPI = load_source('WalabotAPI', 'C:\\Program Files\\Walabot\\WalabotSDK\\python\\WalabotAPI.py')

if __name__ == '__main__':
    WalabotAPI.Init()
    WalabotAPI.SetSettingsFolder()
    WalabotAPI.ConnectAny()
    WalabotAPI.SetProfile(WalabotAPI.PROF_SENSOR)
    WalabotAPI.SetThreshold(35)
    WalabotAPI.SetArenaR(50, 400, 4)
    WalabotAPI.SetArenaPhi(-45, 45, 2)
    WalabotAPI.SetArenaTheta(-20, 20, 10)
    WalabotAPI.SetDynamicImageFilter(WalabotAPI.FILTER_TYPE_MTI)
    WalabotAPI.Start()

    system('cls' if platform == 'win32' else 'clear')
    numOfTargetsToDisplay = 1

    if len(sys.argv) == 2:
        TCP_IP = '127.0.0.1'
        TCP_PORT = int(sys.argv[1])
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind((TCP_IP, TCP_PORT))
        s.listen(1)
        conn, addr = s.accept()

        while True:
            WalabotAPI.Trigger()
            targets = WalabotAPI.GetSensorTargets()
            finds = '{"targets": ['
            for i, t in enumerate(targets):
                if i < numOfTargetsToDisplay:
                    print('Target {}\nx = {}\ny = {}\nz = {}\n'.format(i+1, t.xPosCm, t.yPosCm, t.zPosCm))
                    finds += '{"x": "%s", "y": "%s", "z": "%s"}' % (t.xPosCm, t.yPosCm, t.zPosCm)
            finds += ']}'
            conn.sendall(str.encode(finds))
        conn.close()
    WalabotAPI.Stop()
    WalabotAPI.Disconnect()

Node-RED: JSONパースとグローバル変数保存(Functionノード)

raw = msg.payload.toString('UTF-8');
j = JSON.parse(raw);
var msg1 = { payload: raw };
var msg2 = { payload: j };
if (raw.length > 20) {
    X = msg2.payload.targets[0].x;
    Y = msg2.payload.targets[0].y;
    Z = msg2.payload.targets[0].z;
    global.set("X", X);
    global.set("Y", Y);
    global.set("Z", Z);
    var msg3 = { payload: X };
    var msg4 = { payload: Y };
    var msg5 = { payload: Z };
}
return [msg1, msg2, msg3, msg4, msg5];

Node-RED: Alexaコマンド受信時の判定ロジック

node-red-contrib-alexa-local ノードでAlexaからのコマンドを受け、保存済みの位置(X, Y, Z)に基づき、どちらのリレー(ランプ)を操作するか振り分けます。フロー上ではFunctionノードで条件分岐を記述。

スマート3Dセンサー: WalabotとAlexaで声によるランプ制御 – LattePanda活用

補足

本プロジェクトではカスタムAlexaスキルは作成せず、組み込みのスマートホーム機能(Philips Hueエミュレーション)を node-red-contrib-alexa-local で利用しています。これにより、「Alexa, turn on lamp」などの標準的な発話で制御可能です。

完全なNode-REDフローとPythonコードは GitHubリポジトリ で公開されています。

製造プロセス

  1. Raspberry Pi 3でコンピュータビジョン搭載SmartThingsモーションセンサー
  2. Raspberry Pi用DIY赤外線モーションセンサー構築 - ステップバイステップガイド
  3. スマートゴミ箱:自動廃棄物管理のためのセルラーIoTソリューション
  4. Raspberry PiとPythonでAmazon AlexaからChromecastを制御
  5. スマート信号機:IoTで実現する適応型街路灯
  6. Raspberry Pi で障害物回避ロボットを自作 – 初心者ガイド
  7. スマートペン:Raspberry PiとIMUで手書きと動きをリアルタイム追跡
  8. スマートテキスタイル向け超高感度・高耐久ひずみセンサーを開発
  9. 革新的超薄型センサーがスマートコンタクトレンズ機能を強化
  10. 先進TOMOPLEXセンサーフィルムで航空宇宙機のリアルタイム監視を実現
  11. ヒーテッドアパレル:専門家が明かすスマートテキスタイルの主役