透過Raspberry Pi閃爍LED專案學習歐姆定律、GPIO和電晶體知識

本文最初發佈在deviceplus.jp網站上,而後被翻譯成英語。

Devices Plus的電子製作系列文章已經形成了一個龐大的體系。讀者們也很喜歡根據我們的文章製作一些自己的作品。

然而,最近一位讀者表示,“雖然我可以做出作品,但是我並沒有真正掌握背後的原理。”確實,談到電力、電子、電路和程式等內容,有些東西並不是那麼簡單,有時很難理解背後的基本原理。甚至我們編輯部的人員有時也會感到頭疼!

此次的分享嘉賓是伊藤尚未先生,一位媒體藝術家和作家,以講解“更深層次的原理”而聞名。本文將以閃爍LED燈專案為例講述一些基本原理。要學的東西很多,所以我們直接學習最為重要的部分。當然,學完原理之後,我們還要理論聯繫實際,學以致用。

[目錄]

  • 前言
  • 從閃爍LED學起
  • 歐姆定律
  • Raspberry Pi的GPIO
  • 透過電晶體控制LED
  • 關於閃爍LED的更多知識
  • 閃爍LED專案開發
  • 如何應用我們的設計?

前言

在過去幾年中,隨著電子行業的發展,微控制器變得非常流行。現在,我們可以使用緊湊的小型元件來感知和控制各種事物,包括光、聲音、運動和圖像,這感覺很神奇。我小時候的未來夢想正在慢慢實現,這令我感慨萬千。

電子製作的內容已經發生了變化,早已不再是用電晶體制作收音機的時代了。進入媒體藝術領域以後,我把電子作品視為工具和材料,就像畫筆和顏料,幫助我在藝術領域更充分地表現自己。藝術的表達方式有很多種,而另一方面,愛好動手製作的這類人被稱為“創客”。當我看到很多地方都在舉辦相關活動時,我感慨“興趣愛好”作為一種亞文化的概念已經發生了變化。

現在,我喜歡用Raspberry Pi進行電子設計,人們可以輕鬆訪問該系統的各種資源。其作業系統還安裝了多種應用程式,而且簡單易用。

本文使用的Raspberry Pi 3 Model B+

從閃爍LED學起

“閃爍LED”,顧名思義,您會在電路中看到LED燈交替點亮和熄滅。當然,讓LED燈閃爍很簡單,我們可以利用電晶體和電容等元件重現電路的構建。順便說一下,下圖這個電路是在我的電子作品中經常使用的一種電路,叫做非穩態多諧振盪器電路。該電路由兩個電晶體、兩個電容、四個電阻和一個LED組成。這些元件焊接在電路板上,用乾電池供電。

電路示例:非穩態多諧振盪器

作品示例:鐵路標誌

在該電路中,LED燈會以大約一秒的間隔閃爍。如果想改變燈的閃爍速度,我們得改變電容的容值和電阻值。要加快閃爍速度,就要減小的電容容值。

我們可以透過微控制器實現這個調整。
透過Raspberry Pi的GPIO輸出點亮LED非常簡單且易於處理。這方面內容很多書籍中都有介紹,而且市面上有許多功能模組化的專用擴展板,都能提供相關詳細資訊。但是,他們並沒有深入探討構建電子電路所需的一些最基本的重要知識,所以讓我們在這裡回顧一下。請回憶一下小學和初中科技課本上學到的知識。

歐姆定律

歐姆定律的描述為:電流=電壓/電阻。我學習這個定律的時候,該公式被寫成I = E/R。現在的公式是A = V/Ω,對吧?

貌似現在的教科書用的基本都是這個公式,“A(安培)= V(伏特)/Ω(歐姆)”強調的是單位本身,可能更直觀易懂。

您可能會在參考書中看到這樣的圖,但是請注意自己對這個公式的記憶方法。對了,我有一個動物園的朋友,他是這樣記憶這個公式的:

“地平線將地球分為上下兩部分,天空中有海鷗,海中有魷魚和章魚”

現在,我們就以電池點亮LED為例來說明歐姆定律的實際應用。您可以將LED連接到電源(此處為電池),但由於LED是一種二極體,因此電流有一個方向:將A(陽極)連接到電源正極,將K(陰極)連接到電源負極。

這個連接方向雖然正確,但實際上如果這樣直接連接,LED可能會損壞。為避免損壞元件,流過元件的電流大小必須正確。

