實用光敏電阻—構建LDR光敏電阻電路實際操作指南

目錄
1 實用光敏電阻
1.1 什麼是LDR/光敏電阻?
1.2 您將要學習的內容
2 示例電路
2.1 模擬黑暗緩解器
2.1.1 BOM
2.1.2 開始構建!
2.2 數字黑暗緩解器
2.2.1 BOM
2.2.2 開始構建!

1 實用光敏電阻
1.1 什麼是光敏電阻(LDR)?

LDR依賴於光電導性,就本項目來說,光電導性可以概括光敏電阻受到光線照射時具有低電阻值,沒有受到光線照射時具有高電阻值。

在這兩個臨界點之間,有很大的空間來感知LDR所受到的實際光照強度。我使用的型號在完全無光的條件下電阻僅為~500千歐,在強烈的中午陽光下為~100歐姆。LDR的特點是其本身的溫度會影響環境的溫度,這導致光敏電阻不適合用於高精度光測量,但是還是可以用於很多應用程式中。

此外,請注意光敏電阻對光線變化的回應時間為~10ms,這也許會成為您應用中的影響因素。

另一個值得注意的事情是,LDR在較暗的環境下具有很高的電阻值,這種情況下您無法用手握住它們進行準確測量。您自身身體的電阻值相當高,約為2-3 兆歐,如果您用一隻手握住一個萬用表探頭,觸摸一根導線,同時與另外一個導線上的探頭有皮膚接觸,LDR將與您的身體並聯連接。如果LDR會從手中滑脫,請使用靈活的鉗形夾具。

LDR being measured

在示例電路部分,我將演示路燈驅動的原理(在集中控制出現之前),以及許多其他需要感知光照強度的系統。需要提前說明的一點是,在一個複雜電路中,LDR無法只依靠自身來發揮作用,經常需要使用分壓器,以在驅動FET和讀取光照強度(例如使用了Arduino)時提供更好的細微性。分壓器由兩個串聯的電阻組成。在這兩個電阻之間,我們會測量出一個有用的電壓值。嘗試測量R1和R2之間的點,其中R1是串聯電路中的第一個電阻,R2是第二個電阻。使用以下公式:

 

 

電路圖如下:
Voltage divider diagram

實際上,如果您向該分壓器輸入5V,並測量從R1(1000歐姆)和R2(330歐姆)之間的點到接地點之間的點位,您將在萬用表上讀到~1.24V。

更有趣的是,如果R1像LDR那樣在不同光照條件下具有可變電阻,並且R2是一個10千歐的電位計,那麼您可以對分壓器的輸出電壓進行微調,從而使輸出電壓在FET柵極/BJT基極或微控制器ADC的耐受電壓範圍內,並將保持足夠的解析度來確定LDR上的光照強度。

這有時候非常有用,比如使用耐壓為1V的ESP8266 ADC的時候。基於atmega328p的Arduinos耐壓不超過5V,而基於atmega168的Arduinos耐壓不超過3.3V。如果您想通過Arduino 讀取一個12V的信號,請使用分壓器。

請注意,分壓器不適合用於負載,僅可用於信號控制和測量。過大的負載將會對分壓器產生影響並使電阻升溫,好的方法是使用穩壓器或降壓轉換器來降壓,從而為負載提供穩定的電壓。

紅外Raspberry Pi NoIR相機模組使用了一個簡單的分壓器電路。它僅在環境光照強度達到一定值時才會打開其紅外LED。您需要一個P溝道MOSFET或PNP電晶體以一種盡可能簡單的方式來使用它。

實際應用中,您只需要知道P溝道MOSFET或PNP電晶體在其柵極或基極為高電平時會關閉就可以了。高電平的電壓值是可變的,但是在Arduinos上,通常施加5V或3V的電壓就足以斷開電路以及中斷電子流動了。當拉至低電平時(0V),P溝道MOSFET或PNP電晶體會接通電路,電子可以流動。通常會需要使用一個上拉電阻來防止此類電晶體一直導通!

1.2 您將要學習的內容

