夏普红外测距模块使用笔记 |
您所在的位置:网站首页 › 夏普r2使用感受 › 夏普红外测距模块使用笔记 |
外形图: 从数据手册可以明显的发现,测量距离和模拟电压是非线性关系。这给我们的实际使用造成了很多不便。实际上数据手册中还提供了一个模拟电压和距离倒数的曲线图,该曲线可以近似为直线,可以根据该关系算出不同电压对应的距离值。 今天在调试的时候发现Arduino平台上有一个专门用于夏普红外模块测距的库ZSharpIR。 https://github.com/zoubworldArduino/ZSharpIR为该代码的具体仓库,其中的README.md文件中也介绍的使用方法 。该库中提供了另一种建立模拟电压和距离关系的方法:通过散点来拟合曲线函数的方式来建立模拟电压和距离的公式关系。这时候便需要用到了 https://mycurvefit.com/ 网站来建立散点对应的公式。 这里以GP2Y0A41SK0F型号的红外测距模块为例: 打开 https://mycurvefit.com/网址,选择Fit Method --> Nonlinear --> Power,然后在下面的XY栏中输入XY的坐标输入完成后,选择Export后会生成相应的excel文件,该文件中包含了拟合曲线的函数。实际计算中便可以根据该函数进行距离的计算。 该模块对应的实际函数关系:Distance = 12.08 X POW(Volt , -1.058) Arduino平台下的测试代码(基于arduino uno) Arduino uno 的ADC精度为10位 #define SIGNAL_PIN A0 void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(SIGNAL_PIN, INPUT); } int get_distance(uint16_t value) { return (int)(120.8*pow(map(value, 0, 1023, 0, 5000)/1000.0, -1.058)); } void loop() { // put your main code here, to run repeatedly: uint16_t value = analogRead(SIGNAL_PIN); int distance = get_distance(value); Serial.print("ADC: "); Serial.print(value); Serial.print(" Distance(mm): "); Serial.print(distance); Serial.println(); delay(500); } 问题:使用该模块在测距的过程中,遇到黑色障碍时,测量的距离会明显不准确。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |