M5Stick V (その2:V-Training)

V-Trainingでファームウェアの先にClassification modeという項目にFor M5StickVという項目があって、boot-M5StickV zipファイル(私がダウンロードした時のファイル名はVTraining-Client-VerA02B01.zipでした)をダウンロードしてマイクロSDカードに解凍&コピーしてM5Stick Vを起動すると物体の学習データのための撮影モード(?)で起動しました。

使ったマイクロSDカード

マイクロSDカードに相性があるという記述が多いですが、最新のファームウェアでは改善されているという記事もあったので、家にあったTranscend 32GBのマイクロSDカードを使いました。
無事に認識されて使えてます。

使ったマイクロSDカード

いろいろ試していて面倒なので別件で買っておいた5枚組のやつを試したら使えました。
Gigastoneの16GBです。

5枚組のマイクロSDカード

学習

この4体+スティーブがブタに乗った計5体を学習

上記の5体を撮影してファイルをアップロードしてみました。
撮影は人形を立てた状態で、いろんな角度から撮影しました。アップにしたり離れたところから撮ったり。最初は各39枚。最終的に各41枚撮りました。

http://v-training.m5stack.com/

2回失敗した後、3回目で成功しました。
エラーの内容はここにも紹介されています。
http://setsubi.no-mania.com/m5stickv/v-training%E3%81%A7m%EF%BC%95stickv%E7%94%A8%E5%AD%A6%E7%BF%92%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F%E8%A9%B1

2回の失敗の際、メールに「CONTENT: Lake of Enough Train Dataset, Only 170 pictures found, but you need 180 in total.」と書いてありましたので、最終的に180枚になるように各41枚撮りました。各モデルに5枚の「正解」となる判定用の画像が取られるので、(41-5)=36枚 x 5で180枚になります。
しかし、ほとんど「村人(茶色の人)」に判定されて、しかもフリーズしました。

結果のモデルデータが悪いのかと思って、もっと単純になるように人形を寝かせて種類も減らしました。

3体学習

この状態であまり角度とか変化させずに各40枚撮りました。
そしたら、「CONTENT: Lake of Enough Train Dataset, Only 64 pictures found, but you need 120 in total.」と書かれていて、その下に「どの画像がどの画像と似過ぎている」という情報がずらーっと書かれていました。

再度、多少変化させて各40枚撮ってアップロードしたら、成功しました。

しかし、今回もほとんど「村人」でしかもフリーズ。

「何か根本的に間違っているのか?」とboot.pyに画面にコメント出させたりして、どこでフリーズしているのか探ってみましたが、そもそもMaixPyの事もよく知らないのでわかりませんでした。

「何か既存の学習データを動かせるものは無いか?」と探したところ、BrownieというのがGithubにあるようです。

Brownieを試す

このサイトを見ながらBrownie(brownie_v1.0.1.zip)を試してみました。動くには動くけど、あまり認識しない感じでした。画面も緑色の細かいグリッドが表示されて見にくいし…

BrownieのGithubを見ていたらboot.pyにFirmware v5.1.2対応という変更があったので、「もしかしてファームウェア v5.1.2が問題?」とFirmware 5.1.2で検索したら、次のページが見つかった。

https://community.m5stack.com/topic/1918/m5stickv-firmware_v5-1-2

この中で何やら問題があって、その回答に次のURLが書かれていた。

https://forum.m5stack.com/topic/1403/m5stickv-firmware_1017-upgrade

で、このページのFirmware Download linksからM5StickV_Firmware_1017.kfpkgをダウンロードしました。
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/M5StickV_Firmware_1017.kfpkg

Firmware 1017

M5StickV_Firmware_1017.kfpkg をダウンロードし、書き込んだら上記の3体学習がちゃんと動くようになりました。

5体学習のデータでも動くかどうか確認しました。ちゃんと動きました。ただ、認識率がちょっと低い。特にスティーブがスティーブ+ブタに認識されちゃう。

Official Updates

https://forum.m5stack.com/category/34/official-updates

カテゴリー: M5Stick V | タグ: , | コメントする

M5Stick V(その1:ファームウェアのアップデート)

AIカメラとして出ていたM5Stick Vを買ってみました。

パッケージ
箱から出した

とりあえず、起動してみたら顔検出のようで、いつものマイクラフィグのスティーブとブタの顔が検出されました。

M5Stick Vの出荷時点での機能。
顔検出?

Macでセットアップ(macOS Big Sur 11.2.2)

たいていのM5Stick Vのセットアップの記事ではファームウェアのアップデートが書いてありましたが、そもそもサイトが改定されていて、どこにあるのかちょっと探しました。

製品一覧
製品一覧
Quick Start
V-Training
V-Trainingのページ
V-Trainingのファームウェアとkflash_gui.appのダウンロードリンク
(kflash_gui.appは別からダウンロードすべき)

