顯示具有 樹藝 標籤的文章。 顯示所有文章
顯示具有 樹藝 標籤的文章。 顯示所有文章

2026年2月1日 星期日

[Gemini API]用Gemini AI來協助看樹藝的作品



 程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from google import genai
from google.genai import types # 用於處理圖片格式
import os
from PIL import Image # 需要安裝 Pillow 庫: pip install Pillow

# 1. 初始化 Client
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))

# 2. 針對視覺辨識優化的系統指令
instruction = """
你是樹藝精靈「小青」。當小朋友分享他們的作品照片時:
1. 先大聲驚呼並給予正向鼓勵(例如:哇!太有創意了!)。
2. 具體描述你看到的東西(例如:我看到你用葉脈做了小鹿的耳朵)。
3. 連結「再生美」:稱讚他們如何讓大自然的廢棄物變成寶貝。
4. 語氣要像對待好朋友一樣,字數控制在 80 字以內。
"""

def analyze_artwork(image_path):
    try:
        # 讀取本地圖片檔案
        img = Image.open(image_path)
        
        print("🔍 樹藝精靈正在仔細欣賞你的作品...")
        
        # 發送圖片與文字請求
        response = client.models.generate_content(
            model="gemini-2.5-flash",
            config={"system_instruction": instruction},
            contents=[
                "精靈你看!這是我剛做好的樹藝作品,你覺得怎麼樣?",
                img # 直接放入圖片物件
            ]
        )
        
        print("-" * 30)
        print(f"Q-Robot 視覺回饋:\n{response.text}")
        print("-" * 30)

    except Exception as e:
        print(f"哎呀!精靈的眼睛好像有點模糊:{e}")

# --- 模擬測試 ---
# 請確保目錄下有一張名為 'artwork.jpg' 的小朋友作品照片
analyze_artwork("artwork.jpg")

第一次執行結果:
🔍 樹藝精靈正在仔細欣賞你的作品...
------------------------------
Q-Robot 視覺回饋:
哇!太漂亮了!你用木頭底座和會發光的花朵,創造出這麼溫暖的燈飾!把大自然的材料變成寶貝,這就是最棒的再生美!太有才華了!
------------------------------

第二次執行結果:
🔍 樹藝精靈正在仔細欣賞你的作品...
------------------------------
Q-Robot 視覺回饋:
哇!太棒了,超有創意的作品!小青看到你用木頭切片當底座,上面長出像樹枝一樣的燈花,還會發出溫暖的光耶!你把大自然的廢棄木頭變成這麼漂亮的燈飾,讓它有了新生命,這就是「再生美」的魔法!
------------------------------

第三次執行結果:
🔍 樹藝精靈正在仔細欣賞你的作品...
------------------------------
Q-Robot 視覺回饋:
哇!太有創意了!你用樹樁當底座,枯枝變成了美麗的樹幹,上面還有會發光的漂亮花朵!你讓大自然的材料,都變成這麼溫暖又實用的寶貝,真是太棒了!
------------------------------

2026年1月17日 星期六

[樹藝AI]時尚兔開車用AI找農作物

 


Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
m4Speed = 0
m1Speed = 0
lastError = 0
motorSpeed = 0
error = 0
BASE_SPEED = 60
Kp = 0.05
Kd = 0.06
CutebotPro.pwm_cruise_control(0, 0)
PlanetX_AILens.init_module()
PlanetX_AILens.switchfunc(PlanetX_AILens.FuncList.CARD)
radio.set_group(88)

def on_forever():
    PlanetX_AILens.camera_image()
    if PlanetX_AILens.other_card(PlanetX_AILens.otherCards.GRAPE):
        basic.show_string("G")
        radio.send_string("Grape")
    elif PlanetX_AILens.other_card(PlanetX_AILens.otherCards.APPLE):
        basic.show_string("A")
        radio.send_string("Apple")
    elif PlanetX_AILens.other_card(PlanetX_AILens.otherCards.PEAR):
        basic.show_string("P")
        radio.send_string("Pear")
    basic.pause(200)
basic.forever(on_forever)

