# 8.7 ひまわりロボ







# 学習目標

このコースでは、micro:bit(マイクロビット)、ボタンモジュール、環境光センサーモジュール、ロッカーモジュール(ジョイスティック)、LEDデジタルチューブモジュール(4桁 7セグメント LEDディスプレイ)、サーボ、ビルディングブロックを利用して、最も明るい光を自動的に追跡できる「ひまわりロボ」を製作します。




# プログラミング環境の準備


micro:bit(マイクロビット)のPythonのプログラミングは、Muエディターを利用します。
プログラミングを開始するにあたって、以下の準備を完了させる必要があります。

  • Muエディター(Mu Editor)のインストール
  • ワールド オブ モジュール(WOM)専用ライブラリのインポート

※ Muエディターは、お使いのパソコンで一回インストールすると、以降継続して利用が可能です。





# サーボの事前校正




ビルディングブロックを組み立てる前に、サーボの校正プログラムをダウンロードし、それを使用してサーボの原点となる角度を調整する必要があります。これを校正と呼びます。

注意


- 使用前に校正を行わないと、使用中にサーボが詰まり、ステアリングギアがストールしてサーボが故障する可能性があります。




# サーボの校正プログラム


from microbit import *
import WOM_Sensor_Kit

while True:
    WOM_Sensor_Kit.WOM_servo360(pin1, 180)
    WOM_Sensor_Kit.WOM_servo360(pin10, 250)
    display.show(7)



# サーボの校正方法


サーボを拡張ボードに接続

  • 上記の図に合わせて、サーボをmicro:bit拡張ボードに接続します。(茶色、赤色、黄色のケーブルを黒、赤、黄のコネクターに合わせて接続してください)
  • 付属USBケーブルの二つのマイクロUSBコネクターをそれぞれmicro:bit本体と拡張ボードに接続します。
  • micro:bit本体を拡張ボードに挿入します。
  • Muエディターを使って、サーボの校正用プログラムをmicro:bitに書き込みます。
  • micro:bit本体のディスプレイに「7」が表示され、サーボが正常に校正されていることを確認します。

注意


  • 必ずmicro:bit本体と拡張ボードの両方にUSBを装着してください。
  • micro:bitのUSBポートは、micro:bitへのプログラムの書き込み(ダウンロード)で利用します。
  • 拡張ボードのUSBポートは電源供給で利用します。接続しないとモジュールやサーボへの電源供給が不足する可能性がございます。




# サーボとビルディングブロックの接続


  • ブロック組み立て説明書(PDF)に沿って、ビルディングブロックを組み立ててください。

サーボとビルディングブロックの接続方法

注意


  • 組み立て時は、サーボの取り付ける方向をご注意ください。
  • 方向が間違うとサーボが故障する恐れがあります。
  • 組み立て後、サーボのケーブル側が、上記の図と同じ方向に向いていることをご確認ください。





# モジュールの接続




モジュールを拡張ボードに接続

上記の図に合わせて、ボタンモジュール、環境光センサーモジュール、ロッカーモジュール(ジョイスティック)、LEDデジタルチューブモジュール(4桁 7セグメント LEDディスプレイ)、サーボをmicro:bit拡張ボードに接続します。

  • 上部のサーボ(Upper servo)を拡張ボードの「Servo P10」に接続してください。
  • 下部のサーボ(Buttom servo)を拡張ボードの「Servo P1」に接続してください。



# プログラミング




# 実現内容

  • 環境光センサーモジュールが測定した現在の光の強さを、LEDデジタルチューブモジュール(4桁 7セグメント LEDディスプレイ)に表示させます。

以下の2パターンの動作を実現します。

  • パターン1:

    • ロッカーモジュール(ジョイスティック)を使って、ひまわりロボットの環境光センサーモジュールを上下・左右に制御します。
  • パターン2:

    • ボタンを押すことで、ひまわりロボットが自動的に上下・左右を動作し、周りの光の強度を測定します。その後、最も光が強い方向に向きます。



# プログラミング例


# パターン1 ジョイスティック制御

# -*- coding: utf-8-*-# Encoding cookie added by Mu Editor
from microbit import *
import WOM_Sensor_Kit

display.off()
x = 190
y = 250
WOM_Sensor_Kit.WOM_init_display(7)

while True:
    #光の強度をデジタルチューブで表示する。範囲は0-1023。光が強ければ数字が小さい。
    #ジョイスティックで環境光センサーを上下左右コントロール。
    WOM_Sensor_Kit.WOM_servo360(pin1,x)
    WOM_Sensor_Kit.WOM_servo360(pin10,y)
    WOM_Sensor_Kit.WOM_display(WOM_Sensor_Kit.WOM_light(pin0))
    if WOM_Sensor_Kit.WOM_rocker(pin3,pin4,WOM_Sensor_Kit.WOM_up):
        y = y + 1
        sleep(10)
    if WOM_Sensor_Kit.WOM_rocker(pin3,pin4,WOM_Sensor_Kit.WOM_down):
        y = y - 1
        sleep(10)
    if WOM_Sensor_Kit.WOM_rocker(pin3,pin4,WOM_Sensor_Kit.WOM_left):
        x = x + 1
        sleep(10)
    if WOM_Sensor_Kit.WOM_rocker(pin3,pin4,WOM_Sensor_Kit.WOM_right):
        x = x - 1
        sleep(10)
    #P1に接続するサーボの稼働範囲は60-300、P10に接続するサーボの稼働範囲は190-280。
    if x < 60:
        x = 60
    if x > 300:
        x = 300
    if y < 190:
        y = 190
    if y > 280:
        y = 280