正確的電流值請參考元件的額定參數表(技術規格書)。我們以一個參數為3.5V/20mA的白光LED為例,這種電參數可以解釋為“如果電壓電流位於這個安全範圍內,那麼不會損壞”。換句話說,“如果電參數超出這個範圍,它可能會損壞。”

因此,適用於該LED的最佳電壓為3.5V,流過的最佳電流為0.02A。

首先,如果電壓為3.5V,就得考慮使用電壓更高的電源,比如一個由四節乾電池組成的6V電源。嚴格來說,一節新電池的電壓可能接近1.6V。當然,目前我們先按照四節電池總電壓為6V進行討論,稍後再介紹全新電池的電壓情況。

我想把6V中的3.5V電壓施加到LED上,那麼剩下的2.5V就得施加到另一個元元件上。這可以透過分壓來實現,因此LED需要串聯一個負載,一個簡單的電阻器即可。

我們來回想一下微型燈泡串聯和並聯的實驗情況,它們的亮度不一樣。負載(微型燈泡)串聯時,電路電壓分配到兩個微型燈泡上,負載加倍,所以流過電路的電流為1/2,微型燈泡較暗。

微型燈泡存在個體差異(比如疲勞程度),這會導致負載有所不同

分壓之後,每個元件得到一部分電壓。現在,我們返回來討論LED。由於LED是半導體,我們不將其視為負載。因此即使是分壓電路,電路中的電流也得透過除LED以外的元件進行計算。

流過電路的電流應該是20mA,那麼我們應該使用多大的電阻呢?這可以使用歐姆定律計算。因為“電阻=電壓/電流”,2.5V/0.02A=125Ω,所以LED應串聯一個125Ω的電阻。電路電壓由LED和電阻器分壓。

然而,市場上並沒有阻值是125Ω的電阻。最接近的電阻阻值為120Ω和130Ω。如果選用120Ω,那麼根據歐姆定律,電路的電流為25/120 = 0.0208333。這個值超過了20mA,因此我們應選用130Ω的電阻。電流不超過20mA就可以了。

現在,我們討論使用全新乾電池的情況。如果每節電池的電壓是1.6V,那麼總電壓就是6.4V。如果電阻上的電壓為2.9V,那麼經過計算其阻值為145Ω。所以,選用一個150Ω的電阻足夠了。當然,電阻越大電路越安全,但是LED會變的更暗。請根據自己的設計環境選擇適當的阻值。該電阻被稱為限流電阻,因為它的作用就是控制流過電路的電流。

Raspberry Pi的GPIO

Raspberry Pi有許多稱為GPIO的輸入/輸出埠,可用於控制外部設備。我沒有描述這方面的細節,那我該如何解釋電信號是如何產生的呢?

比如,用這個端子能否點亮LED?

當然可以!然而,如前所述,不同LED的額定參數不同。比如,如果我們要點亮一個紅色2.0V 20mA的LED,需要使用一個限流電阻。GPIO的輸出電壓為3.3V,那麼分給限流電阻的電壓為1.3V,透過的電流為20mA。不過,Raspberry Pi的GPIO最大只能提供16mA的電流,根據歐姆定律,限流電阻應為“1.3V/0.016 = 81.25Ω”,所以我使用了100Ω電阻。雖然這樣無法達到該LED的額定性能,但是足以點亮它。您可以很容易地在麵包板上做一下這個實驗。

實現LED燈閃爍最好的方法還是使用Scratch。

聲明GPIO,將GPIO4設為輸出,然後向GPIO4輸出ON (Hi)。
如果使用左圖程式,LED會一直處於點亮狀態所以要用OFF(low)來關閉它

如果按照上面的左圖程式組裝,每秒最多可開關10次

現在,我們已經設法製作出了閃爍的LED燈,但是,如前所述,Raspberry Pi的GPIO的輸出電流存在限制。如果您想使用白光或藍光3.5V LED,或者連接多個LED(想要更亮一些),或者使用大功率、超亮LED,怎麼辦呢?此時,單個GPIO輸出很難實現這種功能。因此,我們需要使用另一個電源供電,並構建一個單獨的電路來驅動LED。LED可以使用專用LED驅動器進行驅動,但是本節介紹一種使用電晶體的簡單驅動方法。

透過電晶體控制LED

本文使用的是NPN型電晶體2SC1815(目前與2SC1815L、KSC1815等相容)。電晶體的作用是放大和開關。

我們給基極一個輸入,電流就會從集電極流向發射極。此時,基極的輸入信號就被放大成一個較大的電流信號。這個過程稱為開關。換句話說,模擬處理的過程是放大,數文書處理的過程是開關。由於這是透過Raspberry Pi操作的,我們可以將其看成是一個開關功能。

