# 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