2009年4月27日 星期一

邁向互動達人的第二堂課. Sensing


上次我們講解了如何利用Arduino輸出,來控制LED的亮暗,做些資訊的顯示,但僅僅只能單向地做操作,怎麼去告訴Arduino什麼時候要做不一樣的動作?

各式各樣的sensor可以幫助我們取得環境周遭的資訊,轉換成訊號來送給Arduino知道

Digital In


#ex1. Button

然而,一定要記得使用開關時,在線路中一定要加上電阻,防止短路。


程式檔:Arduino Software的File > Sketchbooks > Example > Digital > Button

可以看見,按下按鈕LED會亮,而放開則不亮

語法~ pinMode(inputPin, INPUT)
digitalRead(pin)




#ex2. Debounce

程式檔:Arduino Software的File > Sketchbooks > Example > Digital > Debounce

語法~ millis()

在ex1中,會發現有時候按鈕按下時會不精準,那是因為在那短短的時間內,因為手按不穩或電路雜訊,會形同快速的ON/OFF.ON/OFF,會影響到我們對按下次數的判斷,故最好讓按鈕暫時的失效,在ex2中,我們除了排除這樣的問題,更進一步讓按鈕按一次亮燈,下次按熄燈。

millis()的使用在未來相當重要的,一定要搞懂。另外請記得,暫存time的變數型態,若太小,可能會有點問題。

Analog In



之前我們所練習的,都是單純的 有/沒有,給電/不給電,然而,真實世界不是那麼簡單的,生活周遭常常有許多只有些許差異的變化,例如:聲音的大小.光的亮度.水的高低.毛孔的細緻度,這些東西都不是僅僅用有跟無的二分法就可以辨別的,而這些具有連續性的差異能形成類似曲線的圖表,就是我們接下來要討論的類比


>Arduino中的類比其實是透過數位的方式,在單位時間內取值

當然可以當做類比輸入的sensor有很多,先介紹基本練習的例如:
[可變電阻]

[光敏電阻]


在接下來的範例,我們用光敏來做些簡單的練習
#ex3. Analog in/ Digital out


程式檔:analog_input.pde

語法~ analogRead(pin)

Arduino的Analog In,對應操作電壓的 0V~5V,為 0~1023



#PWM (Pulse Width Modulation)
電腦與微處理器是不可能實際輸出類比的電壓,但我們可以假造出類似的效果。
若快速在兩個電壓中做切換,我們可以得到一個平均值:

Output Voltage = High_time(%) * Max_Voltage




#ex4. Analog in/ Analog out


程式檔:analog_output.pde

語法~ analogWrite(pin)

Arduino的Analog out,對應操作電壓的 0V~5V,為 0~255




吃補的綜合練習~Color Mix (待補)

光的三原色是R(紅光).G(綠光).B(藍光),世界上所有可以看見的顏色都是由這三種顏色所組合出的,Violet (red & blue), Turquoise (blue & green) and yellow (green & red),三種光一樣強時,也可組合出白色(理論上)。

我們使用共陰三色LED來實作這個練習,所謂共陰,即可視為R.G.B三顆LED的負極都接在同一支腳上,所以我們只需要4隻pin腳就可以控制三顆LED所作出的效果



程式:RGB_3switch.pde
此程式運用我們上課中途提出的小練習:「利用單一按鈕切換三個LED燈的亮暗」,作為延伸,進一步去控制RGB三色的切換。



參考




沒有留言: