因其为非线性搜遍网络都没有对应的换算方式可循。
以下只是提供方法,方便大家对红外测距模块进行标定。
1、导出实际测距模拟量值
1)将以下程序代码编译后写入arduino。
[C++] 纯文本查看 复制代码
?
0102
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 |
char GP2D12;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int val;
GP2D12=read_gp2d12_range();
delay(500);
}
float read_gp2d12_range()
{
int tmp;
tmp = analogRead(A0); //A0为红外测距模块数据输入口
Serial.println(tmp);
} |
|
2)将红外测距模块分别进行各段距离的实际测距。距离精度为1厘米。
3)用具备保存接收数据功能的串口软件接收并保存数据。从串口上获取每段距离的模拟量数据后,将数据保存为TXT文档,再导入EXCEL中。
4)在EXCEL表中,标示好数据值对应的距离值,直到完成约30厘米距离值。
5)对测得的模拟量数据值进行整理。整理前建议对每列数值进行排序处理。
(1)首先,对同距离值内相同模拟量值的统计。
可参考下图输入统计公式“=countif(A:A,A2)”,并复制到其他其他单元格,统计结果如下图。
(2)然后,去除重复的数据(没有好的方法,全手工操作)。
在重复数据的第一行数据后输入统计出来的重复数,再去除多余的重复数据,仅保留一条数值,整理结果入下图:
(3)其后,从每列中选取统计数据较多的数值,选取建议为2条,粘贴到另外表格中,整理完成后,再对模拟量数值进行电压转换,
后隐藏模拟量值列表。
|
|
换算模拟量电压值 |
隐藏模拟量数据列表 |
实际值与型号产品图谱对比还是有差距的。
6)获取换算公式。
选择相应的列表数据,再选择“折线图”并选择“所有图表类型”
选择“XY(散点图)”
产生了相应的曲线,是不是很像型号产品的图谱!
再添加“趋势线” |
在里面选择“幂”趋势线,同时勾选“公式”。
“幂”趋势线与我们产生的曲线很接近,就选它了。
需要的公式也体现在界面上了:Y=8.7328x-0.912
6)实际演算测试
测试用代码:
[C++] 纯文本查看 复制代码
0102
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 |
#include <math.h>
float val=0;
char GP2D12;
char a,b;
void setup()
{
Serial.begin(9600); //
}
void loop()
{
int val;
GP2D12=read_gp2d12_range();
delay(500);
}
float read_gp2d12_range()
{
float tmp;
tmp = analogRead(A0);
tmp=tmp*4/1024; //4为VREF基准:实际值
tmp=8.7328*pow(tmp,-0.912)+0.25; //0.25是调整值,根据测距情况自行添加相应的值
Serial.println(tmp);
return tmp;
} |
出来的结果比较接近实际距离,但还是有偏差,大误差在2厘米。
这也许与电压、基准、被测物体都有关系。 |