十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 Raspberry Pi 与 Grove 电容式土壤湿度传感器检测土壤含水量:IoT-For-Beginners 农场项目实战指南

用 Raspberry Pi 与 Grove 电容式土壤湿度传感器检测土壤含水量:IoT-For-Beginners 农场项目实战指南 用 Raspberry Pi 与 Grove 电容式土壤湿度传感器检测土壤含水量IoT-For-Beginners 农场项目实战指南【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners导读本文基于 IoT-For-Beginners 开源课程「数字农业Farm」项目第 2 课「检测土壤湿度」的 Raspberry Pi 实操篇完整讲解如何将 Grove 电容式土壤湿度传感器接入树莓派并通过 Python 程序读取土壤含水量数据。读完本文你将掌握电容式土壤湿度传感器的工作原理、其在 Grove Base Hat 上通过 10-bit ADC 与 I²C 的总线通路以及一套可直接复制的接线与编程流程为后续「自动浇水系统」课程打下数据基础。一、硬件准备电容式土壤湿度传感器本实操需要一块树莓派Raspberry Pi和一个Grove 电容式土壤湿度传感器Capacitive Soil Moisture SensorSeeed Studio 出品。与电阻式传感器不同电容式传感器通过**检测土壤的电容capacitance**来间接测量含水量——土壤含水量变化时其电容特性随之改变进而影响传感器输出电压。其输出特性可概括为土壤越湿输出电压越低。这是一个模拟analog传感器输出的是连续变化的电压信号因此需要接在模拟引脚上。树莓派本身只有数字 GPIO 引脚好在 Grove Base Hat 上集成了10-bit 模数转换器ADC它将传感器输出的模拟电压量化为11,023的整数值再经 GPIO 引脚通过I²C 总线送入树莓派供 Python 程序读取。 关于传感器与 IoT 设备之间的通信机制GPIO、模拟引脚、I²C、UART、SPI、无线协议可参阅本课总览 2-detect-soil-moisture/README.md 中的「How sensors communicate with IoT devices」章节。二、硬件接线把传感器接入 Grove Base Hat 的 A0 插座操作任务连接土壤湿度传感器。按以下三步完成接线连接 Grove 线缆将 Grove 线缆的一端插入传感器上的插座。该插座有防反设计只有一个方向能插进去无需担心接反。连接 Base Hat 的 A0 插座在树莓派断电状态下将 Grove 线缆另一端插入树莓派上 Grove Base Hat 中标有A0的模拟插座。这个插座位于 GPIO 引脚旁边那一排插座的右侧数第二个。插入土壤把传感器探头插入花盆或田间的土壤中。传感器上有一道横贯的白色「最高位置线」highest position line——探头最多插到这条线为止不可超过以免埋没传感器上方的电路部分。接线完成后请再次确认 A0 插座的线序与 Base Hat 的丝印方向一致避免通电后读取到异常的跳变值。三、编程读取从 A0 引脚循环读取土壤湿度3.1 准备开发环境启动树莓派等待系统完全启动。启动 VS Code——可以直接在树莓派上运行也可以通过 Remote SSH 扩展远程连接。在终端中于pi用户主目录下创建新文件夹soil-moisture-sensor并在其中新建文件app.py。用 VS Code 打开该文件夹。⚠️ 若尚未配置 VS Code可参考入门课第 1 篇的树莓派配置指南 1-introduction-to-iot/pi.md。3.2 导入 Grove ADC 库在app.py顶部加入以下两行 importimport time from grove.adc import ADCimport time导入 Python 标准库time模块本程序中用于控制读取间隔休眠。from grove.adc import ADC从 Grove Python 库中导入ADC类。这个类封装了与树莓派 Base Hat 上模数转换器交互的全部逻辑负责从模拟传感器读取电压对应的数值。3.3 创建 ADC 实例adc ADC()ADC()会初始化与 Base Hat 上 ADC 芯片的 I²C 通信通道。Grove Base Hat 的 ADC 通过 I²C 将模拟值以数字形式传给树莓派因此后续所有读取都经由 I²C 总线完成。3.4 主循环读取 A0 并打印while True: soil_moisture adc.read(0) print(Soil moisture:, soil_moisture) time.sleep(10)adc.read(0)读取通道 0即 Base Hat 上的A0 插座对应的 ADC 通道。返回值范围是11,023的整数。每次读取后休眠 10 秒形成稳定的采样节奏避免传感器频繁上电读数造成抖动也为后续「自动浇水」课程中基于数据做决策预留了周期。3.5 运行与观察在终端运行python3 app.py控制台会持续输出土壤湿度读数例如piraspberrypi:~/soil-moisture-sensor $ python3 app.py Soil moisture: 615 Soil moisture: 612 Soil moisture: 498 Soil moisture: 493 Soil moisture: 490 Soil Moisture: 388观察示例输出当向土壤加水后读数从 615 一路下降到 388 左右——这正是「土壤越湿、电压越低」的电容式传感器特性在 ADC 数值上的直接体现。你也可以把传感器从土壤中拔出置于空气中观察数值反向上升。 上述完整代码已存放在仓库的 code/pi/soil-moisture-sensor/app.py 中可直接对照阅读。四、多设备横向对照虚拟设备与 Wio Terminal 的实现差异本课同一传感器在不同硬件上均有对应实现对比阅读有助于理解 ADC 与模拟读取的通用模式虚拟设备Virtual devicecode/virtual-device/soil-moisture-sensor/app.py 通过counterfit_shims_grove.adc的ADC类模拟读数adc.read(0)并用CounterFitConnection.init(127.0.0.1, 5000)与模拟器建立本地连接——无需真实硬件即可复现同一套读取逻辑。Wio TerminalArduino 平台code/wio-terminal/soil-moisture-sensor/src/main.cpp 使用pinMode(A0, INPUT)配置模拟输入analogRead(A0)读取 ADC 值并每 5 秒delay(5000)通过串口打印一次。三者结构高度一致初始化 ADC → 读取通道 0 → 打印 → 休眠区别仅在于库与硬件层。这也说明树莓派方案的grove.adc.ADC实质上是把 Base Hat 的 I²C-ADC 通路封装成了一个「类模拟引脚」的编程接口。五、下一步传感器标定与自动浇水原始的 11,023 原始读数并不能直接回答「土壤含水量百分之几」。本课配套作业 assignment.md 给出了标准标定流程记录传感器读数称取湿土重量W_wet用 110°C 烤箱烘干数小时实验室标准为 4872 小时再次称重得到W_dry按重力含水量公式换算含水量 % (W_wet − W_dry) / W_dry × 100对至少 3 份不同湿度的土样重复上述过程把「含水量 % — 传感器读数」绘成散点图并拟合直线即可将任意新读数换算为真实土壤含水量详见 soil-moisture-to-voltage.png 与 soil-moisture-to-voltage-with-reading.png 中的图示说明以及课程 README.md 的「Sensor calibration」章节。完成标定后本课数据即可作为输入进入下一课「自动植物浇水系统」通过继电器与水泵依据土壤湿度阈值自动补水。小结环节关键点传感器Grove 电容式土壤湿度传感器土壤越湿电压越低接线Grove 线缆 → Base HatA0模拟插座断电插拔探头不越过白色最高位置线编程ADC()实例化 →adc.read(0)读 A0 → 每 10 秒打印一次数据范围10-bit ADC 量化值域 11,023后续按 assignment.md 做重力含水量标定接入自动浇水系统至此你的树莓派已能实时感知土壤湿度为「数字农业」项目的数据采集环节交付了可靠的一环。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表