V-Training内にファームウェアとkflash_gui.appのリンクを発見しダウンロードしました。しかし、ダウンロードしたkflash_gui_v1.5.2_macOS.dmgからインストールしたkflash_gui.appが普通に起動しませんでした。
ターミナルから次のコマンドで起動させられるとの記事を見つけました。

open /Applications/kflash_gui.app

これで起動しました。起動したら、次のサイトが表示されました。

https://github.com/Sipeed/kflash_gui/releases

現在の最新版v1.6.7からkflash_gui_v1.6.7_macOS.dmgをダウンロードしました。
kflash_gui.appをインストールし直したら起動しました。

早速、ダウンロードしたファームウェア(M5StickV_Firmware_v5.1.2.kfpkg)を指定してDownloadボタンをクリック。ちょいちょい中国語が見えるのが気になりますが、無事にDownload成功。
(現在インストールされているファームウェアのバージョンはどうやって確認できるんだろう?)

最初と同じ画面(機能?)になりました。

追記
次のV-Trainingでファームウェアを次のものに変えました。
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/M5StickV_Firmware_1017.kfpkg

顔検出

電源を切る

電源切るのに苦労しました。
6秒の長押しなんですけど、画面が黒くなってすぐにボタンを離すと再起動してしまいます。
画面が黒くなって2秒くらい押し続けてからボタンを離すと無事に切れました。

カテゴリー: M5Stick V | タグ: , | コメントする

PSXコントローラー

PS用のコントローラーを使いたくて、とりあえずPS2互換のコントローラー(と延長ケーブル)を購入してArduinoでデータを見てみた。

PSXコントローラー情報

SONY PLAYSTATION®
CONTROLLER INFORMATION
https://gamesx.com/controldata/psxcont/psxcont.htm

PSX Library
https://playground.arduino.cc/Main/PSXLibrary/

回路図

スケッチはこのコントローラーでは動きましたが、別のコントローラーだとうまく動かないので、公開は控えます。うまく動くことが確認できたら公開します。
上のPSX Libraryは動いているので、ディスプレイとかつながなければ大丈夫です。

ピンと色の情報

カテゴリー: Arduino, 部品 | タグ: | コメントする

Nゲージ ポイント切り替えの信号を調査

KATOの電動ポイントの切り替えスイッチの出す信号をオシロスコープで調べた。
とはいえ、単純な物理的なスイッチで切り替えているので、出ている電圧くらいしか見るところが無い。

12Vのパルスが出ていた。
直線からカーブへの切り替え時が赤がプラス。
カーブから直線への切り替え時は黒がプラス。

追記

YouTubeの動画へのコメントでPetit Labさんに「オシロスコープを100ms/divにするとパルスが見れる」とのアドバイスをいただいたので、いろいろいじってみたらようやく見れた。
5倍に時間が伸びているので、パチンパチンと6回切り替えた状態(カーブ→直線→カーブ→直線→カーブ→直線→カーブ)が記録されています。

ポイント切り替え時の信号
カテゴリー: Nゲージ, 作業 | タグ: | コメントする

TB6643KQで30kHzのPWM

どうも高周波数のPWMで動かすにはパワーMOSFET系のトランジスタじゃないとダメらしい。
パワーMOSFET系のトランジスタはNchのを2種類(しかも1つはチップトランジスタ)しか持ってないので、フルブリッジは作れない。作れないことはないけど、他に部品(ゲートドライバIC)が必要。→秋月のキット参照の事

「確か先日、モータドライバを2種類(TA8428K, TB6643KQ)買っておいたのがあったなぁ…」とデータシートを確認したら、TB6643KQがMOSFET系だったので、急遽差し替えて試してみたら無事に動いた。

回路図は次のようになっています。

回路図
回路図

スケッチをGitHub.comに登録してみました。

https://github.com/physicam/tb6643kq_pwm30khz

スケッチは次のようになっています。

#define PIN_SW1   2 // Speed Up
#define PIN_SW2   3 // Speed Down
#define PIN_IN1   9 // Output Pin for IN1
#define PIN_IN2   10 // Output Pin for IN2
#define MAX_VALUE 256
#define LIMIT_VALUE (MAX_VALUE-1)
#define DELTA_SPEED (MAX_VALUE/8)

int prev_sw1 = HIGH;
int prev_sw2 = HIGH;

int value_speed = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println("TB6643KQ PWM 30kHz");

  pinMode(PIN_SW1, INPUT);  // Speed Up
  pinMode(PIN_SW2, INPUT);  // Speed Down
  pinMode(PIN_IN1, OUTPUT);  // Output Pin for IN1
  pinMode(PIN_IN2, OUTPUT);  // Output Pin for IN2

  // PWM 30kHz
  TCCR1A = 0b00000001;
  TCCR1B = 0b00000001;
  
  analogWrite(PIN_IN1, value_speed);
  analogWrite(PIN_IN2, value_speed);
}

