通过使用ESP32以及电阻式土壤湿度传感器进行对土壤湿度测量。后续会逐渐完善更多功能,即报警装置,以及到达一定参数控制舵机进行湿度调节等等。
实践过程中出现了一系列的问题我会对其进行解答。
实践过程:通过上网搜索一些相关的资料,自行编写了湿度检测的代码。 代码中需要注意以下几点:
第一点
float max1=1200;//最湿
float min1=4000;//最干
这里的最湿值以及最干值需要自行模拟两个极环境并对检测出来的稳定数据作为参数放进代码中。
第二点
//百分比转化
counts1=(counts-max1)/3400;
counts2=(1-counts1)*100;
这里的百分比转化需要自行的计算,就是对所接收到的值在范围内转化成百分比即可。
第三点
while(counts>4000)
{
Serial.print(" ***analog***:");Serial.print("0");Serial.print("%");
}
当传感器未插入土壤当中,检测出来一恒定的值,对该值的百分比结果取0,以防对实验结果造成影响。 对代码进行烧录,通过串口监视器观察实验数据。
(我所进行的实验环境土壤中水很多,所以所得值很大)
实践中我所遇到的问题
1.A0口的选择,起初我使用的是34号端口,但是烧录之后,调至9600波特率以后一直出现乱码,调至115200波特率之后一直显示重启。这种结果很疑惑,我用选择35号端口同样是这个问题,然后我又以为是开发板出问题了或者数据线,在调试过后仍发现没法解决。然后我研究了一下管脚图,不妨使用ADC1_0的端口用(仅报以试一试的心态),没想到成功了。我就大致的认为数模转换通道要从第一个用。
2.一开始打算通过蜂鸣器来实现到一定数值进行报警,但是当我加入代码仍遇到这类问题,就暂且搁置一下,以后再研究。涉及可能用到的部分代码(会用到Tone32库,可到GitHub上下载添加github.com/lbernstone/…
)
#include<Tone32.h>
#define bj 16//报警
#define TD 0//设置蜂鸣器通道
void loop(){
tone(bj,NOTE_C4,500,TD);
noTone(bj,TD);
tone(bj,NOTE_D4,500,TD);
noTone(bj,TD);
tone(bj,NOTE_E4,500,TD);
noTone(bj,TD);
tone(bj,NOTE_F4,500,TD);
noTone(bj,TD);
tone(bj,NOTE_G4,500,TD);
noTone(bj,TD);
tone(bj,NOTE_A4,500,TD);
noTone(bj,TD);
tone(bj,NOTE_B4,500,TD);
noTone(bj,TD);
}
本次知识一部分的实验,接下来还会扩展报警,控制舵机实现自动滴灌浇水等等。
[涉及源码连接](链接:pan.baidu.com/s/1hNa6_dRd… 提取码:skpg)