日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

物联网应用入门--利用虚拟硬件模拟土壤湿度传感器应用编写

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 物联网应用入门--利用虚拟硬件模拟土壤湿度传感器应用编写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文為微軟開源課程IoT-For-Beginners翻譯,略有改動,首發于個人博客

探測土壤濕度

Sketchnote by Nitya Narasimhan. Click the image for a larger version.

閱讀前小測驗

Pre-lecture quiz

介紹

在上一課中,我們研究了測量一個環境屬性并利用它來預測植物的生長。溫度是可以控制的,但這樣做很昂貴,需要控制環境。對植物來說,最容易控制的環境屬性是水—從大規模的灌溉系統到拿著澆水壺澆花園的年輕孩子,每天都在控制水。

在這節課中,我們將介紹:

  • 土壤濕度

  • 傳感器如何與IOT設備通信

  • 測量土壤濕度

  • 傳感器校準

土壤濕度

植物需要水來生長。它們在整個植物中吸收水分,其中大部分由根系吸收。水被植物用來做三件事:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • 光合作用—植物與水、二氧化碳和光產生化學反應,產生碳水化合物和氧氣。

  • 透氣—植物利用水將空氣中的二氧化碳通過葉片中的孔隙擴散到植物體內。這一過程也將養分帶到植物周圍,并冷卻植物,類似于人類出汗的方式。

  • 結構–植物也需要水來維持其結構–它們90%是水(而人類只有60%),這些水可以保持細胞的剛性。如果植物沒有足夠的水,它就會枯萎并最終死亡。

? 做一些研究:有多少水是通過蒸騰作用流失的?

根系從植物生長的土壤中的水分提供水分。土壤中的水太少,植物無法吸收足夠的水來生長,水太多,根部無法吸收足夠的功能所需的氧氣。這導致根部死亡,植物無法獲得足夠的營養物質來生存。

對于農民來說,要想獲得最佳的植物生長,土壤需要不太濕,也不能太干。物聯網設備可以通過測量土壤濕度來幫助解決這個問題,讓農民只在需要時澆水。

測量土壤濕度的方式

有一系列不同類型的傳感器,你可以用來測量土壤濕度:

  • 電阻式 - 電阻式傳感器有兩個進入土壤的探頭。電流被發送到一個探頭,并被另一個探頭接收。然后,傳感器測量土壤的電阻–測量電流在第二個探頭處下降的程度。水是電的良好導體,所以土壤的含水量越高,電阻就越低。

    💁 你可以用兩塊金屬,如釘子,相隔幾厘米,建立一個電阻式土壤濕度傳感器,用萬用表測量它們之間的電阻。

  • 電容式 - 電容式濕度傳感器測量的是可儲存在正負電板上的電荷量,或電容。土壤的電容隨著濕度的變化而變化,這可以轉化為物聯網設備所能測量的電壓。土壤越濕,出來的電壓就越低。

這些都是模擬傳感器,返回一個電壓來指示土壤濕度。那么,這個電壓是如何進入你的代碼的呢?在進一步了解這些傳感器之前,讓我們看看傳感器和執行器如何與物聯網設備進行通信。

傳感器如何與物聯網設備通信

到目前為止,在這些課程中,你已經了解了一些傳感器和執行器,如果你一直在做物理硬件實驗,這些傳感器和執行器已經與你的物聯網開發工具包進行了通信。但這種通信是如何進行的?來自土壤濕度傳感器的電阻測量值如何變成一個你可以從代碼中使用的數字?

要與大多數傳感器和執行器進行通信,你需要一些硬件和通信協議–這是一種定義明確的數據發送和接收方式。以電容式土壤濕度傳感器為例。

硬件提供了發送數據的物理連接,不同的通信協議確保了數據以正確的方式發送或接收,從而使其能夠被解釋。

  • 這個傳感器是如何連接到物聯網設備的?

  • 如果它測量的電壓是一個模擬信號,它將需要一個ADC來創建一個數字表示的值,這個值作為一個交變的電壓來發送0和1–但每個比特的發送時間是多長?

  • 如果傳感器返回一個數字值,那將是一個0和1的數據流,同樣,每個比特的發送時間是多長?

  • 如果電壓在0.1s內處于高位,那是一個1比特,還是兩個連續的1比特,還是10個?

  • 數字在什么時候開始?00001101是25,還是前5位是前一個值的結束?

通用輸入輸出(GPIO)引腳

