2025年度 浜松南高等学校 ロボット講座

9月6日 第1回

はじめてのMaqueen ー LEDの点灯

# ここにコードを書いてね :-)
from microbit import *

pin12.write_digital(1)
sleep(1000)
pin12.write_digital(0)

時間が余ったときのMaqueen

from microbit import *
import music

music.play(music.ENTERTAINER)

9月13日 第2回 ロボット講座 ― Mu Editor の使い方 ―

本日最初のプログラム

# ここにコードを書いてね :-)
from microbit import *

display.show(Image.HEART)

LEDディスプレイに色々表示してみる 

from microbit import *

display.show(Image.HEART)
sleep(500)
display.show(Image.HAPPY)
sleep(500)
display.show(Image.YES)
sleep(500)

BBC micro:bit MicroPython ドキュメンテーション 

https://microbit-micropython.readthedocs.io/ja/v2-docs/

このドキュメンテーションにはすべてのバージョンのmicro:bitの情報が含まれています。授業で使用しているmicro:bitはV1ですので、V2と書かれた項目には対応していません。

9月20日 第3回 ロボット講座 ― モータ制御 ―

右車輪を軸に時計回りに回転

from microbit import *

i2c.write(16, bytes([0, 0, 50]))
i2c.write(16, bytes([2, 0, 0]))

micro:Maqueen を走らせる

from microbit import *

i2c.write(16, bytes([0, 0, 50]))
i2c.write(16, bytes([2, 0, 50]))
sleep(500)
i2c.write(16, bytes([0, 0, 0]))
i2c.write(16, bytes([2, 0, 0]))

その場で180度回転(一部空白)

from microbit import *

i2c.write(16, bytes([0,  , 50]))
i2c.write(16, bytes([2,  , 50]))
sleep(    )
i2c.write(16, bytes([0, 0, 0]))
i2c.write(16, bytes([2, 0, 0]))

9月27日 第4回 ロボット講座 ― 条件分岐 ―

はじめての分岐処理?

from microbit import *

if button_a.is_pressed():
    display.show(Image.HAPPY)
else:
    display.show(Image.SAD)

はじめての分岐処理!

from microbit import *

while True:
    if button_a.is_pressed():
        display.show(Image.HAPPY)
    else:
        display.show(Image.SAD)

if 文の中にif 文(入れ子)

from microbit import *

while True:
    if button_a.is_pressed():
        if button_b.is_pressed():
            display.show(Image.DUCK)
        else:
            display.clear()
    else:
        display.clear()

条件が複数ある分岐処理

from microbit import *

while True:
    if button_a.is_pressed():
        display.show(Image.HAPPY)
    elif button_b.is_pressed():
        display.show(Image.SAD)
    else:
        display.clear()

論理演算のある分岐処理

from microbit import *

while True:
    if button_a.is_pressed() and button_b.is_pressed():
        display.show(Image.DUCK)
    else:
        display.clear()

while 文を使った指定回数の反復処理 

from microbit import *

c = 1
while c <= 5:
    display.show(c)
    sleep(500)
    c = c + 1

光センサで光の強度を確認

from microbit import *

while True:
    lv = display.read_light_level()
    print(lv)
    sleep(100)

光の強度を時計の針で表示 

from microbit import *

while True:
    lv = display.read_light_level()
    lv = (lv / 255) * 11
    lv = int(lv)

    display.show(Image.ALL_CLOCKS[lv])
    sleep(100)

10月4日 第5回 ロボット講座 ― 超音波センサ ―

超音波センサで距離を測定

from microbit import *
import machine

pin2.read_digital()

while True:
    pin1.write_digital(1)
    sleep(1)
    pin1.write_digital(0)
    t = machine.time_pulse_us(pin2, 1)
    d = int(t * 340 / 20000)
    print(t, d)

超音波センサで障害物で停止(解答例)







この下に課題の解答例が掲載されています。






from microbit import *
import machine

pin2.read_digital()

while True:
    pin1.write_digital(1)
    sleep(1)
    pin1.write_digital(0)

    t = machine.time_pulse_us(pin2, 1)
    d = int(t * 340 / 20000)
    if d < 10:
        i2c.write(16, bytes([0, 0, 0]))
        i2c.write(16, bytes([2, 0, 0]))
        sleep(100)
    else:
        i2c.write(16, bytes([0, 0, 50]))
        i2c.write(16, bytes([2, 0, 50]))

