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

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

[ビオIOT化計画] M5Atom-lite のDeepSleep実験

2021年07月08日 21時53分27秒 | マイコン(ESP32・Arduino等)

■低消費電力で運用する方法
 あれこれ調べると、起動時には80mA、WiFiが30mA、ディープスリープ時にも13mA程度は食うようです。
 結局は電源を大きいものに変えるとかソーラーにするとか・・・

■大きな問題
 WiFi接続が途中でSleepするとモジュールが動き続けて勝手の意電力を消費する件

 

■まずは単純な寝るだけのプログラム

ポイントは、RTC領域にあるメモリはDeepSleep中も給電され値を保持し続ける。
何かを引き継ぐ場合はここに記録するかEEPROMに書き込むべし。
サンプルは、esp_deep_sleep(15*1000000); 命令で15秒間眠り
起き上がった時はsetup()から再開する。
※次のステップからではない点に注意

こちらのサイト様を参考にさせてもらいました。m(_ _)m

Atomは 13mA 程度を消費するようです。確かに1日になると結構大きいわ・・・

----単純に15秒ごとに起きるプログラム-------

#include "M5Atom.h"

RTC_DATA_ATTR int bootCount = 0; // RTCメモリ域に変数を確保
     :
(自作関数省略)
     :
void setup() {
    bootCount++;
    M5.begin(true, false, true);  // use LED
 }
void loop() {
  int i;
  for (i=0;i<bootCount;i++) {
    led_color('B');
    delay(500);
    led_color('E');
    delay(500);
  }
  esp_deep_sleep(15*1000000);  // 60=1分 30=30秒
}

■メダカに組み込む

動くのだがシステム側にBUGがあって、Sleep中でもLEDが消えなくなる。
ネットに記事があった。FastLED.hを直接使うしかないそうだ。

// Ambientへデータ送信
// data1,2,3 ... 温度 pin21(one wire read)
// data8 ....... 照度 pin33(analog read)
// (no) ........ 水位(High/Low) pin22(digital PullUp) 
//
//   2021/7/8 h.shin

#include "M5Atom.h"
#include "Ambient.h"
#include <OneWire.h>
#include <DallasTemperature.h>
// #include  DeepSleepでLEDが消えないためこちらを使うべき

#define ONE_WIRE_BUS 21    // Temp Pin No

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

const char* ssid       = "WAXXXXXXXXX";
const char* password   = "8FXXXXXXXXX";

unsigned int channelId = 38XXXXXXXXX; // AmbientのチャネルID  shimojima+ambient@gmail.com
const char* writeKey = "d3XXXXXXXXX"; // ライトキー

int CDS_PIN = 33;     // CDS sell Pin No 33
int FLOAT_Pin = 22; // float sensor

float tmp;
float tmp2;
float tmp3;
int fukai;
int blight;
RTC_DATA_ATTR int bootCount = 0; // RTCメモリ域に変数を確保

void setup() {
    bootCount++;
    M5.begin(true, false, true);  // use LED
    Serial.begin(115200);
    //---WiFi--
    WiFi.begin(ssid, password);
    Serial.print("WiFi conect ");
    while(WiFi.status()!=WL_CONNECTED) {
      Serial.print(".");
      M5.dis.drawpix(0, 0xf00000); // green
      delay(250);
      M5.dis.drawpix(0, 0x000000); // Erase
      delay(250);
    }  

//--- 青・緑 交互に点滅 -------
    if( bootCount % 2 == 0 ){
        M5.dis.drawpix(0, 0xf00000); // green
    } else {
        M5.dis.drawpix(0, 0x0000f0); // Blue
    }    

    //---- initilize -----
    pinMode(CDS_PIN,INPUT);
    pinMode(FLOAT_Pin,INPUT_PULLUP);

    //--- 温度 ch0..2 -------
    sensors.begin();                 // 温度計開始
    sensors.requestTemperatures();   // 温度取得 [0]
    tmp = sensors.getTempCByIndex(0);
    tmp2 = sensors.getTempCByIndex(1);
    tmp3 = sensors.getTempCByIndex(2);
    delay(100);

    //--- 不快指数 -------
    fukai = 0.72 * (tmp2 + tmp3) + 40.6;

    //--- 照度 -------
    blight = analogRead(CDS_PIN);    // blightness  

    //--- Ambient -------
    ambient.begin(channelId, writeKey, &client);  // Ambient環境初期化
    delay(50);
    ambient.set(1, tmp);       // 温度 set
    ambient.set(2, tmp2);      // 温度 set
    ambient.set(3, tmp3);      // 温度 set
    ambient.set(7, fukai);     // 照度 set
    ambient.set(8, blight);    // 不快指数 set
    ambient.send(); // send!        
    delay(50);

    Serial.printf("\nRestart M5Atom-lite %d\n",bootCount);
    Serial.print(" IP:");
    Serial.print(WiFi.localIP());
    Serial.print(" Temp:"); Serial.print(tmp);
    Serial.print(" ");      Serial.print(tmp2);
    Serial.print(" ");      Serial.print(tmp3);
    Serial.printf(" fukai: %d", fukai);
    Serial.printf(" Blight: %d", blight);
    //------ 水位 --------
    int water = digitalRead(FLOAT_Pin);
    if (water == HIGH){
       Serial.println("  water: HIGH");
    } else{
       Serial.println("  water: LOW");
       M5.dis.drawpix(0, 0x00f000); // LED RED
    }
        
    //------ Sleep --------
    WiFi.disconnect();
    Serial.println("Ambinient Send End.  good night!");
    delay(500);
    esp_deep_sleep(30*1000000);  // 60=1分 30=30秒
    // Atom.hにBUGがあってsleep時にLEDが消えなくなる。解決は直接FastLEDを叩くhttps://tomoto335.hatenablog.com/entry/m5atom-dont-use-library
}