def on_forever2():
    global error, motorSpeed, lastError, m1Speed, m4Speed
    error = CutebotPro.get_offset()
    motorSpeed = Kp * error + Kd * (error - lastError)
    lastError = error
    m1Speed = BASE_SPEED + motorSpeed
    m4Speed = BASE_SPEED - motorSpeed
    if m1Speed < 10:
        m1Speed = 0
    elif m1Speed < 30:
        m1Speed = 10
    elif m1Speed > 40:
        m1Speed = 40
    elif m1Speed > 60:
        m1Speed = 60
    if m4Speed < 10:
        m4Speed = 0
    elif m4Speed < 30:
        m4Speed = 10
    elif m4Speed > 40:
        m4Speed = 40
    elif m4Speed > 60:
        m4Speed = 60
    CutebotPro.pwm_cruise_control(m1Speed, m4Speed)
basic.forever(on_forever2)


2025年7月4日 星期五

用樹藝AI說雲林溪故事

材料:種子、玉米籜、micro:bit、Smart AI Lens、MP3 Player、LED

積木程式:


Python程式:

# 0:介紹、1測驗
def RightWrong(num: number, ans: str):
    global Number2, mode
    if answer[num] == ans:
        mp3Player.set_tracking(18, mp3Player.repeatList.NO)
        basic.show_icon(IconNames.YES)
    else:
        mp3Player.set_tracking(19, mp3Player.repeatList.NO)
        basic.show_icon(IconNames.NO)
    basic.pause(5000)
    Number2 = (Number2 + 1) % 20
    if Number2 == 15:
        mp3Player.set_tracking(20, mp3Player.repeatList.NO)
        mode = 0
        basic.show_leds("""
            . . # # #
            . . . # #
            . . . . #
            # # . . .
            # # . . .
            """)
    else:
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        basic.pause(2000)
        basic.show_icon(IconNames.SQUARE)
def doLight():
    if Run == 0 or Run == 5:
        pins.digital_write_pin(DigitalPin.P2, 1)
        pins.digital_write_pin(DigitalPin.P9, 0)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif Run == 1 or Run == 6:
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P9, 1)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif Run == 2 or Run == 7:
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P9, 0)
        pins.digital_write_pin(DigitalPin.P13, 1)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif Run == 3 or Run == 8:
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P9, 0)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 1)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif Run == 4 or Run == 9:
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P9, 0)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 1)
LED_status = 0
count = 0
oldRun = 0
Run = 0
mode = 0
Number2 = 0
answer: List[str] = []
basic.show_leds("""
    # # . . .
    # # . . .
    . # # . .
    . # # # #
    . . # # #
    """)
basic.pause(500)
mp3Player.mp3_set_serial(SerialPin.P1)
mp3Player.set_volume(25)
mp3Player.set_tracking(20, mp3Player.repeatList.NO)
PlanetX_AILens.init_module()
PlanetX_AILens.switchfunc(PlanetX_AILens.FuncList.CARD)
basic.show_leds("""
    . . # # #
    . . . # #
    . . . . #
    # # . . .
    # # . . .
    """)
pins.digital_write_pin(DigitalPin.P2, 0)
pins.digital_write_pin(DigitalPin.P9, 0)
pins.digital_write_pin(DigitalPin.P13, 0)
pins.digital_write_pin(DigitalPin.P14, 0)
pins.digital_write_pin(DigitalPin.P15, 0)
answer = ["B""C""C""B""D""C""B""B""C""C"]

def on_every_interval():
    global LED_status, count, oldRun
    cardMode = 0
    if cardMode == 0:
        if oldRun == Run:
            if count > 10:
                if LED_status == 0:
                    LED_status = 1
                    pins.digital_write_pin(DigitalPin.P2, 1)
                    pins.digital_write_pin(DigitalPin.P9, 1)
                    pins.digital_write_pin(DigitalPin.P13, 1)
                    pins.digital_write_pin(DigitalPin.P14, 1)
                    pins.digital_write_pin(DigitalPin.P15, 1)
                else:
                    LED_status = 0
                    pins.digital_write_pin(DigitalPin.P2, 0)
                    pins.digital_write_pin(DigitalPin.P9, 0)
                    pins.digital_write_pin(DigitalPin.P13, 0)
                    pins.digital_write_pin(DigitalPin.P14, 0)
                    pins.digital_write_pin(DigitalPin.P15, 0)
            else:
                count = count + 1
        else:
            oldRun = Run
            count = 0
loops.every_interval(500, on_every_interval)

