情報源
■メーカーサイトはこちらです
左車軸旋回版 https://makecode.microbit.org/_euf7KjPErY6P
(旧:https://makecode.microbit.org/_5gEJz4Ki9Abh)
日本語ブロック拡張URL(GitHub)
https://github.com/villanova555/Tiny-bitLib/
■赤外ライブラリ(必ず手動で組み込む。シェアパッケージには入れないこと)
https://github.com/YahboomTechnology/Yahboom_IR_V2
■ TinyBitメーカーページ(全プログラムサンプル)
■ブロックパーツ拡張組み込みURL
・本体
https://github.com/YahboomTechnology/Tiny-bitLib
・リモコン(Mbit_IR)必ず手動で組み込むこと。DLがバグる
https://github.com/lzty634158/yahboom_mbit_IR
・フルカラーLEDは自動組み込み「NeoPxcel」
・GitHub総合検索で ”yahboom” を探す
・機種が少々違うが・・・一気に全部組み込み
■販売業者の商品説明
■組み立て手順動画
https://www.youtube.com/watch?v=251zlYSB6S8
■アマゾン販売
https://www.amazon.co.jp/gp/product/B0BVQVKCTW/
■メーカー・広告動画
https://www.youtube.com/watch?v=cGpbIqa7xF8
■前照灯(2個)
前照灯の制御用コントローラーとして、マイクロエレクトロニクスの「STM8S003F3P6」を搭載し、I2Cでmicro:bitと接続されています。
■尾灯
端子P12に接続されています。NeoPixelの拡張機能を使って点灯させることができる。
上から見て右が [0]
上から見て左が [1]
・P12に繋がれた2個のNeoPixcel をRGBモードで動かす
・Stripを(青)色に点灯する
→尾灯がBlueに点灯
2個のLED・を同じ色で各色で点滅させる。
全てのLEDが同じ色で発光する。
上から見て右後部のLEDが
緑・赤 と点灯します。
配列[ 1 ]を指定すれば左後部が点灯する。
ということで、
A/Bボタンを押したら右左折点滅をするプログラム
ボタンが押されたら
方向と回数を指定して関数呼び出し
呼ばれたら
左右の別を判定し配列番号を1/0に設定する
https://makecode.microbit.org/_hgXgdRhxbVfb
Tiny:bit講座で使う程度ならこれで十分でしょう。
参考
https://umek.topaz.ne.jp/mameduino/neopixel_basic1/
■makecodeエディタをTiny:bit拡張ブロック込みで保存し、Jimdoに組み込む方法
1 プログラム作成中に「Share」ボタンで現在の内容を内包したURLを取得する
2 Jimdoの「</>ウイジット」パーツを組み込んで、以下のHTMLを埋め込む
【重要】
講座会場がOfflineになった場合の対応
すべて事前に行っておくこと。
1 Offline版をインストールする
次のURLから、agree後、インストーラをDLし
https://makecode.microbit.org/offline-app
取得した次のEXEを実行する。(かなり早い)
makecode-microbit-setup-win64.exe
2 Tiny:bit用のライブラリを組み込む
オンライン環境にする。
Tiny:bitモジュールを含んでいるHexファイルをPCから読み込ませる。
あるいはネット上でTiny:bitモジュールを含んでいるプロジェクトを読み込む。
3 1回コンパイルする。(ここでGitHubを参照しているようだ。)
4 これでこのプロジェクト環境がこのPCに登録される。
4 あとはオフライン環境でEXEを起動し、この保存したプロジェクトを再利用すればよろし
超音波センサーは正面の概ね17度程度しかスキャンできません。
この指向性が重要なのですが、Tiny:bitカーでは障害物に ”正対しないと検知" できないということも意味します。
だけどこのロボカーでは、斜めに位置する物体は検知できないので肩がひっかかる。
そこで他機種では装備されている「サーボモータ」を付け首振りが出来ないか?・・・と考えました。
シミュレータではちゃんと首をふるのですが・・・
SG90という汎用サーボを実際にmicro:bitに繋ぐと動かない。給電能力が3倍近いVer2基盤でも同じ。
サーボをサーボテスター(右端)に繋げばちゃんと動く。
そう言えば以前実験で自身が「別電源ならちゃんと動いた」という結果を3年前ブログ記事にしてたのを検索で再発見。(忘却の彼方・・・)
普通に売っているSG90互換品サーボは直結では動きません。
micro:bitキットで付いてくるやつは別規格なのかなぁ?
ArduinoではPin給電で動く。Pin能力は5V x 50ms
micro:bit V2は最大3.3v x 200mA
制御信号が違うのか?お城出動?最悪micro:bitでPWMを制御できるか?・・
これ以上追っかけるのもめんど臭いし
ーーー 障害物回避 最終形態 ーーー
基本型・理想
ボタンが押されるまでは、おスワリしています。
最終形態
超音波乱歩くん
シェアURL
https://makecode.microbit.org/_AgAYLiid8DVm
引っかかったり、反射物でない限りは
そこそこちゃんと走ります。
反省
そもそも超音波スキャナの前方に対するスキャン角度は15~20度
Tiny:bitは固定式なので、対象物に対し斜めに進むと障害として検知できません。
本来は”首振り機能”が要るんです。
が、基本構成では無理ゲーです。
実はTiny:bitには信号線が2本出ているので、これを使えばサーボ1個を動かして、前方200度程度をサーチすることは可能になるかも。
拡張案
「モーターは回っているはずだが加速度変化が無い場合は、引っかかっていると判断して、回避行動を取る」
3回リトライしても変化ない場合は、SOS信号を発光・発音し続け、モーターは停止する。
それでも一定時間変化がなければスリープモードに入る。
ここまでやれば完璧!! かな?
モーター焼付きも回避できるし。
走行系の話
走行時間を伸ばすと加速が付くことがわかる
1 20cm
2 45cm
3 70cm
時間はそのままでパワーを127に上げると
1 42cm
2 78cm
3 108cm
パワー127の状態でブレーキを掛けてみた。
同じモーターパワーで10msほど「後退」
モーターには負荷がかかると思うが。
ギュイッと停止する。68cmで停止
パワー70でブレーキを掛けてみた。
同じモーターパワーで10msほど「後退」を
43cmで停止した。
車速2 前進 左モーター 0 右モーター 0
左右パワーバランス調整することで直進しやすくなる。値は0..255
70程度が制御しやすい。
値には変数を用いると便利
車速 前進 速度 0
左右パワーバランス調整なしに指定した速度で走行する
直進しにくい
モーターパワー 左モーター 0 右モーター 0
意味がわからない。設定した値など無関係に走るようだ。
直後に「前進・・」だけをかけると全力で走行する。
---------
パワー255だと一時期ウイリー走行になる
パワー値により、走行距離や慣性がかなり違ってくるため、精密な距離や角度を指定した走行は困難
机上練習
パワーは70で
その場で回転
その場で500ms前進
停止
運動量は「一時停止(ms)」で決定することを理解させる
ボリュームコントロール(Vol)をPin2に付けて
直進する位置をVolで指定する
右に進ませたい時は右にダイヤルを回す
左に進ませたい時は左にダイヤルを回す
直進した値を、左右モータのパワー差として与える
左モータを基準とし左モータをパワー50で動かす
直進したときの値をR_ofsで取得する。
右が強い場合は右を弱くするのでマイナス値を得る。
補正値が-1の場合は左が50,右が49になる。
やってみたが結構小さい値となる。1とか
Tiny:bit基盤を通すとanalogReadはPin1では動かない。
Pin2にせざるを得なかった。
12号だけではなく4号も同じ、micro:bitv1/v2も同じ
仕様のようである。
Pin2にVolの中線を接続する
Volの左右はプラスマイナスどう繋いでも良い
中央から取り出された3.3vの分圧値がPin2で読み取れる。
読み取った値を511を中心として
MAP関数で今回は変数max_ofsで絶対値で0..20の数値に変換している。
少し0..20では数字が大きすぎるようだ。
0..5程度かな。
シェアURL:
https://makecode.microbit.org/_45s98L44LUov
input.onButtonPressed(Button.A, function () {
Tinybit.CarCtrlSpeed2(Tinybit.CarState.Car_Run, L_pow, R_pow)
basic.pause(runTime)
Tinybit.CarCtrl(Tinybit.CarState.Car_Stop)
})
/**
* Lモータが基準
*
* Rモータ速度を変化させる
*
* 最大変化量は40%としmax_ofsで与える
*/
function 進路調整 () {
vol = pins.analogReadPin(AnalogPin.P2)
serial.writeValue("potenshoMeter", vol)
if (vol > 511) {
R_ofs = Math.map(vol, 512, 1023, 0, max_ofs * -1)
} else {
R_ofs = Math.map(vol, 0, 511, max_ofs, 0)
}
R_ofs = Math.round(R_ofs)
serial.writeValue("R_ofs", R_ofs)
}
input.onButtonPressed(Button.AB, function () {
basic.showNumber(R_ofs)
})
input.onButtonPressed(Button.B, function () {
進路調整()
Tinybit.CarCtrlSpeed2(Tinybit.CarState.Car_Run, L_pow, R_pow + R_ofs)
basic.pause(runTime)
Tinybit.CarCtrl(Tinybit.CarState.Car_Stop)
basic.showNumber(R_ofs)
})
let R_ofs = 0
let vol = 0
let max_ofs = 0
let runTime = 0
let R_pow = 0
let L_pow = 0
basic.showIcon(IconNames.Yes)
L_pow = 50
R_pow = 50
runTime = 3000
max_ofs = R_pow * 0.4
今度は直角に左折させてみた。
ただしこのパラメータは12号機の値なので・・・
「B」が付いた関数はブレーキ機能が付いている。
キビキビしていて見ていて気持ちは良いです。
ココロは痛むが
シェアURL
https://makecode.microbit.org/_eak0Ki8aMH7T
input.onButtonPressed(Button.A, function () {
前進(直進時間)
basic.pause(1000)
左旋回(旋回時間 - 40)
})
function 左旋回B (時間: number) {
Tinybit.CarCtrlSpeed2(Tinybit.CarState.Car_SpinLeft, Left, Right)
basic.pause(時間)
Tinybit.CarCtrlSpeed2(Tinybit.CarState.Car_SpinRight, Left, Right)
basic.pause(5)
Tinybit.CarCtrl(Tinybit.CarState.Car_Stop)
}
function 前進B (時間: number) {
Tinybit.CarCtrlSpeed2(Tinybit.CarState.Car_Run, Left, Right)
basic.pause(時間)
Tinybit.CarCtrlSpeed2(Tinybit.CarState.Car_Back, Left, Right)
basic.pause(10)
Tinybit.CarCtrl(Tinybit.CarState.Car_Stop)
}
function 前進 (時間: number) {
Tinybit.CarCtrlSpeed2(Tinybit.CarState.Car_Run, Left, Right)
basic.pause(時間)
Tinybit.CarCtrl(Tinybit.CarState.Car_Stop)
}
input.onButtonPressed(Button.B, function () {
前進B(直進時間)
basic.pause(1000)
左旋回B(旋回時間)
})
function 左旋回 (時間: number) {
Tinybit.CarCtrlSpeed2(Tinybit.CarState.Car_SpinLeft, Left, Right)
basic.pause(時間)
Tinybit.CarCtrl(Tinybit.CarState.Car_Stop)
}
let Right = 0
let Left = 0
let 旋回時間 = 0
let 直進時間 = 0
直進時間 = 1000
旋回時間 = 400
Left = 50
Right = 50
総評
・講座ではパワー50程度がちょうど良さそう。
・パワー50で1秒走らせるとブレーキを使って28cm程度の移動となるし、速度も適度
同じ動作を満充電のロボカーでやると28~31cm
・パワー50で1秒走らせノーブレーキだと約29~33cm移動する
同じ動作を満充電のロボカーでやると31~36cm
ノーブレーキは誤差が酷い。なんで?
・ブレーキはあまり使わせたくないが、前進と同じ走行パワーで10msほど逆方向にかけることで実現可能
モーターに大きな逆電流が流れたり(よくわからんけど)制御ICにも負荷がかかりそう。痛める原因でしょうね。
A+Bボタンの係数を変えてみた。
ブレーキ(後退)のパワーを x1 とすると
10msのバックでは止まりきれず、数センチ惰性で走り続けた。
ブレーキも同じパワーで掛けないとマズイかも。
パワー50で500ms*n走らせた。
見た目が落ち着いているので賢そうな走行です。
127なんてカッ飛びの鉄砲玉ですね。
A(500ms)・・・11~12cm程度
B(1000ms)・・・28cm
A+B(1000ms&2倍パワー)・・・57~58cm
Tiny:bitとIRライブラリとMakeCodeコンパイルのBUGに悩まされる
「the hex file is not available, please connect to internet and try again.」
コンパイル・これには1分かかることも・・・の後にこうなる。
かれこれ30分も。昨晩もちょこちょこ「1分かかる」とは出ていたが別作業したりで無視していたようだ。
Edge・Cheromeでは再起動しても何やってもコンパイルできなくなった。
ブラウザを変えてFireFoxではファイルとしてDLはできた。なんなんだ?
FireFoxもしばらくするとDL不能に陥った。
2023/11/23 午後4時ころ
Err-msgで検索するとGitHubの問題でと書いてある。再度接続するしかないらしいが・・・・
どうせ一中んじゃ
別PCで実験した結果
GitHubのくっそ癖強が判明
どうもインラインフレームで環境を揃えたモードで編集に入るとそうなるようだ。
これな「https://makecode.microbit.org/_5gEJz4Ki9Abh 」
だが、これはGiytHubではなくMS社のDBに繋がっているはずなんだが・・・
これも結局はコンパイル(DL)できなくなった。
考えを変えてみた。
一般のmicro:bitのMakeCodeで入って、手動でライブラリを拡張する場合は無問題のようだ。
意味がわからん。
おかしくなったら、手動組み込みをささせるしかなさそうだ。
なので、手動組み込みの手順書も作っておかないとイカン
なにはともあれ解決の糸口は見えてきた・・・
が、不安定すぎる。
もうひとつの手法
micro:bit makeCodeへ入って何も拡張せずプログラムを作成してmicro:bitへ直接DLする。
全然無問題
どう考えたってライブラリをパッケージにしてシェアしたURLを使うことがダメじゃんか!
Tiny:bitサブページのエディタ入り口だけをこのURLで書き換えてみる。
そいうやMakeCodeエディタのiFrameで取り込む際に「こいつはMS社は知らんやつじゃ。注意せよ」と警告が出てるな
無料ユーザはしょうがないのかな
再度、全部揃った環境をそのままShareしてみた(手作業組み込みはやってない)
新たに得たURLはこちら
https://makecode.microbit.org/_0PLYz73os15b
古いURLはこちら
https://makecode.microbit.org/_5gEJz4Ki9Abh
さてどうなるのか・・・
ダメでした。
もしかすると、一から手で組み込んだら違うのか?
それともGitHubサーバが日次更新などでリフレッシュされるタイミングでバグった状態がリセットされるのか?
そろそろ嫌になってきた。今日はお終い。8時間以上やってるわ
もしかすると全部のライブラリを揃えた環境URLを「Share」で提供しているが、
ただ乗りユーザだから1日程度で環境が捨てられてるのかな?
そろそろ「ビンボが悪いんや」と生来のヒガミが出てきたようだ。
なんとか解決せねば
別PCでFireFox
次は手動組み込みで自作日本語環境を・・・OK、DLできる
今度はEdgeでLinkした上で直接転送・・・OK、直接DLできる
結局これか!
結局、確実なのは手動で組み込めってことだった。
2時間の悪戦苦闘の結果、わかったことはこれだけ
====================
解決した
====================
--------2023/11/24 04:50
11/12の古いバージョンにもどしてみた。
ライト:黒
ラインセンサー変な日本語
IRライブラリ無し
<iframe src="https://makecode.microbit.org/_C9kRcbWcmCcs"
width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0">
</iframe>
=>動いた
※ということはそれ以降の改変が悪かったということ
・LED黒ー>消
・ラインセンサー文字列改変
・IR組み込み
いずれかが原因
--------2023/11/24 04:55
11/12の古いバージョンは妙なプログラムがはいってるので
はじめに、ずっとの2個だけを横並びに置いたシェアを作成した。
シェアURL:https://makecode.microbit.org/_bUK7ohAJ1HCe
<iframe src="https://makecode.microbit.org/_bUK7ohAJ1HCe"
width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0">
</iframe>
設置したのは「Tiny:bit」のトップ画面設置のやつだけ
=>OK
取り敢えずはこれでもOK
--------------
2023/11/24 05:10
TB(ja)の名称でもう一度エッジ上でプロジェクトを新規作成し
https://github.com/villanova555/Tiny-bitLib
を取り込んだものを作成し、
RGB:消、・ラインセンサー文字列改変のVer
シェアURLを得た
https://makecode.microbit.org/_hx2h3KejsaXf
FireFox上のJimdoでiFrameを更新した。
<iframe src="https://makecode.microbit.org/_hx2h3KejsaXf"
width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0">
</iframe>
=>OK
※ということはIRライブラリの組み込みが悪かった・・・らしい
講座では使いません。はい
一時は講座開催を諦めにといけないか・・と悪夢で目が覚めるような話だった。
Yahboom社もIRライブラリを組み込んでいないのはもしかすると、組み込み不具合が出る。そういう理由かも
超音波測距
距離を測ってグラフ表示が練習には良いのではないかな。
けっこう長距離を測定しているようだが、会場ではあまり意味がないので100をMAXとするぐらいが良いでしょう。
講座ではシリアル出力はなし。
測距実験中
==================
超音波測距(室温は21度)
ダンボールで試す
micro:bit Ver1.5基盤にAp入れて Tiny:bit ver1.3基盤 -5~-10%の低い値を算出
micro:bit Ver1.5基盤にAp入れて Tiny:bit ver2.0基盤 -50%程度の低い値を常に検出
例えば30cmなら15cmと言い張る。4~5台で試したが全て同じ傾向※
micro:bit Ver2.0基盤にV2専用Ap入れて Tiny:bit ver1.3基盤 ほぼ正確だったり-5~-10%値を検出
micro:bit Ver2.0基盤にV2専用Ap入れて Tiny:bit ver2.0基盤 -5~-10%の距離を算出
※最初にこの最悪な組み合わせで実験したので返品かと思った。
組み合わせて実験すると、どうもmicro:bitのバージョンアップに対応できていないと言うことかも、と感じた。
しかしこんなことでは講座が成り立たない。micro:bit ver2を購入せざるを得ない。という結論になった。
メーカーサイトでは450cmまで測れると書いてあったので確かめたが、こいつそんなに高性能だったんだ・・・
シリアル通信で取得データを計測する