M6の1.25ピッチ?

UnitV2カメラの取り付けネジですが、M6ではありますがピッチが標準では無い模様。なぜなら1mmピッチネジだと途中で止まるから、かといってもちろん細目ネジ(0.75mmピッチ)ではない。

写真で見てみると、インサート埋め込まれている部分の厚みがおよそ6mmでネジ山が5つ見えるから1.25mmピッチらしいけど、そんなネジは普通はないと思うけどネットで検索するとカメラ固定用の三脚とか使えてるらしいから存在はするらしい。

P.S.(@2022/6/12)

手元のスマホ用三脚のスマホ固定部分を取り外したベースのネジはピッチ1.25mmのようでUnitV2にもフィット。どうもこのサイズは固定を素早くやるための特殊(標準)サイズのようです。

-> と思ったら、どうもカメラ固定用のネジはインチネジ(1/4″)ですね。それなら全てクリア。1/4-20 UNCと言われるネジで、ピッチは25.4/20 = 1.27mmになります。

 

admin

『論語と算盤』

渋沢栄一のこの本は有名ですが、最近宮崎市定全集の『論語』を読んでいて改めて『論語と算盤』のことを思い出す。

論語と算盤に書かれていることは、① 社会に害を与えることなく正しく生きて、② 社会に貢献できるように利益を出しなさいということだろうと思うけれども、それって最近話題のSDG然りで時代環境と共に多少の変遷はあるけれども本質においてビジネスの基本であることに変わりはない。

一番近いと思える考え方はbusiness ethicsとでもいうべきものでは無いかなと思うけれども。してみるとおよそ2,500年前の論語が現代でもかなり通用するというのは、人類というのはわずか数千年では全く進化していないということになります。

 

admin

UnitV2で顔認識結果の処理

登録した顔画像のマッチング結果をシリアルでM5stackに送信して、確かさがある一定以上ならばブザーで知らせるという簡単なアプリです。

https://isehara-3lv.sakura.ne.jp/blog/2022/05/24/unitv2-aiカメラとm5stackをgroveコネクタで接続して認識結果を/

のアップデートの形になります。

<シリアルのデータ形式>

顔認証でシリアルから流れるデータは、

{“num”:1,”face”:[{“x”:92.80541992,”y”:0,”w”:366.1600952,”h”:478,”prob”:0.995221317,”match_prob”:0.659739733,”name”:”face_1″,”mark”:[{“x”:194,”y”:178},{“x”:358,”y”:158},{“x”:292,”y”:246},{“x”:228,”y”:356},{“x”:368,”y”:338}]}],”running”:”Face Recognition”}

こんな感じで、JSONで階層構造と配列を使っています。マッチング閾値(match_prob)へのアクセスは["face"][0]["match_prob"]となります。

#include <M5Stack.h>
#include <arduinojson.h>
#include <softwareserial.h>

SoftwareSerial Grove(22, 21);     // define rx/tx connecting to the UnitV2 camera
                                  // SoftwareSerial(rxPin, txPin, inverse_logic)

float x;
int y;
long k;
char data[1000];

void setup() {
  M5.begin();
  M5.Lcd.setCursor(20, 40);
  M5.Lcd.setTextSize(2);
  M5.Speaker.begin(); 
  Serial.begin(115200);
  Grove.begin(115200);
  M5.Lcd.print("--initialized--");      // display M5 Lcd message
  M5.Lcd.setCursor(20, 70);
  M5.Lcd.print("Face recongition");
}


void loop_(){

  if(Grove.available()) {
    String recvStr = Grove.readStringUntil('\n');
    if(recvStr[0] == '{'){
      Serial.print(recvStr);
    }
  }
}

void readJSON(void){
  String recvStr = Grove.readStringUntil('\n');
  StaticJsonDocument<1024> doc;
  DeserializationError error = deserializeJson(doc, recvStr);

  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }

  x = doc["face"][0]["match_prob"];
}

void loop(){
  M5.Speaker.mute();
  if(Grove.available()) {
    readJSON();
    Serial.println(x);
    if (x > 0.7f)
    {
      M5.Speaker.setVolume(3);
      M5.Speaker.beep();
      delay(200);     
    }
  }
}

データのバイト数が結構大きく(800バイト以上)なるので、char data[1000]とStaticJsonDocument<1024>を大きめのサイズにしています。これをしないとM5stackがリブート繰り返しました。

ドキュメント(以下のリンク)によれば、StaticJsonDocumentは1KB以下の小さめのJSONファイルで使えとあります。それほど多くないスタックエリアを使うので、StaticJsonDocumentでの設定値が小さくてスタックオーバーフローを起こしたと思われ、M5stackがリブートを繰り返してました。

https://arduinojson.org/v6/api/staticjsondocument/

 

認識の閾値は流れるデータからmatch_probを0.7以上で判断しています。

M5.Speaker.tone()は動作しなかったのでbeepを使って音出ししています。

 

P.S. @2022/6/16

細かな体裁(UnitV2のAP立ち上がり検知、認識結果の顔IDプリントアウト)を整えました。ソースはこちらに、

https://github.com/chateight/UnitV2_camera/tree/master/src

 

admin

UnitV2 A.Iカメラで初期動作モードを指定する

デフォルトでは動画再生モードになっていますが、変更する方法です。

ブラウザで、

歯車マークを選択、

