酒と薔薇の日々(その2)

好きなことだけ求めて生きるアスペ気味のINTJ人

[ビオIOT化計画] なにっ照度センサーが死ぬとなっ

2021年07月05日 23時06分10秒 | マイコン(ESP32・Arduino等)

単独でデータを計測はできるが、統合すると照度センサーがゼロになるというバグが発生
4時間は悩んだ・・・

①21Pinから温度を取得
 クラウドへデータ送信もOK
②25pinから照度を取得
①②それぞれちゃんと動いている。
ブレッドボード上に2種類の回路を結合し、プログラムも統合したところ、温度は取得できるが照度が0になる。
色々やってみたが症状は変わらない。
それぞれの単機能プログラムに戻して動作させると、ちゃんと読み取る。
こうなったら、消去法で行くしかない。

20時30分頃から作業
結合した全部入りのプログラムから、WiFi部分とクラウド送信部分を取り除く・・・ダメ
温度取得部分をコメントアウト・・・は? 2000位の値が出てたんだが、先程単独②の時は。
②だけにして実行。ちゃんと1800値が出る。
回路は悪くない。それは間違いない!

温度関係を全てコメントアウト状態のまま
analogreadの後50msのディレイを500にしてみる。
毎回コンパイルに30秒、システムリセットで電源抜去、シリアルコンソールを立ち上げ直し・・・2分程度はかかってるね。
クソ、照度0しか返ってこない。

温度回路への配線を抜去 それでも照度0
②だけにしたらちゃんと照度計測する。
なんじゃ

テストプログラムを全部消去
照度Pのみをコピペで入れて動かす。
当然動く。
============
それでは温度ルーチンを少しづつ手で加えていく。
 まずは定義部分だけ。include/define/オブジェクト生成まで
 OK
  sensors.begin(); を追加
 OK
 pinMode(analogIn,INPUT);追加
 OK
    sensors.requestTemperatures();
    Serial.print("sensor(0)\t");
    float tmp = sensors.getTempCByIndex(0);
    Serial.println(tmp);  追加
 NG??? -127.0が帰ってきだした。照度は問題なし。
 焦土と温度の間にdelay(500);追加した
 NG 同じ-127
 先に温度、500ms間を空けて照度取得に入れ替えてみる
 NG 同じ-127
 ----は?-------------
 くっそーーーー、温度計配線を抜いたままだった。
 あれれ、配線復活したらちゃんと動き出した・・・orz
 測定順を元に戻してみる。
 OK
 ソースを少し綺麗に書き直した。
============
WIFI部分を加えていく。
WiFiClient client;
 NG #include "Ambient.h"が無いとエラーになった???なんでや?
 まあ、"Ambient.h"加えたらコンパイル通ったのでうやむやにする
 OK
 Ambient ambient;を加える
 OK
 WiFi接続パラメータ2行を加える
 OK
    WiFi.begin(ssid, password);
    Serial.print("WiFi start ");
    while(WiFi.status()!=WL_CONNECTED) {
      delay(500);
      Serial.print("x");
    }  
    Serial.print("\r\nWiFi connected\r\nIP address: ");
    Serial.println(WiFi.localIP());
  M5.dis.drawpix(0, 0xE8E800); // Yellow
  delay(1000);を加える

!!!!!!!! ここじゃ! WiFiが入ったらアナログ(Pin25)読めない!!!!!!!!!

22時20分
約2時間の苦行であった・・・・
---------------------------------
  学習
---------------------------------

こちらのサイトに細かいPinの仕様が書いてあった。(ありがとうございます!)
アナログ入力について
Pin25は「ADC_CH8」に接続されていることは表に記載がある。
で、WiFiを1回でも使用すると再起動しない限りADCが使用ができなくなると。
これですね・・・原因は
RTCもADCのch1/ch2と被ってるのだが、書いてある意味が解らない・・・
「RTCは内部的なGPIOへのアクセス方法で、ULPからアクセスする場合に利用します。・・・・」
ちんぷんかんぷん

---------デバッグ再開--------------
とにかく、ここをすり抜けないとどうにも進めないので、空いてるピンをアサインし直すことにする。
Pin25~Pin39がADCへ繋がってるが、
Pin穴があるのは(GROVE除く)GPIO33(ADC1_CH5)位しか空きが無い。
Pin番号を25->33にし、配線も変えてみる。
OK ②センサーとも読めました。
WiFi文を有効にしてみる
OK IPも取れた! よっしゃあああ
  ambient.begin(channelId, writeKey, &client);と、チャネルIDと書き込みキー文字列定義を追加
OK

グラフも2つあるとそれっぽいね。

