【Arduino官方教程第一辑】示例程序 3-7 信号平滑

来源:互联网 发布:2014网络歌曲大全 编辑:程序博客网 时间:2024/05/29 19:22

信号平滑

本例中程序不断的读取模拟信号值,计算平均值,并且将平均值输出到电脑。本例所展示的方法能够平滑飘忽不定或忽上忽下的模拟信号。例子中也展示了使用数组存储数据的方法。

完成本例所需的硬件设备

  • Arduino板或Genuino板
  • 10kΩ电位器
  • 连接线

电路搭建

图片来自官网
将电位器两侧的引脚分别连接到5V和GND,将中间引脚连接到A0。

原理图

图片来自官网

例程代码

下列代码按照次序存储10次读取值到数组,将这十个值求和,并且求取平均数,得到的平均数会起到平滑作用。由于计算平均值的时刻是每次添加新的传感器值时(每增加一个就计算一次)。因此,每次代码执行的时间都是相同的。

你可以增加数组的容量,来达到更好的平滑。

/*  信号平滑 不断读取模拟信号值、求取平均值后输出到电脑。将10次数据存储到数组并且不断计算平均数。  电路连接:    * 模拟信号传感器(电位器即可)连接到A0  代码是公开的.*/// 保存的数据个数越多,平滑效果就越好,不过每次计算时间就越长。//注意:应该使用常量来定义数组容量,而非变量// 我们且将元素个数限制为10const int numReadings = 10;int readings[numReadings];      // 存储数组int readIndex = 0;              // 当前读到的位置(数组下标)int total = 0;                  // 和int average = 0;                // 平均值int inputPin = A0;void setup() {  // 初始化和电脑的串口连接:  Serial.begin(9600);  // 初始化数组,用0填充:  for (int thisReading = 0; thisReading < numReadings; thisReading++) {    readings[thisReading] = 0;  }}void loop() {  // 总和扣除上次的值:  total = total - readings[readIndex];  // 从传感器读新值:  readings[readIndex] = analogRead(inputPin);  // 将新值加到总和:  total = total + readings[readIndex];  // 下表加一:  readIndex = readIndex + 1;  // 如果在数组的最后  if (readIndex >= numReadings) {    // 从头开始:    readIndex = 0;  }  // 计算平均值:  average = total / numReadings;  // 作为ASCII字符传到电脑  Serial.println(average);  delay(1);        // 为稳定,延迟1毫秒。}

相关资料

array
if
for
serial
模拟信号与串口: 从模拟信号输入引脚读取一个值,然后用这个值控制LED小灯
模拟信号输入: 使用电位器来控制LED的闪烁。
模拟信号输出[Mega]: 使用Arduino Mega板让12个LED一个接一个亮度逐渐减弱。
模拟信号的校准: 设置传感器输出模拟信号的最大、最小值来达到预期效果。
LED亮度渐隐:使用脉宽引脚(PWM pin)来让一个LED的亮度渐弱。
信号平滑:让多个模拟引脚的输入值变得更加均匀平滑。


更新进程

日期 日志 译者 2016年5月11日 创建并翻译文档 唐家勋

译者:唐家勋
邮箱:mrsteventang@gmail.com
QQ:649196486
转载请注明出处,一切只因为热爱。
希望您能指出宝贵意见,谢谢。
我的微信公众号欢迎关注,2016年6月开始更新

0 0
原创粉丝点击