在樹莓派上讀取土壤濕度傳感器讀數-Python代碼實現及常見問題


最近課題需要入手了樹莓派,用來跟處理器相連監控溫室內環境狀況,包括空氣溫度,空氣濕度和土壤濕度等。現在一切都配置好了,就想着記錄下來,總結之余,也真誠的希望能夠給你的學習之旅帶來一些幫助。

本篇文章簡單介紹了如何在樹莓派上配置土壤濕度傳感器以讀取土壤濕度及代碼實現。本次教程使用的是Rspberry Pi 3 Modle B+,樹莓 4 b/樹莓派Zero W也可。 其它型號的樹莓派代碼相同,只是要注意引腳數字的更改。雖然在本篇文章介紹的是土壤濕度傳感器與樹莓派連接和使用的方式,但其它傳感器在樹莓派的使用上其實大同小異。樹莓派上配置溫濕度傳感器看這里。

主要包含有以下4個模塊:

一、土壤濕度傳感器常見類型及介紹

二、實驗所需設備

三、設備連線方式與Python代碼實現

四、常見問題及注意事項

需要哪個模塊的內容直接跳轉去看即可~

 

一、土壤濕度傳感器常見類型及介紹

 土壤濕度傳感器,又名土壤水分傳感器。顧名思義,主要用來測量土壤相對含水量,做土壤墒情監測。在智能農業,農業灌溉和林業防護等領域極廣。該傳感器價格低廉,如果想在家制作一個簡易的智能自動化作物灌溉系統,有了它,再加上溫濕度傳感器、樹莓派/Arduino就可以輕松完成。

常見的土壤傳感器分為兩類,電阻型和電容型土壤濕度傳感器。但原理大同小異,都是測量土壤中水分的體積含量,並以電壓表示水分值。

(一)電阻型土壤濕度傳感器

常見的有傳感器型號有YL-69(下圖左)和FC-28(下圖右)。這是一種低技術含量的傳感器這類傳感器由兩部分組成,帶探針的傳感器,A to D(模擬信號轉數字信號)電子板(校准靈敏度主板),兩者用母對母杜邦線連接。                

            它根據土壤的介電常數(土壤的導電能力)來估計土壤體積水含量,工作時,使用兩個探針讓電流通過土壤,然后讀取電阻來獲得濕度水平。水分越多,土壤導電越容易(電阻越小),而土壤干燥,導電越差(電阻越大)。土壤中的濕度是一個連續變化的一系列值,為模擬信號,使用A to D接線板之后可以將從環境中得來的模擬信號轉成數字信號,在該板上有兩個指示燈,PWR-LED和DO-LED,前者檢測是否插好電源,如果電源的正負極連接正確,則會亮起,如下圖(左)所示。在這里我使用的是YL-69型號,燈為綠色,也有一些廠商生產的傳感器指示燈為紅色。該傳感器在輸出數字信號時,可以使用改錐調節板上的電位計(藍色中間有十字架的部位)來提前設定閾值大小,一旦土壤濕度達到或大於閾值,則DO-LED亮起,如下圖(中)所示。

 電子板從左到右的標記為AO、DO、GND、VCC,如下圖(右)所示。AO和DO為信號引腳,如果需要模擬信號,則連接AO,輸出的模擬值是介於所提供的電壓值到0V間的變化的電壓值,如果輸出0V,則代表土壤導電性不好,即水分含量低,可以用這個電壓值來估計土壤濕度。如果需要數字信號輸出則連接DO,簡單的輸出0和1,可直接通過信號燈判斷土壤中水分是否低於閾值,高於則“開”,低則“關”。GND表示接地,VCC連接電源,但在這個項目中,我們將單獨利用模擬輸出。

               

 該傳感器的優點是價格低廉,且有指示燈,觀察方便,但由於土壤環境是酸性的(acidic),隨着時間的推移,土壤里的化學物質會使得探針氧化(oxidize)導致測量不准確,所以需要時不時的進行更換以保證測量的准確性。

(二)電容型傳感器

相比較前一類型的傳感器,這類傳感器就顯得“光禿禿”了,只有一個組件,沒有指示燈,且只能輸出模擬信號。它區別於電阻傳感器,利用電容感應原理來檢測土壤濕度,避免了電阻式傳感器極易被腐蝕的問題,生命周期較長,缺點是不能用指示燈判斷傳感器是否正常工作,它同時只提供模擬信號。如圖設計DF Robot的一款傳感器,內置穩壓芯片,支持3.3V-5.5V寬電壓工作。DFRobot-Gravity接口具有兼容性,可直接和Gravity IO擴展板相連接。輸出電壓為0-3VDC。 

在自動化澆灌系統中,濕度傳感器用於測量土壤中水分,可以提前預設一個閾值,一旦土壤中的水分低於此閾值,則啟動連接着蓄水池(家用拿礦泉水瓶裝滿水替代即可)的水泵噴水,等到水分值超過預設值,則水泵暫停工作。

 

二、實驗所需設備

-樹莓派 3 b+/樹莓 4 b/樹莓派Zero W

-MCP3008

-面包板

-跳線(公對母,母對母,最好多准備一些)

-土壤傳感器(電容式、電阻式均可)

-一杯水(可以將傳感器放入水中來觀察濕度讀數的變化,若沒有條件也可直接用手握住傳感器的探針)

