温湿度・気圧計測による音声アラート通知システム(2017/02/13)
サンプル動画
今回は、温湿度・気圧センサーを搭載した回路で計測し、計測結果に応じて音声でアラートを通知するシステムを作成しました。
前回までのサンプルで音声合成を利用した基本的な動作については説明させていただいたので、今回はより実用性の高いシステムを作成してみました。
Haruziraの音声認識を利用し、リモートで電子回路を操作できる機能も実装しています。
サンプルシステムの稼働デモを動画にしましたのでご視聴下さい。
遠隔のデバイスと音声でのコミュニケーションが実現することで、モニターやメール通知、単純なブザーなどを利用した一般的なシステムには無い様々な可能性が考えられるのではないでしょうか。
システムの構成は、電子回路側のみでも実用性を得ることができるように作成しましたので、前回までのサンプルと比較して少し複雑になっています。
Client |
本体:Raspberry Pi3 B OS:Raspbian version 4.4.32 プログラム言語:Python version 3.4.2 Haruzira SDK:version 2.0.0.0 |
---|---|
電子回路(client) |
LED1:3mm緑色LED UG3804X 波長525nm 明るさ960mcd以上(@20mA) VF 4.2V以下 ※VF4.2以下となっているが、データシート上は3.3Vで10mA程流れるようなので利用してみました。本来の性能を出すには4V程度の電圧が必要。 LED2:3mm赤色LED LT3U31P 波長660nm 明るさ250mcd(@20mA) VF 1.85V(~2.5V) 抵抗:240Ω、220Ω タクトスイッチ×2個 プルダウン抵抗:Raspberry Pi内蔵の抵抗(プログラムで設定) 温湿度・気圧センサー:AE-BME280(秋月電子) I2C/SPI対応 測定レンジと精度(温度:-40~+85℃,±1℃、湿度:0~100%,±3%、気圧:300~1100hPa,±1hPa) LCD(16文字×2行):ストロベリー・リナックス製低電圧I2C液晶モジュール 3.3V HD44780コンパチブル ST7032iコントローラー搭載 |
音声合成出力(Server) |
本体:自作PC及び、Freetel Katana 02(スマートフォン) OS:Windows 10 desktop and mobile version 1607 音声出力アプリ:Haruzira version 2.1.0.0 |
システムの機能
- 温湿度・気圧を定期的に計測し液晶モジュールに計測値を表示する。(10秒毎)
- 温度・湿度センサーは設定した上下限値を超えるとアラートメッセージを送信し音声で通知する。
- 気圧センサーは、爆弾低気圧の発生を監視し、発生時にアラートメッセージを送信し音声で通知する。
- スイッチ(緑)で計測結果を送信し音声で通知する。送信時にLED(緑)が点灯し、計測結果のスピーチ完了時に消灯する。
- スイッチ(赤)でアラート機能をON/OFFする。ONにするとLED(赤)が点灯し、アラート発生時に点滅に切り替わる。 OFFにすると消灯し、アラートの通知機能は無効になる。
- Haruziraの音声認識機能でコマンド送信し、アラート機能のON/OFF操作及び温湿度・気圧の計測結果を音声通知できる。
デモの様子を動画にしました
配線図と回路図
配線図と回路図は動画に含まれています。
POINT
- 基本的なポイントについては、前回までのサンプルを参照する。
-
利用するGPIOピン: GPIO22, 23はタクトスイッチの入力用として使用する。GPIO24, 25はプログラムからLEDの出力用に利用している。
- 温湿度・気圧センサーとLCDはI2Cで接続する。
制御プログラム
動画では、Raspberry Piを制御するプログラム言語として、Pythonを利用しています。
また、SDKのユーザーマニュアルも公開していますので、詳細を知りたい場合は参照して下さい。
前回までのサンプルと比較して回路が複雑になり機能が増えている分、プログラムも少し複雑になっています。
センサーの制御など組み込みソフトウェアの制御に慣れていない方にも理解しやすくなるよう要所にできるだけコメントを追加しています。
それらのコメントと電子パーツ毎に提供されているデータシートなどを参照することで多少は理解が深まるのではと考えています。
データシートを読む場合は、レジスタ領域のメモリーマップや制御コード、初期化の制御フローページを特に注目してみてください。
公開先
プログラムの補足
アラートLEDの監視は、スレッドで処理をしています。GPIOの制御がスレッドセーフになるようにロック処理を行っています。
アラート発生時に送信するメッセージ通知と、ユーザーが任意に操作を行う気象状況メッセージ通知の送信時にタイムスタンプを取得し管理しています。
このタイムスタンプでスピーチ完了メッセージ受信時の振る舞いを制御しています。タイムスタンプの利用方法などに注意してみて下さい。
音声認識によるコマンド送信時は、各LEDの処理を応答のスピーチ完了後に行っています。これは会話によって次の動作を行っているような振る舞いにするためです。
コマンド受信後の処理タイミングを変更することで、状況に合わせた振る舞いをプログラムすることができます。
また、爆弾低気圧の監視については、1h毎の計測値を蓄積し、最大24h以内に発生している可能性があるか目安値を算出しています。(緯度は東京近郊の35°で計算)
詳細は、ソースコードを参照して下さい。
なお、ソースファイルの構成に関しては、「readme_ja.txt」ファイルを参照して下さい。