今晩は5分に一回データを送信しつつ就寝
Atomは消費電力がデカいのかモバイルバッテリーが勝手に落ちない。
我が家のポンコツUSB電流計では0.00Aと表示されるが・・

8時間後の結果
・温度 この窓エアコンは26度のドライ設定にしてあるが22度近くまで下がってるね。意外な発見
・照度 朝6時ころから照度が上がって天候が曇りのせいか、明るさが多少変化しながら推移し8時過ぎに点灯
こうやってデータにすると面白い。外気温との比較とか天候の記録とかも合わせ読んでみたいところです。
なるほどであります。記録マニアの血が騒ぐ。

ちなみに殆どのPinhaPullUp有効が規定値と書いてあるので追加の抵抗は不要なのか?

----ソース----

#include "M5Atom.h"
#include "Ambient.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 21    // Pin No

WiFiClient client;
Ambient ambient;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char* ssid       = "WARXXXXXXXXXX";
const char* password   = "8FXXXXXXXXXX";
unsigned int channelId = 38XXX; // AmbientのチャネルID
const char* writeKey = "d34XXXXXXXXXX"; // ライトキー

int analogIn = 33;  // only 33

void setup() {
  M5.begin(true, false, true);  // use LED
  delay(50);
  M5.dis.drawpix(0, 0x00f000); // RED RED
  delay(1000);
  Serial.begin(115200);
  Serial.printf("Hello \n");

  sensors.begin();
  pinMode(analogIn,INPUT);
  delay(50);

  WiFi.begin(ssid, password);
  Serial.print("WiFi start ");
  while(WiFi.status()!=WL_CONNECTED) {
    delay(500);
    Serial.print("x");
  }  
  Serial.print("\r\nWiFi connected\r\nIP address: ");
  Serial.println(WiFi.localIP());

  ambient.begin(channelId, writeKey, &client);  // Ambient環境初期化
  
  M5.dis.drawpix(0, 0xE8E800); // Yellow
  delay(1000);
}

void loop() {
  M5.dis.drawpix(0, 0xf00000); // green
  int blightness = analogRead(analogIn);
  Serial.printf("analogRead(%d) = %d\n", analogIn, blightness);
  delay(500);
  //---------
  M5.dis.drawpix(0, 0x0000f0); // Blue
  sensors.requestTemperatures();
  Serial.print("sensor(0)\t");
  float tmp = sensors.getTempCByIndex(0);
  Serial.println(tmp);
  delay(500);
  //---------
  M5.dis.drawpix(0, 0x707070); // white
  ambient.set(1, tmp);   // data temp set
  ambient.set(8, blightness);   // data blight set
  ambient.send(); // send!        
  delay(1*10*1000); // n * 10秒
  //  delay(1*60000); // n 分
}

 

 

 


[ビオIOT化計画] CDSで照度を測ってみた

2021年07月05日 17時29分32秒 | マイコン(ESP32・Arduino等)

朝から、昨晩遅くまでお勉強したK210などのブログを書く。

12時から歯医者へ。
久しぶりに坂を下りるのがしんどいほどの坐骨神経痛に。年に1~2回は発症するねえ。
なかなか先生作業を進めてくれない。
今まで紙屋町の歯医者だったので、進行が速かったのか?
丁寧にやってくれてると思います。
が、怖い回数が増えるなあ・・・

ネットで見るとCDSと抵抗(1MΩ)を直列に繋ぎ5Vを印加し、その繋いだ地点にアナログ読み取りができる端子を繋げば良いとかいてあった。
じゃが、数値は明るさを変えても4095からピクともしない。
抵抗値が大きすぎるらしいので、順次100K,10K,5K,1Kと落としていった。

CDSセルだと(60W程度のシーリングライトの直下から50cm外れ、高低差1.5mの場所、セルは天井に向け垂直に設置)
100kΩは殆どが4095で反応が悪いし値が一気に動いたりで、変
10kΩだと4095、夕方遅くなって暗い部屋でも1500程度、暗い部屋でセルを手で覆い隠すと500とか
4.7kだと3600、手で覆うと1100
2.2Kだと2500、手で覆うと550
1.1Kだと1800、手で覆うと110

ところがじゃな、このブレッドボード実は20年物で、接触不良があるようで値がころころ変わったりする。
ビンボは情けない。今度接点復活材でびちょびちょにしちゃる。

余りの変な値に辟易して5Kオームのポテンショメータを接続。これは完動する。

どうもこのCDSセルの性能が1.1kΩと合うらしい。このCDSセルも40年ほど前のキットから取ったもの。
みんなビンボが悪いんや。

何はさておき、なんとなく明るいか暗くなったか程度は判別できるようになりましたとさ。
ただし、これには大きなミスがあった・・・

