2023年度 ロボット講座

9月9日 第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月16日 第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 ドキュメンテーション 

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

9月23日 第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]))

10月30日 第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月7日 第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月21日 第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月28日 第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])