請自行腦補小黃人那賤賤的笑聲~(實物是有聲音的) 這個玩具還有個NB名字:BMW(別摸我) 制作背景
本玩具誕生于芯世界、創客空間、英特爾等機構組織的極創48小時HACKATHON的比賽。并有幸獲得了本次比賽的第一名,感謝之前所有支持過我們的果殼er們! 在我們一群開發人猿的努力下,這個純手工制作的小黃人誕生了。 制作難度:3星 制作時間:比賽時我們3-4人工作了約8小時 制作材料電路控制部分骨架與裝飾材料
我們在小黃人的眼睛和雙手的位置分別裝了三個紅外傳感器(眼睛里的那個是不是毫無違和感呢,哈哈)。當人手靠近傳感器時,傳感器的信號會發生變化。Arduino控制器接收到這種變化后,會控制對應的舵機轉動到相應的角度,保持一段時間后恢復原位。我們總共有兩個舵機,分別控制小黃人的向后倒和左右閃躲。同時,Arduino控制器通過LM386芯片驅動揚聲器,播放小黃人笑聲的wav音頻。 電路控制部分連接紅外傳感器到Arduino控制器
紅外反射式傳感器可以發射紅外線,并檢測紅外線是否被反彈回來。這個傳感器因為內部已經集成了放大、濾波等電路,使用起來非常方便。傳感器有3個引腳,分別是電源、地和信號。經過測量,當傳感器前方有遮擋物時,信號線電壓變低。
直接將信號線接到Arduino的數字端口上,判斷這個數字端口的值是否為0,即可判斷傳感器前方是否有手靠近了。 如果紅外傳感器的質量不太好的話(產生的信號電壓不穩或者不夠低),則可以將信號線連接到Arduino的模擬信號引腳上,使用Arduino的AnalogRead函數(封裝好的函數用起來就是簡單)就可以讀出這個信號線上的電壓。設置一個電壓閾值,就可以判斷傳感器前方是否有手靠近了。 連接舵機到Arduino控制器 關于舵機的使用,DIY站的前輩寫了一篇很好的文章:DIYer修煉:舵機知識掃盲 這里簡單描述一下: 舵機收到一個用PWM波模擬的電壓值,就會讓驅動軸帶動舵盤旋轉到一個固定的角度。而在Arduino中,完全可以利用封裝好了舵機的控制函數,命令舵機轉到對應的角度即可。 下圖中展示了一個舵機和一系列的舵盤。
這里使用兩個舵機分別控制小黃人前后旋轉和左右旋轉。 結合第一步中的紅外傳感器,此時便已經可以實現如下功能: 當紅外傳感器檢測到小黃人前方有手時,就命令前后舵機向后轉動90度;當左方有手時,就命令左右舵機向右旋轉90度;當右方有手時,就命令左右舵機向左旋轉90度。 當然,控制邏輯還可以有更多花樣。比如,當我使出“雙峰貫耳”時,小黃人會前撲進行反擊~ PS:舵機在工作時會對電源電壓產生一定的干擾,因此需要接電容濾波或者是單獨供電。否則會影響紅外傳感器的正常工作。 連接揚聲器到Arduino控制器由于器材限制,我們采用了比較簡單的音頻播放方法。使用單片機的PWM波來近似播放PCM編碼的單聲道音頻。為了操作簡單(不用外接flash或者ram),我們將音頻直接固化在程序中了。 這一段里我將介紹如何產生WAV音頻文件、如何將音頻文件固化在程序中、如何修改Arduino的PWM波產生函數的基本參數。 之前說了兩次Arduino封裝函數的方便,這里要來吐槽一下啦:有一些操作,在普通的單片機,包括Arduino套件所采用的AVR中實現比較簡單,但是在函數高度封裝后的Arduino上,處理起來略有麻煩。 產生WAV音頻文件
12000個8bit的數的大小約是12KB。Arduino的RAM大小只有8KB,而其程序Flash的大小有128KB。因此最簡單的方法就是將它直接寫到程序里。 在Arduino中,直接定義數組的方法是: const byte sound[]={………………………………};這樣的話,數組中的內容作為變量會被要求加載到RAM,于是RAM就爆了。 固化到程序里的方法是: #includePWM波使用不同占空比的方波,來模擬不同的直流電壓,就可以模擬一個模擬信號。(中文有點怪,英文是emulate an analog signal) Arduino可以很方便的產生一個指定模擬電壓的PWM,使用函數AnalogWrite即可。因此我們讓Arduino依次將12000個聲音點的值,用PWM波模擬出來,理論上就只要再通過濾波和放大就大功告成了。 這里需要的一個前提是,PWM波的頻率要遠高于聲音的采樣頻率(8kHz)。否則會很難濾波甚至發生錯誤。 不幸的是,AnalogWrite中無法指定PWM的頻率。查閱資料后發現,PWM波的默認頻率只有幾百赫茲,因此剛開始實驗時喇叭里全是噪聲。參考了Arduino的官方網站的使用教程 [url=http://playground.arduino.cc/Main/TimerPWMCheatsheethttp://playground.arduino.cc/Main/TimerPWMCheatsheet]Adjusting PWM Frequencies[/url] 中的資料,將PWM波的頻率改成312500Hz。終于能夠實現聲音的播放了。 此時直接將揚聲器接到PWM的輸出端口上,已經可以聽到聲音了(揚聲器本身的結構具有低通濾波器的特性,可以濾去高頻分量) 后續的濾波器以及功放電路就不描述了,時間倉促,設計的也不好。 至此,電路部分已經設計完成。此時用手擋住任何一個紅外傳感器,均會有一個舵機開始旋轉,并且有賤賤的笑聲。 機械部分由于我們沒有人是學機械或者設計的,不會畫CAD圖,無法使用高級的切割設備,只能采用手工加工木板。首先引用一段對舵機用法的介紹,出自于前面提到的 DIYer修煉:舵機知識掃盲 。
接下來的機械設計介紹,這可能會是你在果殼中看到的最坑爹的表達方式,大家對著實物圖和我畫的“偽三視圖”努力辨認一下吧…
我們用了兩個舵機實現了兩個自由度。整個設備從下往上依次是:
PS. 小黃人還在繼續成長中~我們將會在這個簡單的小黃人的基礎上,開發出一款真正的玩具。嗯?那款玩具會是什么樣的?現在還不能告訴你,肯定會更可愛,更聰明(或者更笨),變得會學習、會有情緒,也許還可以和很多人一起玩。敬請期待吧! |