def on_forever():
    global Run, mode, Number2
    PlanetX_AILens.camera_image()
    if mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.ONE):
        Run = 0
        mp3Player.set_tracking(1, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.TWO):
        Run = 1
        mp3Player.set_tracking(2, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.THREE):
        Run = 2
        mp3Player.set_tracking(3, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.FOUR):
        Run = 3
        mp3Player.set_tracking(4, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.FIVE):
        Run = 4
        mp3Player.set_tracking(5, mp3Player.repeatList.NO)
    elif mode == 0 and PlanetX_AILens.number_card(PlanetX_AILens.numberCards.SIX):
        mp3Player.set_tracking(16, mp3Player.repeatList.NO)
        mode = 1
        Number2 = 0
        basic.pause(5000)
        basic.show_icon(IconNames.SQUARE)
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.A):
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        RightWrong(Number2, "A")
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.B):
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        RightWrong(Number2, "B")
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.C):
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        RightWrong(Number2, "C")
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.D):
        mp3Player.set_tracking(Number2 + 6, mp3Player.repeatList.NO)
        RightWrong(Number2, "D")
    elif mode == 1 and PlanetX_AILens.letter_card(PlanetX_AILens.letterCards.E):
        mp3Player.set_tracking(20, mp3Player.repeatList.NO)
        mode = 0
        basic.show_leds("""
            . . # # #
            . . . # #
            . . . . #
            # # . . .
            # # . . .
            """)
    basic.pause(2500)
basic.forever(on_forever)


 

2024年12月4日 星期三

[樹藝:micro:bit] 時尚兔玩AI

 

主要材料:樹藝、micro:bit、Smart AI Lens

MakeCode程式碼:


Python程式:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
def on_button_pressed_a():
    global ID
    ID = (ID + 1) % 6
    basic.show_string("" + str((ID)))
    if ID == 0:
        PlanetX_AILens.switchfunc(PlanetX_AILens.FuncList.CARD)
    else:
        PlanetX_AILens.switchfunc(PlanetX_AILens.FuncList.THINGS)
    basic.pause(3000)
input.on_button_pressed(Button.A, on_button_pressed_a)

def doLight():
    if RUN == 0 or (RUN == 5 or RUN == 11):
        pins.digital_write_pin(DigitalPin.P1, 1)
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif RUN == 1 or (RUN == 6 or RUN == 12):
        pins.digital_write_pin(DigitalPin.P1, 0)
        pins.digital_write_pin(DigitalPin.P2, 1)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif RUN == 2 or (RUN == 7 or RUN == 13):
        pins.digital_write_pin(DigitalPin.P1, 0)
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P13, 1)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif RUN == 3 or (RUN == 8 or RUN == 14):
        pins.digital_write_pin(DigitalPin.P1, 0)
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 1)
        pins.digital_write_pin(DigitalPin.P15, 0)
    elif RUN == 4 or (RUN == 9 or RUN == 15):
        pins.digital_write_pin(DigitalPin.P1, 0)
        pins.digital_write_pin(DigitalPin.P2, 0)
        pins.digital_write_pin(DigitalPin.P13, 0)
        pins.digital_write_pin(DigitalPin.P14, 0)
        pins.digital_write_pin(DigitalPin.P15, 1)
def checkCard():
    global RUN
    if PlanetX_AILens.number_card(PlanetX_AILens.numberCards.ZERO) and RUN != 0:
        RUN = 0
        radio.send_number(10)
        basic.show_number(0)
    elif PlanetX_AILens.number_card(PlanetX_AILens.numberCards.ONE) and RUN != 1:
        RUN = 1
        radio.send_number(1)
        basic.show_number(1)
    elif PlanetX_AILens.number_card(PlanetX_AILens.numberCards.TWO) and RUN != 2:
        RUN = 2
        radio.send_number(2)
        basic.show_number(2)
    elif PlanetX_AILens.number_card(PlanetX_AILens.numberCards.THREE) and RUN != 3:
        RUN = 3
        radio.send_number(3)
        basic.show_number(3)
    elif PlanetX_AILens.number_card(PlanetX_AILens.numberCards.FOUR) and RUN != 4:
        RUN = 4
        radio.send_number(9)
        basic.show_number(4)
    elif PlanetX_AILens.number_card(PlanetX_AILens.numberCards.FIVE) and RUN != 5:
        RUN = 5
        radio.send_number(5)
        basic.show_number(5)
    elif PlanetX_AILens.number_card(PlanetX_AILens.numberCards.SIX) and RUN != 6:
        RUN = 6
        radio.send_number(4)
        basic.show_number(6)
    elif PlanetX_AILens.number_card(PlanetX_AILens.numberCards.SEVEN) and RUN != 7:
        RUN = 7
        radio.send_number(8)
        basic.show_number(7)
    elif PlanetX_AILens.number_card(PlanetX_AILens.numberCards.EIGHT) and RUN != 8:
        RUN = 8
        radio.send_number(7)
        basic.show_number(8)
    elif PlanetX_AILens.number_card(PlanetX_AILens.numberCards.NINE) and RUN != 9:
        RUN = 9
        radio.send_number(6)
        basic.show_number(9)