---ソース----

// CDSによる照度実験
// CDSと抵抗(1.1~5kΩ程度)を直列に繋ぐ
// 両端に5Vを印加し繋いだ点からPin33に接続する
//

#include "M5Atom.h"

int analogIn = 33;  // 33でないとダメ Pin25はWiFi機能と干渉するので使えなかった(後述の別掲記事)

void setup() {
  M5.begin(true, false, true);  // use LED
  delay(50);
  M5.dis.drawpix(0, 0x00f000); // RED RED
  delay(1000);
  Serial.begin(115200);
  Serial.printf("Hello \n");
}

void loop() {
  delay(500);
  M5.dis.drawpix(0, 0x707070); // white
  Serial.printf("analogRead(%d) = %d\n", analogIn, analogRead(analogIn));
  delay(500);
  M5.dis.drawpix(0, 0xf00000); // green
}


D-CON2021優勝は「D-on」

2021年07月05日 11時23分45秒 | 日記

ディープラーニングを使った高専コンテスト「D-CON2021」
2021年の優勝は福井高専『AI×打音で老朽インフラ点検「D-ON」評価額6億円』だった。

写真は福井高専サイトから

Stick-Cを使っているが、あの中で学習効果と取得した打鍵音をリアルタイムでを判定するのだろうか?
それともクラウド側で?その点がどの記事にも書いてなかった・・・

それ以外にも港の潮位予測など実用性も高いシステム多数
ベンチャー投資家がお墨付きを与え企業を支援するコンテストシステム。
なのですぐに起業ができるところ素晴らしい。

ロボコン以外に面白いコンテストがあるんだな。
昨年の終章はスマートスピーカを使った点字印刷システム「てんDOC」
こちらはすでに「TAKAO Ai」という会社になっていてまもなく販売開始するそうだ。


[AIジビエ] 浮気省の私は次のシステムを想う(K210)

2021年07月05日 10時29分46秒 | マイコン(ESP32・Arduino等)

浮気省の私は次のシステムを想う。

メダカビオの次のお題は「AIジビエ」
最終目標は檻の中に捉えられた動物が何かを写真と共に判定し通知する。
自宅には猪熊鹿はやって来ないのでまずは鳥(スズメ等)でやってみようかと。
赤外線センサー等のキック信号でAIカメラを起動して熱源が何かを判別する。

そこで必要なのは「AIカメラ」

CPUにK210を搭載した「M5 StickV」が5000円程度で販売されている。
「M5Stack UnitV2 AI カメラ(SSD202D)」9592円と別ラインアップもある。
何でもあり蟻のてんこ盛りで内部でLinuxが動いている。

AIカメラ本体だけなら「UnitV AI Camera」2000円程度で継続販売されている。

同じ値段でESP32基盤+カメラで構成される「M5Camera」2035円もある。

「UnitV AI Camera」を使って金魚水槽を監視するシステムを公開されているサイトがあった。
このサイトの素晴らしいのは学習データを自身で作成する段階も公開されている点
丁寧な内容で素人な私でもなんとかなるかも、と思わせてくれる。

------------------------

K210をちょっと勉強してみた。
かつてのRISCをベースにしたオープンソース版の「RISK-V」アーキテクチャで中国を中心に画像認識や音声認識などの
AI分野で急激に伸びてきているシステム
CPUにはFPUを持つ64ビット版のRISC-Vコア「RV64GC」が2基搭載されている。
KPU、APU、FFTアクセラレータなどを搭載し、最大処理能力は1TOPS(1秒あたりの演算が1兆回)

Sipeed Maix Amigo(6000円)https://www.marutsu.co.jp/pc/i/2195810/
はスマホ型でタッチパネルやカメラ2基電源GLOVE端子3個各種センサーてんこ盛りの学習用端末

縮小セットでM5StackタイプのSipeed Maix Cube(4500円)もある。
なお、この2種類は無線通信機能はない。

アマゾンでは開発会社直販の為スイッチサイエンスより1000円程度安くなる。

アプリケーションの開発用としてMaixPyというファームウェアが搭載されている。
開発環境はPC上のMaixPyがメイン
MicroPythonを移植した開発環境でカメラAIを開発するコスパ最高な端末

ちなみにメダカビオIOT化の基礎「ESP32」は
中国のEspressif Systems Pte.(エスプレッシフ社)社が開発したマイコンで、240MHzのXtensa 32bit LX6プロセッサを2個搭載
520KBのRAM、WiFiとBluetooth v4.2に対応したIOT向けハイコスパマイコン
ArduinoIDEで開発をすることが多い。(UI-Flow)