GPIO是一組引腳,你可以用它來連接硬件到你的物聯網設備,通常在物聯網開發工具包上有,如Raspberry Pi或Wio Terminal。你可以通過GPIO引腳使用本節中涉及的各種通信協議。一些GPIO引腳提供電壓,通常是3.3V或5V,一些引腳為地,其他引腳可以通過編程設置為發送電壓(輸出)或接收電壓(輸入)。

💁 一個電路需要通過你所使用的任何電路將電壓連接到地。你可以把電壓看作是電池的正極(+V),把地看作是負極(-V)。

當你只關心開或關的值時,你可以直接使用GPIO引腳與一些數字傳感器和執行器–開指的是高,關是指低。一些例子如下:

  • 按鈕。你可以在一個5V引腳和一個設置為輸入的引腳之間連接一個按鈕。當你按下按鈕時,它在5V引腳之間完成了一個電路,通過按鈕到輸入引腳。從代碼中你可以讀取輸入針腳的電壓,如果它是高電平(5V),那么按鈕就被按下了,如果它是低電平(0V),那么按鈕就沒有被按下。記住,實際的電壓本身并沒有被讀取,相反,你得到的是一個1或0的數字信號,這取決于電壓是否高于閾值。
  • LED。你可以在一個輸出引腳和一個接地引腳之間連接一個LED(使用一個電阻,否則你會燒LED)。在代碼中,你可以將輸出引腳設置為高電平,它將發送3.3V,形成一個從3.3V引腳通過LED到接地引腳的電路。這將點亮LED。

    對于更高級的傳感器,你可以使用GPIO引腳直接與數字傳感器和執行器發送和接收數字數據,或通過帶有ADC和DAC的控制器板與模擬傳感器和執行器對話。

💁 如果你使用Raspberry Pi做這些實驗,Grove Base Hat有硬件可以將模擬傳感器信號轉換成數字信號,通過GPIO發送。

? 如果你有一個帶有GPIO引腳的物聯網設備,找到這些引腳,并找到一個圖表,說明哪些引腳是電壓、接地或可編程的。

模擬引腳

一些設備,如Arduino設備,提供模擬引腳。這些與GPIO引腳相同,但與之相反的是,它們不是只支持數字信號,而是有一個ADC將電壓范圍轉換為數值。通常ADC的分辨率為10位,這意味著它將電壓轉換為0-1023的數值。

例如,在一個3.3V的板子上,如果傳感器返回的是3.3V,返回的值將是1,023。如果返回的電壓是1.65V,返回的值將是511。

💁 回到nightlight—第3課,光照傳感器返回一個0-1,023的數值。如果你使用的是Wio終端,傳感器被連接到一個模擬引腳。如果你使用的是Raspberry Pi,那么傳感器被連接到基座上的一個模擬引腳上,該引腳有一個集成的ADC,可以通過GPIO引腳進行通信。虛擬設備被設置為發送一個0-1,023的值,以模擬一個模擬引腳。

土壤濕度傳感器依賴于電壓,因此將使用模擬引腳,并給出0-1,023的數值。

Inter Integrated Circuit (I2C)

I2C,發音為I-squared-C,是一個多控制器、多外設協議,任何連接的設備都可以作為控制器或外設通過I2C總線(傳輸數據的通信系統名稱)進行通信。數據以尋址數據包的形式發送,每個數據包都包含它所要連接的設備的地址。

💁 這種模式曾經被稱為主/從模式,但由于與奴隸制有關,這個術語正在被放棄。開源硬件協會已經采用了控制器/外設,但你可能仍然會看到對舊術語的引用。

設備有一個地址,當它們連接到I2C總線時使用,通常在設備上硬編碼。例如,Seeed公司的每種格羅夫傳感器都有相同的地址,所以所有的光傳感器都有相同的地址,所有的按鈕都有相同的地址,與光傳感器地址不同。有些設備有辦法改變地址,通過改變跳線設置或將引腳焊接在一起。

I2C有一條由2條主線組成的總線,同時還有2條電源線:

WireNameDescription
SDASerial Data這條線用于在設備之間發送數據。
SCLSerial Clock這條線以控制器設定的速率發送一個時鐘信號。
VCCVoltage common collector器件的電源。這條線與SDA和SCL線相連,通過一個上拉電阻為它們提供電源,當沒有設備是控制器時,該信號將被關閉。
GNDGround這為電路提供了一個公共地線。

