在树莓派上读取土壤湿度传感器读书-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 ...
随机推荐
- SDP架构初识
实现零信任的框架主要有SDP和Google Beyondcorp模型,前者出现在乙方的安全解决方案中,后者多作为甲方落地零信任的参考.本文主要记录对SDP技术的一些初步认识. 一.SDP简介 SDP是 ...
- Rocket - tilelink - fastProperty
https://mp.weixin.qq.com/s/9nikweQUGG5FO3Z8t6feaw 介绍Parameters中定义的fastProperty的实现.(使用最近的新版本,差别不大) ...
- Chisel3 - model - when
https://mp.weixin.qq.com/s/YGTXky4wff7LXUphUxISQg 介绍创建模块判断逻辑的when命令. 1. when/elsewhen/otherwise ...
- Java实现 LeetCode 468 验证IP地址
468. 验证IP地址 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址. IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(&qu ...
- Java实现 蓝桥杯VIP 算法提高 邮票面值设计
算法提高 邮票面值设计 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤13)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮 ...
- Spring之JdbcTemplate使用
一:JdbcTemplate概述及入门 “Don‘t Reinvent the Wheel” , 这是一句很经典的话,出自Spring官方,翻译过来就是说 “不要重复发明轮子” .由此我们可以猜测,J ...
- Spring基本介绍
一:Spring是什么 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,它以IOC控制反转和AOP面向切面编程为核心,提供了展现层 Spring MVC 和持久层 ...
- Java中的堆和栈
Java中的堆和栈 栈内存 存放基本数据类型和引用变量 堆内存 存放运行时创建的对象 一般来说,通过new关键字创建出来的对象都放在堆内存中 由于JVM是基于堆栈的虚拟机,而每个Java程序都运行在一 ...
- 【Flutter实战】移动技术发展史
老孟导读:大家好,这是[Flutter实战]系列文章的第一篇,这并不是一篇Flutter技术文章,而是介绍智能手机操作系统.跨平台技术的演进以及我对各种跨平台技术看法的文章. 智能手机操作系统 塞班( ...
- Hive中row_number()、dense_rank()、rank()的区别
摘要 本文对Hive中常用的三个排序函数row_number().dense_rank().rank()的特性进行类比和总结,并通过笔者亲自动手写的一个小实验,直观展现这三个函数的特点. 三个排序函数 ...