一、前言
STM32 L053是一款性能远高于传统基于AVR的Arduino的微控制器。同时,STM32 L053本身外围接口兼容Arduino传感器,因此可以对Arduino传感器进行调整(主要是电压有区别,5V和3.3V的)后直接使用。另外,STM32 L053支持mbed,而mbed是一款和Arduino IDE相似的开发工具。
土壤湿度传感器是用来判断土壤中水分含量的多少来判定土壤的重量湿度大小(还有一种是体积湿度测定)。一般土壤湿度传感器给出的是模拟电压读数(本文中用到的是0~2.3V,基准电压5V)。由于模拟电压读数本身浮动较大,因此如果做真正的项目应用的话,应该有一套滤波算法,让读数稳定。同时本文还采用了标准土壤含水率测定方法进行了校正,得出校正曲线。
二、设备材料
STM32 L053开发板一套,DFRobot出品的Moisture Sensor土壤湿度传感器(SKU:SEN0114)一套,连接线和USB线
三、核心代码
本文采用的是中位值滤波法,基本原理是连续采样N次(N取奇数),把N次采样值利用冒泡算法按大小排列,取中间值为该次测量的有效值。算法的优点是能有效克服因偶然因素引起的波动干扰,适合变化缓慢的被测参数有良好的滤波效果。
//函数
int GetAD(){
return analog_value.read()*3300; //模拟口读数乘以参考电压
}
//中位值平滑算法
#define FILTER_N 101
int Filter(){
int filter_buff[FILTER_N];
int i,j;
int filter_temp;
for(i=0;i
filter_buff[i]=GetAD();
wait(0.02);
}
for(j=0;j
for(i=0;i
if(filter_buff[i]>filter_buff[i+1]){
filter_temp=filter_buff[i];
filter_buff[i]=filter_buff[i+1];
filter_buff[i+1]=filter_temp;
}
}
}
return filter_buff[(FILTER_N-1)/2];
}
四、土壤含水率校正
校正方法采用烘干法校正。结果和线性拟合公式见下图。