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

遅々としてますが、ヒートシンクも付けて、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でライントレース

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

 

 

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