micro:bit 応用編 サーボモータと超音波距離センサでスキャン

2021.10.19 Coskx Lab  

1 はじめに

サーボモータに超音波距離センサを載せてスキャンすると,周囲の様子をある程度知ることができます。実際にスキャンして,どの程度の実力か検討してみます。


2 使用環境

3 端子の割り付け

サーボモータはPWM信号のみで制御するのでmicro:bitの端子を1つだけ使用します。 ここではP2を使うことにします。これ以外でも他のセンサなどに使用されていない端子であればどこでもよい(例えばP1など)です。この段階でどの端子を使うか決めておき,ケーブル接続においても,プログラムにおいてもP1を使うことで一貫している必要があります。
超音波距離離センサ(Grove Ultrasonic Ranger)はTriger信号とEcho信号を1つの信号線で共用しているので,P9を使用することにします。(Triger信号とEcho信号をを別々の信号線を使用している超音波距離センサでは2つの端子,例えばP9,P14などを使います。)

参考 micro:bit端子一覧

4 接続

サーボモータおよび超音波距離センサの接続は別途解説されているので,そちらを参照してください。
 超音波距離センサGrove Ultrasonic Ranger 
 超音波距離センサRCWL-1601 
 RCサーボSG92R 
 RCサーボFT90B 

5 プログラム

MakeCodeを使います。
P2でサーボモータ用のPWM信号を発生します。 サーボモータは,1度ずつ角度が変化する動きをします。 (60度から140度まで変化します。)
サーボモータに角度指令を送ってから,サーボモータが動作を止めるまで50ms待ってから超音波距離センサで測距します。

  動作テスト用プログラム



コピペする場合は,拡張機能「nifty-ultrasonic-ranger-microbit」を取り込んでから,次のソースコードをPythonソースとして貼り付ければ完了です。

def on_button_pressed_a():
    global angle, distance
    for count in range(81):
        angle = count + 60
        pins.servo_write_pin(AnalogPin.P2, angle)
        basic.pause(50)
        distance = NiftyUltrasonicRanger.measureincm()
        serial.write_line("" + str(angle) + ", " + str(distance))
input.on_button_pressed(Button.A, on_button_pressed_a)

distance = 0
angle = 0
serial.write_line("distance scan")
NiftyUltrasonicRanger.initialize_single_pin_ultrasonic_ranger(DigitalPin.P9)

6 測定方法

超音波距離センサは,センサ正面付近の物体までの距離を測定します。
センサ前方に物体があると,その方向では短い距離が,それ以外の場所では遠くの距離が測定され,図のような結果が想定されます。



センサ前方に,幅12cmの矩形の箱をおいて超音波距離センサでスキャンしてみました。
矩形箱までの距離は50cm,1mと1.5mで測定しています。



7 測定結果

図のような測定範囲で測定し,次のような結果が得られました。

(1)矩形箱までの距離50cmのとき



(2)矩形箱までの距離1mのとき



(3)矩形箱までの距離1.5mのとき



矩形箱までの距離はおおむね正しく測定されています。
2つの測定ではどちらも実際より幅が大きく測定されています。
矩形箱までの距離50cmのとき,14度の大きさに見えるはずですが,76度に見えています。
矩形箱までの距離1mのとき,7度の大きさに見えるはずですが,58度に見えています。
矩形箱までの距離1.5mのとき,5度の大きさに見えるはずですが,60度に見えています。
超音波距離センサは前方に超音波を発射して,それが戻ってくるまでの時間から距離を推定しています。しかし,超音波は広がって伝わり,広がりの範囲内に何かがあるとそこまでの距離を測定してしまうと考えられます。
なお,背景の壁までの距離が左右で異なって計測されています。測定環境では(好ましくはなかったのですが)右側に壁が近くにあり,測定フィールドの右側(グラフの左側)では,この壁が背景の壁より先に見えてしまっていると思われます。

8 まとめ

RCサーボに超音波距離センサを載せて,前方の矩形箱の測定をしました。
矩形箱までの距離はほぼ正しく測定できますが,箱の幅は大きく膨らんで見えています。
距離によってどれくらい膨らんで見えるかの測定をしておけば,実際の幅を推定することができると思います。
また膨らんで見える幅の中心が矩形箱の中心であることは判ると思います。