為了發送數據,一個設備將發出一個啟動條件,表明它已準備好發送數據。然后,它將成為控制器。然后,控制器發送它想與之通信的設備的地址,以及它是否想讀取或寫入數據。數據傳輸完畢后,控制器發送一個停止條件,表示它已經完成。此后,另一個設備可以成為控制器,并發送或接收數據。

I2C有速度限制,有3種不同的模式以固定速度運行。最快的是高速模式,最高速度為3.4Mbps(兆位/秒),盡管很少有設備支持這個速度。例如,Raspberry Pi被限制在400Kbps(每秒千比特)的快速模式下。標準模式以100Kbps的速度運行。

💁 如果你使用帶有Grove Base hat的Raspberry Pi作為你的物聯網硬件,你會看到板子上有許多I2C插座,你可以用來與I2C傳感器通信。模擬的Grove傳感器也使用I2C與ADC,將模擬值作為數字數據發送,所以你使用的光傳感器模擬了一個模擬引腳,其值通過I2C發送,因為Raspberry Pi只支持數字引腳。

通用異步接收器-發射器 (UART)

UART涉及物理電路,允許兩個設備進行通信。每個設備有2個通信引腳–發送(Tx)和接收(Rx),第一個設備的Tx引腳與第二個設備的Rx引腳相連,第二個設備的Tx引腳與第一個設備的Rx引腳相連。這使得數據可以在兩個方向上發送。

  • 設備1從它的Tx引腳傳輸數據,設備2從它的Rx引腳接收。

  • 設備1在其Rx引腳上接收數據,該數據由設備2從其Tx引腳傳輸。

🎓 數據是一個比特一個比特地發送,這就是所謂的串行通信。大多數操作系統和微控制器都有串行端口,也就是可以發送和接收串行數據的連接,可以供你的代碼使用。

UART設備有一個波特率(也稱為符號率),即以每秒比特為單位發送和接收數據的速度。一個常見的波特率是9600,意味著每秒發送9600比特(0和1)的數據。

UART使用起始位和停止位–也就是說,它發送一個起始位以表明它要發送一個字節(8位)的數據,然后在發送完8位后發送一個停止位。

UART的速度取決于硬件,但即使是最快的實現也不超過6.5 Mbps(兆位/秒,或每秒發送數百萬位,0或1)。

你可以通過GPIO引腳使用UART–你可以將一個引腳設置為Tx,另一個設置為Rx,然后將這些引腳連接到另一個設備。

💁 如果你使用帶有Grove Base hat的Raspberry Pi作為你的物聯網硬件,你將能夠看到板子上有一個UART插座,你可以用它與使用UART協議的傳感器進行通信。

串行外設接口 (SPI)

SPI是為短距離通信而設計的,例如在微控制器上與閃存等存儲設備對話。它基于一個控制器/外設模型,由一個控制器(通常是物聯網設備的處理器)與多個外設互動??刂破魍ㄟ^選擇一個外設并發送或請求數據來控制一切。

💁 像I2C一樣,控制器和外設這兩個術語是最近才改變的,所以你可能會看到仍在使用舊的術語。

SPI控制器使用3根線,同時每個外設使用1根額外的線。外圍設備使用4根線。這些線是:

WireNameDescription
COPIController Output, Peripheral Input這條線用于從控制器向外圍設備發送數據。
CIPOController Input, peripheral Output這條線用于將數據從外圍設備發送到控制器。
SCLKSerial Clock這條線以控制器設定的速率發送一個時鐘信號。
CSChip Select控制器有多條線,每個外設一條,每條線都與相應外設上的CS線相連。

CS線用于一次激活一個外設,通過COPI和CIPO線進行通信。當控制器需要改變外設時,它停用連接到當前活動外設的CS線,然后激活連接到下一個要通信的外設的線。

SPI是全雙工的,這意味著控制器可以使用COPI和CIPO線從同一個外設同時發送和接收數據。SPI使用SCLK線上的時鐘信號來保持設備的同步,因此與直接通過UART發送不同,它不需要啟動和停止位。

SPI沒有明確的速度限制,其實施方案通常能夠每秒傳輸多兆字節的數據。

物聯網開發工具包通常支持通過一些GPIO引腳進行SPI。例如,在Raspberry Pi上,你可以使用GPIO引腳19、21、23、24和26進行SPI。

無線(Wireless)

一些傳感器可以通過標準的無線協議進行通信,如藍牙(主要是藍牙低功耗,或BLE)、LoRaWAN(一種長距離低功耗網絡協議),或WiFi。這些都允許沒有物理連接到物聯網設備的遠程傳感器。

