查看: 290|回复: 0

[项目] 【土壤湿度传感器】水养绿萝看护器

[复制链接]
本帖最后由 云天 于 2020-10-2 17:00 编辑

IMG_20201002_152449.jpg

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

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


IMG_20201002_154415.jpg
简介中“传感器全部浸泡在水中仍能正常使用”,正是我所需要的。
【滤波算法】
经测试,此传感器,抗干扰能力还是比较强的。但在实际使用中,难免会出现特殊情况,产生干扰。为解决此问题,在程序中引入滤波算法。
滤波是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。是根据观察某一随机过程的结果,对另一与之有关的随机过程进行估计的概率理论与方法。
1、限幅滤波法(又称程序判断滤波法)
2、中位值滤波法
3、算术平均滤波法
4、递推平均滤波法(又称滑动平均滤波法)
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
6、限幅平均滤波法
7、一阶滞后滤波法
8、加权递推平均滤波法
9、消抖滤波法
10、限幅消抖滤波法

【中位值平均滤波法】
我采用的是“中位值平均滤波法(又称防脉冲干扰平均滤波法)”

名称:中位值平均滤波法(又称防脉冲干扰平均滤波法)
方法:
    采一组队列去掉最大值和最小值后取平均值,
    相当于“中位值滤波法”+“算术平均滤波法”。
    连续采样N个数据,去掉一个最大值和一个最小值,
    然后计算N-2个数据的算术平均值。
    N值的选取:3-14。
优点:
    融合了“中位值滤波法”+“算术平均滤波法”两种滤波法的优点。
    对于偶然出现的脉冲性干扰,可消除由其所引起的采样值偏差。
    对周期干扰有良好的抑制作用。
    平滑度高,适于高频振荡的系统。
缺点:
    计算速度较慢,和算术平均滤波法一样。
    比较浪费RAM。

[mw_shl_code=applescript,false]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[FILTER_N];
  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[i + 1]) {
        filter_temp = filter_buf;
        filter_buf = filter_buf[i + 1];
        filter_buf[i + 1] = filter_temp;
      }
    }
  }
  // 去除最大最小极值后求平均
  for(i = 1; i < FILTER_N - 1; i++) filter_sum += filter_buf;
  return filter_sum / (FILTER_N - 2);
}[/mw_shl_code]
我将以上Arduino代码转为Mind+。
2.png

【测试】
QQ截图20201002132238.jpg
对干扰项进行滤波。
【演示】
将采样时间减少。可及时看到测试结果。

【完整代码】
3.png

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail