coscup 2016: 開源軟硬體實做全套電子鼓(python + rpi)

23

Click here to load reader

Upload: -

Post on 15-Jan-2017

1.346 views

Category:

Devices & Hardware


7 download

TRANSCRIPT

Page 1: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

PyDrum: 開源軟硬體實做電子鼓

使用 Raspberry Pi + Python

洪任諭 (PCMan)@COSCUP 2016E-mail: [email protected]

2016-08-20

Page 2: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

2

講者簡介

● Appier Backend Engineer● 台大資訊工程研究所畢業● 前榮總風濕免疫科醫師● 陽明大學醫學系畢業● 13 年自由軟體開發

– LXDE / LXQt 桌面環境– PIME 輸入法平台– 新酷音輸入法 windows port

– PCMan BBS client 全系列– IE Tab Firefox 外掛

Page 3: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

3

http://www.yamahamusic.com.tw/instrument/drums/drums%20manual/drums-manual-101.htm

YAMAHA Drumkit

Page 4: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

4

學音樂的孩子不會變壞只是 ...

Page 5: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

5

夢想是昂貴的 ...

http://tw.yamaha.com/zh/products/musical-instruments/drums/el-drums/drumsets/dtx900_series/dtx900k/?mode=model

YAMAHA DTX series

官網售價 NTD: 225,000 元

Page 6: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

6

學音樂程式的孩子不會變壞Maker 魂發作!

Page 7: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

7

初代 PyDrum!

Page 8: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

8

這才是完全體 !

Page 9: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

9

沒圖沒真相 ...

1: https://youtu.be/ZGUp40ab1Dk

2: https://youtu.be/yVq7tDUDeAA

Demo: 台大吉他社 汪汪

Page 10: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

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

Page 11: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

11

軟體環境

● 程式部份:– Python3

– Spidev ( 透過 Serial Peripheral Interface 讀取 ADC)

– Pygame ( 播放音效 )

● 鼓音色檔案– 取自 Hydrogen 軟體 (GPL’d)

– http://www.hydrogen-music.org/hcms/

– 轉檔成 ogg

Page 12: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

12

Piezo Element

● 壓電材質– 輸入電訊號,產生形變 / 振動 → 蜂鳴器– 輸入聲音 / 振動,產生電壓 → sensor

● 類比訊號 (Raspberry Pi 無法讀取 )

● 類似電容放電

Page 13: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

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)

Page 14: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

14R

aspb

erry Pi Mod

el 2 v1.1©

Rasp

berry Pi 2014

http

://ww

w.raspb

errypi.org

Power

HD

MI

Audio

USB 2x USB 2x

ETHERNET

DSI (DISPLAY)

CSI (CAMERA)

GPIO

11

55

1010

1515

2020

2525

3030

3535

4040

4545

5050

5555

6060

A A

B B

C C

D D

E E

F F

G G

H H

I I

J J

MCP3008

SC70

1 25

34

crash

Hihat padelbass drum

ride

floor tomhihat

snare

tom

Pydrum - https://github.com/PCMan/pydrumCopyright (C) 2016 Hong Jen Yee (PCMan) <[email protected]>

動手接線 !

Page 15: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

15

訊號分析

● 用 busy loop 連續讀取 ADC– 平均 sampling rate 約 4000-5000 Hz

● 頻譜分析– 5-order moving average ( 減低雜訊 )

– 傅立葉轉換 → 頻寬約 200Hz

– 根據 sampling theorem → 取樣率至少 400 Hz

● 嘗試下修 sampling rate– 省電– 200 Hz 會破壞波形,但偵測敲擊仍堪用– 副作用:減少高頻雜訊 ?

Page 16: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

16

訊號分析

原始訊號波形 傅立葉轉換 ( 頻譜 )

時間 (sec) 頻率 (Hz)

200Hz

Page 17: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

17

取樣率 : 200Hz

Threshold: 100

Page 18: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

18

( 近似 ) 固定時間取樣

SAMPLING_RATE = 200 # 目標 : 一秒讀 ADC 200 次sampling_period = 1.0 / SAMPLING_RATE # 每次取樣時間間隔wait_adjust = 0.0next_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

Page 19: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

19

進化了 !

Page 20: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

20

進化了 !

Page 21: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

21

LIVE!

By: 餘弦杯 cos(☕) 樂團

Page 22: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

22

Page 23: COSCUP 2016: 開源軟硬體實做全套電子鼓(python + RPi)

23

特別致謝

● 勸世宗親會 (授權使用喵電感應 )

● 台大吉他社 汪汪 ( 測試及錄製 demo)

● 鼓手 : Jessie Mi

● 烏克麗麗 : penk (http://ukulele.design/)– 下午 14:15 R1議程 : 自己的樂器自己做

● Vocal: Dona

● COSCUP 全體人員

GitHubhttps://github.com/PCMan/pydrum