void loop() {
  // do nothing
}


[ビオIOT化計画] 温度3センサ化、照度、フロートを検知

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

昨晩から結構な大雨で、今朝は三原、黒瀬川などで川が氾濫
己斐小学校は午前中は職員も登庁不要令
まだ今晩にかけて降水が予想される。

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

さて、DHT11は今回1-wireが2系統となって混乱するのも面倒なので繋がないことにした。

温度プローブを3本接続し3データを取得。通常は送信の度にLEDが緑と青に交互点灯している。
更にフロートセンサを取り付け、ピンをプルアップ設定とし抵抗外付けを省略、水位が下がると赤色LEDが点滅する設定
Ambient側ではグラフの高さを設定し、d1..3を同時に表示させるように設定
追加で不快指数を計算させてd7で送信

実験結果のグラフは、
1つのグラフに照度
2つ目のグラフに気温、湿った紙を巻きつけたセンサ、Atom-liteの表面温度の3種類を計測し同時表示
オマケで不快指数75%程度でフラフラ
させている。

シリアルでの値取得状況。
データは、温度3個、不快指数、照度1個、最後が水位判定

キリも無いのでここらで一旦プログラミングは中断

----------------------------
温度3センサ、不快指数、照度 => Ambient送信、水位検査(LED赤)
----------------------------

// Ambientへデータ送信
// data1,2,3 ... 温度 pin21(one wire read)
// data8 ....... 照度 pin33(analog read)
// (no) ........ 水位(High/Low) pin22(digital PullUp) 
//
//   2021/7/8 h.shin

#include "M5Atom.h"
#include "Ambient.h"
#include
#include

#define ONE_WIRE_BUS 21    // Temp Pin No

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

const char* ssid       = "WAXXXXX";
const char* password   = "8FXXXXX";

unsigned int channelId = XXXXX; // AmbientのチャネルID  shimojima+ambient@gmail.com
const char* writeKey = "d3XXXXX"; // ライトキー

int CDS_PIN = 33;     // CDS sell Pin No 33
int FLOAT_Pin = 22; // float sensor

float tmp;
float tmp2;
float tmp3;
int fukai;
int blight;

void setup() {
    M5.begin(true, false, true);  // use LED
    delay(50);
    M5.dis.drawpix(0, 0x00f000); // RED RED
    delay(50);
    
    Serial.begin(115200);
    Serial.print("start M5Atom-lite\n");

    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, 0xf00000); // green

    ambient.begin(channelId, writeKey, &client);  // Ambient環境初期化
    sensors.begin();    // 温度計開始

    pinMode(CDS_PIN,INPUT);
    pinMode(FLOAT_Pin,INPUT_PULLUP);

    while (1 == 1){                   // キーが押されるまで緑点滅で待機  
      M5.dis.drawpix(0, 0xf00000); // green
      delay(100);
      M5.update();    
      if (M5.Btn.wasPressed()) {
        M5.dis.drawpix(0, 0xf00000); // green
        break;
      }
      M5.dis.drawpix(0, 0x000000); // black
      delay(100);
    }
}