一個例子是商業土壤濕度傳感器。這些傳感器將測量田地里的土壤濕度,然后通過LoRaWan將數據發送到一個中心設備,該設備將處理數據或通過互聯網發送數據。這使得傳感器可以遠離管理數據的物聯網設備,減少功耗和對大型WiFi網絡或長電纜的需求。

BLE在先進的傳感器中很受歡迎,如健身追蹤器在手腕上工作。這些結合了多個傳感器,并通過BLE將傳感器數據發送到你手機形式的物聯網設備上。

🐝 Zigbee這個名字是指蜜蜂返回蜂巢后的搖擺舞。

?你的身上、家里或學校里有任何藍牙傳感器嗎?這些可能包括溫度傳感器、占用傳感器、設備追蹤器和健身設備。

商業設備連接的一種流行方式是Zigbee。Zigbee使用WiFi在設備之間形成網狀網絡,每個設備盡可能多地連接到附近的設備,形成像蜘蛛網一樣的大量連接。當一個設備想向互聯網發送信息時,它可以將信息發送給最近的設備,然后由這些設備轉發給附近的其他設備,以此類推,直到信息到達協調器,可以發送到互聯網上。

測量土壤濕度

你可以使用土壤濕度傳感器、物聯網設備和家庭植物或附近的一片土壤來測量土壤中的濕度水平。

任務—測量土壤濕度

通過相關指南,使用你的物聯網設備測量土壤濕度。

  • Arduino - Wio Terminal

  • Single-board computer - Raspberry Pi

  • Single-board computer - Virtual device

傳感器校準

傳感器主要依靠測量電阻或電容等電氣特性。

🎓 電阻,以歐姆(Ω)為單位,是指電流通過某物時有多少阻力。當電壓施加在一種材料上時,通過它的電流大小取決于該材料的電阻。你可以在維基百科的電阻頁面上內容。

🎓 電容,以法拉(F)為單位,是指一個元件或電路收集和儲存電能的能力。你可以在維基百科的電容頁面上關于電容的信息。

這些測量值并不總是有用的–想象一下,一個溫度傳感器給你的測量值是22.5KΩ! 相反,測量的數值需要通過校準轉換成有用的單位–也就是將測量的數值與被測量的數量相匹配,以便將新的測量值轉換為正確的單位。

一些傳感器是預先校準的。例如,你在上一課中使用的溫度傳感器已經被校準,因此它可以返回以℃為單位的溫度測量。在工廠里,創建的第一個傳感器將被暴露在已知的溫度范圍內,并測量其電阻。然后,這將被用來建立一個計算,可以將以Ω(電阻單位)為單位的測量值轉換為℃。

💁 根據溫度計算電阻的公式被稱為Steinhart-Hart方程。

土壤濕度傳感器校準

土壤水分是用重量或體積含水量測量的。

  • 重量法是指測量單位重量的土壤中的水的重量,即每公斤干土中的水的數量。

  • 體積法是指在單位體積的土壤中所測量的水的體積,即每立方米干土的水的數量。

對于美國人來說,由于單位的一致性,這些可以用磅而不是公斤,或用立方英尺而不是立方米來衡量。

土壤水分傳感器測量電阻或電容–這不僅因土壤水分而異,也因土壤類型而異,因為土壤中的成分可以改變其電氣特性。理想情況下,應該對傳感器進行校準–即從傳感器上獲取讀數,并將其與使用更科學的方法發現的測量結果進行比較。例如,實驗室可以通過每年在特定田地中采集幾次樣本來計算土壤濕度,這些數字用于校準傳感器,將傳感器的讀數與土壤濕度的重量比對。

上圖顯示了如何校準一個傳感器。采集土壤樣品的電壓,然后在實驗室中通過比較濕重和干重(通過測量濕重,然后在烘箱中干燥并測量干重)進行測量。一旦采集了一些讀數,就可以將其繪制在圖表上,并在這些點上擬合出一條線。然后,這條直線可以用來將物聯網設備采集的土壤水分傳感器讀數轉換成實際的土壤水分測量值。

💁 對于電阻式土壤濕度傳感器,電壓隨著土壤濕度的增加而增加。對于電容式土壤濕度傳感器,電壓隨著土壤濕度的增加而降低,所以這些圖表會向下傾斜,而不是向上傾斜。

上圖顯示的是土壤濕度傳感器的電壓讀數,沿著這個讀數到圖上的線,可以計算出實際的土壤濕度。

