積木程式:
Python程式:
本社群由Nantou.py使用者社群以及國立虎尾科技大學電機資訊學院負責維護,它是一群熱愛智慧生活科技以及Python的專業教師所組成,大家一同快樂地研究有關數位生活中人工智慧、大數據、物聯網、雲端服務、APPS、福祉科技、感知網路服務、車載網路服務、及網際網路等資通訊技術,並運用這些資通訊以及Python技術來提升我們的日常生活品質,建立更好的生活環境。
積木程式:
Python程式:
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、語音辨識IC
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、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) |
在南投縣草屯鎮國立臺灣工藝研究暨發展中心有一間樹藝工坊,進駐藝術家是李永謨老師,李老師說:樹藝的定義是代表一種;生命的重生、樹生命「特性力量」的發揮。大家可以到臺灣樹藝再生之美李永謨粉絲頁查看李老師的相關作品,我們今天micro:bit Python就以樹藝工坊為例,來說明micro:bit Python的基本程式設計。
功能如下:
程式編輯器: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) |
在這2022年的大年初一,敏哥想用WebAR技術把國立臺灣工藝研究發展中心2020年推出的樹藝生命之美年暦與智創虎年賀歲圖片結合在一起,虎哩幸福一整年,歡迎大家留意智創生活科技與樹藝工坊,將在3月份推出科技藝術種子教師培訓課程,完全是免費的喔!
1.準備作品與
準備樹藝生命之美年暦的電子檔,可以利用手機拍照。
2.準備智創虎年賀歲圖片檔(smartcreating.jpg)。
3.利用Image Targets Compiler編譯生命之美年暦的圖片檔,轉換成影像物件檔。
把生命之美年暦的圖片檔放到上圖Drop files to upload區。
按下上圖的Start鍵
按下上圖的Download compiled鍵,下載targets.mind,並自行建立一個資料夾,例如:TreeArt。
4.從https://hiukim.github.io/mind-ar-js-doc/quick-start/webpage,取得程式碼,並儲存AR html檔案。
5.開啟Web Server for Chrome,按下"啟用應用程式"。
6.按下上圖中"CHOOSE FOLDER",選擇儲存AR.html程式的資料夾TreeArt。
7.打開Chrome瀏覽器進行測試,http://127.0.0.1:8887/AR.html。
8.修改程式,儲存成AR2.html檔案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1" /> <script src="https://cdn.jsdelivr.net/gh/hiukim/mind-ar-js@1.0.0/dist/mindar-image.prod.js"></script> <script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script> <script src="https://cdn.jsdelivr.net/gh/hiukim/mind-ar-js@1.0.0/dist/mindar-image-aframe.prod.js"></script> </head> <body> <a-scene mindar-image="imageTargetSrc: ./targets.mind;" vr-mode-ui="enabled: false" device-orientation-permission-ui="enabled: false"> <a-assets> <img id="smartcreating" crossorigin="anonymous" src="smartcreating.jpg"> </a-assets> <a-camera position="0 0 0" look-controls="enabled: false"></a-camera> <a-entity mindar-image-target="targetIndex: 0"> <a-image src="#smartcreating"></a-image> </a-entity> </a-scene> </body> </html> |