本項(xiàng)目是一個(gè)使用120VAC指示燈和光敏電阻創(chuàng)建的基于光隔離的簡(jiǎn)單廉價(jià)交流電壓傳感器。
最近我承接了一個(gè)項(xiàng)目,我需要一種方法來檢測(cè)我家的電源何時(shí)關(guān)閉,并且我需要檢測(cè)泵何時(shí)在運(yùn)行。雖然說市面上有可以購買的傳感器,但我認(rèn)為構(gòu)建一個(gè)會(huì)很有趣。
為了避免其他項(xiàng)目變得過于復(fù)雜,我決定在一個(gè)單獨(dú)的項(xiàng)目中分享構(gòu)建這個(gè)簡(jiǎn)單設(shè)備的細(xì)節(jié)。
設(shè)備概述
我正在構(gòu)建的設(shè)備相當(dāng)簡(jiǎn)單,只需要一些便宜的組件。最昂貴的組件是105-125VAC指示燈,通常用作您家中電器的電源指示燈。
該設(shè)備的概念是使用光敏電阻來檢測(cè)來自指示燈的光。使用簡(jiǎn)單的分壓器電路和來自樹莓派的3.3v電源,當(dāng)輸入端子上的電壓為0時(shí),設(shè)備將輸出高信號(hào),當(dāng)端子上的電壓為120VAC時(shí),設(shè)備將輸出低信號(hào)。
除了低成本之外,這種設(shè)計(jì)的一大優(yōu)勢(shì)是交流電路與您的物聯(lián)網(wǎng)設(shè)備完全隔離。這可以保護(hù)您的RaspberryPi和其他電路組件免受電涌的影響。
設(shè)備操作
電路設(shè)計(jì)基于分壓器電路,該電路由兩個(gè)串聯(lián)在電源和地之間的電阻器(或任何更高和更低的電壓電位)組成。電壓是從兩個(gè)電阻器之間的點(diǎn)和兩個(gè)電壓電位點(diǎn)中的較低點(diǎn)(在這種情況下為接地)測(cè)量的。通常,在分壓器電路中,兩個(gè)電阻器都是固定的。在該電路中,當(dāng)光的強(qiáng)度發(fā)生變化時(shí),其中一個(gè)電阻會(huì)改變其值,從而允許設(shè)備根據(jù)光源改變輸出電壓。
該設(shè)備旨在用作兩態(tài)設(shè)備,這意味著我只想檢測(cè)交流輸入電路是打開還是關(guān)閉。電路的輸出需要通過GPIO引腳檢測(cè)為高電平或低電平。為此必須仔細(xì)選擇固定電阻的值。
電路的關(guān)鍵是確定上圖中R1的正確電阻。光敏電阻的電阻隨光量而變化。完全黑暗時(shí),電阻為90K至100KΩ。在完全明亮的光源下,它會(huì)降至約200Ω。
計(jì)算R1的正確電阻值取決于可用的光量。光源可能不夠亮,無法將電阻降至最低測(cè)量值。考慮到這一點(diǎn),我使用琥珀色指示燈測(cè)量了電阻值。我通過將光源放在黑色熱縮管內(nèi)進(jìn)行此測(cè)量,光敏電阻壓在光線上,然后在燈亮?xí)r用伏特/歐姆表測(cè)量電阻。黑管是必要的,以模擬設(shè)備完全構(gòu)建時(shí)的條件
實(shí)驗(yàn)產(chǎn)生了941Ω的測(cè)量值。使用分壓器的標(biāo)準(zhǔn)公式(如下圖所示)并針對(duì)0.75v的低電壓,我確定R1needrf的值為3.2KΩ。
在電路設(shè)計(jì)中,為了獲得3.2KΩ,我決定使用標(biāo)準(zhǔn)的1KΩ和標(biāo)準(zhǔn)的2.2KΩ串聯(lián)電阻(1KΩ和2.2KΩ都是您工具箱中最有可能擁有的標(biāo)準(zhǔn)尺寸)。
負(fù)載效應(yīng):當(dāng)RaspberryPi等設(shè)備連接在Vout和接地之間時(shí),該設(shè)備稱為負(fù)載。此負(fù)載具有有效的輸入阻抗,會(huì)改變電路的行為,這可能需要更改設(shè)計(jì)以抵消這種影響。為了幫助理解這種效應(yīng),可以將負(fù)載視為在電路圖上的Vout和接地之間添加的新電阻。在這個(gè)設(shè)備中,當(dāng)與樹莓派一起使用時(shí),負(fù)載效應(yīng)可以忽略不計(jì),因?yàn)檩敵?a href="http://www.xsypw.cn/tags/電流/" target="_blank">電流是穩(wěn)定的,它只是分壓器輸入電流的一小部分。出于這個(gè)原因,我能夠?qū)⑵湓O(shè)計(jì)為被動(dòng)電路以保持低成本。如果執(zhí)行此功能的設(shè)備包含調(diào)節(jié)器電路以允許輸出負(fù)載變化,則它們的成本可能會(huì)高得多。
設(shè)備構(gòu)造
構(gòu)建這個(gè)設(shè)備需要一個(gè)烙鐵和一個(gè)將組件焊接在一起的好地方。沒有使用PCB板,我只是將這些部件連接在一起,然后將它們收縮包裝以進(jìn)行保護(hù)。確保您有一個(gè)良好的表面來放置組件。
修剪兩個(gè)電阻的兩端,光敏電阻引出約1.5厘米
電阻器將串聯(lián)焊接到光敏電阻器引線之一(見下圖),與引線重疊至少1厘米。布置光敏電阻和第一個(gè)電阻。
首先將第一個(gè)電阻器焊接到光敏電阻器引線上。將烙鐵壓在引線上,然后將兩條引線焊接在一起,確保焊料沿著重疊部分的長(zhǎng)度延伸
以與第一個(gè)相同的方式布置第二個(gè)電阻
接下來以相同的方式將第二個(gè)電阻焊接到第一個(gè)電阻上(兩個(gè)電阻的順序無關(guān)緊要)
從紅色引線的末端剝?nèi)ゼs1厘米,并將其焊接到第二個(gè)電阻器的末端。該引線將連接到RaspberryPi上的3.3v電源
從黃色引線的末端剝?nèi)ゼs1厘米,并將其焊接到第一個(gè)電阻連接到的光敏電阻上的引線。此引線將連接到RaspberryPi上的GPIO端口
從黑色引線末端剝?nèi)ゼs1厘米,并將其焊接到第二個(gè)電阻器的末端。該引線將連接到RaspberryPi上的地
將3/32“熱縮管滑過黑線一直到光敏電阻,將其推到電阻上。加熱管使其鎖定到位(我使用黑色作為這條帶)
將3/16”熱縮管滑過紅線和黃線一直到光敏電阻,將其推到電阻上。加熱管使其鎖定到位(我用黑色作為這條帶)
將1/4“熱縮管滑過所有三根電線,并將其他管子的末端重疊約0.5厘米。加熱管子,使其鎖定到位(我用藍(lán)色作為這條帶)
將指示燈滑入硬塑料管中,使電線端與管端齊平
將光敏電阻組件滑入硬塑料管的另一端,直到它靠在指示燈上
將3/8”熱縮管滑到硬塑料管上,直到它位于管子的中心。大約3/4“應(yīng)懸掛在兩端。加熱管子,直到它鎖定到位(在加熱管子時(shí),可能需要用一只手將光敏電阻組件固定到位)。注意:前面步驟中的管子顏色無關(guān)緊要,但我建議在此步驟中使用黑色,以確保沒有光線從設(shè)備中逸出
修剪紅線、黑線和黃線,使它們都均勻
為什么要混合使用公制和英制單位?在整篇文章中,我有意混合使用公制和英制單位。我使用大尺寸的英制單位。此外,當(dāng)我購買材料并以英制單位表示時(shí),我會(huì)指定這些單位的尺寸。在處理較小的尺寸時(shí),我通常用公制表示。我希望這不會(huì)給某些人造成太多的困惑。
設(shè)備測(cè)試
連接設(shè)備
現(xiàn)在設(shè)備已經(jīng)完成,是時(shí)候運(yùn)行測(cè)試了。我首先找到了一條我之前從一個(gè)故障的便攜式空調(diào)裝置上剪下來的電源線(我保存了電源線,因?yàn)樗幸粋€(gè)內(nèi)置的斷路器)。任何舊的兩線延長(zhǎng)線都可以使用。延長(zhǎng)線的白色和黑色電線應(yīng)使用接線螺母連接到指示燈的電線。我的電源線有第三根綠色地線,我剛剛用另一個(gè)線螺母蓋住了它。確保連接牢固,移動(dòng)設(shè)備時(shí)不要松動(dòng)。還要確保裸露的電線沒有裸線。
免責(zé)聲明:如果您不清楚操作步驟,使用高壓交流電流可能會(huì)非常危險(xiǎn)。如果您對(duì)如何執(zhí)行此操作感到不舒服或不確定,請(qǐng)咨詢專家。您正在嘗試這些測(cè)試,風(fēng)險(xiǎn)自負(fù)!
連接延長(zhǎng)線后,我將延長(zhǎng)線插入帶有開關(guān)的電源板,以便輕松測(cè)試設(shè)備的操作。
接下來,我將設(shè)備的紅線連接到RaspberryPi的+3.3V引腳,將黑線連接到接地引腳,并將黃線連接到Pi上的一個(gè)GPIO端口(我在源代碼中使用GPIO5)。
運(yùn)行軟件
使用的源代碼可在GitHub中找到(請(qǐng)參閱下面的鏈接)。
該應(yīng)用程序是一個(gè)簡(jiǎn)單的視圖,將GPIO引腳的狀態(tài)顯示為“高”或“低”。連接后,關(guān)閉電源板將導(dǎo)致顯示屏顯示“高”。打開電源,狀態(tài)將變?yōu)椤癓ow”。
主窗體的XAMl如下所示。
主視圖背后的代碼如下所示。
using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using Windows.Devices.Gpio;
using Windows.UI.Core;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace VacSensor
{
public sealed partial class MainPage : Page, INotifyPropertyChanged
{
private GpioPin _pin = null;
private CoreDispatcher _dispatcher = null;
public MainPage()
{
this.InitializeComponent();
}
public event PropertyChangedEventHandler PropertyChanged = null;
private void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private string _gpioState = "Unknown";
public string GpioState
{
get
{
return _gpioState;
}
set
{
this._gpioState = value;
this.OnPropertyChanged();
}
}
private async Task UpdateUI()
{
if (_dispatcher != null)
{
await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
GpioPinValue value = _pin.Read();
this.GpioState = value == GpioPinValue.High ? "High" : "Low";
});
}
}
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
_dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
GpioController gpio = GpioController.GetDefault();
if (gpio != null)
{
_pin = gpio.OpenPin(5);
_pin.SetDriveMode(GpioPinDriveMode.Input);
_pin.ValueChanged += Pin_ValueChanged;
}
await UpdateUI();
base.OnNavigatedTo(e);
}
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
if (_pin != null)
{
_pin.Dispose();
_pin = null;
}
_dispatcher = null;
base.OnNavigatingFrom(e);
}
private async void Pin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
{
await UpdateUI();
}
}
}
要測(cè)試該單元,請(qǐng)將代碼部署到 Raspberry Pi 并使用 F5 啟動(dòng)它。應(yīng)用程序運(yùn)行后,在電源板上打開和關(guān)閉電源,每次顯示都會(huì)改變。
-
指示燈
+關(guān)注
關(guān)注
3文章
416瀏覽量
28326 -
光敏電阻
+關(guān)注
關(guān)注
4文章
306瀏覽量
49063 -
電壓傳感器
+關(guān)注
關(guān)注
1文章
113瀏覽量
18321
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論