micro:bitからのログの方法

Wi-Fi機能があれば簡単ですが、micro:bitには無いので普通はBLE使うのですが、BLEはいまいち使いづらい、

というわけで、もう一台micro:bitを用意してmicro:bit間は専用のradio機能で通信、受け側はUSB serialを使えば割と簡単にログが取れます。パソコンでのターミナルのシリアル動作はいまいち不安定(文字が抜ける)なのでMakeCodeのログ機能で表示させてみました、最終的にはProcessingで物体の状態を表示させるのが目的ですが、

micro:bitの送り側からはコンパス情報と加速度情報を送って、受け側にシリアル転送、MakeCodeのログ機能でビジュアル化しています。

<コンパス機能>

角度360から0は断絶してますが、micro:bitを徐々に回転させた時の数値の変化

<x軸の加速度>

micro:bitを手で左右(x軸方向)に振ってる状態

事前の処理は必要ですが、これらを使ってクラゲホバークラフトの安定化に使うつもり、

P.S. USB シリアルのデータ抜け、飛びはM1 Macで起こるけれどもIntel Macでは問題なさそうだ、MakeCodeではまともそうな理屈はつきませんが、

あと、MakeCode以外でUSBシリアル使う時にはパソコンのリブートでポート番号が変わるのは要注意

 

admin

 

 

 

 

 

 

 

プロペラ四発始めて同時に廻った

遅々としてますが、ヒートシンクも付けて、micro:bitのP0/P1/P2/P8ピンをPWM制御に使って、モーターを駆動してみました。

まだ電池ケースを実装していない、両面テープで貼り付け対応、ですが電池交換する時には両面テープから剥がさないとPWMコントローラーが巨大化したのでそこにつかえてしまうので対応できません。

電池ケース以外では、micro:bitの電源どうするかですが、単三NiH電池の3本直列ぐらいの電圧を供給するのが適切なので、電池ケースの1本分から引き出す方法も考えないといけない。

ホーバークラフトの機能として一番大切な浮上に関しては、スカートを作成してやらないとだめで、隙間テープを貼り付けてその役割をさせるつもり。

 

admin

 

 

ホーバークラフトの原理試作

まずはきちんと浮かせることが出来るかどうかを検証しました。

空気室はホームセンターで調達の発泡丼、そこにモーターとプロペラ固定用のアダプタを3Dプリンタで造形して嵌め込み。

 

外部電源で4.8V(単三のNiH電池四直を想定)を与えると、元気に浮き上がりました。元気すぎてひっくり返りますが、

空気室への取り付け方と、全体(4個の空気室)の結合方法考えて、改善したものを4個と全体保持機構(これはアイディアこれから)を作ります。

 

admin

micro:bitもtoioもScratch Linkで接続できると言うことは、

技術情報が公開されていて色々弄れそうなのでtoioを購入、まだ手元には届いていませんが、toioをScratchから使う時にはパソコンとの接続にはScratch Linkを使う(Web Bluetooth API)と言う記述がありました。したがってmicro:bitもコマンドが公開されてるだろうと思って調べてみると、

https://qiita.com/youtoy/items/c98c0996458a21fc1e67

と言う事例がありました。2021年の記事なのでmicro:bit V1向けかどうかは微妙なのでV2では多少変更が必要(少なくともUUIDは別物になる)かもしれませんが。まあ元々ScratchやMakeCodeはどちらもブラウザ上で動作して、ブラウザとmicro:bit間の通信手段はScratch Linkなので中を通るデータは変わってもtoioでも使えるのでしょう。

上記のサンプルはパソコン側での受信なので、パソコンからの送信は、

https://qiita.com/yagshi/items/abfb3717fb978d031b7e

があります。

いずれにしてもbluetoothとのブラウザからの接続はWeb Bluetooth APIを使いますが、ブラウザが限定でChromeがメジャーブラウザです。

過去記事:https://isehara-3lv.sakura.ne.jp/blog/2021/04/01/microbitでbluetooth通信/

C/C++で低レベルでの接続には、

https://tech.microbit.org/software/runtime/

が関連ドキュメントになりそうですがmicro:bit V2はCODALというハードウェアの抽象化手段があるようです。

 

admin

micro:bitのカスタムブロックを作る

以下を参照に一番簡単に作れるであろう、出来合いの拡張ブロックを動かしてみた。

https://qiita.com/tkyko13/items/081b8759ed98f6ed577d

手順はリンクの通りですが、普通にGitHubに上げることもできるので共有(全体になるので、ブロックを部品としては扱えない)もできます。

内部的にはブロックはおそらくStatic TypeScriptに変換され、さらにJavaScript、そしてマシンコードに落とされてhexファイルが作成されて、それをmicro:bitに転送すれば実行されるという流れになります。

Type Script(Java Script)のコードは適当なドキュメントが存在しない(見つけられないだけ)ようなので、ブロックからJavaScriptのコードを拾い出して使うしかなさそう。

 

admin

 

 

 

micro:bitの拡張機のでライントレース時のログを取ってみた

