Mais conteúdo relacionado
Semelhante a COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi) (7)
COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)
- 2. 2
講者簡介
● Appier Backend Engineer
● 台大資訊工程研究所畢業
● 前榮總風濕免疫科醫師
● 陽明大學醫學系畢業
● 13 年自由軟體開發
– LXDE / LXQt 桌面環境
– PIME 輸入法平台
– 新酷音輸入法 windows port
– PCMan BBS client 全系列
– IE Tab Firefox 外掛
- 10. 10
硬體材料
● Raspberry Pi 2 (~NT.1300↓)
● ADC: Microchip MCP 3008 (~NT.90)
● RS SMD Diaphragm External Piezo Buzzer, 3700 → 4700
Hz (NT.18) x 7
● 2W 1MΩ 電阻 (NT. 2) x 7
● Linear Hall effect sensor (~NT. 80)
● 強力磁鐵 (~NT.40)
● 麵包板 : (~NT.80) 、各種線材…
● 很多洋芋片 (~NT. 65) x 6
- 11. 11
軟體環境
● 程式部份:
– Python3
– Spidev ( 透過 Serial Peripheral Interface 讀取 ADC)
– Pygame ( 播放音效 )
● 鼓音色檔案
– 取自 Hydrogen 軟體 (GPL’d)
– http://www.hydrogen-music.org/hcms/
– 轉檔成 ogg
- 13. 13
Analogue to Digital Converter (ADC)
● 類比訊號 ( 電壓值 ) 轉數位訊號
● Microchip MCP3008 (10-bit, SPI 界面 )
類比
輸入
數位接地
電源供應 (RPi: 5V)
參考電壓 (ADC=VCHx
/ VREF
* 1024)
類比接地
SPI clock
SPI chip select ( 接 RPi SPI_CE0)
SPI 輸入 ( 來自 RPi MOSI 的輸入 )
SPI 輸出 ( 轉換結果送到 RPi MISO)
- 15. 15
訊號分析
● 用 busy loop 連續讀取 ADC
– 平均 sampling rate 約 4000-5000 Hz
● 頻譜分析
– 5-order moving average ( 減低雜訊 )
– 傅立葉轉換 → 頻寬約 200Hz
– 根據 sampling theorem → 取樣率至少 400 Hz
● 嘗試下修 sampling rate
– 省電
– 200 Hz 會破壞波形,但偵測敲擊仍堪用
– 副作用:減少高頻雜訊 ?
- 18. 18
( 近似 ) 固定時間取樣
SAMPLING_RATE = 200 # 目標 : 一秒讀 ADC 200 次
sampling_period = 1.0 / SAMPLING_RATE # 每次取樣時間間隔
wait_adjust = 0.0
next_read_time = time.time() # 下次讀取 spi 的時間
while True:
read_time = time.time() # 這次讀取的時間
read_adc_value() # 從 ADC 讀取數值
wait_adjust = next_read_time – read_time # 修正誤差
# 估計下一次應該讀取的時間
next_read_time = read_time + sampling_period + wait_adjust
# 計算現在時間距離下一次讀取還有多久
wait_time = next_read_time - time.time()
if wait_time > 0:
time.sleep(wait_time) # 等待下一次讀取
● RPi 無 realtime clock ,取樣速度忽快忽慢 ...
RPi2 實驗結果:平均取樣率 199.99 Hz
- 23. 23
特別致謝
● 勸世宗親會 ( 授權使用喵電感應 )
● 台大吉他社 汪汪 ( 測試及錄製 demo)
● 鼓手 : Jessie Mi
● 烏克麗麗 : penk (http://ukulele.design/)
– 下午 14:15 R1 議程 : 自己的樂器自己做
● Vocal: Dona
● COSCUP 全體人員
GitHub
https://github.com/PCMan/pydrum