# パターン2 ボタン自動制御

# -*- coding: utf-8-*-# Encoding cookie added by Mu Editor
from microbit import *
import WOM_Sensor_Kit

display.off()
x = 200
y = 250
WOM_Sensor_Kit.WOM_init_display(7)
value = [0, 0, 0, 0, 0, 0]
minimum = 1023

while True:
    WOM_Sensor_Kit.WOM_display(WOM_Sensor_Kit.WOM_light(pin2))
    WOM_Sensor_Kit.WOM_servo360(pin1, 200)
    WOM_Sensor_Kit.WOM_servo360(pin10, 250)

    if WOM_Sensor_Kit.WOM_button(pin0) == 1:
        WOM_Sensor_Kit.WOM_servo360(pin1, 200)
        WOM_Sensor_Kit.WOM_servo360(pin10, 300)
        sleep(500)
        value[0] = WOM_Sensor_Kit.WOM_light(pin2)
        WOM_Sensor_Kit.WOM_display(WOM_Sensor_Kit.WOM_light(pin2))
        print(value[0])
        WOM_Sensor_Kit.WOM_servo360(pin1, 250)
        WOM_Sensor_Kit.WOM_servo360(pin10, 300)
        sleep(500)
        value[1] = WOM_Sensor_Kit.WOM_light(pin2)
        WOM_Sensor_Kit.WOM_display(WOM_Sensor_Kit.WOM_light(pin2))
        print(value[1])
        WOM_Sensor_Kit.WOM_servo360(pin1, 250)
        WOM_Sensor_Kit.WOM_servo360(pin10, 240)
        sleep(500)
        value[2] = WOM_Sensor_Kit.WOM_light(pin2)
        WOM_Sensor_Kit.WOM_display(WOM_Sensor_Kit.WOM_light(pin2))
        print(value[2])
        WOM_Sensor_Kit.WOM_servo360(pin1, 200)
        WOM_Sensor_Kit.WOM_servo360(pin10, 240)
        sleep(500)
        value[3] = WOM_Sensor_Kit.WOM_light(pin2)
        WOM_Sensor_Kit.WOM_display(WOM_Sensor_Kit.WOM_light(pin2))
        print(value[3])
        WOM_Sensor_Kit.WOM_servo360(pin1, 130)
        WOM_Sensor_Kit.WOM_servo360(pin10, 240)
        sleep(500)
        value[4] = WOM_Sensor_Kit.WOM_light(pin2)
        WOM_Sensor_Kit.WOM_display(WOM_Sensor_Kit.WOM_light(pin2))
        print(value[4])
        WOM_Sensor_Kit.WOM_servo360(pin1, 130)
        WOM_Sensor_Kit.WOM_servo360(pin10, 300)
        sleep(500)
        value[5] = WOM_Sensor_Kit.WOM_light(pin2)
        WOM_Sensor_Kit.WOM_display(WOM_Sensor_Kit.WOM_light(pin2))
        print(value[5])
        WOM_Sensor_Kit.WOM_servo360(pin1, 200)
        WOM_Sensor_Kit.WOM_servo360(pin10, 300)
        sleep(500)
        for i in range(6):
            if value[i] < minimum:
                minimum = value[i]
                print(minimum)
        if value[0] == minimum:
            WOM_Sensor_Kit.WOM_servo360(pin1, 200)
            WOM_Sensor_Kit.WOM_servo360(pin10, 300)
            sleep(5000)
        if value[1] == minimum:
            WOM_Sensor_Kit.WOM_servo360(pin1, 250)
            WOM_Sensor_Kit.WOM_servo360(pin10, 300)
            sleep(5000)
        if value[2] == minimum:
            WOM_Sensor_Kit.WOM_servo360(pin1, 250)
            WOM_Sensor_Kit.WOM_servo360(pin10, 240)
            sleep(5000)
        if value[3] == minimum:
            WOM_Sensor_Kit.WOM_servo360(pin1, 200)
            WOM_Sensor_Kit.WOM_servo360(pin10, 240)
            sleep(5000)
        if value[4] == minimum:
            WOM_Sensor_Kit.WOM_servo360(pin1, 130)
            WOM_Sensor_Kit.WOM_servo360(pin10, 240)
            sleep(5000)
        if value[5] == minimum:
            WOM_Sensor_Kit.WOM_servo360(pin1, 130)
            WOM_Sensor_Kit.WOM_servo360(pin10, 300)
            sleep(5000)
        minimum = 1023



# プログラムサンプルファイル


上記MakeCodeの画面以外に、下記のgithubページにて、上記プログラミング済みのプログラムサンプルファイルをダウンロードするこが可能です。


サーボ校正プログラム:microbit-iftiny-wom-creative-sunflower-servo-calibration.py (opens new window)

[パターン1 ジョイスティック制御:microbit-iftiny-wom-creative-sunflower-button.py (opens new window)

パターン2 ボタン自動制御:microbit-iftiny-wom-creative-sunflower-rocker.py (opens new window)


参考:ダウンロード方法


  • 上記githubウェブページを開く

  • Windowsの場合:ブラウザで該当ファイル名のリンクにて、右クリック、「名前を付けてリンク先を保存」を選択し、保存場所を指定してダウンロードする
  • Macの場合:ブラウザで該当ファイル名のリンクにて、右クリック、「リンク先を別名で保存」を選択し、、保存場所を指定してダウンロードする
  • ChromeBookの場合:ブラウザで該当ファイル名のリンクにて、右クリック、「名前を付けてリンク先を保存」を選択し、保存場所を指定してダウンロードする



Last Updated: 3/31/2022, 3:13:17 PM