超音波センサで障害物を回避(解答例)

from microbit import *
import machine

pin2.read_digital()

while True:
    pin1.write_digital(1)
    sleep(1)
    pin1.write_digital(0)

    t = machine.time_pulse_us(pin2, 1)
    d = int(t * 340 / 20000)
    if d < 10:
        i2c.write(16, bytes([0, 0, 50]))
        i2c.write(16, bytes([2, 1, 50]))
        sleep(1000)
    else:
        i2c.write(16, bytes([0, 0, 50]))
        i2c.write(16, bytes([2, 0, 50]))

10月18日 第6回 ロボット講座 ― 赤外線センサ ―

黒線を検出したら停止

from microbit import *
while True:
    irL = pin13.read_digital()
    irR = pin14.read_digital()
    if irL == 0 and irR == 0:
        i2c.write(16, bytes([0, 0, 0]))
        i2c.write(16, bytes([2, 0, 0]))
    else:
        i2c.write(16, bytes([0, 0, 30]))
        i2c.write(16, bytes([2, 0, 30]))
    sleep(5)

ON-OFF制御ライントレース

from microbit import *
while True:
    irL = pin13.read_digital()
    irR = pin14.read_digital()
    if irL == 0:
        i2c.write(16, bytes([0, 1, 30]))
        i2c.write(16, bytes([2, 0, 90]))
    else:
        i2c.write(16, bytes([0, 0, 90]))
        i2c.write(16, bytes([2, 1, 30]))
    sleep(5)

黒線の検出状態に応じて矢印を表示

from microbit import *

while True:
    irL = pin13.read_digital()
    irR = pin14.read_digital()
    if irL == 0 and irR == 0:
        display.show(Image.ARROW_N)
    elif irL == 0:
        display.show(Image.ARROW_E)
    elif irR == 0:
        display.show(Image.ARROW_W)
    else:
        display.show(Image.ARROW_S)

10月25日 第7回 ロボット講座 ― 課題実習 ―

フルカラーLEDを点灯

from microbit import *
import neopixel

np = neopixel.NeoPixel(pin15, 4)

np[0] = (255, 0, 0)
np[1] = (0, 255, 0)
np[2] = (0, 0, 255)
np[3] = (255, 255, 255)
np.show()

sleep(1000)

np.clear()

持ち上げるとフルカラーLEDが点滅

from microbit import *
import neopixel
from random import randint

np = neopixel.NeoPixel(pin15, 4)

while True:
    irL = pin13.read_digital()
    if irL == 0:
        np[0] = (randint(0, 255), randint(0, 255), randint(0, 255))
        np[1] = (randint(0, 255), randint(0, 255), randint(0, 255))
        np[2] = (randint(0, 255), randint(0, 255), randint(0, 255))
        np[3] = (randint(0, 255), randint(0, 255), randint(0, 255))
        np.show()
    else:
        np.clear()
    sleep(100)

持ち上げるとフルカラーLEDが点滅(for文を使用)

from microbit import *
import neopixel
from random import randint

np = neopixel.NeoPixel(pin15, 4)

while True:
    irL = pin13.read_digital()
    if irL == 0:
        for i in range(0, 4):
            r = randint(0, 255)
            g = randint(0, 255)
            b = randint(0, 255)
            np[i] = (r, g, b)
        np.show()
    else:
        np.clear()
    sleep(100)

内蔵メロディを鳴らす

from microbit import *
import music

music.play(music.ENTERTAINER)

音階を指定して音を鳴らす

from microbit import *
import music

music.play('c:4')
music.play('d:4')
music.play('e:4')

周波数を指定して音を鳴らす

from microbit import *
import music

for f in range(440, 1720, 16):
    music.pitch(f, 10)

for i in range(0, 82):
    f = 1720 - i * 16
    music.pitch(f, 10)

配列を使って音楽を演奏する

from microbit import *
import music

music.set_tempo(ticks=4, bpm=60)
notes = ['f#5:2', 'd:2', 'a4:2', 'd5:2',
         'e:2', 'a:6', 'e:2', 'f#:2',
         'e:2', 'a4:2', 'd5:4', 'r:4']

for i in range(12):
    music.play(notes[i])