在树莓派上读取土壤湿度传感器读数-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!

posted @ 2020-06-24 15:41  滴漏咖啡  阅读(5939)  评论(2编辑  收藏  举报