int  cnt = 0;

void loop() {
    cnt++;
    Serial.print("IP:");
    Serial.print(WiFi.localIP());
    Serial.print("  Loop cnt:");
    Serial.print(cnt);

    //--- 青・緑 交互に点滅 -------
    if( cnt % 2 == 0 ){
        M5.dis.drawpix(0, 0xf00000); // green
    } else {
        M5.dis.drawpix(0, 0x0000f0); // Blue
    }    

    //--- 温度 ch0..2 -------
    sensors.requestTemperatures();   // 温度取得 [0]
    Serial.print("  Tmp[0] ");
     tmp = sensors.getTempCByIndex(0);
     Serial.print(tmp);
    Serial.print("  Tmp[1] ");
     tmp2 = sensors.getTempCByIndex(1);
     Serial.print(tmp2);
    Serial.print("  Tmp[2] ");
     tmp3 = sensors.getTempCByIndex(2);
     Serial.print(tmp3);
    delay(50);

    //--- 不快指数 -------
    fukai = 0.72 * (tmp2 + tmp3) + 40.6;
    Serial.printf("  fukai = %d", fukai);
    delay(50);

    //--- 照度 -------
    blight = analogRead(CDS_PIN);    // blightness  
    Serial.printf("\tBlight = %d", blight);
    delay(50);

    //--- Ambient -------
    ambient.set(1, tmp);       // 温度 set
    ambient.set(2, tmp2);      // 温度 set
    ambient.set(3, tmp3);      // 温度 set
    ambient.set(7, fukai);     // 照度 set
    ambient.set(8, blight);    // 不快指数 set
    ambient.send(); // send!        
    delay(50);

    //------ 水位 --------
    int water = digitalRead(FLOAT_Pin);
    if (water == HIGH){
       Serial.println("  water: HIGH");
    } else{
       Serial.println("  water: LOW");
       M5.dis.drawpix(0, 0x00f000); // LED RED
    }    
    //------ delay --------
//    delay(1 * 60000);   // 1 min
    delay(10 * 1000);   // second
}


Atom-liteでキー入力は直前にM5.update();が読み込み実行で必須

2021年07月08日 01時23分31秒 | マイコン(ESP32・Arduino等)

キーの解説1サイト

ボタンが押されるまで待って、メイン処理を開始したかったが、if (M5.Btn.wasPressed()) だけを記述しても動かなかった。
どうもM5.update()を使わないとダメポイ
調べるとステータスを読み込む命令の本体がこれ update() らしい。
その後で得たデータを wasPressed() で参照するみたい。

思い違いしてましたw

ちなみに押されて300ms程度待ってもう一度読み込み+チェックすると、長押し判定が可能です。

#include "M5Atom.h"

void setup() {
    M5.begin(true, false, true);  // use LED
    delay(50);
    M5.dis.drawpix(0, 0x00f000); // RED RED
    delay(50);
    Serial.begin(115200);
    Serial.print("start M5Atom-lite\n");

    while (1 == 1){ 
      delay(100);
      Serial.print(".");
      M5.update();    
      if (M5.Btn.wasPressed()) {
        M5.dis.drawpix(0, 0xf00000); // green
        Serial.print("   Pushed!   ");
        break;
      }
    }
}

void loop() {
    delay(100);
    Serial.print("_");
}


[ビオIOT化計画] フロートセンサー実験

2021年07月07日 14時22分48秒 | マイコン(ESP32・Arduino等)

昨日は昼から来客で回路を作ったままで放置していた。
頭の固まった独自理論を延々述べた挙句、お切れになられる御仁には辟易だ。
今後は付き合い方を変えていかねばこちらが切れる。

-------プッツン--------

本日はやや二日酔いでイライラしながらの実験・・・

Arduinoの回路設定を探したところ、素人向けに非常にわかり易いPDFが見つかった。

ターゲットは4月5日にAliexpressで1.38$158円で購入していた水位フロートセンサー
国内では最高1個800円近い値を付けるぼったくり商品も多数ある。(Aliも今日見ると2.25$に値上げされていた)

磁気スイッチだと思うのでコンパスを近づけてみると反応する。(本来針は上を向く)
テスターで調べると満水で上側にフロートがある時にOFF、水位が下がりフロートが下がるとONになる構造
ポンプを動かすことを考えるとまっとうな構造ですね。

