6087| 1
|
[项目] 【土壤湿度传感器】水养绿萝看护器 |
本帖最后由 云天 于 2020-10-2 17:00 编辑 绿萝是非常好的室内装饰植物,它的叶片翠绿,茎细软,一般在室内的高处放上一盆绿萝,让其茎蔓自然下垂,或者把长长的茎蔓摆出各种造型,既充分利用了空间,又净化了空气,又给室内装修增加了色彩,使室内极富生机。经科学研究发现,一盆绿萝在十平方的房间里就相当于一个空气净化器,它能吸收空气中的甲醛、苯和三氯乙烯等有害气体,特别是刚装修过的房子,最适合摆上几盆绿萝,绿萝的生命力非常顽强,绿萝的叶片肥大,能吸收二氧化碳呼出氧气,使室内的空气更加清新,室内氧气的增多能使我们变得更加精神。 【滤波算法】 经测试,此传感器,抗干扰能力还是比较强的。但在实际使用中,难免会出现特殊情况,产生干扰。为解决此问题,在程序中引入滤波算法。 滤波是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。是根据观察某一随机过程的结果,对另一与之有关的随机过程进行估计的概率理论与方法。 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+。 【测试】 【演示】 将采样时间减少。可及时看到测试结果。 【完整代码】 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed