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

Alexaでシーリングファンを音声制御:ステップバイステップガイド

必要な部品と材料

部品数量備考
Raspberry Pi 3 Model B1ローカルサーバー用
Arduino UNO1リレー制御用
リレー(汎用)15V駆動タイプまたはリレーインターフェースボード推奨
ファンレギュレーター1抵抗ブロック式の旧型が端子接続しやすく推奨

必要な工具

必要なソフトウェア・サービス

プロジェクト概要

一般的なシーリングファンをAmazon Alexa対応のスマートファンに改造します。Alexaスキルで音声コマンドを受け取り、ngrok経由でローカルのRaspberry Piサーバーにリクエストをルーティング。Raspberry Piからシリアル通信でArduinoに指令を送り、リレーを介してファンレギュレーターの速度段階を切り替えます。

Raspberry Piローカルサーバーの構築

必要パッケージのインストール

# Python pip(Python 2.7/3なら標準付属)
sudo apt-get install python-pip

# Flask(軽量Webフレームワーク)
pip install flask

# flask-ask(Alexaスキル開発用拡張)
pip install flask-ask

# pyserial(シリアル通信)
sudo apt-get install pyserial

# Python開発ヘッダー
sudo apt-get install libpython2.7-dev

Pythonサーバーコード(Flask + Flask-Ask)

from flask import Flask
from flask_ask import Ask, statement
import serial

ser = serial.Serial("/dev/ttyAMA0", 9600)
app = Flask(__name__)
ask = Ask(app, '/')

@ask.launch
@ask.intent("FanOn")
def on():
    ser.write(b'1')
    return statement("Ceiling Fan turned on.")

@ask.intent("FanOff")
def off():
    ser.write(b'0')
    return statement("Ceiling Fan turned off.")

@ask.intent("FanLevelUp")
def up():
    ser.write(b'+')
    return statement("Ceiling Fan speed up.")

@ask.intent("FanLevelDown")
def down():
    ser.write(b'-')
    return statement("Ceiling Fan speed down.")

if __name__ == "__main__":
    app.run(debug=True)

このスクリプトを実行し、Raspberry Piの自動起動に登録します。

ngrokのセットアップ

  1. ngrok公式サイトからARM版をダウンロード・解凍
  2. 実行:./ngrok http 5000
  3. 生成されたHTTPS URL(例:https://xxxx.ngrok.io)をAlexaスキルのエンドポイントに設定

Alexaスキルの作成

  1. Amazon Developer Consoleで開発者登録・ログイン
  2. 「Alexa Skills Kit」→「Add new skill」
  3. スキル名・呼び出し名(Invocation Name)を設定(例:「シーリングファン」)
  4. インテント定義(JSON):
{
  "intents": [
    { "intent": "FanOn" },
    { "intent": "FanOff" },
    { "intent": "FanLevelUp" },
    { "intent": "FanLevelDown" }
  ]
}
  1. サンプル発話:
FanOn          say fan on / say on
FanOff         say off / say fan off
FanLevelUp     say fan level up / say increase fan speed
FanLevelDown   say fan level down / say decrease fan speed
  1. エンドポイント設定:HTTPS選択、ngrokのURLを指定
  2. SSL証明書:2番目のオプション(自動信頼)を選択
  3. テスト:ngrokとPythonサーバー両方稼働中にAlexaシミュレーター或は実機で発話テスト

Arduinoスケッチ

6段階の速度制御に対応(リレー6個を制御)。シリアルコマンド:'1'=ON(最低速), '0'=OFF, '+'=速度UP, '-'=速度DOWN。

int Fan[] = {13, 12, 11, 10, 9, 8}; // 6つのリレー制御ピン
int n = 0; // 現在の速度段階(0=OFF, 1-6=速度段階)

void setup() {
  for (int i = 0; i < 6; i++) {
    pinMode(Fan[i], OUTPUT);
  }
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
    char x = Serial.read();
    reset();
    set(x);
  }
}

void reset() {
  for (int i = 0; i < 6; i++) digitalWrite(Fan[i], LOW);
}

void set(char x) {
  switch (x) {
    case '1': n = 1; break;      // ON(最低速)
    case '+': n++; break;        // 速度UP
    case '-': n--; break;        // 速度DOWN
    case '0': n = 0; break;      // OFF
  }
  // 範囲制限
  if (n < 0) n = 0;
  if (n > 6) n = 6;
  if (n > 0) digitalWrite(Fan[n-1], HIGH); // 配列0-index調整
}

ハードウェア接続

回路図を参照。ファンレギュレーターの各速度端子をリレーで切り替え、ArduinoのD8-D13に接続。Raspberry PiのUART(/dev/ttyAMA0)とArduinoのUSB/シリアルで接続。

応用アイデア

同様の仕組みで、照明、エアコン、カーテンなど任意の家電を音声制御可能です。

製造プロセス

  1. 家庭用の低コストワイヤレスセンサーネットワークを構築
  2. スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
  3. Arduino電源制御センター:N-FET/P-FET/リレー/RTC搭載キット
  4. ラズベリーパイとNode-REDでAlexaからLEDを制御する - 簡単ステップバイステップガイド
  5. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  6. DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
  7. Arduino Nanoとジョイスティックで2軸ステッピングモーターを制御:Visuinoで簡単プログラミング
  8. Windows 10 CortanaでBluetooth経由でArduinoのLEDを制御
  9. Arduino IoT CloudとAlexaでテレビを音声操作:ステップバイステップガイド
  10. セントラルヒーティングをArduinoでスマート制御:OpenThermシールド活用ガイド
  11. Arduino Unoで25kHz 4ピンPWMファンを制御 – 製作・コード・テスト