用Arduino打造可吹熄的LED蠟燭

十一月 9, 2016
Facebook
Twitter
图片

「我們要如何做出可以吹熄的LED蠟燭呢?」
我和女兒有一天傍晚聊到這個話題,於是便上網查詢各種能感應氣流的方法。在搜尋的過程中,我們發現了一款恰巧符合我們需求的感測器,於是就根據這款感測器設計了這個專題。
PARTS
Modern Device風感測器 17美元
以下零件你可以分開購買,或是在makershed.com或巴諾書店購買「Make: Getting Started with Arduino」套件。
Arduino Uno微控制器,要讓這個專題佔的空間更小,你可以用Arduino Nano或大小差不多的Arduino相容板。
USB,Arduino用。
麵包板,10×30或更大。
按鈕開關,上頭有直徑0.1″的針腳,可以插入麵包板中。
10kΩ電阻,上頭的條紋是咖啡色、黑色和橘色的。
傳統LED(你也可以升級成連結裡有閃爍效果的LED,由Evil Mad Scientist提供)
跳線(10
附開關的9V電池組(非必要)或是Arduino電源供應器

專題概念:如何感測氣流和風?

氣象站會使用具有旋轉風杯的風速計。而另一種偵測氣流的方法是將兩片鋁箔近距離架設,並偵測兩者接觸時產生的電流通路,但這個方法可能也會偵測到好奇的貓咪。
還有一種方法,原理和披薩太燙時我們會吹氣降溫相同。我們可以用電流把電線加熱,等它被吹過的氣流降溫後,再測量溫度變化來感應氣流。這種裝置被稱為「熱線」(hot-wire)風感測器。Modern Device有一款這樣的產品(圖A)可以和Arduino結合使用。
图片

圖A。攝影:Hep Svadja

1. 組裝風感測器

你需要把排針針腳焊接到感測器上,稍後就可以插入麵包板。
「焊接?好可怕!」
焊接其實一點都不難,但你會需要一組焊鐵、一些焊料,還要做一點功課。學習焊接很有成就感,而且很簡單。在SparkFun上有不錯的教學,也可以在Make網站參考焊接的Skill Builder。這個專題是學焊接的好時機,因為只有5個點需要焊接:要插入麵包板的5個排針針腳(感測器附有排針)。
焊接最困難的地方,是要在點焊料時把元件固定。在這個專題裡,我們可以用麵包板來幫忙。只要把排針針腳的長端插入麵包板,並把風感測器末端的5個孔套到排針腳位的短端上。為了維持麵包板的水平,可以在麵包板和感測器電路板的另一端之間放一枚硬幣。
接著就可以開始焊接了。請確認針腳的焊料沒有碰到另一個針腳。把排針焊接完成後,就可以進行下一步了。

2. 連接元件

图片

圖B
上圖是這個專題的接線圖(圖B)。從現在開始的元件都是插入即可,不用再焊接了!
  • 把按鈕插入在麵包板頂端,橫跨中央凹槽,其2個針腳現在在第1列。
  • 把電阻的其中一個針腳插入麵包板J欄第3列。
註:電阻的這個針腳要和按鈕的一個針腳在同一列。但因為按鈕有各種尺寸,如果你的按鈕有一個針腳在不同列,就把電阻器的針腳改為插在那一列。
  • 把電阻的另一個針腳插入藍色負極(-)列上的任一個孔中。
  • 把LED的短針腳插入A欄第20列。
  • 把LED的長針腳插入下面一個孔,也就是A欄第21列。
  • 在LED的針腳接觸麵包板的地方,將LED小心地彎成直角,讓它「躺」在麵包板上。
  • 把風感測器的5個針腳插入A欄的最下面5列,也就是第26到30列。風感測器剩餘的部份會從麵包板的左邊伸出,而感測器的GND針腳會位於A欄第30列。目前的進度會如圖C。
图片

圖C。攝影:John Keefe
「電阻呢?」 你可能已經注意到,在多數的專題裡感測器會搭配一顆電阻;而在這個專題裡,我們會給按鈕(其實也是一種感測器)一顆電阻,但風感測器卻沒有。
為什麼呢?我們已經進展到使用更進階的感測器電路板,所以除了感測器本身,它還含有額外的電子元件,也就是風感測器電路板上那些小零件。這些電子元件會管理電源,並且把我們需要的資料回傳給Arduino。因為這樣,我們需要的電阻器功能都已經內建在電路板上了。
接下來要處理跳線。以下每個步驟都是一條跳線兩端連接的做法。線的顏色沒有差別,但我會對照圖B接線的顏色來說明。
  • 把紅色跳線的一端連接Arduino的3.3V針腳,另一端插入麵包板H欄第1列。
  • 把綠色跳線一端連接Arduino數位列的第2個針腳,另一端插入麵包板H欄第3列。注意,這一端要和按鈕的一個針腳及電阻器的一個針腳共用一列。同樣地,如果按鈕的針腳在另一列,就改用那一列。
  • 把黑色跳線的一端插入Arduino的GND針腳,另一端插入麵包板右邊藍色負極列的任一個孔,也就是插有電阻一個針腳那一列。這裡是我們的「接地列」,將為麵包板上所有元件接地。
  • 把另一條黑色跳線的一端插入麵包板上同樣的藍色負極列,另一端插入B欄第20列,和LED短針腳同一列,為LED提供接地,也就是電路的負(-)側。
  • 把黃色跳線的一端插入Arduino第13個針腳,另一端插入麵包板B欄第21列,和LED的長接腳同一列。
  • 把紅色跳線的一端插入Arduino的5V針腳,另一端插入麵包板C欄第29列。注意,這和感測器的+V針腳同一列。這條線會為感測器供電。
  • 把橘色跳線的一端插入Arduino的類比A0針腳,另一端插入麵包板C欄第26列,和感測器的TMP(溫度)孔同一列。
  • 把黃色跳線的一端插入Arduino的類比A1針腳,另一端插入麵包板C欄第27列,和感測器的RV(原始迴圈電壓)針腳同一列。
  • 最後,把黑色跳線的一端插入C欄第30列,另一端插入右邊藍色負極列(接地列)的任一個孔。
圖D為完成後的模樣。
图片

圖D。攝影:John Keefe
完成了!

3. 載入程式碼

如果你是Arduino的新手,請依照說明將它與電腦連接
下載專題的程式碼,並點選「Copy Code to Clipboard(複製程式碼到剪貼簿)」按鈕。
開啟Arduino軟體,並在選單中選取File(檔案)→New(開新檔案)來建立新的Arduino腳本程式碼。接下來會看到幾乎空白的程式碼視窗。先把現有的程式碼刪除,接著在空白的視窗任一處點一下,並用Edit(編輯)→Paste(貼上)把從網站複製的程式碼貼上(圖E)。再來用File(檔案)→Save(儲存)來儲存新的腳本程式碼。
图片

圖E
現在透過USB線把程式碼上傳到Arduino。可以從選單中使用Sketch(腳本程式碼)→Upload(上傳)來進行,或者更簡單的方式是在Arduino軟體藍色視窗上方點選上傳箭頭。接著在Arduino視窗的下方會看到「Done Uploading(上傳完成)」的訊息,同時LED會點亮。恭喜!你完成Arduino的程式編輯了。

4. 許個願、吹蠟燭!

現在每次啟動Arduino時,它都會執行蠟燭程式。在LED閃爍時,用力對感測器上方吹氣(圖F),接著燈就會熄滅。按下麵包板上的按鈕就可以再次點亮。
图片

圖F。攝影:John Keefe
如果想讓蠟燭脫離電腦的枷鎖,可以為Arduino插上電源轉接器。有些電池架附有Arduino轉接器和一個小開關。這很重要,因為雖然把蠟燭吹熄,Arduino仍然在運轉。所以要記得用開關(或者拔除電池電源)將它完全關機,不然很快就會沒電。

修正

用這個程式碼來偵測用力吹氣應該沒問題。如果想提升或降低它的敏感度,可以透過把以下這一行的數值6改成其他值來調整觸發熄燈的風速:
if (WindSpeed_MPH > 6) {

原理是什麼?

在空氣經過感測器的「熱線」(其實沒那麼熱)的同時,線會降溫並改變導電度。電路板上的其他電子元件會偵測這個變化,並把它轉換成Arduino可以解讀的值。
當這些值到達臨界,程式碼就會把燈熄滅,並等待按鈕被按下再重新點亮。

程式碼教室

星星?

本專題的程式碼裡有很複雜的數學。你當然不需要把其中的運作全部都搞懂,但這是一個認識一些基礎數學符號的好時機。
你應該已經可以看出「+」是加法的符號,而「-」是減法的符號。
那星號「*」呢?這是乘法的符號,例如2*3等於6。「/」是除法的符號,所以6/2等於2。
在這個程式碼裡,還可以看到「pow」。這不是漫畫裡會出現的揍人音效,而是「次方(power)」,例如10的2次方,一般會寫成10²。在Arduino的程式碼裡,這會寫成pow(10, 2),但運算結果仍然是100。

有趣的函數

看一下這個專題的程式碼就會發現熟悉的void setup()和void loop()函數,它們在所有Arduino程式都會出現。
再往下拉,你會看到新的段落:void douseCandle()和void lightCandle()。它們是做什麼用的呢?程式碼裡的這兩個函數會執行特定的工作。基本上,我做的是在現有的Arduino詞彙裡面新增兩個指令,跟現有的analogRead()和digitalWrite()放在一起。
在上面的void loop()段落裡,我在幾個不同的地方「呼叫」這些函數。其中一個地方如下:
if (WindSpeed_MPH > 6) {
douseCandle();
}
當程式執行到douseCandle(),它會尋找以下這個我寫的函數:
void douseCandle() {
// turn LED off
digitalWrite(led, LOW);
}
呼叫這個函數時,程式會執行函數的括號「{ }」之間的程式碼,並把LED針腳設為LOW。
函數非常好用。其中一個優點是能讓我們在多個不同地方執行同一個程式碼段落。你可以在程式碼裡建立一個函數,然後在需要的時後就可以直接呼叫它。如此一來,就不用一直重複程式碼,這是程式設計師做事的原則之一。他們還為這種程式碼取了名字:DRY(Don’t Repeat Yourself,「不要重複你自己」)程式碼。

動手做更多

图片

這個專題只專注在偵測感測器有沒有明顯的氣流通過,但這個小裝置其實可以提供氣流速度明確的資料,讓它成為真正的風速計。但如此一來感測器就需要獨立於Arduino的電源,因為Arduino流通的電源可能會稍微波動,而這就會影響感測器的精確測量。有關連接獨立電源的做法,可以參考這款風感測器的技術說明書
你還可以把這個專題放入蠟燭造型的外殼裡,只需要改用Arduino Nano(或其他和迷你Arduino相容的微控制器)、省略麵包板,並用電子線來焊接連接點就行。Make雜誌的工程實習生西尼‧帕默(Syndey Palmer)用硬紙管做出這個很酷的蠟燭(圖G),甚至有用熱熔膠和油漆做成的「臘滴」效果。
图片

圖G
图片

John Keefe
​John Keefe是紐約公共廣播電台WNYC數據新聞團隊的資深編輯。他同時也主持了許多與感測器和新聞有關的工作坊、在紐約許多學院和大學任教,並成立了創意合作平臺Really Good Smarts LLC。
(譯:屠建明)
原文
Social media & sharing icons powered by UltimatelySocial