2013年開始了五天,終於又有空閒可以進行projects囉!今天所做的是Project04-Color Mixing Lamp,這是個非常有趣的實驗,藉由控制給予感測器不同顏色的光,就給予LED相對應的發光顏色。
硬體:
光敏電阻_Photoresistor
三色LED_LED
電阻_220 and 10K ohm
電路實際圖如下:
圖中紅綠藍(RGB)是顏色濾片
Code:
在此Project新學到的指令有:
\t : 等同於keyboard上的tab按鍵
analogWrite : (pin, value),
value-0 (always off)~255(always on)
其中有將analogRead讀取到的數值除以”4“以縮減到可以輸入analogWrite裡面。(這樣算起來表示analogWrite是8 bit)。而根據手冊有談到是使用PWM(Pulse Width Modulation)來輸出Duty cycle。而有關Duty clcle則是利用數位輸出”模擬“類比輸出電壓的方式而達成,但是另一款版本(DUE)則已經搭配了類比輸出電壓的位置。Duty cycle可以參考Arduino.cc的介紹,描述的簡潔有力。網址
原本我以為會按什麼就遮掉什麼顏色,不過實際上好像不太是(或者還沒有加上書中所介紹的乒乓球嗎?)。用手遮住藍色,LED燈會變得更藍;遮住紅色會變得更紅;但是綠色的變化比較不明顯!而用小型手電筒照光的話,照藍色感測器會使得LED變得更紅,類似遮住的反應。整理以上的描述如下:
光敏電阻____LED
遮住藍色____變更藍色
照光藍色區域__變紅色
另外下面的影片是實際操作圖:
而身為一個不專業的玩家,當然會有三用電表這種玩意,就測量了下當遮住光敏電阻時,相對應PWM輸出的電壓變化,整理如下:
遮住顏色_原本電壓_遮住電壓
綠色___2.55V__1.33V
藍色___2.89V__1.07V
紅色___3.54V__2.40V
從以上資訊來推測看看,當遮住藍色而輸出PWM電壓減少,相對的就是指藍色的Duty cycle是比較小的(小於50% or less)這樣說起來應該LED要變得更不藍(或者說紅色或綠色),跟理論上好像有點不搭。
再次的檢查電路以及程式碼,終於發現書中(P57)提供的有小錯誤:
const int greenLEDPin = 9;
const int redLEDPin =
const int blueLEDPin =
修改後再次測試,成功!!遮住藍色變紅色發光,藍色區域照光變得更藍!!其它以此類推~圓滿達成!
後記:這個Project是使用光敏電阻,不過也有其他更高階的例如“顏色感測器”已經可以直接針對不同顏色的光做反應,而不需要像此專題還需要使用顏色濾片,當然顏色感測器好像也是針對單色光為主(例如紅藍綠三色)!下次的專題任務就是“MOOD CUE”真是令人期待!!
沒有留言:
張貼留言