def on_button_pressed_b():
    if ID == 1:
        PlanetX_AILens.learn_object(PlanetX_AILens.learnID.ID1)
    elif ID == 2:
        PlanetX_AILens.learn_object(PlanetX_AILens.learnID.ID2)
    elif ID == 3:
        PlanetX_AILens.learn_object(PlanetX_AILens.learnID.ID3)
    elif ID == 4:
        PlanetX_AILens.learn_object(PlanetX_AILens.learnID.ID4)
    elif ID == 5:
        PlanetX_AILens.learn_object(PlanetX_AILens.learnID.ID4)
    basic.pause(6000)
input.on_button_pressed(Button.B, on_button_pressed_b)

def checkLOGO():
    global RUN
    if PlanetX_AILens.object_check(PlanetX_AILens.learnID.ID1) and RUN != 11:
        RUN = 11
        basic.show_string("A")
        radio.send_number(16)
    elif PlanetX_AILens.object_check(PlanetX_AILens.learnID.ID2) and RUN != 12:
        RUN = 12
        basic.show_string("B")
        radio.send_number(17)
    elif PlanetX_AILens.object_check(PlanetX_AILens.learnID.ID3) and RUN != 13:
        RUN = 13
        basic.show_string("C")
        radio.send_number(18)
    elif PlanetX_AILens.object_check(PlanetX_AILens.learnID.ID4) and RUN != 14:
        RUN = 14
        basic.show_string("D")
        radio.send_number(19)
    elif PlanetX_AILens.object_check(PlanetX_AILens.learnID.ID5) and RUN != 15:
        RUN = 15
        basic.show_string("E")
        radio.send_number(20)
RUN = 0
ID = 0
basic.show_icon(IconNames.HEART)
PlanetX_AILens.init_module()
PlanetX_AILens.switchfunc(PlanetX_AILens.FuncList.CARD)
ID = 0
basic.show_leds("""
    . # . . #
    # . # . #
    # # # . #
    # . # . #
    # . # . #
    """)
RUN = 0
radio.set_group(49)
pins.digital_write_pin(DigitalPin.P1, 0)
pins.digital_write_pin(DigitalPin.P2, 0)
pins.digital_write_pin(DigitalPin.P13, 0)
pins.digital_write_pin(DigitalPin.P14, 0)
pins.digital_write_pin(DigitalPin.P15, 0)
Old_Run = 0
count = 12
LED_status = 0

def on_every_interval():
    global LED_status, count, Old_Run
    if Old_Run == RUN:
        if count > 10:
            if LED_status == 0:
                LED_status = 1
                pins.digital_write_pin(DigitalPin.P1, 1)
                pins.digital_write_pin(DigitalPin.P2, 1)
                pins.digital_write_pin(DigitalPin.P13, 1)
                pins.digital_write_pin(DigitalPin.P14, 1)
                pins.digital_write_pin(DigitalPin.P15, 1)
            else:
                LED_status = 0
                pins.digital_write_pin(DigitalPin.P1, 0)
                pins.digital_write_pin(DigitalPin.P2, 0)
                pins.digital_write_pin(DigitalPin.P13, 0)
                pins.digital_write_pin(DigitalPin.P14, 0)
                pins.digital_write_pin(DigitalPin.P15, 0)
        else:
            count = count + 1
    else:
        Old_Run = RUN
        count = 0
loops.every_interval(500, on_every_interval)

def on_forever():
    PlanetX_AILens.camera_image()
    if ID == 0:
        checkCard()
    else:
        checkLOGO()
    if count < 10:
        doLight()
    basic.pause(200)
    basic.show_leds("""
        . # . . #
        # . # . #
        # # # . #
        # . # . #
        # . # . #
        """)
