在树莓派上读取土壤湿度传感器读书-python代码实现及常见问题(全面简单易懂)
本篇文章简单介绍了如何在树莓派上配置土壤湿度传感器以读取土壤湿度(以百分比的形式出现)及代码实现。
主要包含有以下4个模块:
一、土壤湿度传感器常见类型及介绍
二、实验所需设备
三、设备连线方式与代码实现
四、常见问题及注意事项
一、土壤湿度传感器常见类型及介绍
土壤湿度传感器,又名土壤水分传感器、土壤墒情传感器、土壤含水量传感器等。顾名思义,主要用来测量土壤相对含水量,做土壤墒情监测。在智能农业,农业灌溉和林业防护等领域极广。该传感器价格低廉,如果想在家制作一个简易的智能自动化作物灌溉系统,有了它,再加上温湿度传感器、树莓派/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
由于树莓派没有模拟信号引脚,所以没有办法直接输出模拟信号数值,此时我们需要使用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)。

三、设备连线方式与代码实现
在此实验中,主要介绍和使用的FC-28型号土壤湿度传感器,但其它型号的传感器使用,连线均与此相同。
(一)设备连线方式
1.电路图及说明
MCP3008共有16个引脚,其中8个用于记录模拟输入值,位于CH0-CH7(引脚1-8),4个通信引脚通过SPI协议方法与树莓派通信,还有2个电源引脚,2个接地引脚。


(二)代码实现
1. 启用树莓派的SPI接口
树莓派的SPI接口与SSH、VNC服务相同,是默认关闭的,需要我们在配置中打开此服务才可以使用。
按照以下步骤启动终端并输入以下命令:
(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库
我们从传感器获得的值还是电压值而非土壤湿度值,土壤湿度需要使用百分比的形式体现,为了将输出值转换为百分比,还需要使用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)一定一定要有耐心,出现问题后按照顺序逐一排查。因为涉及到的连线较多,对硬件小白来说,很容易眼花缭乱想放弃,但是太简单的东西谁都能做,能攻破学习或者生活中一个个难关的人才能有所成长啊~

如果你在配置土壤湿度传感器时或使用树莓派时遇见了什么问题,欢迎在评论区写下,看到了会及时答复。期待与大家一起学习。
文字及图片部分来源:https://maker.pro/raspberry-pi/tutorial/interfacing-soil-moisture-sensor-with-raspberry-pi
转发请标明来源。祝大家学派happy!
在树莓派上读取土壤湿度传感器读书-python代码实现及常见问题(全面简单易懂)的更多相关文章
- 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)
		
最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...
 - 树莓派dht11,土壤湿度传感器,继电器的使用。树莓派云灌溉(二)
		
关于传感器的一些说明 我的想法是这样的 我尽量用易于理解的语言去说我的想法 首先,土壤湿度传感器和dh11会获取数据,然后树莓派会处理这些数据,读出土壤温湿度和空气温湿度,并将这些数据上传到云服务器, ...
 - 树莓派连接DHT11温湿度传感器(python)
		
介绍 DHT11作为一个廉价配件,同时包含了温度.湿度传感器,而且,编码使用也非常简单. 本文介绍如果在树莓派中使用 DHT11,代码是Python.如果有任何疑问,欢迎在下面留言. 接线 VCC接5 ...
 - Arduino与水泵实验+土壤湿度传感器
		
1 水泵实验我们这里是使用的继电器控制的水泵,注意再实验的时候电池的电压不要超过6v,太大容易烧毁水泵,如果是长时间的使用水泵,要注意将水泵放入水中,这样可以达到给水泵降温的效果.1.全新5V继电器模 ...
 - 树莓派上搭建基于Python+web.py+fastcgi+lighttpd的网站
		
最近在网上淘了一个树莓派,什么是树莓派?这里是他的官方网站你可以去看看. 简单的说就是一块使用了ARM11的CPU,具有256MB或512MB内存的具有两个USB接口,一个RJ45接口,HDMI输出和 ...
 - 在树莓派上用 python 做一个炫酷的天气预报
		
教大家如何在树莓派上自己动手做一个天气预报.此次教程需要大家有一定的python 基础,没有也没关系,文末我会放出我已写好的代码供大家下载. 首先在开始之前 需要申请高德地图API,去高德地图官网注册 ...
 - 在树莓派上用Python控制LED
		
所需材料 一个已经安装配置好了的树莓派 连接控制树莓派所用的其他必须设备 200Ω电阻 x 8 led x 8 面包板及连接线若干 电路连接 电路图 按照电路图所示,在面包板上进行连接. 编写程序 安 ...
 - 关于树莓派Pi2通过UART连接攀藤G5传感器的python
		
1.准备工作:树莓派Pi2板子,攀藤G5传感器 关于树莓派40pin口网上很多,我们只了解与攀藤G5连接的问题 (1)攀藤G5pin1(VCC5v)要注意是5V,有很多板子接的是3V,而树莓派的pin ...
 - 树莓派 连接 JY901(MPU9250) python 代码
		
先说BUG,最近要做项目需要树莓派和陀螺仪,资金充足的话肯定是买一个硬件卡尔曼滤波的传感器类似JY901模块,资金不足的就买MPU6050. 网上关于MPU6050在树莓派上的代码还能用,关于JY90 ...
 
随机推荐
- PMP 冲!|项目整合管理
			
0x00概述 项目管理包括识别.定义.组合.统一与协调各项目管理过程组的过程及项目管理活动.包括在各个项目冲突的目标与方案之间进行权衡和选择. 整合管理包括进行如下选择: 资源分配: 平衡竞争性需求: ...
 - 性能测试之Docker监控
			
微服务.大中台盛行的当下,容器化已经被广泛使用.在性能测试过程中,对容器的监控模型构建也是必不可少的. 我们性能测试监控模型的构建一直是围绕着Prometheus和Grafana来展开的.她们可以快速 ...
 - 最好用的FTP工具,最好用的FTP工具推荐!
			
IIS7服务器管理工具是一个良好的FTP的客户端,可以进行FTP的操作!同时,还可以作为VNC的客户端进行VNC的相关操作!它还能连接Windows和Linux的服务器和PC,并对他们的连接状态进行实 ...
 - Java实现 蓝桥杯 算法提高 学霸的迷宫
			
算法提高 学霸的迷宫 时间限制:1.0s 内存限制:256.0MB 问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二 ...
 - Java实现 LeetCode 435 无重叠区间
			
435. 无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触& ...
 - Java实现 LeetCode 374 猜数字大小
			
374. 猜数字大小 我们正在玩一个猜数字游戏. 游戏规则如下: 我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字. 每次你猜错了,我会告诉你这个数字是大了还是小了. 你调用一个预先定义好的 ...
 - Java实现蓝桥杯VIP算法训练 自行车停放
			
试题 算法训练 自行车停放 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 有n辆自行车依次来到停车棚,除了第一辆自行车外,每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或 ...
 - Java实现 LeetCode 10 正则表达式匹配
			
10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配, ...
 - svg 贝塞尔曲线图解(记录)
			
path路径绘制中,绘制贝塞尔曲线的命令包括: Q 二次贝赛尔曲线 x1,y1 x,y T 平滑二次贝塞尔曲线 x,y C 曲线(curveto) x1,y1 x2,y2 x,y S 平滑曲线 x2, ...
 - 利用tcpdump命令统计http的GET和POST请求
			
1.搭建的知识库服务器, 需要统计来访者都是哪些人,因为系统不是自己开发的,看不到访问日志.所以考虑从系统层面抓取访问流量来实现. 2.通过tcpdump抓取的数据包,在wireshark中打开发现, ...