NPN電晶體符號及外形示例

NPN電晶體的基極得到一個正輸入後,集電極和發射極就會導通。如果是PNP型電晶體,就需要一個負輸入。

根據2SC1815的額定參數表,流過集電極的電流可達150mA。電晶體產品是根據放大係數分級的,在Y級別中,放大係數為120至240。我們假設放大係數為200,要達到150mA的集電極電流,那麼流過基極的電流應該為0.75mA。這意味著GPIO只需要輸出一個很小的電流。

這裡我們連接了一個10kΩ電阻,作為基極的輸入。LED採用白光3.5V 20mA,並透過外部乾電池供電,因此電路的電壓為6V。根據前文的討論,我們還給LED串聯了一個150Ω的限流電阻。

我們按照下圖連接好各個元件。

現在,我們把電晶體基極連接到Raspberry Pi的GPIO。首先,我們用麵包板進行實驗。

剩下的就需要寫程式了。但是,您可以像在Scratch中一樣使用之前的程式。當然,如果所連接的GPIO引腳變了,那麼應該在程式中更改引腳編號。

基本步驟如下,聲明使用GPIO,設置該引腳輸出、輸入等,然後輸出ON(Hi)或OFF(Low)。由於正輸入透過ON (Hi) 輸出施加到電晶體的基極,因此集電極和發射極之間導通,LED點亮。

程式中可能會描述PullUp和PullDown,但這裡沒有必要,因為引腳已經連接了一個10kΩ電阻到電晶體的基極,作為下拉電阻使用。換句話說,這是硬體設置。

關於閃爍LED的更多知識

如何才能讓LED燈閃爍呢?這並不難,因為我們可以用程式來控制ON(Hi)輸出或OFF(Low)輸出。想像一下,第一個輸出是OFF (Low),然後輸出ON (Hi),並保持1秒,然後輸出OFF (Low),也保持1秒,然後再次輸出ON(Hi),只要這樣反復即可。那麼,我們就會看到LED燈在閃爍。這個Scratch程式例子就是前面文中提到的那個示例。

閃爍LED專案開發

我們已經完成了LED燈的閃爍設計,現在,讓我們來嘗試控制多個LED。讓兩個LED燈交替閃爍的方法如下。該電路利用了兩個GPIO,每個GPIO驅動一個帶電晶體的LED。

這是我製作的兩個電晶體驅動電路。電路很簡單,但是如果您在麵包板上組裝,電線會很複雜,所以要注意走線情況。Scratch程式的工作原理如下。

我用的是GPIO3和GPIO4。4先點亮,1秒後關閉4,然後3立即點亮,1秒後關閉3,以此類推。重複10次,如果您想一直重複,應該使用“all”模組。

透過此應用,LED的數量可以根據可用GPIO數量增加,4個或10個。它們不僅可以順序閃爍,而且可以同時全部閃爍,甚至還可以反向閃爍,具體取決於您的程式。

如何應用我們的設計?

順便說一句,如果說讓LED點亮或閃爍只是實驗、程式設計實踐和電子製作培訓程度的事,那麼,最大的問題是如何應用我們的設計。當然,作為聖誕樹的裝飾或者照明是個不錯的選擇。然而,光效不僅僅意味著閃亮,還涉及比如投射陰影、混合顏色、反射和折射、光譜和偏振等各種建模元素。

您還可以根據設備使用光效來創作藝術作品。

這是我的作品。


讓埴輪【日本的一種陶俑-譯注】舞動起來(2010)(C)伊藤尚未

該設備的這一部分依次點亮六個LED。在這裡,六個埴輪的影子透過LED燈投射到牆上,但每個影子都投射在同一個位置,所以影子的形狀=身體姿勢。換句話說,陰影形成了動畫。

我用現代技術將靜止的陶土造型創作成了一個富有表現力的藝術品,並取名為“舞動的埴輪”。當然,這個作品需要很長時間才能完成。

所有這一切的基礎是閃爍LED燈,但是正如您所見,當您知道如何應用它們時,您可以做更多的事情。當然,您不一定非得要創作這種藝術作品,但偶爾發揮創意很有趣,不是嗎?

總結

電子設計很有趣,但是除了構建設備,您還可以做些什麼?您怎樣才能讓它更有趣?其實您可以考慮不同的應用場景和表現方式,創作出更加複雜和有趣的內容。然後,您就能百尺竿頭更進一步。