MCP3008

在日常生活中,我們拿到的土壤濕度通常是一個數字。這個數字對樹莓派來說其實就是一個模擬信號,那么樹莓派就要具備輸出模擬信號數值的功能。不幸的是,樹莓派只有數字信號引腳(輸出0或1),並沒有模擬信號引腳。為了解決模擬引腳問題,我們使用一個ADC(模擬-數字轉換器)即可。常見的ADC有MCP3004和MCP3008集成電路。如下圖。

 

 MCP3004(圖左)為4路,MCP3008(圖右)是一個8通道,10位,具有SPI串行接口,體型更大些。本教程中使用的是MCP3008,它共有16個引腳,可以使用SPI總線協議從樹莓派接收模擬輸入值。它有8個模擬輸入(ch0-ch7),另外一列有4個電源和地引腳和4個連接樹莓派的通信引腳,它產生范圍為0-1023的輸出值(這其實就是電壓值,0表示0V, 1023表示3.3V)。

 

三、設備連線方式與代碼實現

在此實驗中,主要介紹和使用的FC-28型號土壤濕度傳感器,但其它型號的土壤濕度傳感器傳感器的使用,連線均與此相同。

(一)設備連線方式

1.電路圖及說明

MCP3008共有16個引腳,其中8個用於記錄模擬輸入值,位於CH0-CH7(引腳1-8),4個通信引腳通過SPI協議方法與樹莓派通信,還有2個電源引腳,2個接地引腳。連線方式如下:

 

連線時候有一個小tip,MCP3008上有一個小洞,可以根據這個判斷引腳的位置。再電路圖中,土壤濕度傳感器電源引腳連接的是樹莓派5V引腳,連接3.3V引腳也可以正常工作。

(二)代碼實現

1. 啟用樹莓派的SPI接口

樹莓派的SPI接口與SSH、VNC服務相同,是默認關閉的,需要我們在配置中打開此服務才可以使用。

可視化圖形界面:首選項-樹莓派配置-接口-啟動SPI,設置完成后重啟樹莓派。

命令行:

按照以下步驟啟動終端並輸入以下命令:

(1)打開樹莓派配置選項

sudo raspi-config

(2)導航到Interface選項,啟用SPI接口。

(3)重啟樹莓派

reboot

2. 安裝spidev庫

光啟用樹莓派上的SPI接口,樹莓派還是無法讀取傳感器傳過來的值,需要安裝spidev庫驅動SPI接口讀取傳感器值。

 使用以下命令安裝spidev庫:

sudo apt-get install git python-dev
git clone git://github.com/doceme/py-spidev
cd py-spidev/
sudo python setup.py install

3. 安裝numpy庫

我們前面已經提到從傳感器獲得的值還是電壓值(0-1023)而非土壤濕度值,土壤濕度需要使用百分比的形式體現,為了將輸出值轉換為百分比,還需要使用numpy庫的特定interp模塊把電壓值映射到0-100,以得到一個百分比。

使用以下命令安裝numpy模塊:

sudo apt-get install python-numpy

4. Python代碼

# Importing modules
import spidev # To communicate with SPI devices
from numpy import interp  # To scale values
from time import sleep  # To add delay


# Start SPI connection
spi = spidev.SpiDev() # Created an object
spi.open(0,0) 


# Read MCP3008 data
def analogInput(channel):
  spi.max_speed_hz = 1350000
  adc = spi.xfer2([1,(8+channel)<<4,0])
  data = ((adc[1]&3) << 8) + adc[2]
  return data


while True:
  output = analogInput(0) # Reading from CH0
  output = interp(output, [0, 1023], [100, 0])
  output = int(output)
  print("Moisture:", output)
  sleep(0.1)

一系列操作完成后,就可以實現從土壤濕度傳感器讀取百分比啦。但是在這個過程中,常見的問題有以下幾種。


四、常見問題及注意事項

(一)常見問題

1. 持續輸出0或100,無論探針是否放入水中均沒有變化

2. 沒有操作探針,但讀數呈有規律地變化

針對以上出現有以下幾種解決方案

1.檢查樹莓派的SPI服務有無正確打開

2.先檢查線有沒有接穩,查看是不是線的連接順序(傳感器的正負極有沒有接反,與樹莓派的連線有沒有串行)有誤

3. 線是否有生銹或損壞(之前第一次做實驗時,各種調試都出現不了正確結果,后來才發現是有幾根線生銹了所以不通)

(二)注意事項 

1. 盡量不要使用多線拼接,便於看清連線位置,這樣需要照顧的線更多,也更容易出紕漏;

2. 一定一定要有耐心,出現問題后按照順序逐一排查。因為涉及到的連線較多,對硬(博)件(主)小(自)白(己)來說,很容易眼花繚亂想放棄,但是太簡單的東西誰都能做,能攻破學習或者生活中一個個難關的人才能有所成長啊~~

如果你在配置土壤濕度傳感器時或使用樹莓派時遇見了什么問題,歡迎在評論區寫下,看到了會及時答復。期待與大家一起學習。想了解樹莓派上配置溫濕度傳感器看這里。

文字及圖片部分來源:https://maker.pro/raspberry-pi/tutorial/interfacing-soil-moisture-sensor-with-raspberry-pi

轉發請標明來源。祝大家學派happy!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM