在具有 SPI 接口的 MCP3008 8 通道 10 位 ADC 上使用 Phantom YoYo 高靈敏度水傳感器。
背景
在即將進(jìn)行的項(xiàng)目中,我使用 MCP3008 來(lái)監(jiān)控多個(gè)傳感器。在這個(gè)項(xiàng)目中,我想詳細(xì)介紹在 MCP3008 8 通道 10 位 ADC 上使用 Phantom YoYo 高靈敏度水傳感器的詳細(xì)信息,該 ADC 具有 Raspberry Pi 2、Windows 10 IoT Core 和 C# 的 SPI 接口。
使用 MCP3008
ADC 是一種模數(shù)轉(zhuǎn)換器。模擬信號(hào)被轉(zhuǎn)換為數(shù)字并讀入您的應(yīng)用程序。MCP3008 是一個(gè) 10 位 ADC,這意味著它使用 10 位來(lái)表示通道上的值。該值將表示為從 0 到 1023 的數(shù)字(總共 1024 個(gè)可能的值)。然后將該數(shù)字轉(zhuǎn)換為有意義的值。例如,假設(shè)我想測(cè)量一個(gè)通道上的電壓,從通道讀取的值為 523。我知道最大電壓為 3.3V。使用公式計(jì)算通道上的電壓
Value / Max Value * Vref
解決我得到的電壓
523 / 1023 * 3.3
其值為1.687V 。我首先將讀數(shù)標(biāo)準(zhǔn)化,然后將標(biāo)準(zhǔn)化讀數(shù)乘以已知的最大值 3.3V,從而計(jì)算出這個(gè)值。
當(dāng)獲得準(zhǔn)確的電壓測(cè)量很重要時(shí),我強(qiáng)烈建議測(cè)量 Raspberry Pi 的實(shí)際電壓,并在計(jì)算中使用該值以從 ADC 獲得更準(zhǔn)確的轉(zhuǎn)換。當(dāng)我測(cè)量我的時(shí),我發(fā)現(xiàn)輸出是 3.301V(在源代碼中找到的值)。然而,與實(shí)際情況相差不遠(yuǎn),其他類(lèi)型的電路板可能會(huì)有所不同。
當(dāng)然,當(dāng)我想計(jì)算電壓時(shí),這是有道理的,但每個(gè)傳感器都有不同的含義。對(duì)于連接到 MCP3008 上的通道的每個(gè)傳感器,我需要了解具體細(xì)節(jié)并適當(dāng)?shù)亟忉屪x數(shù)。
MCP3008 的接線很簡(jiǎn)單。芯片本身在一端標(biāo)有一個(gè)缺口,代表引腳 1 和 16 。
引腳 1 到 8 是八個(gè)輸入引腳,稱(chēng)為通道 0 到 7。通道 0 是引腳 1。引腳 16 是 Vdd 并連接到電壓源(在 Raspberry Pi 上為 3.3V 或 5V)。引腳 9 連接到 Raspberry Pi 上的接地引腳。引腳 15 和 14 用于參考模擬電路。引腳 15 是 Vref,MCP3008 使用它來(lái)確定其中一個(gè)通道上的最大電壓。在我的示例中,我將此引腳連接到 Raspberry Pi 上的 3.3V 電源。當(dāng)向其中一個(gè)通道施加電壓時(shí),MCP 會(huì)調(diào)整讀數(shù),使 1023 表示 3.3V,0 表示 0V。這允許我上面使用的計(jì)算工作。引腳 14 是模擬接地引腳。在我的示例中,我將它連接到 Raspberry Pi 上的接地引腳。如果需要保持模擬電路與數(shù)字電路隔離,則該引腳將連接到模擬電路上的地。其余四個(gè)引腳(10 到 13)是用于與 Raspberry Pi 通信的 SPI 串行接口引腳。我在這個(gè)項(xiàng)目中包含的接線圖顯示了如何將這些引腳連接到 Raspberry Pi。
在這個(gè)項(xiàng)目中,我包含了一個(gè)簡(jiǎn)單的電壓測(cè)量來(lái)演示這個(gè)概念。水傳感器讀數(shù)將展示從通道讀取的值的另一種解釋。
項(xiàng)目概況
傳感器
在這個(gè)項(xiàng)目中,我將兩個(gè)電路合二為一。第一個(gè)是一個(gè)簡(jiǎn)單的電位器,它允許在一個(gè) MCP3008 引腳(通道 0)上改變電壓。這只是為了演示 MCP3008 的工作原理。第二個(gè)電路是連接到 MCP3008 上的第二個(gè)通道(通道 1)的水傳感器。
Phantom YoYo 水傳感器具有三個(gè)引腳。第一個(gè)引腳是接地的(在設(shè)備上標(biāo)記為“-”),它將連接到 Raspberry Pi 上的接地引腳。下一個(gè)引腳是電源(在設(shè)備上標(biāo)記為“+”),它將連接到 Raspberry Pi 上的 3.3V 引腳(設(shè)備也可以連接到 5V)。第三個(gè)也是最后一個(gè)引腳是信號(hào)(在設(shè)備上標(biāo)記為“s”。該引腳的電壓信號(hào)會(huì)根據(jù)設(shè)備上的水量而變化。請(qǐng)注意,該設(shè)備不是水位傳感器。它只是感應(yīng)變化與器件接觸的水量。源引腳將連接到 MCP3008 上的輸入之一。
電路
支持傳感器的電路非常簡(jiǎn)單。該設(shè)備直接連接到板 Raspberry Pi,無(wú)需任何額外組件。
項(xiàng)目軟件
應(yīng)用程序
我為這個(gè)項(xiàng)目創(chuàng)建的應(yīng)用程序是一個(gè)通用 Windows 應(yīng)用程序,并在主視圖中顯示了兩個(gè)儀表。第一個(gè)儀表顯示在電位計(jì)電路上測(cè)量的當(dāng)前電壓。第二個(gè)顯示來(lái)自水傳感器的讀數(shù),該讀數(shù)標(biāo)準(zhǔn)化為 0 到 100 的值。該軟件還允許校準(zhǔn)水傳感器。源代碼的鏈接可以在本文下方找到。
MCP3008 庫(kù)
該軟件項(xiàng)目還包含一個(gè)用于與 MCP3008 交互的單獨(dú)項(xiàng)目。此代碼可用于您的應(yīng)用程序,以便輕松地將 MCP3008 芯片集成到您的項(xiàng)目中。
要使用它,首先要聲明一個(gè)類(lèi)對(duì)象,如下所示:
private Mcp3008 _mcp3008 = null;
在OnNavigatedTo事件中添加以下代碼:
_mcp3008 = new Mcp3008(0);
要從通道 0 讀取電壓,請(qǐng)使用以下代碼行:
float voltage = _mcp3008.Read(Mcp3008.Channels.Single0).AsScaledValue(3.3f);
注意使用Channel.Single0 which 表示從一個(gè)通道讀取值??梢灾付ㄔO(shè)備讀取兩個(gè)引腳之間的差異。這可以指定為Mcp3008.Channels.Differential0 表示測(cè)量應(yīng)該作為通道 0 和通道 1 之間的差異進(jìn)行,其中通道 0 為正,通道 1 為負(fù)。源代碼是文檔,將提供解釋每個(gè)值的工具提示。
當(dāng)您使用完對(duì)象后,通常在您的OnNavigatedFrom事件中處理該對(duì)象。
_mcp3008.Dispose();
_mcp3008 = null;
入門(mén)
組裝電路
學(xué)習(xí)這部分內(nèi)容以組裝電路。
注意:本項(xiàng)目使用可選的萬(wàn)用表來(lái)測(cè)量電位器兩端的電壓。這樣做是為了將該值與 MCP3008 讀取的值進(jìn)行比較。請(qǐng)注意,這是可選的。如果您沒(méi)有萬(wàn)用表,那么您將無(wú)法比較該電壓。這樣做是為了表明 MCP3008 讀取的值與萬(wàn)用表讀取的值相同。如下圖所示將萬(wàn)用表設(shè)置為測(cè)量直流電壓。
將 T 形放在的左端(數(shù)字從 1 開(kāi)始)。最左邊的兩個(gè)引腳將位于板上的E3和F3中。最右邊的兩個(gè)引腳將位于E22和F22
將 50K Ω 電位器置于 J56、J58 和 J60 位置,調(diào)節(jié)旋鈕朝向面包板的 5v 側(cè)
在I58和I53之間放置 10K Ω 電阻
將 MCP3008 放入E31到E38和F31到F38中(芯片有凹進(jìn)圓圈的角將放置在E31處)
可選:將黑色公對(duì)公跳線的一端放置在位置G60 (如果您使用萬(wàn)用表,則將黑色引線連接到此導(dǎo)線)
可選:將紅色公對(duì)公跳線的一端放在位置G58 (如果您使用萬(wàn)用表,則將紅色引線連接到此導(dǎo)線)
在F60和接地之間連接藍(lán)色公對(duì)公跳線
在F58和C31 (MCP3008 的通道 1)之間連接橙色公對(duì)公跳線
在F53和3.3V+之間連接橙色公對(duì)公跳線
在J31和3.3V之間連接紅色公對(duì)公跳線
在J32和3.3V之間連接紅色公對(duì)公跳線
在J33和接地之間連接黑色公對(duì)公跨接線
在J34和A14之間連接綠色公對(duì)公跳線
在J35和A13之間連接黃色公對(duì)公跳線
在J36和A12之間連接白色公對(duì)公跳線
在J37和J14之間連接綠色公對(duì)公跳線
在J38和接地之間連接一根黑色公對(duì)公跳線
將藍(lán)色母對(duì)公跳線的母端連接到水傳感器上的S引腳。將公端連接到C32 (MCP3008 上的通道 1)
將紅色母對(duì)公跳線的母端連接到水傳感器上的引腳。公頭接 3.3V
將黑色母對(duì)公跳線的母端連接到 水傳感器上的-引腳。將公端接 地
可選:將步驟 5 中的黑色引線連接到萬(wàn)用表的公共端子(使用鉤夾式連接器以獲得最佳效果)
可選:將步驟 6 中的紅色引線連接到萬(wàn)用表上的電壓端子(使用鉤夾式連接器以獲得最佳效果)
在 Raspberry Pi 和鞋匠之間連接帶狀電纜
啟動(dòng)應(yīng)用程序
選擇調(diào)試、ARM配置和遠(yuǎn)程機(jī)器。現(xiàn)在右鍵單擊項(xiàng)目,選擇屬性,然后 單擊調(diào)試標(biāo)記。接下來(lái)將 Raspberry Pi 2 IP 地址放入 Remote machine 字段,并取消選中Use authentication 。
按F5 。應(yīng)用程序?qū)⒉渴鸬皆O(shè)備,第一次可能需要幾分鐘。
注意:該應(yīng)用程序使用線性 360° 儀表來(lái)顯示水量。我必須注意,該傳感器在水量和傳感器讀數(shù)之間沒(méi)有任何線性相關(guān)性或我所知道的任何其他相關(guān)性。當(dāng)有幾滴水時(shí),它確實(shí)會(huì)產(chǎn)生較小的值,而當(dāng)存在更多水時(shí),它會(huì)產(chǎn)生較高的值。我更多地使用線性量規(guī)來(lái)幫助理解 ADC 的概念。可以像連接光電隔離交流電壓傳感器一樣連接水傳感器產(chǎn)生可由 GPIO 引腳接收的高或低信號(hào)。該設(shè)備可以接線以提供濕信號(hào)或干信號(hào)。話雖如此,我將這個(gè)水傳感器連接到 ADC,因?yàn)槲蚁?a target="_blank">檢測(cè)少量水和大量水之間的差異,并且該項(xiàng)目中概述的方法實(shí)現(xiàn)了這一目標(biāo)。
評(píng)論