稳定红外距离传感器输出值

时间:2012-05-06 00:15:07

标签: c++ filter arduino infrared numerical-stability

我正在阅读红外线Sharp传感器:

http://www.robofun.ro/senzori/infrarosu/senzor_sharp_%20GP2D120XJ00F

通过阅读,我命令伺服机器人将机器人引向墙壁,这是一个非常简单的地图和编写代码。

我遇到的问题是传感器读数偏离了,没有表现出liniar ......我知道其他人使用这些传感器就好了,我知道他们接线很好。

我的问题是如何消除发送到伺服系统的任何振荡?当机器人静止离墙一定距离时,我得到1到3度的振荡。

下面是我的代码:

#include <Servo.h>

Servo myservo;
int val; 
int val1;

int IRpin = A7;
 // analog pin for reading the IR sensor
void setup() {
 myservo.attach(3);

 Serial.begin(9600); // start the serial port
}
void loop() {
 float volts = analogRead(IRpin);

delay(100); 
val1 = map(volts, 230,500, 0 ,100);
 val = map(val1, 0, 100, 100, 80);
 myservo.write(val);
 Serial.println(val);
 }

请注意,双重映射是必要的,否则变化会更糟糕。

感谢任何愿意花时间回答并帮助我的人......

LE:我已经考虑过迟滞,但我想要一些不会因不必要的读数和计算而浪费时间的东西。

1 个答案:

答案 0 :(得分:4)

这是一个典型的控制问题。我建议调查PID控制器。

编辑:抱歉,误读了这个问题。我以为你有一个理想的方向,并使用红外距离传感器来读取你当前的方向。我将把上面的内容作为背景,但不,它不适用于此。

新答案:

传感器波动完全正常。你必须考虑他们。在这种情况下,我会使用一个简单的移动平均滤波器。 (您在任何时间与墙壁的距离是您上次X传感器读数的平均值)。使x太大会导致延迟,太小而且你会有相同的噪音输出。

回应你的LE说明: 在处理嘈杂的输入时,我认为你不能避免某种形式的滞后现象。您是否确实存在性能问题但是您不想浪费时间进行计算?不要预先优化。

编辑2:以上将平滑您的输入信号(当前距离)。如何将其转换为输出信号(伺服设定值)以达到所需距离(假设您希望与墙壁保持固定距离)?这是PID控制器可以提供帮助的地方。