云天 发表于 2020-10-2 16:36:33

【土壤湿度传感器】水养绿萝看护器

本帖最后由 云天 于 2020-10-2 17:00 编辑



绿萝是非常好的室内装饰植物,它的叶片翠绿,茎细软,一般在室内的高处放上一盆绿萝,让其茎蔓自然下垂,或者把长长的茎蔓摆出各种造型,既充分利用了空间,又净化了空气,又给室内装修增加了色彩,使室内极富生机。经科学研究发现,一盆绿萝在十平方的房间里就相当于一个空气净化器,它能吸收空气中的甲醛、苯和三氯乙烯等有害气体,特别是刚装修过的房子,最适合摆上几盆绿萝,绿萝的生命力非常顽强,绿萝的叶片肥大,能吸收二氧化碳呼出氧气,使室内的空气更加清新,室内氧气的增多能使我们变得更加精神。


我水养的绿萝,总是因为长时间没烧水,而枯死。

这是DFRobot新推出的一款防水式土壤湿度传感器,与老款的土壤湿度传感器相比,增加了防水性能,优化了防腐蚀性能,增加了极板长度并优化了电路性能。 电容式的土壤湿度传感器,相比电阻式传感器,解决了电阻式传感器易被腐蚀的问题,能够长时间插入泥土不被腐蚀。该款传感器增加了防水性能,传感器全部浸泡在水中仍能正常使用;增长了电容极板的长度,可以更精确的测量土壤湿度信息。该款传感器具有较宽的输入电压,能够在3.3V-5.5V宽电压下工作。



简介中“传感器全部浸泡在水中仍能正常使用”,正是我所需要的。
【滤波算法】
经测试,此传感器,抗干扰能力还是比较强的。但在实际使用中,难免会出现特殊情况,产生干扰。为解决此问题,在程序中引入滤波算法。
滤波是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。是根据观察某一随机过程的结果,对另一与之有关的随机过程进行估计的概率理论与方法。
1、限幅滤波法(又称程序判断滤波法)
2、中位值滤波法
3、算术平均滤波法
4、递推平均滤波法(又称滑动平均滤波法)
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
6、限幅平均滤波法
7、一阶滞后滤波法
8、加权递推平均滤波法
9、消抖滤波法
10、限幅消抖滤波法
【中位值平均滤波法】
我采用的是“中位值平均滤波法(又称防脉冲干扰平均滤波法)”
名称:中位值平均滤波法(又称防脉冲干扰平均滤波法)
方法:
    采一组队列去掉最大值和最小值后取平均值,
    相当于“中位值滤波法”+“算术平均滤波法”。
    连续采样N个数据,去掉一个最大值和一个最小值,
    然后计算N-2个数据的算术平均值。
    N值的选取:3-14。
优点:
    融合了“中位值滤波法”+“算术平均滤波法”两种滤波法的优点。
    对于偶然出现的脉冲性干扰,可消除由其所引起的采样值偏差。
    对周期干扰有良好的抑制作用。
    平滑度高,适于高频振荡的系统。
缺点:
    计算速度较慢,和算术平均滤波法一样。
    比较浪费RAM。
int Filter_Value;

void setup() {
Serial.begin(9600);       // 初始化串口通信
randomSeed(analogRead(0)); // 产生随机种子
}

void loop() {
Filter_Value = Filter();       // 获得滤波器输出值
Serial.println(Filter_Value); // 串口输出
delay(50);
}

// 用于随机产生一个300左右的当前值
int Get_AD() {
return random(295, 305);
}

// 中位值平均滤波法(又称防脉冲干扰平均滤波法)(算法1)
#define FILTER_N 100
int Filter() {
int i, j;
int filter_temp, filter_sum = 0;
int filter_buf;
for(i = 0; i < FILTER_N; i++) {
    filter_buf = Get_AD();
    delay(1);
}
// 采样值从小到大排列(冒泡法)
for(j = 0; j < FILTER_N - 1; j++) {
    for(i = 0; i < FILTER_N - 1 - j; i++) {
      if(filter_buf > filter_buf) {
      filter_temp = filter_buf;
      filter_buf = filter_buf;
      filter_buf = filter_temp;
      }
    }
}
// 去除最大最小极值后求平均
for(i = 1; i < FILTER_N - 1; i++) filter_sum += filter_buf;
return filter_sum / (FILTER_N - 2);
}
我将以上Arduino代码转为Mind+。


【测试】

对干扰项进行滤波。
【演示】
将采样时间减少。可及时看到测试结果。
https://v.youku.com/v_show/id_XNDg4NzIwODkzMg==.html
【完整代码】

发表于 2022-4-15 08:38:33

代码可以整理一下,有些乱。
页: [1]
查看完整版本: 【土壤湿度传感器】水养绿萝看护器