All posts by silky

V2: モニタリング アプリ

デザイン画面

モニタリング アプリ はMIT App Inventorで開発し、エッジクラウドとTinyWebDB APIを用いて通信し、データの確認と修正、削除は可能であり、そして可変ゲインアンのゲインの設定もできる。

V2の実験段階は、ESP32のIoT 見守りデバイスからモニタリング アプリへBlueToothで直接送信しています。

 

 

 

<<<<<<<<< BlueToothで直接送信 >>>>>>>>>>>

 

ブロック一覧画面

 

アプリの実行画面

 

BlueToothの設定するところ。

V2: IoT 見守りデバイス

上野先生のESP32ピエゾセンサーボードを参考、ブレッドボードで組み立てるところ。

ブレッドボードでテスト中

テスト基板に実装しているところ。

配線が複雑だから、まずFritzingで設計した。

 

実装完了した状態です。右中央の4本ピンソケットは、OLED用です。

OLEDを付けた状態です。

ケースに入れた状態です。

 

NodeMcu (5) Pulse Sensor

ESP8266でHeart Rate Monitorの表示は、色々と試してうまい表示方法はなかなか見つからない。
たまたま検索キーワードは”Pulse Sensor Arduino OLED”に変えて、参考にできそうなサイトはいくつ見つかった。
その中、”Online Heart Rate Monitor Using NodeMCU and Cayenne”「参考1」はイメージに近い。
Pulse Sensorについて、下記のサイトへどうぞ。
https://pulsesensor.com/

Pulse Sensorなどの部品があるので、早速実験。しかしコンバイルすると、Cayenne関連のエラーは出た。
Cayenneサービスは古いようで、適切なサービスが見つからない。OLEDでのMonitorは目的、Cayenneのサービスどうでもいいので、コメントアウトした。
それからPulse Sensorのライブラリも変わる。以前がここ;
https://github.com/WorldFamousElectronics/PulseSensor_Amped_Arduino
今はここ;
https://github.com/WorldFamousElectronics/PulseSensorPlayground
例のソースコードは、古いライブラリを使うから、そちらをダウンロードして利用。

表示はうまくできた。しかしPulse Sensorの精度はいまいち。
「参考1」の波形は、どうしてまともに表示されるね。

安定して表示できないから、このPulse Sensorは実験のみの意義かな。
参考:

  1. https://www.instructables.com/id/Online-Heart-Rate-Monitor-Using-NodeMCU-and-Cayenn/

 

NodeMcu (4) ADS1115 & OLED

経緯

アナログ信号を取り込み、TinyWebDBへ送るプログラムを作る予定。サンプリングレートは秒に100回。
WeMos miniは使いやすいから愛用しているが、2月から、WeMos miniの開発中も頻繁にリブートしています。デバイストライバのバージョンを変えたり、OSを変えたりしても改善しない。結局原因がわからず、仕方なく開発中書き込み直前にUSBケーブル接続、書き込み終わったらすぐUSBケーブ抜く方法で運がよければリブート回避する状態が続て、悩んでいます。
ADS1115プログラムを作るため、安定したNodeMcuできることならこちらで凌ぎ。

ADS1115とは

ADS1115 は、16-Bit ADC – 4 Channel with Programmable Gain Amplifier
特徴:広い電源電圧範囲:2.0V ~ 5.5V。低消費電流: 連続モード:150μA。
_ プログラマブルゲインアンプ内蔵。プログラミング可能なコンパレータ。
_ 4本のシングルエンド入力。2本の差動入力。I2Cインターフェイス。
_ 最小±256mVから電源電圧までの入力範囲に対応。
ライブラリーでは コマンド送信し 8msec 後に データーの読み込みを行う、サンプリングレートは秒に100回するため、Adafruit_ADS1X15/Adafruit_ADS1015.hのADS1115_CONVERSIONDELAYを8から9に変更する。

結線

普通のI2Cでつなぐだけ。

スケッチ

最初のプログラムは、アナログ読む度に表示してるが、表示できるのは秒に十回未満。そしてOLEDには、1秒間読み取れたデータの個数と、最新のアナログ値を表示すると変更して110回程度読み込みできるようになり。
ADS1115_CONVERSIONDELAYを8から9に変更して、表示の通り、秒に101回って、概ね要求に満たした。

