我有一个IR传感器,它将当前信息写入令牌,然后我在C#应用程序中解释。这一切都很好 - 没有问题,继承我的代码:
SetLabelText(tokens [1],label_sensorValue);
sensorreading = Int32.Parse(tokens[0]);
sensordistance = (mathfunctionhere);
大。因此,红外传感器离物体越远,传感器读数越低(传感器反射回来并接收的光线越少)。
我的问题在于解释这个长度。我可以继续前进,当一个物体距离5英寸时让我们说“110”作为值,然后当物体距离6英寸时,将“70”作为值。现在我希望能够使用这些常量计算任何长度的对象距离。
有什么想法吗?
答案 0 :(得分:5)
嗯,我要做的第一件事是以固定距离获取数据,即1英寸,1英尺,2英尺,5英尺等。然后,我会在像Excel这样的程序中绘制数据,并找到最好的拟合曲线,您可以从中导出函数。在代码中使用该功能,并开始在不同的距离进行测试。
现在,它可能不那么简单。您尝试测量的对象的反射属性将改变您的读数,其他因素也是如此。由于我不知道你的要求是什么,所以我很难提出更具体的建议。
答案 1 :(得分:3)
除了设备的内在 精度 和 保真度 之外,有很多因素可能会影响有效性能量(或任何返回和测量的);阅读这个特定的设备甚至是类似的项目和/或物理效果/维度的基本原理可以为您提供校准的额外想法。
一旦你有一个表格将测量值与距离相关联(可能还有其他标准温度,反射因子......),它就成了一个真正的数学问题,例如:
答案 2 :(得分:2)
反射IR通常用于物体检测。但是,如果目标的形状,角度,反射特性并不总是相同,那么测量反射红外线的强度并不是估算距离的可靠方法。
有什么想法吗?
不同的传感方法。怎么样,像这样的视差传感器:http://www.acroname.com/robotics/info/articles/sharp/sharp.html。
答案 3 :(得分:0)
来自光源的能量会随着 1 / r 2 而下降(对于相对较小的光源)。除此之外,如果其他一切保持不变,唯一的问题可能是传感器中的非线性。
要使用您的数据进行检查,您会发现E x r 2 = const,这大致适用于您的数据:
110×5 2 = 2750,和
70 x 6 2 = 2520,
所以这些都在10%之内,看起来相当接近,所以看起来基本的规则就会存在。
非线性传感器很常见,因此您应该确保在您将使用它的整个范围内进行检查。但如果它是线性传感器,人们提到的其他问题(例如反射表面)将不会成为问题,因为对于光传输和反射,一切(几乎)是线性的,因此将是通过单个校准常数进行固有补偿。只要不改变光源,吸收材料等的角度都无关紧要。
如果你测试几个点,包括你感兴趣的范围的极值,并且它遵循1 / r 2 规则,那么你很高兴。然后,当然,计算const是什么,并且r = sqrt(const / E)。
答案 4 :(得分:0)
详细阐述了tom10提出的平方函数...
我们假设您的设备功能是方形曲线,即
distance = A + B * reading + C * reading^2
现在我们需要找出A,B和C来将你的阅读转换成一个距离,所以我们需要的是一种回归分析。正方形曲线恰好由3个点定义,因此您可以测量3个点(r1..r3)并记录距离(d1..d3)
现在您有3个具有三个未知数的方程式,您可以通过任何方式解决,即
A + r1 * B + r1^2 * C = d1
A + r2 * B + r2^2 * C = d2
A + r3 * B + r3^2 * C = d3
对A,B和C求解一次,这将是您的“校准曲线”,并且可以使用上面的第一个公式计算任何未知距离。当然,如果您更换硬件,则需要在任何设备变化范围内重新校准您的设备。
您可以通过进行第四次测量并将所有上述方程扩展为变量D,即将此机制扩展为立方甚至更高阶曲线,即
A + rx*B + rx^2*C + rx^3*D + ....
等。但它不会增加很多准确性。你会发现rx ^ 3及以后的因子D非常小。
希望这有帮助
祝你好运 拾音