
起源
在開始的開始,我打算做一個(gè)特雷門琴 Theremin。它是一種奇葩樂器,1919年由俄國物理學(xué)家 Theremin 教授發(fā)明,也是世界上第一種不需要身體接觸就可以演奏的樂器(電子音樂的鼻祖)。

但是,在研究特雷門琴的原理時(shí),被復(fù)雜的電路和聲學(xué)原理嚇得有點(diǎn)懵:


認(rèn)慫了以后,調(diào)整原計(jì)劃為一個(gè)簡化版本:做一個(gè)迷你機(jī)器人,如果在機(jī)器人面前移動(dòng)手的位置,機(jī)器人就會(huì)根據(jù)手掌距離自己的距離,發(fā)出不同聲調(diào)的音符。你可以在不碰機(jī)器人的情況下,指揮它演奏一段樂曲。
因?yàn)榧炔皇峭暾奶乩组T琴,也不是機(jī)器人瓦力,只好叫做特雷·瓦力 (英文名 Mini Soundbot 又名迷你騷包)
草得不能再草的草圖:

項(xiàng)目計(jì)劃
期末作業(yè)的截止完成時(shí)間是 6.22,時(shí)間不多,必需做好時(shí)間計(jì)劃。
我把項(xiàng)目分成 4 個(gè)部分:設(shè)計(jì),編程,外觀和測(cè)試。從 6.8 正式開始準(zhǔn)備,當(dāng)時(shí)只有一張草圖,其余都是一片空白,意味著我需要用 10 天時(shí)間,把這個(gè)課程學(xué)到的東西運(yùn)用到項(xiàng)目中,完成期末作業(yè)。要命的是,我離實(shí)驗(yàn)室有三個(gè)小時(shí)的路程 —— 我在廣州,實(shí)驗(yàn)室在深圳。所有東西必須在出發(fā)前計(jì)劃和設(shè)計(jì)好,才能保證去實(shí)驗(yàn)室的時(shí)間真正有所產(chǎn)出。
列出關(guān)鍵任務(wù)后,給它們分配具體的時(shí)間:
| 任務(wù) | 日期 | 輸出 |
|---|---|---|
| 研究特雷門原理 | 6.9-6.11 | 原理圖,項(xiàng)目結(jié)構(gòu)圖 |
| 編程 | 6.12-6.18 | 在 Arduino 上可以正常運(yùn)行的程序 |
| 電路元器件規(guī)劃 | 6.12 | PCB 設(shè)計(jì)文件 |
| 電路板設(shè)計(jì) | 6.13 | PCB 設(shè)計(jì)文件 |
| 購買元器件和其他材料 | 6.15 | 淘寶訂單 |
| 設(shè)計(jì)外型組裝部分 | 6.13-6.15 | Fusion 360 設(shè)計(jì)源文件 |
| 雕刻電路板 | 6.18 | 電路板 |
| 焊接元件 | 6.18 | 電路板 |
| 測(cè)試輸入和輸出組件 | 6.19 | 基本功能可運(yùn)作 |
| 制作外殼 | 6.18-6.19 | 激光切割和 3D 完成的部件 |
| 組裝 | 6.19 | 把所有部分組裝成完整的作品 |
| 調(diào)試 | 6.20-6.21 | 調(diào)試和演示準(zhǔn)備 |
過程
1. 整體設(shè)計(jì)
輸入 : 使用超聲波測(cè)距模塊 HC-SR04 檢測(cè)距離:

輸出: 最開始打算用小喇叭,但是效果不好,遂放棄。

改成用軟件的方式實(shí)現(xiàn)聲音的控制,把 macbook 作為揚(yáng)聲器,用程序?qū)⒕嚯x轉(zhuǎn)換為 C 調(diào)音符:

材料和開銷
硬件
- ATTiny 45 芯片
- 超聲波測(cè)距模塊 HC-SR04
- AVRISP SMD
- FTDI-SMD-HEADER
- 電阻 10.0K OHM 1206 SMD
- 電容 1UF 1206
- 杜邦線
軟件
- Arduino IDE
- New Ping Library for Arduino IDE
- OpenFrameworks
- Maximillian / ofxMaxim addon for OpenFrameworks
外殼
- 椴木板
- 3D 打印部件
硬件和外殼部分總共花費(fèi)約 $17 。
| 物品 | 數(shù)量 | 花費(fèi) |
|---|---|---|
| Attiny 45 | 1 | $ 2 |
| HC-SR04 | 1 | $ 1 |
| AVRISPSMD | 1 | $ 1 |
| FTDI-SMD-HEADER | 1 | $ 1 |
| RES 10.0K OHM 1206 SMD | 2 | $ 0.1 |
| CAP CER 1UF 1206 | 1 | $ 0.1 |
| Dupont Line | 5 | $ 0.1 |
| basswood | 2 | $ 10 |
| 3D Printing PLA | 1 | $1 |
| glue | 1 | $ 1 |
| TOTAL | $ 17 |
2. 編程
為了實(shí)現(xiàn)用電腦作為聲音轉(zhuǎn)化器,我使用開源的 C++ 套件 openFrameworks。這個(gè)庫簡化了很多音頻處理的工作。
OpenFrameworks 下載 以及 xcode 安裝指南。
openFrameworks 有一個(gè)叫做 micknoise/Maximilian的 C++ 插件,專門用來做聲音合成以及音樂數(shù)字信號(hào)處理和轉(zhuǎn)換,這樣我就能直接將傳感器的信號(hào)轉(zhuǎn)換成為可播放的音階:


在制作電路之前,我先用 Arduino 來測(cè)試基礎(chǔ)功能:

