Publicité
Publicité

Contenu connexe

Publicité
Publicité

micro:bit加速度感測應用

  1. micro:bit加速度感測應用 Revised on August 9, 2021  速度與加速度  三軸加速度計  三軸加速度計控制指令  實作練習  電子骰子  運動方向指示器  傾斜移動控制  平衡控制遊戲  地震偵測器
  2.  速度定義為位置相對於時間的變化率,也可以稱為瞬時速度,以強調 與平均速度的區別  𝑣 ⃑ ∆ ∆  加速度(m/s2)是速度向量(m/s)對於時間的變化率,描述速度的方向 和大小變化的快慢  𝑎 ⃑  ⼀段時間內平均的速度變化,稱為平均加速度  在極短時間內平均的速度變化,稱為瞬時加速度  𝑣 𝑣 𝑎𝑡 𝑣 :末速,𝑣 :初速,𝑎:加速度,𝑡:時間 速度與加速度 1/2 2
  3. 速度與加速度 2/2 https://youtu.be/byngcwjO51U 3
  4.  原理:透過可移動物體在固定電極片移動產生電容值差值,換算物體 重心的位移和方向  搖晃micro:bit時會聽到「喀啦~喀啦~」的碰撞聲,就是三軸加速度計 內部移動體的碰撞聲 micro:bit三軸加速度計 1/2 4 固定電極片 移動體 固定電極片 X Z Y X Y Z
  5.  MMA8653FC micro:bit三軸加速度計 2/2 5
  6.  讀取三軸加速度計三維度中其中⼀個的加速度值,或是所有維度的合 ⼒,單位為千分之⼀G⼒ (重⼒加速度G = 9.80665m/s2) strength3D = Math.sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ) 三軸加速度計控制指令 1/2 6 X (left & right) Y (back & forth) Z (up & down)
  7.  動作偵測  分析加速度計3個軸向數值變化來推斷使用者操作micro:bit之動作  晃動  下側偏低  上側偏低  正面朝上  背面朝上  左側偏低  右側偏低  自由掉落  3G動⼒、6G動⼒、8G動⼒ 三軸加速度計控制指令 2/2 7
  8.  初始顯示?,搖晃micro:bit控制板後隨機顯示1~6點,3秒後回復顯 示?  隨機指令 實作練習 - 電子骰子 1/5 8
  9. 實作練習 - 電子骰子 2/5 9 分別編輯骰子點數,置入選擇結構中
  10.  Python程式 def on_gesture_shake(): global Roll Roll = randint(1, 6) if Roll == 1: basic.show_leds(""" . . . . . . . . . . . . # . . . . . . . . . . . . """) elif Roll == 2: basic.show_leds(""" . . . . . . . . # . . . . . . . # . . . . . . . . """) 實作練習 - 電子骰子 3/5 10
  11. elif Roll == 3: basic.show_leds(""" . . . . # . . . . . . . # . . . . . . . # . . # . """) elif Roll == 4: basic.show_leds(""" . . . . . . # . # . . . . . . . # . # . . . . . . """) elif Roll == 5: basic.show_leds(""" . . . . . . # . # . . . # . . . # . # . . . . . . """) 實作練習 - 電子骰子 4/5 11
  12. else: basic.show_leds(""" . # . # . . . . . . . # . # . . . . . . . # . # . """) basic.pause(3000) basic.show_string("?") input.on_gesture(Gesture.SHAKE, on_gesture_shake) Roll = 0 basic.show_string("?") def on_forever(): pass basic.forever(on_forever) 實作練習 - 電子骰子 5/5 12
  13. 實作練習 - 運動方向指示器 1/5  顯示micro:bit控制板運動方向  使用方向箭頭指示micro:bit控制板左右及前後移動,上下移動以大小菱 形表示 13
  14. 實作練習 - 運動方向指示器 2/5 14
  15. 實作練習 - 運動方向指示器 3/5 15
  16.  Python程式 forward_backward = 0 up_down = 0 left_right = 0 def check_Y(): if forward_backward >= 1200: basic.show_arrow(ArrowNames.NORTH) if forward_backward <= -1200: basic.show_arrow(ArrowNames.SOUTH) def check_Z(): if up_down >= 100: basic.show_icon(IconNames.SMALL_DIAMOND) if up_down <= -2000: basic.show_icon(IconNames.DIAMOND) def check_X(): if left_right >= 1200: basic.show_arrow(ArrowNames.WEST) if left_right <= -1200: basic.show_arrow(ArrowNames.EAST) 實作練習 - 運動方向指示器 4/5 16
  17. def on_forever(): global left_right, forward_backward, up_down left_right = input.acceleration(Dimension.X) forward_backward = input.acceleration(Dimension.Y) up_down = input.acceleration(Dimension.Z) check_X() check_Y() check_Z() basic.forever(on_forever) 實作練習 - 運動方向指示器 5/5 17
  18.  光點(ball)初始位於正中央  傾斜micro:bit來控制光點往低處移動 實作練習 - 傾斜移動控制 1/2 18
  19. 實作練習 - 傾斜移動控制 2/2 19
  20.  光點初始位於正中央  傾斜micro:bit來控制光點在點矩陣內部移動,每移動⼀格得1分,光 點碰到邊緣則結束遊戲 實作練習 - 平衡控制遊戲 1/5 20
  21. 實作練習 - 平衡控制遊戲 2/5 21
  22. 實作練習 - 平衡控制遊戲 3/5 22
  23.  Python程式 def moving(): if input.acceleration(Dimension.X) > 150: ball.change(LedSpriteProperty.X, 1) score += 1 if input.acceleration(Dimension.X) < -150: ball.change(LedSpriteProperty.X, -1) score += 1 if input.acceleration(Dimension.Y) > 150: ball.change(LedSpriteProperty.Y, 1) score += 1 if input.acceleration(Dimension.Y) < -150: ball.change(LedSpriteProperty.Y, -1) score += 1 def isTouchingEdge(): if ball.is_touching_edge(): game.set_score(score) game.game_over() 實作練習 - 平衡控制遊戲 4/5 23
  24. ball = game.create_sprite(2, 2) score = 0 def on_forever(): moving() isTouchingdge() basic.pause(200) basic.forever(on_forever) 實作練習 - 平衡控制遊戲 5/5 24
  25. 實作練習 - 地震偵測器 1/3 25
  26. 實作練習 - 地震偵測器 2/3 26
  27. 實作練習 - 地震偵測器 3/3 27
Publicité