メニューで、初期設定したい機能を選択するだけです。例えばシリアルで顔認識結果を送り出したい時にはこういうふうに設定しておけば、電源投入すれば自動的に顔認識モードで認識結果を他のデバイスで受信できると思ったけど、一度ブラウザで立ち上げないと認識結果は送られてこないから、ブラウザ経由のHTTPリクエストなしでは起動はしないようです。バックグランドで認識結果を送る仕組みはjs(Ajax)からpythonを呼び出しているというようなやり方なのでしょう。

シリアルポート経由のJSON形式で動作モード設定は、以下のUnitV2の公式ドキュメントのリンクから。

https://docs.m5stack.com/en/quick_start/unitv2/base_functions

 

今更ですが、UnitV2への接続方法には公式ドキュメントによれば① USB経由、② APポイントモードの二つの方法があります。

Ethernet Mode Connection: UnitV2 has a built-in wired network card. When you connect to a PC through the TypeC interface, it will automatically establish a network connection with UnitV2.

AP mode connection: After UnitV2 is started, the AP hotspot (SSID: M5UV2_XXX: PWD:12345678) will be turned on by default, and the user can establish a network connection with UnitV2 through Wi-Fi access.

UnitV2に電源を他から供給できればAPモードで接続が便利だと思います。

 

admin

 

 

 

Franz Benda

初めて知った名前ですが、生まれは一世代ぐらい早いですがMozartとほぼ同世代人と言って良いと思う。つまり宮廷音楽の華やかなりし時代は共通しています。

曲風はBenda様式というそうで、もちろんMozartの景色とは違いますが、パトロンである諸侯の趣向を反映するだろうから香りは似ているのはやはり時代の必然というべきでしょう。

 

admin

M5stackのバッテリー残量表示

デフォルトでは小容量のLi-ion電池が内蔵されていますが、残量を知る方法が必要な時があります。完全放電してしまうと電池は再生不能になるし。

https://m5stack-build.hatenablog.com/entry/2019/10/05/233914

で電池残量表示していたので、該当部分だけのコードを引き出して、既存のプロジェクト、

https://isehara-3lv.sakura.ne.jp/blog/2022/02/04/1095/

に埋め込みました。

コア部分だけ抜き出すと以下の通り。setup_batt()が初期化、read_batt()が残量読み取りです。


void setup_batt()
{  
  M5.begin();
  M5.Power.begin();
}

int read_batt()
{
  int l_battery = M5.Power.getBatteryLevel();
  return l_battery;
}

ソースコードは、

https://github.com/chateight/servo_

になります。ファイル追加のついでに、汚かった構造(ヘッダーファイルにソースコード混在など)を書き直してます。

おそらく、どのプロジェクトでも電池残量表示はデフォルトで必要だろうと思う。

今は満充電のようですが、表示はおそらくそれほどの精度はなくて目安だろうと思う。

 

P.S.

2日ぐらい経過してみてみたら75%表示になっているから機能はしている。ただし分解能は25%らしい。

 

admin

micro:bitでイベント待ちできるんだ

micro:bitはシングルタスク処理しかできないと思っていましたが、callback処理あるいはバックグランド処理でイベント待ち(ソフトウェア割り込みと言って良いと思う)ができるんですね。バックグランド処理が出来る時点でマルチタスクと言っていいですが。今まで気づいていませんでした、というかmicro:bitにあまり触っていなかったということなのでしょう。

イベントの種類はボタンが押されたとか限定的のようですが、ともかくも割り込み処理が出来るというのは出来ることの範囲が広がります。

で、『ひらけゴマ』の5秒間オープンをスイッチAを押すことで終了させるようにしてみました。イベントの種類には制限があるようで、タスク間通信のような機能もなさそうです。

https://isehara-3lv.sakura.ne.jp/blog/2022/06/03/形のあるものにしたmicrobit-サーボモーター/

イベントの処理部分だけを抜き出すと以下の画像になります。

アップデートした全体コードはこちらに、

https://github.com/chateight/servo_motor

 

admin

形のあるものにした(micro:bit + サーボモーター)

それらしい機能にしてみました。

音/照度/タッチのいずれかの条件で開く例えばゴミ箱のようなもの。

コード、3Dプリンタ用のSTLファイルは以下のリンクにあります。ステッピングモーターへのねじ止めはネジの係が悪くて、ドリルでザグったのであと2mmぐらいは取り付け部の厚さは薄くて良いと思います。

https://github.com/chateight/servo_motor

動作している動画は以下の通り、一度開くと5秒間状態保持するようにしています。

 

admin

Fusion 360の更新

ライセンス切れまであと26日と出てきたので、更新処理をしました。

参考は以下のサイトです。

https://rimo-ws.com/5049/

ギリギリ期限切れでなくとも更新処理はできるようで、手順は以下の通り。

① AutoDeskのサイトにログオンする

② 再度ユーザ登録する(以前の情報も見えるはず)

③ インストールする、最新版がインストールされててもインストール処理は必要らしい

④ アプリを再度立ち上げると、ライセンス切れ表示は消えているはず

およそ一年で、残しているだけでも15個の『作品』がありました。編集できるのは同時10個までが無償版の制限の一つですが、個人利用ならば何の問題もない。

 

admin

Macbookのキーボード照度変えられない

たまたま気づいただけですが、Macbook pro 16(2019)のキーボードのバックライト照明が効かない。変えようとすると、照度変更禁止のようなマークが出ます。

Macbook proだけかと思ってacbook air(2018)見ても同じだから、いずれかのOSアップデートでそうなった可能性。

実用上は問題ないから、そのうち治るのを待つ。

 

P.S.

夕方になったら、Macboo pro/airとも可変できるようになってた、何だったんだろう?

 

admin