在第2節中,您將學習如何構建類比LDR電路以及數位LDR電路。2.1中的類比LDR電路可以被構建為一個外掛程式硬體模組,來對現有硬體的行為進行修改(將會是很小幅度的修改),並且可以很容易地驅動繼電器或其他類似的部件,而2.2中的電路和代碼可以用作您使用Arduino創建的任何類型電路的範本。後者僅可以通過一個分壓器讀取LDR,但是可以輕鬆實現擴展。一個廣泛使用的電路是部署太陽能電池板之前使用的光記錄器,您可以在其中構建一個帶有microSD的電池供電Arduino,設置為在特定位置以及特定角度記錄光照強度。

對於下面的電路,雖然P 溝道MOSFET使用起來會更簡潔,但是我們會使用PNP電晶體。需要注意的是,在實際應用中,雖然MOSFET消耗的電流要少得多,而且開關取決於所提供的電壓,而非電流,但是關鍵性的區別在於PNP會對流向其基極的電流作出回應。

這意味著必須始終有一個限流電阻與PNP基極串聯,否則它將會被燒毀。在使用Arduino的情況下,具有5V的數字引腳輸出,那麼一個220歐姆的電阻就足夠了(5V / 220R = ~23mA),或者,如果您想更保險一點的話,可以使用一個270歐姆的電阻(5V/270R = ~18mA)。通常,您只能從一個Arduino(atmega328p 以及atmega168)獲取~20mA電流,雖然獲取~40mA的情況也並不少見,但是這樣會大大縮短電路板的壽命。建議不要這樣做。

除了這些技術層面的特點,LDR電路還可以以低成本、易操作的方式部署在幾乎所有電路中以控制其行為。在以下內容中,為了延長電池壽命,對新型LED燈(3個 LR44 1.5V電池、一個LED、一個電阻和一個開關)進行修改。可以通過電位計調節光敏度,同時LDR放置於面對窗戶的位置。

Night light on

Night light off

還可以使用LDR為太陽能電池板構建簡單的導向系統,來使其能夠盡可能垂直於太陽光線(電池板在90°的角度上可以產生最大功率)。

為了實現這一點,可以在單軸和雙軸太陽能追蹤機器人的交叉配置中使用兩個或四個LDR。

請參閱此視頻獲取視覺速成課程。

這裡確實需要一個帶有ADC的微控制器,雖然它是從面板獲取所有可用功率的可靠方法,但是代價是有時會需要幾個步進電機微步。在其它時間,微控制器會處於休眠狀態。可以試試能夠在此類中等複雜的電路中實現電機完美控制的A4988電機驅動器。

2 示例電路

當LDR受到~400nm至~600nm範圍內的光照射時,它的電阻會大大降低,而在沒有光照的情況下,它的電阻會變得非常高,我們甚至可以認為是不導電的。當然,它仍然是導電的,但是只能流通5V / 1000000R = 1uA的電流,也就是1兆歐電阻時是1微安。這個電流值太小了,以至於需要一個運算放大器才能對該電流加以利用。如果您不熟悉歐姆定律,請閱讀本指南

觀察LED手電筒(非全光譜光源)光照下以及遮蔽該光照下的電阻差異。

LDR all lit up

LDR in shade condition

2.1 模擬黑暗緩解器

LDR and a little shade

LDR in normal office lighting

LDR analog circuit diagram

2.1.1 BOM

您將需要以下部件:

 

1x BC557 PNP 電晶體 https://www.newark.com/multicomp/bc557b/bipolar-bjt-single-transistor/dp/04X5933
4x ROHM SLR343BC4TT32 3mm LEDs https://www.avnet.com/shop/us/products/rohm/slr343bc4tt32-3074457345627700657?CMP=EMA_ECIA_inventoryfeed_VSE?aka_re=1
10 千歐電位計 https://www.newark.com/bourns/3296w-1-103lf/pot-trimmer-10k-25turn-10/dp/39K2049
4x 330 歐姆電阻 https://www.newark.com/multicomp/mccfr0w4j0331a50/carbon-film-resistor-330-ohm-250mw/dp/58K5042
麵包板 https://www.newark.com/multicomp/mcbb830/breadboard-solderless-abs/dp/99W1760
跳線 https://www.newark.com/adafruit/758/kit-contents/dp/88W2570
LDR https://www.newark.com/lprs/n5ac501085/ldr-5mohm-50mw-ng-series/dp/14J5050

2.1.2 開始構建!

如圖所示,將所有部件連接起來。