#include <Wire.h>
#include <Adafruit_ADS1015.h>               // ADS1015,1115
Adafruit_ADS1115 ads(0x48);                 // 16-bit version
#include <Adafruit_GFX.h>                   // OLED
#include <Adafruit_SSD1306.h>           // OLED
Adafruit_SSD1306 display(0);                // OLED Reset
void setup(void) {
  //Serial.begin(115200);
//  Wire.begin(4,5);                          // OLED:SDA,SCL
  display.begin(SSD1306_SWITCHCAPVCC,0x3c); // I2C ADDRESS=3c
  display.clearDisplay();                   // Clear the buffer
  display.setTextSize(2);                   // font size 4
  display.setTextColor(WHITE);              //
  display.setCursor(0,0);                   //
  ads.setGain(GAIN_TWOTHIRDS);              // 2/3x gain +/-6.144V
  ads.begin();                              // 1 bit=0.1875mV
}
void loop(void) {
  int i=0;
  float v0;
  // // Count and Store data during 1,000 msec
  for(int time = millis(); millis()-time < 1000; i++) {
    v0 = (ads.readADC_SingleEnded(0) * 0.1875/1000); // A0 Read
  }
  display.clearDisplay();
  display.setCursor(0,0);
  display.print(i);
  display.setCursor(0,16);
  display.println(v0,3);
  display.display();
}

 

参考

  1. https://macsbug.wordpress.com/2016/02/04/i2c-adc-ads1115-in-esp8266/

モニタリング アプリ開発

MIT App InventorとはもともとGoogle Labsで公開されているAndroidアプリを作成ツールです。 今MITに移管された。プログラミングを専門的に学んだことがない学生がプログラムの作り方の基礎を学ぶために作られました。アメリカでは高校やコンピュータサイエンスを専門としない大学での授業でも利用されています。

モニタリング アプリ はMIT App Inventorで開発し、エッジクラウドとTinyWebDB APIを用いて通信し、データの確認と修正、削除は可能であり、そして可変ゲインアンのゲインの設定もできる。

デザイン画面

画面の上部はタグとStoreするためのデータ入力領域、そして中間は生体データ表示エリア、下部はサービスのステータスと生の受信データの表示エリア。

図 4.7 Appデザイン画面

ブロック一覧画面

ブロック一覧画面はアプリの処理を記述する。

 

主な処理

Button_Get.Click 処理ブロック

指定したWebサービスのURLから、TinyWebDB APIを通して、指定してTagのデータを取得する。このアプリでは、生体データの取得に利用する。

 

Button_Store.Click 処理ブロック

指定したWebサービスのURLから、TinyWebDB APIを通して、指定してTagのデータを保存する。このアプリでは、可変ゲインアンプに対して、ゲインの設定を指示する。

 

TinyWebDB1.GotValue

TinyWebDB APIからデータ取得後の処理。 生体データの取得した場合はデータを描画する。

図 4.8 Appブロック一覧画面

 

アプリの実行画面は図 4.9 に示すように、Button_Getをクリックすると、最新の6秒間のデータ描画が確認された。

アプリの実行画面

図 4.9 アプリの実行画面

Raspberry PiでUPD構築

エッジクラウドは通信防御に必要なより高度なセキュリティ機能が代行する。エッジ層はデータの一時保存と転送のみ行う、データ蓄積、共有する機能はクラウド層に任せる。そのため単純な構造のコンピューターRaspberry Piでも十分機能する。

 

Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピューター。イギリスのラズベリーパイ財団によって開発されている。学校で基本的なコンピュータ科学の教育を促進することを意図している。

図 4.5 Raspberry Pi 

Raspberry Piセットアップ

Raspberry PiはDebianというOSを利用する。予めシステム入れたメディアを購入する、またはOSのファイルをダウンロードし、メディアにセットアップする。

LAMP(ランプ)とは、OSであるLinux、WebサーバであるApache HTTP Server、データベースであるMySQL、スクリプト言語であるPerl、PHP、Pythonを総称した頭文字から成る造語である。動的なウェブコンテンツを含むウェブサイトの構築に適した、オープンソースのソフトウェア群である。

それからRaspberry PiにLAMP環境構築してください。

Web サービスの構築

