ARTICLE DETAIL

资讯详情

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

使用 Wio Terminal 测量土壤湿度:电容式传感器接线、analogRead 读取与校准实战(IoT-For-Beginners 数字农业篇)

使用 Wio Terminal 测量土壤湿度:电容式传感器接线、analogRead 读取与校准实战(IoT-For-Beginners 数字农业篇) 使用 Wio Terminal 测量土壤湿度电容式传感器接线、analogRead 读取与校准实战IoT-For-Beginners 数字农业篇【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本篇技术指南基于 IoT-For-Beginners 项目第二项目数字农业第二课《检测土壤湿度》的 Wio Terminal 硬件实验完整演示如何在 Wio Terminal 上连接 Grove 电容式土壤湿度传感器、使用 ArduinoanalogRead读取模拟电压并通过串口监视器观察土壤湿度数值变化最后给出将 0–1023 原始读数换算为真实土壤含水量的传感器校准方法。读完本文你将掌握 Wio Terminal 模拟引脚A0的使用、PlatformIO 项目的编写与烧录流程以及为土壤湿度传感器做科学标定的完整实操能力。硬件电容式土壤湿度传感器的工作原理本实验使用的传感器是 Seeed 出品的 Grove 电容式土壤湿度传感器Capacitive Soil Moisture Sensor。与通过两根金属探针测量土壤电阻的电阻式传感器不同电容式传感器通过检测土壤的**电容Capacitance**来间接判断含水量土壤湿度变化会改变正负电极板之间可存储的电荷量该电容变化又被转换为可测量的电压信号。其输出特性可以用一句话概括土壤越湿输出电压越低。这一点与电阻式传感器越湿电阻越低、电流越大正好相反在后续校准画图时需要特别注意曲线的斜率方向。 原理补充源自本课 课程 README植物根系吸收土壤水分土壤水过少植物无法吸收养分过多则根系缺氧。因此不太湿、不太干是作物生长的理想状态而 IoT 设备测量土壤湿度可以让农户做到按需灌溉这正是本课在数字农业场景中的核心价值。由于这是模拟传感器它无法直接输出 0/1 数字信号而是输出电压Wio Terminal 需要借助其板载ADC模数转换器将电压转换为数字值。Wio Terminal 的 ADC 为 10 位分辨率因此读数范围为0–1023。例如在 3.3V 供电的板子上传感器返回 3.3V 时读数为 1023返回约 1.65V 时读数约为 511示意图见 analog-sensor-voltage.png。连接土壤湿度传感器到 Wio Terminal任务完成物理接线传感器通过 Grove 标准 4 线缆VCC/GND/SDA/SCL 复用为模拟信号线与 Wio Terminal 相连接线分四步插入 Grove 线缆将 Grove 线缆一端插入传感器插座。插座有防反设计只能以一个方向插入。连接 Wio Terminal 右侧 Grove 端口在 Wio Terminal 断电断开电脑或电源的情况下将线缆另一端插入屏幕朝向你时的右侧 Grove 插座——即距离电源按钮最远的那个端口。该端口是可配置的模拟/数字复合端口这里用作模拟输入。将传感器插入土壤传感器上有最高位置线一条横贯传感器的白色标记线。插入土壤时以该线为上限插到线为止、但不要越过以免浸水损坏电路。上电完成以上接线后将 Wio Terminal 连接至电脑。下面是传感器外观、接线与插入土壤的实物参考图编程读取土壤湿度任务创建 PlatformIO 项目并读取模拟值创建项目使用 PlatformIO 新建一个 Wio Terminal 项目命名为soil-moisture-sensor。若需要回顾创建项目的步骤可参考项目 1 第 1 课中的 Wio Terminal PlatformIO 项目创建指南。配置 setup 函数这个传感器不需要任何外部库直接使用 Arduino 内置的analogRead函数从模拟引脚读取即可。首先在setup函数中将 A0 引脚配置为输入模式pinMode(A0, INPUT);A0是 Wio Terminal 的复合模拟/数字引脚这里将其设为输入引脚以便从其上读取电压。在 loop 中读取电压int soil_moisture analogRead(A0);将读数打印到串口Serial.print(Soil Moisture: ); Serial.println(soil_moisture);添加延时在loop末尾加 10 秒延时避免串口刷屏、也降低功耗delay(10000);编译并烧录通过 PlatformIO 将代码编译并上传到 Wio Terminal。上传与构建的具体操作可参考项目 1 第 1 课的 Hello World 烧录指南。完整参考代码与工程配置课程仓库在 2-farm/lessons/2-detect-soil-moisture/code/wio-terminal/soil-moisture-sensor 中提供了完整的可运行工程其中 src/main.cpp 的完整实现如下#include Arduino.h void setup() { pinMode(A0, INPUT); } void loop() { int soil_moisture analogRead(A0); Serial.print(Soil Moisture: ); Serial.println(soil_moisture); delay(5000); }注意仓库中的参考实现将延时设为delay(5000)5 秒文档正文示例为 10 秒两者均可延时只影响采样频率你可以根据自己的浇水场景灵活调整。工程的 platformio.ini 配置如下它声明了 Wio Terminal 的板级环境[env:seeed_wio_terminal] platform atmelsam board seeed_wio_terminal framework arduinoplatform atmelsamAtmel SAMARM Cortex-M平台包board seeed_wio_terminal指定 Wio Terminal 开发板framework arduino使用 Arduino 框架因此analogRead、pinMode等 API 可直接调用。串口监视器验证烧录完成后用 PlatformIO 的串口监视器观察输出platformio device monitor命令。向土壤浇水或把传感器从土壤中拔出观察数值变化 Executing task: platformio device monitor --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time --- More details at http://bit.ly/pio-monitor-filters --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- --- Quit: CtrlC | Menu: CtrlT | Help: CtrlT followed by CtrlH --- Soil Moisture: 526 Soil Moisture: 529 Soil Moisture: 521 Soil Moisture: 494 Soil Moisture: 454 Soil Moisture: 456 Soil Moisture: 395 Soil Moisture: 388 Soil Moisture: 394 Soil Moisture: 391上述示例输出清晰地展示了电容式传感器的核心特性随着水分加入读数代表电压不断下降从约 526 降至约 391。若数值持续下降至很低并出现漂移说明土壤已接近饱和或传感器探针过深可调整插入深度。从源码与协议角度理解模拟读取ADC 与模拟引脚的底层原理Wio Terminal 之所以能读取模拟电压是因为其引脚背后连接了 10 位 ADC。课程 README 对传感器与 IoT 设备之间的通信机制做了系统性讲解GPIO通用输入输出引脚只能处理数字 0/1而像土壤湿度这类依赖电压信号的模拟传感器必须经过 ADC 把连续电压转换为离散数字才能进入代码逻辑。Wio Terminal 的 A0 就是这样一个具备 ADC 能力的模拟引脚analogRead(A0)在内部完成采样—量化—映射 0–1023的完整链路。传感器如何把信号送到代码从本课对通信协议的讲解可以归纳出土壤湿度传感器到 IoT 设备有两条典型路径Wio Terminal / Arduino 系传感器电压直接接模拟引脚板载 ADC 完成转换代码用analogRead读取本文路径Raspberry Pi Grove Base HatPi 只支持数字 GPIO模拟信号由 Grove Base Hat 上的 ADC同样是 10 位读数 0–1023转换为数字后通过 I²C 总线送给 PiPython 侧使用grove.adc.ADC库的adc.read(0)读取参考 pi-soil-moisture.md 与 code/pi/soil-moisture-sensor/app.py。这两种路径得到的原始值都在 0–1023 范围内但原始读数本身不是土壤湿度的物理单位要得到含水量百分比必须做校准。传感器校准把 0–1023 换算成真实含水量为什么要校准电容/电阻值随土壤湿度变化但同一读数在不同土质下对应的含水量不同——土壤成分本身会改变其电气特性。因此理想做法是科学方法对照校准用实验室手段测出样本的真实含水量与传感器读数建立对应关系。相关图表见课程 README 中的 soil-moisture-to-voltage.png电压—含水量散点及拟合线与 soil-moisture-to-voltage-with-reading.png由读数在拟合线上反查含水量。重力含水量Gravimetric Soil Moisture计算土壤含水量有两种常用度量重力法Gravimetric单位重量土壤中水的重量即每千克干土中水的千克数体积法Volumetric单位体积土壤中水的体积即每立方米干土中水的立方米数。本课作业 assignment.md 采用重力法按以下公式计算土壤含水量% (W_wet − W_dry) / W_dry × 100其中W_wet为湿土重量W_dry为干土重量。举一个官方文档中的完整算例某土壤样本湿重 212g经 110°C230°F烤箱烘干数小时后干重 197g则212 − 197 1515 / 197 ≈ 0.0760.076 × 100 7.6%即该土壤的重力含水量为 7.6%。实操校准步骤用土壤湿度传感器读取当前土壤的原始读数并记录取一份土壤样本并称重记录湿重W_wet烘干样本最理想的是 110°C 烤箱烘数小时实验室标准为 48–72 小时也可在阳光下或温暖干燥处晾至土壤完全松散粉末状冷却后再次称重记录干重W_dry按上述公式计算含水量百分比对至少 3 份不同湿度的土壤样本重复以上步骤样本湿度差异越大拟合越可靠以传感器读数为横轴、含水量 %为纵轴绘制散点图并拟合一条最佳拟合直线之后任意一次传感器读数即可在拟合线上反查出对应的真实土壤含水量。 注意斜率方向电阻式传感器随湿度增加电压升高拟合线上扬而电容式传感器随湿度增加电压降低曲线应下倾与本文串口示例中数值随浇水下降的现象一致。校准图的方向应与所用传感器类型匹配。这一校准思路的实际价值在于农户只需对一片农田做少量几次实验室测量之后即可用 IoT 设备大规模、快速地测量土壤含水量大幅缩短测量周期。其他硬件平台的对照实现本课还提供了另外两条实现路径便于横向对照理解同一传感器、不同平台的读取差异Raspberry Pi使用 Grove Base Hat 的A0模拟插座Python 侧通过from grove.adc import ADC实例化ADC()后循环调用adc.read(0)每 10 秒采样一次完整代码见 code/pi/soil-moisture-sensor/app.py虚拟设备Virtual device在电脑上通过 CounterFit 模拟传感器代码结构几乎相同仅将导入换成counterfit_shims_grove.adc并先初始化CounterFitConnection见 code/virtual-device/soil-moisture-sensor/app.py 与 virtual-device-soil-moisture.md。小结通过本实验你完成了从物理接线到代码读取、再到科学校准的完整闭环理解了电容式土壤湿度传感器湿度越高、电压越低的工作原理掌握了 Wio Terminal A0 模拟引脚配合pinMode(A0, INPUT)与analogRead(A0)的读取方式并能用Serial.print在串口监视器实时观测浇水引起的数值变化。进一步地通过重力含水量法(W_wet − W_dry) / W_dry × 100对传感器进行标定即可把 0–1023 的原始读数换算为具有物理意义的土壤含水量百分比为下一课《自动灌溉系统》的按需浇水控制奠定数据基础。完整可运行代码与工程配置均可从 code/wio-terminal 目录直接查看。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表