Hello world 視頻:
3. 電路設(shè)計(jì)
因?yàn)槭褂昧塑浖?shí)現(xiàn)主要的模擬信號(hào)轉(zhuǎn)換,所以電路方面就變得簡單很多,只需要實(shí)現(xiàn)傳感器的數(shù)據(jù)傳輸就行:




電路設(shè)計(jì)源文件 / from box.net.
4. 制作電路板
使用 RSM-20 雕刻電路板并且焊接元器件:


燒程序 sudo make -f hello.HC-SR04.make program-usbtiny
avr-objcopy -O ihex hello.HC-SR04.out hello.HC-SR04.c.hex;\
avr-size --mcu=attiny45 --format=avr hello.HC-SR04.out
AVR Memory Usage
----------------
Device: attiny45
Program: 526 bytes (12.8% Full)
(.text + .data + .bootloader)
Data: 2 bytes (0.8% Full)
(.data + .bss + .noinit)
avrdude -p t45 -P usb -c usbtiny -U flash:w:hello.HC-SR04.c.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9206
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "hello.HC-SR04.c.hex"
avrdude: input file hello.HC-SR04.c.hex auto detected as Intel Hex
avrdude: writing flash (526 bytes):
Writing | ################################################## | 100% 0.92s
avrdude: 526 bytes of flash written
avrdude: verifying flash memory against hello.HC-SR04.c.hex:
avrdude: load data flash data from input file hello.HC-SR04.c.hex:
avrdude: input file hello.HC-SR04.c.hex auto detected as Intel Hex
avrdude: input file hello.HC-SR04.c.hex contains 526 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 1.11s
avrdude: verifying ...
avrdude: 526 bytes of flash verified
avrdude: safemode: Fuses OK (H:FF, E:DF, L:62)
avrdude done. Thank you.
5. 制作外殼
超聲波測(cè)距模塊長得很像機(jī)器人的眼睛,所以干脆給它整了一個(gè)機(jī)器人 Wall-E 的造型。 在 Fusion 360 里做好部件的設(shè)計(jì):


然后導(dǎo)出成 dxf 文件到 Coraldraw 里,發(fā)送到 GCC 激光切割機(jī)。使用的參數(shù)是: speed 2.7 , power 100:

切割完成:

開始組裝:

還補(bǔ)充了一些 3D 打印的小部件:

設(shè)計(jì)和切割源文件 / from box.net.
測(cè)試
看起來萬事俱備,測(cè)試走起!

Test video for UI when playing

在移動(dòng)過程中,音符的識(shí)別容易抖動(dòng),需要做進(jìn)一步的濾波處理。
演示
期末項(xiàng)目的演示材料
Slide:

Video:
復(fù)盤經(jīng)驗(yàn)
-
項(xiàng)目管理
項(xiàng)目管理很重要,即便只是個(gè)人項(xiàng)目。如果沒有確切的時(shí)間表和關(guān)鍵任務(wù)列表,整個(gè)過程會(huì)變得地獄般忙亂。一旦把看似復(fù)雜的整個(gè)項(xiàng)目拆解成任務(wù)列表,并且明確每個(gè)任務(wù)的期限,每一步行動(dòng)就有了目標(biāo),也就沒有太多的時(shí)間去焦慮。更重要的是,把每個(gè)任務(wù)需要產(chǎn)出的結(jié)果和標(biāo)準(zhǔn)給出來,會(huì)更明確下一步要做什么,以及做到什么程度就應(yīng)該繼續(xù)下一個(gè)任務(wù),而不是無休止的糾纏于細(xì)節(jié)。
-
學(xué)習(xí)了音頻和音樂制作的一些原理
如何通過程序?qū)鞲衅餍盘?hào)轉(zhuǎn)換成為有規(guī)律的音符。音階和頻率都很有意思(有時(shí)候也讓人摸不著頭腦),當(dāng)然,還有不少音樂制作的基礎(chǔ)概念,比如 propagation 傳播, amplitude 振幅,frequency 頻率和timbre 音色。
-
使用第三方框架和插件來提高效率
在開源的世界和神奇的 github,不用再重復(fù)造輪子,有大量的優(yōu)秀的項(xiàng)目和組件庫等著被挖寶,雖然仔細(xì)地讀文檔和看例子挺費(fèi)時(shí)間,但相比自己去實(shí)現(xiàn)復(fù)雜的功能,這個(gè)投入的性價(jià)比實(shí)在太高了。
待完善部分
- 程序的穩(wěn)定性依然有待改善
- 目前只做到了音階的轉(zhuǎn)換,但是沒有實(shí)現(xiàn)特雷門琴的另一個(gè)主要特性:用手掌距離的遠(yuǎn)近控制音量大小
- 更有趣的做法是,做一個(gè)可以自動(dòng)播放旋律的裝置,而不是手工去演奏。
參考
特雷門原理圖:
[圖片上傳失敗...(image-b7703b-1514346070595)]
- Theremin - Wikipedia, the free encyclopedia
- Build your own real theremin
- Theremin
- How to Build & Play a Theremin
- How to Make a Theremin
- Multimedia applications of the system Theremino
- FINALLY, A MODERN THEREMIN
- Open.Theremin.UNO Housing
- Ultrasonic Theremin - All
- openFrameworks
- micknoise/Maximilian: C++ Audio and Music DSP Library
課程資源
致謝
這半年,要感謝很多人:實(shí)驗(yàn)室的小伙伴,guru 們,工作上的小伙伴,被我拒絕周末約飯的小伙伴們,謝謝大家對(duì)我的理解和支持。
特別感謝在我發(fā)出攢學(xué)費(fèi)帖之后,慷慨贊助的各位 ,以及給每一篇筆記打賞和留言的朋友們。過程很難熬,好在有你們的鼓勵(lì)。
鞠躬,謝謝!!
