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