pxt-microbitを調べている間に、すでに拡張機能でmicro:bit内蔵のFlashにログが取れる機能があることを知りました。で画像下の黒ラインをトレースさせた結果のログを取ってみると、

こんな感じで画像化できました。ログデータはmicro:bitディレクトリから見えるMY_DATA.HTMをダウンロードするとcsvファイルなのでnumbersで加工。ログをクリアする処理を処理の初期化で入れてしまうと、ログを取ろうとすると中身が消えてしまうので追記型にしています。

ログの対象はモーター駆動パワーと、ラインセンサーのフォトトランジスタ電圧をAD変換したもの。駆動パワーが130を超えている部分はラインを逸脱しそうになって右回転あるいは左回転を実行している部分です。

グラフ化してみると概ねイメージと合っていますが、データをビジアル化してみるのは理解が早まると思います。

今現在のコードは、

https://github.com/chateight/trace_microbit

P.S. 2023/6/14

フラッシュメモリへのログは予想以上に時間がかかっていて、ループ時間のおよそ30msは大半がログのための時間のようです

 

admin

 

 

 

makecode for microbit

makecodeのうちでmicrobit用のバージョンがmake code for microbitになります。pxtという言葉も出てきますが、makecodeというのは目に見える画面エディタのことで、pxtはmakecodeを動かすためのGitHubのリソースのことだという記述があります。

https://github.com/microsoft/pxt-microbit

にmicrobit用のpxtリソースが存在しますが、このpxtリソースでできることは、

① makecode for microbitをローカルサーバーで動かす

② ローカルで開発環境を構築

の二つだと思います。

手順通り動かしてみると、ローカルでmakecode for microbitが立ち上がりました。

大半はTypeScriptで拡張機能が実現できそうですが、ハードウェアを扱うときにはC++も必要になるでしょう。

 

admin

micro:bitのLED表示時間が異常に長い件について

直前のブログでLED表示時間が異様に長い件、micro:bitのドキュメントにその理由と思われる記載がありました。

https://lancaster-university.github.io/microbit-docs/ubit/display/?fbclid=IwAR0ZlyEd0pQnAIEmQUUK_gUnD-jalUa-hzdmIHjCRyauOcIJwdLBerLbFyI

overviewの最後にある通り、

“In it’s normal mode, the display will update every 18ms (55 Hz). If the display is in light saving mode the period is changed to 15ms (66 Hz).”

18ms毎にupdateされるようなので、この時間がLED表示データ書き込み時間として見えて来ているようです。マルチタスク動作ではないだろうmicrobitのファームウェアでは。

 

admin

Micro:bitでライントレース

Arduinoベースの車では、簡単に軌跡を外れるので、Micro:bit carにセンサを外付けしてあたりを付けてみた。Arduino(VScodeのPlatformIO)ではmicro:bit(makecode)に比較して開発のループ時間が長くなるので。

3Dプリンタでアタッチメントを作成して、センサーを両面テープで貼り付けました。アナログ入力はP0とP2を使っています。

動きを遅くするために、モーターの動作時間を限定してフィードバックが確実にかかるようにしてやると『カメモード』ですがトレースできるようになりましたが、動かすにはパラメータが多いので調整は大変そうです。ましてP.I.D制御までやろうとすると。

makecodeのコードは以下に、

https://github.com/chateight/trace_microbit

2023/5/18 LED表示に時間が掛かっている

LED表示にステータス、前進/右旋回/左旋回の数字を表示させるだけで数十ms必要で制御が間に合わなくてコースアウトしていたので、LED表示を削除して『ネズミモード』ぐらいまで高速化、展開時のモーター駆動にはP制御も追加しました。P制御の原理はフォトトランジスタの読み取り差をモーター駆動力にリニアに反映(下限と上限は決めていますが)しています。

 

admin

 

micro:bitのイベント待ちはブロック言語ではよく分からない

micro:bitで二つのDCモーターを駆動して走らせる車はスイッチサイエンスで購入、

https://www.switch-science.com/products/7957?variant=42398922997958

これに、

Laser距離センサーを動かしてみた

レーザー距離センサーから、ある値以下に障害物に近づいた情報をmicro:bitのP0にパルス(およそ500μs幅)送って方向転換させようとするとイベント待ち、要は割り込み処理、を行おうとした時に、このリファレンスではよく分からないから、

https://makecode.microbit.org/reference

試行錯誤の結果で、

のようにしたら意図したように動いた。

M5stack側のコードは、

https://github.com/chateight/PlatformIO/tree/master/laser_dist_01/src

micro:bit側の全体は、

https://github.com/chateight/mb_car_drv

micro:bitリモコンは、

https://github.com/chateight/mb_car_ctl

 

従って、micro:bitもちゃんと扱うのはC++環境になるんじゃないか

VScodeでmicro:bitを扱うのはこの辺りが取っ掛かりになるだろう

https://jhalfmoon.com/dbc/2020/02/28/鳥なき里のマイコン屋77-vs-codeでmicrobit、デバッガも使え/

 

admin