void loop() {
  // put your main code here, to run repeatedly:
  int curr_sw1, curr_sw2;
  curr_sw1 = digitalRead(PIN_SW1);
  curr_sw2 = digitalRead(PIN_SW2);
  if (curr_sw1 != prev_sw1) {
    if (curr_sw1 == LOW) {
      // これが押された判定
      Serial.println("sw1");
      if (value_speed == -LIMIT_VALUE) {
        value_speed = -MAX_VALUE;
      }
      value_speed += DELTA_SPEED;
      if (value_speed > LIMIT_VALUE) {
        value_speed = LIMIT_VALUE;
      }
      updateSpeed();
    }
    prev_sw1 = curr_sw1;
    delay(10);
  }
  if (curr_sw2 != prev_sw2) {
    if (curr_sw2 == LOW) {
      // これが押された判定
      Serial.println("sw2");
      if (value_speed == LIMIT_VALUE) {
        value_speed = MAX_VALUE;
      }
      value_speed -= DELTA_SPEED;
      if (value_speed < -LIMIT_VALUE) {
        value_speed = -LIMIT_VALUE;
      }
      updateSpeed();
    }
    prev_sw2 = curr_sw2;
    delay(10);
  }
}

void updateSpeed() {
  if (value_speed > 0) {
    Serial.print("(");
    Serial.print(value_speed);
    Serial.println(", 0)");
    analogWrite(PIN_IN2, 0);
    analogWrite(PIN_IN1, value_speed);
  } else if (value_speed < 0) {
    Serial.print("(0, ");
    Serial.print(value_speed);
    Serial.println(")");
    analogWrite(PIN_IN1, 0);
    analogWrite(PIN_IN2, -value_speed);
  } else {
    Serial.println("(0, 0)");
    analogWrite(PIN_IN1, 0);
    analogWrite(PIN_IN2, 0);
  }
}
カテゴリー: Arduino, ソフトウェア, 部品 | タグ: , | コメントする

TA7291Pで30kHzのPWMを試す

(3.8kHzも試したけどモータの鳴りが止まらなかった。)

しかしanalogWriteの値が240以上じゃないと回らない。しかも255に近いのでほぼ全開。

127とか途中の値だと全然動かないのでオシロで波形を確認すると波形が崩れていて電圧が上がらない。

どうもTA7291Pはバイポーラトランジスタで構成されていて、30kHzだと反応が遅くてダメらしい。

カテゴリー: Arduino, 部品 | タグ: , , , | コメントする

ArduinoのPWM周波数を変更する

ArduinoのanalogWriteでPWM出力できるのは、デジタルピンの~が付いた3, 5, 6, 9, 10, 11の6つ。3と11, 5と6, 9と10が同じタイマーを使うようになっている。
詳しくは、次のサイトをチェック。とても詳しくてわかりやすい。
analogWrite()

今回は9, 10を使う事にした。
次のようにTCCR1A, TCCR1Bを設定する事で、約30kHzに設定できた。

void setup() {
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);

  TCCR1A = 0b00000001;
  TCCR1B = 0b00000001;

  analogWrite(9, 127);
  analogWrite(10, 127);
}

このページも参考になる。
PMWの周波数を変更する(タイマ/カウンタ レジスタ値の確認と変更)

カテゴリー: Arduino, 部品 | タグ: , , , | コメントする

TA7291PのArduinoのPWMでの制御

モータをArduinoのPWMで制御しようとするとモータ(FA-130RA)が鳴る。
「モータが鳴る」というのはPWM制御の前調べしていてわかっていたけど、思っていたより音が大きくて、これは「使えない」と思った。

カテゴリー: Arduino, 部品 | タグ: , , , | コメントする

モータ用フルブリッジ・ドライバ TA7291P

昨年の暮れに発掘したTA7291Pを再度調べ直して、シンプルな動画にしました。

もう新規設計用には非推奨になっていますが、制御用とモータ用の電源が分かれていて、特に小さな電圧用のモータ(ここでは1.5V用のFA-130RAを使用)を動かすのに便利なフルブリッジ・ドライバのTA7291Pの紹介です。

制御用とモータ用の電源があって、制御用の入力IN1, IN2を”0″, “1”にするとモータ用の出力の状態が変わって、回転方向も制御できるフルブリッジ・ドライバです。 本来はマイコンなどで入力IN1, IN2を制御しますが、ここではIN1, IN2を直接スイッチで入力してモータの動きを確認しています。

※ 1.5V用のFA-130RAの電源に3Vをつないでいますが、TA7291P内部の2ヶ所のスイッチングでそれぞれ約1V、計2V下がるのでモータには1V程度しか供給されません。

データシートのファンクション部分
回路図

参考記事
https://www.marutsu.co.jp/contents/shop/marutsu/mame/81.html

カテゴリー: 部品 | タグ: , | コメントする

KiCadの起動がスムーズに

macOS 11 Big SurでArduino IDEがちゃんと起動しない件でJavaを更新したら、KiCadの起動がスムーズになった。それまでは起動にかなり時間がかかって、最初のうちはフリーズしたんじゃないかと強制終了してたくらいに時間がかかっていた。

カテゴリー: KiCad, ソフトウェア | タグ: , | コメントする