精帖  树莓派YL-69土壤传感器实验例程 Python读取土壤水分湿度值土壤湿度,GPIO编程,Python,传感器

By 管理员8

2023-05-09 22:01:02

浏览量83213

已赞13

传感器购买链接

介绍:

树莓派采用的是读取土壤传感器的DO口输出信号,由于树莓派的GPIO只支持数字输入,所以第一个教程我们AO口是没有接的,由于树莓派没有模拟信号引脚,所以没有办法直接输出模拟信号数值,此时我们在第二教程里面需要使用MCP3008集成电路,读取土壤湿度值可查看下面第二个教程。

教程一:

1.树莓派与土壤传感器接线

树莓派VCC —— VCC

树莓派GND —— GND

树莓派GPIO29 ——DO

Image我们将树莓派与传感器接好线以后,传感器的电源灯(红灯)会亮起,通过调节传感器上的阈值旋钮,使得在空气中绿灯不亮。此时如果将传感器触角伸入水中,可以看到绿灯亮起。此为正常状态!

2.程序代码

新建一个py文件。输入命令

sudo nano turang.py
编辑程序

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import RPi.GPIO as GPIO
import time

channel = 21

GPIO.setmode(GPIO.BCM)
GPIO.setup(channel, GPIO.IN)

while True:
        if GPIO.input(channel) == GPIO.LOW:
                print "土壤检测结果:潮湿"
        else:
                print "土壤检测结果:干燥"
        time.sleep(1)

输入检测命令

sudo python turang.py

将传感器探头放入水中,就会发生变化。可参考下图

Image



教程二,如何读取土壤湿度值?

1.原理:根据土壤的介电常数(土壤的导电能力)来估计土壤体积水含量,使用两个探针让电流通过土壤,然后读取电阻来获得湿度水平。水分越多,土壤导电越容易(电阻越小),而土壤干燥,导电越差(电阻越大)。土壤中的湿度是一个连续变化的一系列值,为模拟信号,使用A to D接线板之后可以将从环境中得来的模拟信号转成数字信号,在该板上有两个指示灯,PWR-LED和DO-LED,前者检测是否插好电源,如果电源的正负极连接正确,则会亮起,如下图(左)所示。我这里使用的是YL-69型号,灯为绿色。该传感器在输出数字信号时,可以使用一字螺丝刀将电位器进行调节(蓝色中间有十字架的部位)提前设定阈值大小,一旦土壤湿度达到或大于阈值,则DO-LED指示会亮起,如下图(右)所示。Image

Image

二:传感器引脚介绍:

传感器的小板接口分别为:AO、DO、GND、VCC,如上图所示:AO模拟量,DO数字量,GND负极、VCC正极

AO模拟信号,输出的模拟值是介于所提供的电压值(0-2.3v)之间的电压变化值。如果输出0V,则代表土壤导电性不好,即水分含量很低,若输出2.3v则表示水分子含量高,当然就可以用这个电压值来换算土壤湿度值。

DO数字信号,简单的输出为0和1,可直接通过信号灯判断土壤中水分是否低于阈值,高于则“开”,低则“关”。

GND表示接地,即为负极

VCC连接电源,即为正极(可接3.3V-5V

三:MCP3008模拟-数字转换器

但在接下来的这个项目中,我们只是单独利用模拟输出来检测土壤湿度值,由于树莓派4B自身是没有模拟信号引脚的,所以没有办法直接输出模拟信号数值,此时我们需要使用一个MCP3008集成电路(如下图):MCP3008 IC(Integrated Circuit)是一个8通道,10位的具有SPI串行接口的A / D转换器(模拟-数字转换器),共有16个引脚,可以用来解决模拟引脚问题(MCP3004也是ADC,不过为4路,体型更小)。MCP3008使用SPI总线协议从树莓派接收模拟输入值。它有8个模拟输入(ch0-ch7),另外一列的8个引脚中有4个电源和地引脚和4个连接树莓派的引脚,它产生范围为0-1023的输出值(注意:0表示0V, 1023表示3.3V)。

Image

四、设备连线方式与代码实现

MCP3008共有16个引脚,其中8个用于记录模拟输入值,位于CH0-CH7(引脚1-8),4个通信引脚通过SPI协议方法与树莓派通信,还有2个电源引脚,2个接地引脚。

Image

Image

五:代码程序(使用方法)

1. 先启用树莓派的SPI接口,树莓派的SPI接口与SSH、VNC服务相同,是默认关闭的,需要我们在配置中打开此服务才可以使用。按照以下步骤启动终端并输入以下命令:

sudo raspi-config

选择Interface选项,来启用SPI接口。

2.安装spidev库,spidev库将帮助通过SPI接口读取传感器值,使用以下四条命令来安装。

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库,我们从传感器获得的值还是电压值而非土壤湿度值,土壤湿度需要使用百分比的形式体现,为了将输出值转换为百分比,还需要使用numpy库。我们从MCP3008 IC接收到的输出值是在前面提到的0-0123范围内的数值,仍需要将把这些值映射到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(,) 
 
# Read MCP3008 data
def analogInput(channel):
  spi.max_speed_hz =
  adc = spi.xfer2([,(+channel)<<,])
  data = ((adc[]&) << ) + adc[]
  return data
 
while True:
  output = analogInput() # Reading from CH0
  output = interp(output, [, ], [, ])
  output = int(output)
  print("Moisture:", output)
  sleep(0.1)

当从土壤湿度传感器读取模拟输出值时,它以百分比测量湿度,使用来自numpy库的特定interp模块进行映射得到从0-100的值。


六:注意事项

(1)持续输出0或100,无论探针是否放入水中均没有变化

(2)没有操作探针,但读数呈有规律地变化

针对以上出现有以下几种解决方案

(1)检查树莓派的SPI服务有无正确打开

(2)先检查线有没有接稳,查看是不是线的连接顺序(传感器的正负极有没有接反,与树莓派的连线有没有串行)有误

(3)线是否有生锈或损坏(之前第一次做实验时,各种调试都出现不了正确结果,后来才发现是有几根线生锈了所以不通)

注意事项 :

(1)尽量使用长线,便于看清连线位置

(2)尽量不要使用拼接线(一根公对公,一根母对母拼接成公对母的),这样需要照顾的线更多,也更容易出纰漏

(3)一定一定要有耐心,出现问题后按照顺序逐一排查。因为涉及到的连线较多

7:土壤传感器原理图

Image

51单片机使用方法






本文章最后由 超级版主2023-11-12 21:29 编辑
发表评论
请先 注册/登录 后参与评论

已有1 发布

默认   热门   正序   倒序
查看更多评论
(13) 分享
分享

扫二维码或复制链接分享该篇文章

取消
已有0次打赏
本站免责声明
1、本站资源,均来自网络或个人用户发布,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:cxg88@qq.com