Webサーバに、われわれはTinyWebDB APIを実装したプログラムをインストールすることでTinyWebDB機能を備えるWebサービスも構築可能である。TinyWebDB APIはWeb管理画面が備え、データの確認と修正、削除は可能である。

見守りデータに特化したデータ処理が必要のため、われわれは上記プログラムをカスタマイズしたプログラムもGitHubリポジトリから取得可能である。

カスタマイズしたTinyWebDB APIプログラムは、データ受信すると、見守りデバイスの一覧が表示でき、デバイスのタグ名、サイズ、ソフトのバージョン、IPアドレス、可変ゲインの設定値、データの数、実際に受信したデータの数と日時状態が容易に判別できる。

データ確認画面:

http://noise.uc4.net/tags.php

 

図 4.6 カスタマイズしたTinyWebDB APIのWeb管理画面

 

蓄積した生体信号のデータの表示機能を備えている。

図 4.7 生体信号のデータの表示

Ubi-健康管理(Ubi-Care)

ユビキタス健康管理のUbi-Careフレームワークは、健康データに特化したUPDである。様々個人健康データのセンサーデバイスで構成するセンサーデバイス層、そして個人健康データを集める、初期処理を行うエッジ層、データ蓄積、共有するクラウド層はお互い独立、オープンなAPIで相互接続する。

図 3.1 Ubi-care 分散型フレームワーク

 

健康データのセンサーが生成するデータ量は多いが価値密度は低く、エッジ層で分散機械学習を行うことによってその価値密度を向上させるとともに、エッジ層で処理することで低レイテンシを実現、ワイヤレス送・受信するための消費電力も大幅軽減可能だ。

データ通信をエッジ層に留めることでプライバシを保護するということが可能に。リソース限定された単独のデバイスの重要なデータや機密データをより安全な環境下で保護する。

UPDフレームワーク

ユビキタス個人データストアUPD(Ubiquitous Personal Datastore)

IoTデバイスから続々とセンサーデータが大量に生成された。しかしIoTデバイスの性能によりセンサーデータ送・受信の軽量化が求められている。

センサーからの大量データがそのままクラウドへ送る場合は遅延が問題になり、またデータ通信のセキュリティが求められ、しかしIoTデバイスのマイクロコントローラは強力な暗号化のために処理能力と電力を消費する余裕はない、データ送・受信プロトコルの軽量化が困難である。この問題を対処するには、センサーの近くにエッジサーバを配置して、さらにエッジサーバにはデータとアプリの分離する、個人データストアUPDフレームワークを提案する。

 

個人データストアUPDは単純のUPD-APIがもちWebデータベース、IoTデバイスからのデータ送・受信は容易になり、保存したデータは共通のAPIで再利用可能。例えば可視化アプリケーションでデータを可視化する、または解析アプリケーションでデータから価値ある情報を見出す。

 

クラウドには、個人データはPOD(Personal Online Datasore)に保存する。POD連携アプリケーションは必要なUPDデータのみPODにアップロードする。PODは対応のアプリケーションを通して指定の相手にデータ共有するができる。

 

UPD、PODとそれに対応するアプリケーションでUPDフレームワークを構成する。UPDとそのフレームワーク利用によりセンサーデータ送・受信の軽量化と転送遅延、セキュリティ両立できる。

 

マイクロコントローラは強力な暗号化のために処理能力と電力を消費する余裕はないので、防御に必要なより高度なセキュリティ機能は、近隣のEdge Cloudが代わりに実行する。

図:UPDフレームワーク

 

このようにユビキタス個人データストアUPD(Ubiquitous Personal Datastore)は、センサー、フォグ、クラウドの三層構造で構成されたデータとアプリ分散型のフレームワークである。

 

この三層構造のメリットは、IoTデバイス電力を消費、データ高度なセキュリティための強力な暗号化、大量データ転送するための低レイテンシを両立させた。

 

IoTデバイス層はデータの収集と転送を専任。リソース限定されたデバイスでも利用可能、消費電力の削減にも役に立つ。

 

エッジ層は防御に必要なより高度なセキュリティ機能が代行する。エッジ層はデータの一時保存と転送のみ行う、単純な構造のサーバでも十分機能する。

データ蓄積、共有する機能はクラウド層に任せる。PODの共有について、World Wide Webの創始者、Tim Berners-Leeが新しいプロジェクトをSolid PODというプラットフォームを参考してください。