仕事でざっくりとした距離が測れて
5m間隔等の一定間隔が測れる距離計が入用になったのでmicro:bitで作ってみました
(センサーとブザーがオンボードの安いマイコンなら何でもよかった)
micro:bitそのものをあまり分かっていないので 今回はブロックでの作成です
距離の測定は 別途用意した車輪に磁石をつけて磁石が磁気センサーを横切る回数をカウントすることにしました
磁気カウンター
まずはシンプルに磁力が一定値を超えた回数を記録するカウンター
「ずっと」のサイクルは20msごとに処理が実行されるようで
磁気が強い状態が継続する場合にはカウントアップしないようにフラグを入れたのだけれど・・・
どうやら磁力に変化がない状態でもセンサーの値が小さくなることがある様子で
予期しないタイミングでカウントアップされる症状が発生しました
なので 1サイクルだけ基準を下回っただけではカウント対象にならないようにフラグの使い方を調整
とりあえず誤作動はなくなりました
距離カウンター
磁気でワンカウントされる度に 外周の距離をカウントするようにして
5mを超える毎にブザーを鳴らすコードを入れてみました
距離もLED表示したいものの
通常 Micro:bit は複数桁の数字はスクロール表示するので
2桁の数字をLED表示する WhaleySansFontを導入してメートル単位での表示にしてみました
Counter = 0
CountFlag = 0
StepLength = 11.5
def on_forever():
global Counter, CountFlag
if 400 < abs(input.magnetic_force(Dimension.X)):
if CountFlag == 0:
Counter += 1
if StepLength > Counter * StepLength % 500:
music.play(music.string_playable("C C A - - - - - ", 400),
music.PlaybackMode.IN_BACKGROUND)
CountFlag = 2
else:
if CountFlag == 2:
CountFlag = 1
else:
CountFlag = 0
whaleysans.show_number(int(Counter * StepLength / 100))
basic.forever(on_forever)