四個ROHM SLR343BC4TT32 3mm LED使用LDR和電位計進行控制,電位計依次切換BC557 PNP電晶體。因為它不依賴於任何數位設備,所以具有小尺寸、易於實施的特點,您可以將其很輕鬆地安裝在諸如您花園或車庫的燈光系統這樣的電路中。

將一個220歐姆電阻與BC557基極串聯的電氣原理是為了防止在10千歐電位計調低到接近0歐,而您的LDR具有超低電阻值時燒壞您的電晶體。這是可以省略的。當LDR的頭部受到正常強度的光線照射時,LED會打開。

將電路連接到麵包板上,將10千歐電位計調整到所需的靈敏度。把LDR暴露在不同強度的光照下,直到您滿意為止。

請注意負載的位置。在NPN電晶體上,負載通常與集電極串聯,而在N溝道MOSFET上,負載通常與漏極串聯。PNP和N溝道MOSFET的這些極性是相反的,在上面的電路圖中,負載在發射極一側,集電極直接連接到了5V上。

在過去,這種電路用於路燈驅動,而現在也完全沒有過時。也就是說,您可以將其用作繼電器驅動電路,並且可以替換掉LED,使用5V繼電器來啟用更大的負載,例如交流電燈或者滅蟲器。夏天的時候,會飛的咬人蟲子會經常困擾你。可以使用這種滅蟲器來對付它們:這就是完美的用於消滅蚊蟲的“Hello World”電路!

2.2 數字黑暗緩解器

雖然上述電路是很有用的,但是您還是應該學習使用ADC(數模轉換器)來讀取光照強度。在本項目中,我們使用Arduino Uno或Nano。

2.2.1 BOM

您將會需要以下部件:

Arduino Uno 或 Arduino Nano https://store.arduino.cc/arduino-uno-rev3

https://store.arduino.cc/arduino-nano

10 千歐電位計 https://www.newark.com/bourns/3296w-1-103lf/pot-trimmer-10k-25turn-10/dp/39K2049
LDR https://www.newark.com/lprs/n5ac501085/ldr-5mohm-50mw-ng-series/dp/14J5050
麵包板 https://www.newark.com/multicomp/mcbb830/breadboard-solderless-abs/dp/99W1760
跳線 https://www.newark.com/adafruit/758/kit-contents/dp/88W2570

2.2.2 開始構建!

將10千歐電位計和LDR連接到您的Arduino Uno 或 Nano,形成一個分壓器,方法如下:
LDR digital circuit diagram

然後,在此處下載最新的Arduino IDE,並按照適用於您系統的相關說明進行操作,在安裝Arduino Desktop IDE下面的章節

Arduino IDE不在本教程範圍內,您只需要按下CTRL+U複合鍵進行上傳,按下CTRL+SHIFT+M複合鍵查看串行輸出即可。

請將以下內容粘貼到一個新草圖中,並將其另存為LDR_analogRead.ino。然後上傳草圖,並打開您的串列監視器。

 

在串列監視器中,發送一些隨機字元,對於每次“發送”,您都會看到類似以下內容的輸出:

 

我們在這裡很少使用loop()函數,因為serialEvent()函數效率更高。只有在連接後按下一個鍵(任意鍵)才會有串口輸出。這可以防止調試輸出使您的Arduino工作停滯,因為除非您首先向Arduino發送一些資料,否則任何資料都不會通過序列埠輸出。

在這個小程式中,Arduino將讀取A0引腳上的電壓,解析度為10位元,在0到1023範圍內產生1024(2**10)個可能值。每一個值對應於一個0到5V之間的電壓。每一步約為~0.0048V,因此讀數為512時電壓為~2.46V。

現在您已經學會了如何使用LDR,以及一些關於電晶體和Arduino的知識,嘗試將光感測功能添加到現有的電路中,或者從頭開始構建您自己的電路。

去嘗試獲取駕馭光明和黑暗的力量吧!

Lasse Efrayim Jespersen
Lasse Efrayim Jespersen
Lasse出生於以色列,後移居到緯度較冷的地區。出於個人天然的興趣愛好,他一步步走近了直接的Perl、高效的C/C++、以及優雅的MicroPython。他非常喜歡用ESP8266/ESP32/Raspberry Pi 和Arduino來構建機器。

Check us out on Social Media