basic.forever(on_forever)

[樹藝micro:bit]歡樂蛙聽語音

 

主要材料:樹藝、micro:bit、語音辨識IC
MakeCode程式碼:


Python程式碼:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
def on_asr_vocabulary_list_learning_entry_7():
    strip.show_rainbow(1, 360)
    radio.send_number(16)
    basic.show_string("Craft")
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_7,
    on_asr_vocabulary_list_learning_entry_7)

def on_asr_vocabulary_list_learning_entry_6():
    strip.show_rainbow(1, 360)
    radio.send_number(17)
    basic.show_string("NFU")
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_6,
    on_asr_vocabulary_list_learning_entry_6)

def on_button_pressed_a():
    asr.set_asr_learn()
    basic.show_leds("""
        # . . . .
        # . . . .
        # . . . .
        # . . . .
        # # # # .
        """)
input.on_button_pressed(Button.A, on_button_pressed_a)

def on_asr_vocabulary_list_learning_entry_8():
    strip.show_rainbow(1, 360)
    radio.send_number(19)
    basic.show_string("Smart")
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_8,
    on_asr_vocabulary_list_learning_entry_8)

def on_asr_vocabulary_list_learning_entry_10():
    strip.show_rainbow(1, 360)
    radio.send_number(20)
    basic.show_string("Tree Art")
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_10,
    on_asr_vocabulary_list_learning_entry_10)

def on_asr_vocabulary_list_learning_entry_4():
    basic.show_leds("""
        # # . # #
        # # . # #
        # . # . #
        # . . . #
        . # # # .
        """)
    strip.show_color(neopixel.colors(NeoPixelColors.PURPLE))
    strip.show()
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_4,
    on_asr_vocabulary_list_learning_entry_4)

def on_button_pressed_b():
    asr.del_asr_learn()
    basic.show_leds("""
        . # # # .
        # . . . .
        # . . . .
        # . . . .
        . # # # .
        """)
input.on_button_pressed(Button.B, on_button_pressed_b)

def on_asr_vocabulary_list_learning_entry_5():
    basic.show_leds("""
        # . . . #
        # . # . #
        # . # . #
        # . . . #
        . # # # .
        """)
    strip.show_color(neopixel.colors(NeoPixelColors.GREEN))
    strip.show()
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_5,
    on_asr_vocabulary_list_learning_entry_5)

def on_asr_vocabulary_list_learning_entry_9():
    strip.show_rainbow(1, 360)
    radio.send_number(18)
    basic.show_string("STEAM")
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_9,
    on_asr_vocabulary_list_learning_entry_9)

def on_asr_vocabulary_list_learning_entry_2():
    basic.show_leds("""
        . # # # .
        # . . . #
        # . . . #
        # . . . #
        . # # # .
        """)
    strip.show_color(neopixel.colors(NeoPixelColors.BLACK))
    strip.show()
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_2,
    on_asr_vocabulary_list_learning_entry_2)

def on_asr_vocabulary_list_learning_entry_3():
    basic.show_leds("""
        . # # # .
        # # # # #
        # # # # #
        # # # # #
        . # # # .
        """)
    strip.show_color(neopixel.colors(NeoPixelColors.RED))
    strip.show()
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_3,
    on_asr_vocabulary_list_learning_entry_3)

def on_asr_vocabulary_list_hi_shaun():
    basic.show_icon(IconNames.HEART)
    radio.send_number(0)
asr.on_asr(asr.vocabularyList.HI_SHAUN, on_asr_vocabulary_list_hi_shaun)

def on_asr_vocabulary_list_learning_entry_1():
    basic.show_leds("""
        . # . # .
        # . # . #
        . # . # .
        # . # . #
        . # . # .
        """)
    strip.show_rainbow(1, 360)
    radio.send_number(1)
asr.on_asr(asr.vocabularyList.LEARNING_ENTRY_1,
    on_asr_vocabulary_list_learning_entry_1)

strip: neopixel.Strip = None
basic.show_icon(IconNames.HAPPY)
strip = neopixel.create(DigitalPin.P0, 32, NeoPixelMode.RGB)
strip.show_rainbow(1, 360)
radio.set_group(49)

def on_forever():
    strip.rotate(1)
    strip.show()
    basic.pause(sonar.ping(DigitalPin.P1, DigitalPin.P2, PingUnit.CENTIMETERS) * 10)
