SSブログ

ワイヤレスセンサー端末の製作

モノワイヤレス社の無線モジュールTWELITEには、センサーとI2CやSPIで通信して取得したデータやアナログ⼊⼒をAD変換したデータ ならびにスイッチのON/OFF(High/Low)状態変化情報を無線送信する機能があります。
当機はこれら様々な形態で送られて来るデータに、1台で⼦機8台までの受信対応する無線ターミナルです。
防犯、介護、環境モニターなどに役⽴てられると思います。
(2021.01.15 Raspberry pi版も作りました。=> 参照
(2021.05.03 ESP32版を作りました。=> 参照)
(2021.01.27 ESP32 & 2.8"グラフィックLCD版を作りました。=> 参照)

--- 内容 ---
1. 機能概要
2. 回路図
3. 装置の製作
4. TWELITEの設定
5. ソフトウェア
6. 使用・設定方法
7. 後記
8. <追記>


1. 機能概要

ワイヤレスセンサー ターミナル.jpg

TWELITEが対応するセンサーのタイプには2種類あり、I2C, SPI通信やAD変換を使った数値データタイプと、ON/OFF(0/1 ロジック)の変化を検出するスイッチタイプがあります。
スイッチタイプは、例えば⼈感センサーやドアの開閉センサーなどで、状態がON->OFF あるいはOFF->ON の変化があった時に発報します。

当ターミナルではデータタイプのセンサーについてはキャラクターLCD画⾯にデータを表⽰し、スイッチタイプのセンサーについてはイベント発⽣時に⾚LED点灯、アラーム⾳出⼒とLCDにセンサーの情報表⽰を⼀定時間⾏うようにしてあります。(データタイプでも リミット設定をした場合はリミットを超えたときにイベント発⽣のアラーム処理をします。)
データ表⽰に関しては センサーが増えた場合1ページ(20⽂字x4⾏)では表⽰しきれないので、4ページまでを⼀定時間ごとに⾃動で切り替えるか、ある特定のページを表⽰し続けるかの設定ができます。
これらのアラーム設定やLCD表⽰に関する諸設定はtext形式の設定ファイル(Config.txt)をPCで編集して行えます。

この他次のような機能があります。
・日付時間表⽰
・イベント発⽣時の通報や測定データのメール送信
(2019.08.08記 現在ほとんどのメールサーバーはセキュリティが強化されていて、当ブログで提供しているプログラムではそれらのサーバーに直接メール送信できません。ここではRaspberry pi を仲介した方法で提供しています。「ESP8266 から raspberry pi 経由でメールを送る」を参照願います。)
(2019.10.04記 最近so-netサーバーは非暗号化SMTPでも送れています。<追記> 2019.10.04 を参照願います。)

・イベント発⽣記録や測定データを保存 (ロギング機能 )

日付時間表示、メール、ロギング機能(正しい日付時間が必要な場合)にはインターネット接続が必要です。但しオプションのRTC(RealTime Clock)が有る場合はインターネットに繋がっていなくても日付時間表示と正しい記録時間のロギングが可能です。

機能のより詳細については「ワイヤレスセンサー端末 取り扱い説明」 を参照ください。
また設定ファイルについては「設定(Config)ファイル作成手順」を参照ください。


2. 回路図

図1にブロック図を、図2、図3に回路図を⽰します。
⼿作りのためできるだけ市販の回路モジュールを使って配線を簡単にしました。

図1 ブロックダイヤグラム
ブロック図.jpg

図2 BOTTOM基板回路図
回路図(1).jpg

図3 TOP基板回路図
回路図(2).jpg

モジュール類回路図はこちらを参照願います。 => 参照


メインコントローラーには「ESP-WROOM-02開発ボード」(ここでは以後 ESPr One と呼びます。スイッチサイエンス社製)を使っています。
(「ESP-WROOM-02開発ボード」にはArduino Uno同一形状のものとそうでないものがあります。ここでは同一形状のもの(3,000円程度)を使っていますので注意してください。
2019.06.09追記 Arduino Uno同一形状でないタイプの開発ボードを使ったものを「ESP8266を使った猿検知通報システム親機の製作」で作製しました。回路と構造をご参照ください。当記事のソフトでも動作します。

ESPr Oneは、「"ESP8266 WiFiマイクロチップ"を搭載した "ESP-WROOM-02 WiFiモジュール"」 を搭載した開発ボードです。
このESP8266チップはMPU機能も持っていますので、それをプログラムすることでDIO制御やUART通信 他の処理ができます。

ESPr One上のESP-WROOM-02のUART RXD⼊⼒は FT231からのTXとTWELITEからのTXをスライドスイッチで切り替えできるようにしてあります。PCからプログラムを書き込むときは FT231側、通常使⽤するときはTWELITEからのデータ受信側にします。 改造⽅法については「基板製作」の最終ページを参照してください。
(因みにESP-WROOM-02のUART TXDは常時FT231とTWELITEにつながっていますので、プログラム動作中のSerial出力(Serial.print)はPCのシリアルモニターで表示可能です。)

キャラクターLCDには5V系のものを使いI2C->パラレル変換は PCF8574を使ったモジュールを使っています。
もしLC D I/FモジュールでI2C pull-upが5VになっていたらPull-up抵抗を外してください。ESP-WROOM-02は3.3V系なので傷めてしまいます。本来ならレベルシフト回路を⼊れるべきでしょうが、HIGH levelが3.3Vあれば 5V系のCMOSでもHIGH levelとして検知されるのでBOTTOM基板上で 3.3VにPull-upしておけば動作すると思います。
3.3V電源の LCDを使う場合はESPr One上の3.3Vを使わずに 5V->3.3Vのレギュレータを別途設けた⽅が電源容量の点で無難です。

PCA9622はESPr OneからのI2Cデータに応じてLED点灯とMelody ICの電源を制御します。
PCAL9555は押されたスイッチのコードをI2CデータにしてESPr Oneに送ります。
スイッチの端⼦間に⼊るコンデンサーはスイッチに近い場所に置いてください。PCAL9555のピン近くに置くとリンギング電圧がICの⼊⼒範囲を超え、ICを損傷する可能性があります。

Mute、Melody, Buzzer信号は夫々の出力トランジスタのコレクタを一つのコレクタ抵抗につないだOR構成にしてあり、Buzzer, Melodyの選択はソフトで⾏い、MuteするときはMute出力TransistorをONしてGNDに強制クランプします。

AMP NJM386の⼊ ⼒範囲を超えないように、抵抗分割とボリューム範囲設定をしてあります。(2019.02.24記 設定が不適当でしたので修正しました。最後の追記を参照してください。)
出⼒ 側の回路定数はスピーカーによって異なりますので、NJM386の仕様書を参考に決めてください。

⾚LEDをTOP基板上に載せられるとよかったのですが 基板上のスペースならびにケース内のスペースの問題があり、それでも前⾯に向けて配置したかったので 別基板にして対処しました。

子機センサーの位置にもよりますが、汎用性を考えると親機のTWELITEはマッチ棒アンテナよりダイポールアンテナにしておいた方がよいと思います。

(2020.08.18追記)
インターネットに接続されていない環境でも正しい日付時間でデータロギングできるように、オプションでRTC(Adafruit DS3231 RTC Breakout)を追加できるようにしました。
約2,000円するので本当に必要な場合のみ追加してください。


3. 装置の製作

基板の構造と組み⽴ての様子を写真でまとめたものを作りましたので参照ください。

基板製作 => 参照
組み立て => 参照

まずはケースを選ばないと基板サイズや部品配置が決められないのですが、台湾に住んでいますのでこちらで購入したものを使いました。
(ケースメーカー不明、型名 RM-45、外形 130 x 100 x 45、台北科技大学近くの今華電子で購入)
ケース(1).jpg

良さそうなサイズのものを探して作ったのですが、ちょっと⾼さが低く 前面向きのLEDをTOP基板に載せられず別の基板にせざるをえませんでした。日本なら良いサイズのケースがあるかと秋葉原で探し歩いたのですが見つからず、結局今はこれがベストチョイスです。フロント・リアの分離パネル構成なので加⼯がしやすく手作りには向いています。

センサー⼦機
今回 プログラム開発⽤に作った⼦機の回路図と写真をまとめました。
とりあえず信号を送れれば良かったので作りは少々雑です。
=> 参照 <2019.10.01修正>

EKMB1301111Kを使った屋内用子機を作りました。
=> 参照 <2020.11.09追記>


4. TWELITEの設定

TWELITEのプログラムは親機⼦機共に無線タグアプリ(App_Tag)に書き変えてください。(書き込みにはTWELITE R が必要です。)

親機: App_Tag-Parent-xxx
子機: App_Tag-EndDevice-xxx

ダウンロード元
https://mono-wireless.com/jp/products/TWE-APPS/App_Tag/download.html

インタラクティブモードで次の設定をします。
親機: UART出力を書式形式のアスキー文字で出力
子機:「センサ種別」と「センサ固有パラメータの設定」


5. ソフトウェア

ESP8266のプログラムと書き込みはArduino IDE を使って行うことができます。
Arduino IDEのインストールやESP8266ボードの追加方法は、インターネット上にいろいろ掲載がありますのでそれを参考にしてください。
(「ESP8266用にArduino IDEを使えるようにする」方法をまとめました。 <追記> 2019.04.06 参照。)

プログラムを組む上での最⼤の懸念は シングルコアCPUでシリアル⼊⼒と計算や表示処理を⾏ってシリアルのデータ取りこぼしが起きないかということでしたが、Protothread という並列処理ライブラリがあるのを知り、これを⽤いたことでパケットの取り込みは問題なく⾏えています。
ただ、Protothreadではローカル変数が使えないことと排他制御が厄介でした。

次なる懸念はメール送信でした。2017年の夏ごろは送信に結構時間がかかっていたのですが、その後LibraryをUpdateしたら早くなっていました。しかし簡単なメッセージでも2秒ぐらいかかり、その間はシリアル取り込みthreadは⽌まっていますので、メール送信プログラムの途中に何度かシリアル取り込みの処理を呼び出すようにしました。

プログラム(設定ファイル含む)のダウンロードはこちらです。
こちらの修正を適用してください。=> 参照 (2021.05.04更新)
こちらの修正も適用してください。=> 参照 (2021.10.03追加)

・RTC対応も可能にしたバージョン V3.1をリリースしました。 (2020.08.19)
・ファイルに更新日時情報(タイムスタンプ)を記録できるようにし、またGmailサーバーを使ったメール送信ができるようにしました。(2020.07.12時点)
・Raspberry Pi経由のメール送信を行うにはRaspberry pi側の設定が必要です。こちらを参照願います。

プログラムの構成 => 参照

なお、当プログラムの動作保証はいたしかねます。
また 今後のアップデートは私自身の都合にて(自分で使用する機能で不具合が見つかり修正が必要な時)行いますので、不具合があった場合はご自身で対策していただけますようお願い致します。


6. 使用・設定方法

本機の使用方法と設定方法は下記を参照願います。

取り扱い説明 => 参照
設定(Config)ファイルの作り方(V3.0以降) => 参照
設定(Config)ファイルの作り方 => 参照

WiFiが繋がらないケース => 参照 <2020.07.25追記>


7. 後記

昔と違って昨今の電子工作にはほとんどソフトウェアが必要になってます。
しかし、ハードウェアとソフトウェア両方を作らないと工作もできないということが初心者には負担でハードルを高くしているのではないでしょうか。
もしソフトウェアがあれば、ハードウェアを作ってみようと思う人も増えるかもしれません。そしてそのハードを使ってソフトウェアをいじくりながら学んで行ける。
そういう思いから、私はソフトウェアを提供しています。
電子工作でも実際にケースに入ってそれなりに機能して見栄えのあるものを作れると、できた時の感激は一入です。
特に若い人にそういった感激を味わってもらい、ものづくりへの興味を抱いてもらえればと思っています。


===== 関連記事 =====
ワイヤレスセンサー端末の製作(Raspberry Pi版)
ワイヤレスセンサー端末の製作(ESP32版)
ESP32 & 2.8" G_LCD一体型ユニットの製作(3)

>> ブログ記事一覧へ

<追記>

2019.10.04
ESP8266のメール機能を使ってso-netのメールサーバー経由でデータ送信を行っていましたが、2019.7.20 ごろからメールが届かなくなっていました。それ以前にso-netより 7月21日までにSTARTTLS 対応するよう連絡があり、対応していないとメール送信ができないということだったので仕方ないと思っていました。
ところが、そのままにしておいた機器から9月20日以降またデータが送られて来るようになりました。
この件so-netに問い合わせたのですが、要は「送信が可能になった理由については分かりかねます」「STARTLS設定してください」という返事で私の知りたかった事への返事はなく残念でした。このままずっと送信ができる状況にあるのか、何らかのトラブルで送信できてしまっているが行く行くは送信できなくなるのか?
(ホームセキュリティ機器などの商品で非暗号化メールをプロバイダーのメールサーバー経由で送っているものもあると思うので、STARTTLS対応要求は問題を引き起こすのではないかとも思います。)
こんなこともあり 非暗号化SMTPメール送信も当面使えるものと思い、対応ソフトのVer 1.x 版をupdateしてVer 1.2 にしてリリースしておきます。

2019.04.06
新しいコンピュータにESP8266のプログラム用にArduino IDEのセットアップを行ったのですが、前回手順をまとめてなかったので結構面倒くさかったです。そこで今回は手順を作りました。
プログラムを作らなくてもプログラムの書き込みにはIDEをインストール設定する必要がありますので、Arduino IDE未経験者でもできるだけ迷うことなくインストールできるよう意図して作りました。
また、これまでとは異なったWiFi環境で使ったらWiFiが接続できませんでした。接続タイムアウト時間が10秒では短かったようなので20秒に変更し、WirelessSensorTerminal_V1.1 としてリリースしました。

2019.02.24 回路変更
オーディオアンプNJM386BDの入力が ボリュームの設定によっては過大入力になりICを壊す恐れがあるので、カプリング コンデンサーを100uF -> 1uF、その前にある3.3V分割抵抗の下側を 10k -> 2.2k に変更して 図3 TOP基板回路図 を更新しました。
nice!(0) 
共通テーマ:趣味・カルチャー

nice! 0