起源
在開始的開始,我打算做一個特雷門琴 Theremin俄精。它是一種奇葩樂器询筏,1919年由俄國物理學家 Theremin 教授發(fā)明,也是世界上第一種不需要身體接觸就可以演奏的樂器(電子音樂的鼻祖)竖慧。
但是嫌套,在研究特雷門琴的原理時,被復雜的電路和聲學原理嚇得有點懵:
認慫了以后,調整原計劃為一個簡化版本:做一個迷你機器人痒谴,如果在機器人面前移動手的位置碾篡,機器人就會根據(jù)手掌距離自己的距離,發(fā)出不同聲調的音符痹筛。你可以在不碰機器人的情況下,指揮它演奏一段樂曲廓鞠。
因為既不是完整的特雷門琴帚稠,也不是機器人瓦力,只好叫做特雷·瓦力 (英文名 Mini Soundbot 又名迷你騷包)
草得不能再草的草圖:
項目計劃
期末作業(yè)的截止完成時間是 6.22床佳,時間不多滋早,必需做好時間計劃。
我把項目分成 4 個部分:設計砌们,編程杆麸,外觀和測試。從 6.8 正式開始準備浪感,當時只有一張草圖昔头,其余都是一片空白,意味著我需要用 10 天時間影兽,把這個課程學到的東西運用到項目中减细,完成期末作業(yè)。要命的是赢笨,我離實驗室有三個小時的路程 —— 我在廣州未蝌,實驗室在深圳。所有東西必須在出發(fā)前計劃和設計好茧妒,才能保證去實驗室的時間真正有所產出萧吠。
列出關鍵任務后,給它們分配具體的時間:
任務 | 日期 | 輸出 |
---|---|---|
研究特雷門原理 | 6.9-6.11 | 原理圖桐筏,項目結構圖 |
編程 | 6.12-6.18 | 在 Arduino 上可以正常運行的程序 |
電路元器件規(guī)劃 | 6.12 | PCB 設計文件 |
電路板設計 | 6.13 | PCB 設計文件 |
購買元器件和其他材料 | 6.15 | 淘寶訂單 |
設計外型組裝部分 | 6.13-6.15 | Fusion 360 設計源文件 |
雕刻電路板 | 6.18 | 電路板 |
焊接元件 | 6.18 | 電路板 |
測試輸入和輸出組件 | 6.19 | 基本功能可運作 |
制作外殼 | 6.18-6.19 | 激光切割和 3D 完成的部件 |
組裝 | 6.19 | 把所有部分組裝成完整的作品 |
調試 | 6.20-6.21 | 調試和演示準備 |
過程
1. 整體設計
輸入 : 使用超聲波測距模塊 HC-SR04 檢測距離:
輸出: 最開始打算用小喇叭纸型,但是效果不好,遂放棄。
改成用軟件的方式實現(xiàn)聲音的控制狰腌,把 macbook 作為揚聲器除破,用程序將距離轉換為 C 調音符:
材料和開銷
硬件
- ATTiny 45 芯片
- 超聲波測距模塊 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 打印部件
硬件和外殼部分總共花費約 $17 。
物品 | 數(shù)量 | 花費 |
---|---|---|
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. 編程
為了實現(xiàn)用電腦作為聲音轉化器琼腔,我使用開源的 C++ 套件 openFrameworks瑰枫。這個庫簡化了很多音頻處理的工作。
OpenFrameworks 下載 以及 xcode 安裝指南丹莲。
openFrameworks 有一個叫做 micknoise/Maximilian的 C++ 插件光坝,專門用來做聲音合成以及音樂數(shù)字信號處理和轉換,這樣我就能直接將傳感器的信號轉換成為可播放的音階:
在制作電路之前甥材,我先用 Arduino 來測試基礎功能:
Hello world 視頻:
3. 電路設計
因為使用了軟件實現(xiàn)主要的模擬信號轉換盯另,所以電路方面就變得簡單很多,只需要實現(xiàn)傳感器的數(shù)據(jù)傳輸就行:
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. 制作外殼
超聲波測距模塊長得很像機器人的眼睛洲赵,所以干脆給它整了一個機器人 Wall-E 的造型鸳惯。 在 Fusion 360 里做好部件的設計:
然后導出成 dxf 文件到 Coraldraw 里,發(fā)送到 GCC 激光切割機叠萍。使用的參數(shù)是: speed 2.7 芝发, power 100:
切割完成:
開始組裝:
還補充了一些 3D 打印的小部件:
測試
看起來萬事俱備,測試走起俭令!
Test video for UI when playing
在移動過程中,音符的識別容易抖動部宿,需要做進一步的濾波處理抄腔。
演示
期末項目的演示材料
Slide:
Video:
復盤經驗
-
項目管理
項目管理很重要,即便只是個人項目理张。如果沒有確切的時間表和關鍵任務列表赫蛇,整個過程會變得地獄般忙亂。一旦把看似復雜的整個項目拆解成任務列表雾叭,并且明確每個任務的期限悟耘,每一步行動就有了目標,也就沒有太多的時間去焦慮织狐。更重要的是暂幼,把每個任務需要產出的結果和標準給出來,會更明確下一步要做什么移迫,以及做到什么程度就應該繼續(xù)下一個任務旺嬉,而不是無休止的糾纏于細節(jié)。
-
學習了音頻和音樂制作的一些原理
如何通過程序將傳感器信號轉換成為有規(guī)律的音符厨埋。音階和頻率都很有意思(有時候也讓人摸不著頭腦)邪媳,當然,還有不少音樂制作的基礎概念,比如 propagation 傳播雨效, amplitude 振幅迅涮,frequency 頻率和timbre 音色。
-
使用第三方框架和插件來提高效率
在開源的世界和神奇的 github徽龟,不用再重復造輪子叮姑,有大量的優(yōu)秀的項目和組件庫等著被挖寶,雖然仔細地讀文檔和看例子挺費時間顿肺,但相比自己去實現(xiàn)復雜的功能戏溺,這個投入的性價比實在太高了。
待完善部分
- 程序的穩(wěn)定性依然有待改善
- 目前只做到了音階的轉換屠尊,但是沒有實現(xiàn)特雷門琴的另一個主要特性:用手掌距離的遠近控制音量大小
- 更有趣的做法是旷祸,做一個可以自動播放旋律的裝置,而不是手工去演奏讼昆。
參考
特雷門原理圖:
[圖片上傳失敗...(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
課程資源
致謝
這半年托享,要感謝很多人:實驗室的小伙伴,guru 們浸赫,工作上的小伙伴闰围,被我拒絕周末約飯的小伙伴們,謝謝大家對我的理解和支持既峡。
特別感謝在我發(fā)出攢學費帖之后羡榴,慷慨贊助的各位 ,以及給每一篇筆記打賞和留言的朋友們运敢。過程很難熬校仑,好在有你們的鼓勵。
鞠躬传惠,謝謝F!