1 of 31

奇幻

摸彩箱

Charlie

2 of 31

結構設計

廣播(Radio)

摸彩箱:

動作偵測

摸彩箱:

狀態指示燈

連線

電腦主程式:Python

有線連結:pySerial

使用者介面:PyQt

程式:

Blocks

或 Python

程式設計:

Blocks

3 of 31

摸彩箱

  • 聲納模組或紅外線模組偵測伸手動作
    • 敏感度的調整
    • 容忍錯誤動作的設計
  • 燈號指示出micro:bit的認知狀況
  • 電池供應
    • 行動電源問題:耗電量不夠會自動斷電
    • 一般電池疑慮:不夠環保、沒電就丟掉
    • 充電電池:電壓轉換問題
  • Micro:bit 廣播
    • 考慮接收返回訊息的必要性

摸彩箱:

動作偵測

摸彩箱:

狀態指示燈

程式設計:

Blocks

4 of 31

訊息及控制

  • 接收來自摸彩箱的訊息
  • 回饋已接收的訊息
  • Micro:bit 與電腦間的聯繫
  • 訊息顯示及控制

連線

電腦主程式:Python

有線連結:pySerial

使用者介面:PyQt

程式:

Blocks

或 Python

5 of 31

Micro:bit序列傳輸

將資料轉成一長串0與1的訊號來傳輸

兩端的“傳輸率”必須設定成相同的速度

例如:115200,代表 每秒傳送 115200 的 0/1 訊號。

右邊的例子為,

送一行字串(包括換行)到電腦,速度為 115200 每秒

6 of 31

電腦端安裝 Python 及 pyserial

安裝 pyserial

pip install pyserial

7 of 31

電腦端範例

連接到 Micro:bit 的管道為

參考“裝置管理員”,“連接埠“

COM5, 速度為 115200

按下 Ctrl-C, 離開程式

import serial

COM_PORT = 'COM5'

BAUD_RATES = 115200

ser = serial.Serial(COM_PORT, BAUD_RATES)

try:

while True:

while ser.in_waiting:

data_raw = ser.readline()

data = data_raw.decode()

print('received raw data:', data_raw)

print('received data:', data)

except KeyboardInterrupt:

ser.close()

print('Quit.')

8 of 31

電腦介面

9 of 31

Micro:bit 為例

按下 A 由 Micro:bit 傳送資料

當讀取到 carriage return 字元,就將所有的讀取到的資料都顯示出來

10 of 31

QSerialPort

必須導入 QtCore 及 QtSerialPort

from PyQt5 import QtCore, QtSerialPort

11 of 31

QSerialPort

portName 為序列埠(Serial Port)名字

速率(例子為 115200)

當收到資料時,呼叫的函式名稱(例子為 self.receive )

self.serial = QtSerialPort.QSerialPort(

portName,

baudRate=QtSerialPort.QSerialPort.Baud115200,

readyRead=self.receive

)

12 of 31

QSerialPort

開啟通訊

通訊為:可讀可寫

回傳 True 為成功

flag = self.serial.open(QtCore.QIODevice.ReadWrite)

13 of 31

QSerialPort

canReadLine() 判斷是不是有資料進來

readLine().data() 讀取資料,decode() 解開成字串

將資料加入到本文編輯元件上

def receive(self):

while self.serial.canReadLine():

text = self.serial.readLine().data().decode()

text = text.rstrip('\r\n')

self.ui.textEdit.append(text)

14 of 31

QSerialPort

將傳送的字串再加上一個 carriage return 字元

利用bytes 函式將字串轉成 bytes 型態,以 utf-8 編碼

用 write 將資料寫出

def writeData_Click(self):

data4Write = self.ui.Data4Write.text()

data4Write += '\r'

writeBytes = bytes( data4Write, 'utf-8')

self.serial.write(writeBytes)

15 of 31

QSerialPort

16 of 31

摸彩箱支撐架

17 of 31

選擇適當的接腳

選擇附屬功能少的接腳

P0, P1, P8, P2, P16

18 of 31

超音波模組

19 of 31

掀開開口

利用舵機驅動開關門

接腳

紅線接 Vcc

棕線接地

橙線接 P1

先將舵機轉向 0 角度

20 of 31

掀開板軸心與舵機的軸心不同

21 of 31

將迴紋針伸直

22 of 31

將迴紋針一邊,摺兩個1cm的轉角

23 of 31

套入擺動臂接孔,並折彎固定迴紋針

24 of 31

延長5~6公分,其餘摺成直角

25 of 31

貼上雙面黏貼泡棉膠帶

26 of 31

轉軸對齊中間,貼到折板下方

27 of 31

將搆線插到固定針下方

28 of 31

全開蓋後,將擺動軸接上舵機

29 of 31

將另一支伸直的迴紋針上、下都貼上膠布

30 of 31

將開口掀開,固定舵機,接上擺動臂

31 of 31

開口角度為0,蓋起來角度為90