Atom-liteは昨日から5分おきにけなげにデータをAmbientへ送信しているので、本日の実験はArduino-UNOで行った。
Arduinoは9600bps程度の速度でしか通信ができなかったっけ?
最近はAtomはメチャ高速なので戸惑う。なぜかCOM4を使う。

----ソース-------

const int buttonPin = 2; // button
const int ledPin = 13;   // 基板上のLED

int buttonState = 0; // button status

void setup() {
  Serial.begin(9600);
  Serial.print("Hello \n");

  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin,INPUT);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH){
      digitalWrite(ledPin, LOW);
      Serial.println("HI");
  } else {
    digitalWrite(ledPin, HIGH);
    Serial.println("LOW");
  }
  delay(1000);      <=ここが問題
}

-------
フロートが下がるとLEDを点灯するようになっている。

ただ、Deleyを入れないとあたかも無限チャタリング信号受信地獄に落ちる

Delayを入れると安定して検知する。
やって見んと分からんね。

-------------
スーパー買い物で自身の不手際からポイントカードが使えなかった件、土地トラブルの法的立会依頼、行政書士紹介の経過、PCトラブル解決などで、4回も逆切れされサイテーな一日となってしまった。
前頭葉が縮小し妄想にとらわれた頭には常識が通用しないことがよ~く判った。
過去8年間で4回程度逆切れされて辟易していたのだが、以降はこの方針で雑談以外はお断りする。

 

 


[ビオ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)


土曜は酒飲みデー

2021年07月03日 00時59分47秒 | 日記

結構蒸し暑かったが裏山へ

先の火曜日に出会ったおっちゃんと再会
もう一人、以前出会った人が話しかけてくる。
付近に住んでいてよくこっちのことを覚えていてくれてた濱Dさん。
聞けば75歳でやっと退職してすることが無いのでかなりの頻度で裏山へあがってるそうです。
以前は化学コンビナート系のエンジニアをしていたとか。
あれこれ趣味の話をしながら一緒に下山

スーパーへ寄ってアルコールと鶏の胸肉などを買って帰宅
熱海では泥流でかなりの人が被害にあったとか。
こちらはメチャクチャ蒸し暑いです。

いつも孫に先取りされるナスも、ここまで大きくなると食べられるのが残ってる。

採れたてを油いため。虫?が食べた穴が大きく空いてるが気にしない・・・
あく抜きしなかったが採れたては、えぐみが全く無いね。

胸肉+チーズ+大葉でヘルシーに。今回は少しだが火が回りすぎた。加減が難しい。

この辺りからヨッパモード。
豚キムチが最近のマイブーム
油抜きなどしないギトギト暴走モードであります。
結構夜遅くまで遊んでおりました。

 


眠たいが、Youtuberに俺はなるっ!

2021年07月02日 16時35分18秒 | コンピュータ

昨夜は朝3時半まで動画編集をやってて、非常に眠い。

そういやここ数日は、IOT化、終わって動画作成と根を詰めすぎ。
先程、動画をせっかく作ったのでYoutubeへ別アカウントを作ってアップした。


ビオトープの初夏
今まではGoogleドライブ経由で仲間内に公開してたけど、さすがにフルHDで1.7Gサイズは容量圧迫しすぎ。
今後はYoutube利用にシフトですね。
10年ぐらい前か、山で猿軍団を撮影してアップしたことがあったが、あれどこ行ったんでしょうね?

折角なんでボラ講座で使った動画も全部アップしておきました。(1日制限個数にかかって中止したが)

アカウントのロゴも、著作権フリーが必要なのでフリーサイトで作成しました。
確かに簡単だが、センスが良いのを作ろうとすると時間はかかりそう。
ま、2つのアカウントがパッと見分かればOKなので

 

おこちゃまプログラミングレベルなので、これでいい。

ちょいテクシステム:C.T.S
近くに同名会社があるのでドット入れてます・・・

疲れたので映画鑑賞「マチネの終わりに」

過去は我々の記憶の中に存在する。
一見、これから起こる「未来」に対して、もう変えることのできない「過去」。
でも実は「過去」は「未来」次第で変えることができる。

なるほど。
世界を認識するのは心
物理の言う時間とは違う。テネットの立ち位置とは。

心にある過去は変えられるってことを言ってるんだ。
その人の世界はその人の中だけのもの。
だから見る意識を変えれば世界は変わる。
他人の押し付ける世界観とは別の世界がそこにはある。