basic.forever(on_forever)

[樹藝micro:bit] 唱唱鼠說故事

 

主要零件:樹藝材料、micro:bit、MP3播放器

MakeCode程式碼:


Python程式碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
def sayStory():
    basic.show_number(count)
    basic.pause(1000)
    mp3Player.set_tracking(count + 1, mp3Player.repeatList.NO)
    mp3Player.set_volume(volumn)
    mp3Player.execute(mp3Player.playType.PLAY)

def on_received_number(receivedNumber):
    global count
    if receivedNumber == 10:
        count = 0
        sayStory()
    elif receivedNumber == 6:
        count = 9
        sayStory()
    elif receivedNumber == 7:
        count = 8
        sayStory()
    elif receivedNumber == 8:
        count = 7
        sayStory()
    elif receivedNumber == 9:
        count = 4
        sayStory()
    elif receivedNumber >= 16 and receivedNumber <= 20:
        count = receivedNumber - 1
        sayStory()
    elif receivedNumber == 1:
        count = 1
        sayStory()
    elif receivedNumber == 2:
        count = 2
        sayStory()
    elif receivedNumber == 3:
        count = 3
        sayStory()
    elif receivedNumber == 4:
        count = 6
        sayStory()
    elif receivedNumber == 5:
        count = 5
        sayStory()
radio.on_received_number(on_received_number)

# 0.歡樂蛙
# 1.歡樂猪
# 2.智齡鳥
# 3.酷烗猪
# 4.行動牛
# 5.亮亮鼠
# 6.彩虹鳥
# 7.蓪草燈
# 8.先知鳥
# 9.時尚兔

def on_button_pressed_a():
    global count
    mp3Player.execute(mp3Player.playType.STOP)
    count = (count + 1) % 20
    sayStory()
input.on_button_pressed(Button.A, on_button_pressed_a)

def on_button_pressed_b():
    global volumn
    volumn = (volumn + 1) % 30
    basic.show_number(volumn)
    mp3Player.set_volume(volumn)
input.on_button_pressed(Button.B, on_button_pressed_b)

def on_pin_pressed_p1():
    global count
    mp3Player.execute(mp3Player.playType.STOP)
    count = (count + 1) % 20
    sayStory()
input.on_pin_pressed(TouchPin.P1, on_pin_pressed_p1)

volumn = 0
count = 0
basic.show_icon(IconNames.HEART)
count = 0
volumn = 15
mp3Player.mp3_set_serial(SerialPin.P2)
mp3Player.execute(mp3Player.playType.STOP)
loud_sound = 1
radio.set_group(49)

2024年1月27日 星期六

micro:bit Python 初體驗以樹藝工坊為例

在南投縣草屯鎮國立臺灣工藝研究暨發展中心有一間樹藝工坊,進駐藝術家是李永謨老師,李老師說:樹藝的定義是代表一種;生命的重生、樹生命「特性力量」的發揮。大家可以到臺灣樹藝再生之美李永謨粉絲頁查看李老師的相關作品,我們今天micro:bit Python就以樹藝工坊為例,來說明micro:bit Python的基本程式設計。

功能如下:

  1. 啟動顯示HAPPY圖示
  2. 按下LOGO顥示:Welcome to Tree-Art Workshop!
  3. 拍掌顯示:'I am Lee, Yung-Moo.
  4. 按下A鍵或Pin0,隨機顯示1-6其中一個數字。
  5. 按下B鍵或Pin1,播放音樂。
  6. 按下Pin2顯示ANGRY圖示。

程式編輯器:micro:bit Python Editor (microbit.org)



程式如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Imports go at the top
from microbit import *
import random
import music
display.show(Image.HAPPY)

# Code in a 'while True:' loop repeats forever
while True:
    if pin_logo.is_touched():
        display.scroll('Welcome to Tree-Art Workshop!')
        display.show(Image.HEART)
    if microphone.current_event() == SoundEvent.LOUD:
        display.scroll('I am Lee, Yung-Moo.')
        display.show(Image.HAPPY)
    if button_a.was_pressed() or pin0.is_touched():
        display.show(random.randint(1, 6))
    if button_b.was_pressed() or pin1.is_touched():
        music.play(['c', 'd', 'e', 'c'])
        display.show(random.randint(0, 99))
    if pin2.is_touched():
        display.show(Image.ANGRY)
    sleep(100)