這種方法意味著農民只需要對一塊田地進行一些實驗室測量,然后他們就可以使用物聯網設備來測量土壤濕度–大大加快了測量的時間。


🚀 挑戰

電阻式和電容式土壤濕度傳感器有一些區別。這些差異是什么,哪種類型(如果有的話)最適合農民使用?這個答案在發展中國家和發達國家之間是否有變化?

閱讀后小測驗

Post-lecture quiz

復習與自學

閱讀有關傳感器和執行器所使用的硬件和協議。

  • GPIO Wikipedia page

  • UART Wikipedia page

  • SPI Wikipedia page

  • I2C Wikipedia page

  • Zigbee Wikipedia page

任務

校準你的傳感器


測量土壤濕度—使用虛擬IOT硬件

Virtual Hardware

虛擬物聯網設備將使用一個模擬的格羅夫電容式土壤濕度傳感器。這使本實驗室與使用Raspberry Pi與物理Grove電容式土壤濕度傳感器的情況相同。

在物理物聯網設備中,土壤濕度傳感器將是一個電容式傳感器,通過檢測土壤的電容來測量土壤濕度,這一特性隨著土壤濕度的變化而變化。隨著土壤濕度的增加,電壓會下降。

這是一個模擬傳感器,所以使用一個模擬的10位ADC來報告一個1-1023的數值。

將土壤濕度傳感器添加到CounterFit中

要使用虛擬土壤濕度傳感器,您需要將其添加到CounterFit應用程序中

任務—向CounterFit應用中添加土壤濕度傳感器

向CounterFit應用中添加土壤濕度傳感器

  • 在你的電腦上創建一個新的Python應用程序,文件夾名為soil-moisture-sensor,有一個名為app.py的文件和一個Python虛擬環境,并添加CounterFit pip軟件包。

    ?? 你可以參考the instructions for creating and setting up a CounterFit Python project in lesson 1 if needed.

  • 確保CounterFit網絡應用程序正在運行

  • 創建一個土壤濕度傳感器:

  • 在傳感器窗格中的創建傳感器框中,下拉傳感器類型框,選擇土壤濕度。

  • 將單位設置為NoUnits

  • 確保引腳被設置為0

  • 選擇 "添加 "按鈕,在針腳0上創建土壤水分傳感器。

  • 土壤濕度傳感器將被創建并出現在傳感器列表中。

    對土壤濕度傳感器應用程序進行編程

    現在可以使用CounterFit傳感器對土壤水分傳感器應用程序進行編程。

    任務 - 編寫土壤濕度傳感器應用

    編寫土壤濕度傳感器應用。

  • 確保soil-moisture-sensor 文件在 VS Code已打開

  • 打開app.py文件

  • 在app.py的頂部添加以下代碼,將應用程序連接到CounterFit。

    from counterfit_connection import CounterFitConnection··· CounterFitConnection.init('127.0.0.1', 5000)
  • 在這下面添加以下代碼,以創建ADC類的一個實例:

    adc = ADC()
  • 添加一個無限循環,從這個ADC的0號引腳讀取數據,并將結果寫到控制臺。然后這個循環可以在兩次讀取之間休眠10秒。

    while True:soil_moisture = adc.read(0)print("Soil moisture:", soil_moisture)time.sleep(10)
  • 在CounterFit應用程序中,改變將由該應用程序讀取的土壤水分傳感器的值。你可以通過以下兩種方式之一來做這件事。

    • 在土壤濕度傳感器的值框中輸入一個數字,然后選擇設置按鈕。你輸入的數字將是傳感器返回的值。

    • 勾選隨機復選框,并輸入一個最小和最大值,然后選擇設置按鈕。每次傳感器讀取數值時,它將讀取Min和Max之間的一個隨機數字。

  • 運行Python應用程序。你會看到土壤濕度的測量值被寫入控制臺。改變數值或隨機設置以看到數值的變化。

    (.venv) ? soil-moisture-sensor $ python app.py Soil moisture: 615 Soil moisture: 612 Soil moisture: 498 Soil moisture: 493 Soil moisture: 490 Soil Moisture: 388
  • 💁 app.py代碼如下:

    from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000)import time from counterfit_shims_grove.adc import ADCadc = ADC()while True:soil_moisture = adc.read(0)print("Soil moisture:", soil_moisture)time.sleep(10)

    😀 你的土壤濕度傳感器項目已經成功了

    總結

    以上是生活随笔為你收集整理的物联网应用入门--利用虚拟硬件模拟土壤湿度传感器应用编写的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。