传感器简介
品牌:夏普SHARP
型号:GP2Y0A21YK0F
产地:日本/Japan
类型:红外测距传感器
距离测量范围:10~80CM
信号类型:模拟量输出型
包装尺寸:29.5×13×13.5mm
消耗电流:30mA(典型)
电源电压:4.5~5.5 V
常见应用
触摸开关(卫浴设备,照明控制等)
机器人清洁器
节能传感器(自动取款机、复印机、自动售货机)
游乐设备(街机游戏机机器人)
计数器(流水线、道闸)
测试前先贴一部分官方提供的DataSheet截图
根据上述技术手册可分析得知,该款传感器信号输出类型为电压模拟量,且与测量距离的输出关系呈类反比的非线性关系。
测量距离为6CM左右时输出电压值最大,大致为3.1V;
测量距离在80CM左右时,输出变化已经很小了,大致0.5V附近。
了解上述内容后,老套路,依旧是发烟测试,通过Arduino测试实际效果。
根据时序关系编程如下:
//#include <LiquidCrystal.h>
//LiquidCrystal LCD1602(16,15,7,6,5,4); //初始化LCD1602
void setup() {
Serial.begin(9600);
//LCD1602.begin(16,2); //设置16*2显示
pinMode(14,INPUT);
//LCD1602.clear(); //清屏
delay(45);
}
void loop() {
int val;
val = analogRead(14);
// float i = val * (5.0 / 1023.0);
Serial.print(val);
Serial.print("*");
//LCD1602.setCursor(0,0); //0列0行
//LCD1602.print(val);
//LCD1602.clear(); //清屏
}
串口输出值最大650左右
大家都知道,由于Arduino的模拟量输入测量实际上就是AVR单片机的ADC测量,基准电压:5VDC,分为了1024份显示罢了。
通过上述对数据手册的解读可知,理论应该显示的最大值为:
int(1024 * 3.1 / 5) = 635
考虑实际环境中的偶然误差,官方数据还是相当准确的。
本打算通过Python将相关实测数据绘制出来的,但最近家里网络环境一直很一般,
想现装Python数据分析的相关库装不了,怎么办?
有办法,还有很好用的Processing嘛。
绘制界面如下:
在5CM处:
int((635 / 1024) * 10) = 6
30CM处:
理论值: int(((1024 * 0.9 / 5)/ 1024) * 10) = 2
60CM处:
理论值:int(((1024 * 0.5 / 5)/ 1024) * 10) = 1
结论
通过上述实测数据,官方提供的数据在实际环境中基本准确。
一开始做测距实验时我们一般会选择超声波传感器,而使用超声波传感器不光浪费单片机接口,环境条件也会对其测量结果造成较大干扰。
红外测距传感器在一定条件下几乎不受环境条件影响,因此应用于实际测距电路中效果更好、性能更稳定。
感谢一直关注着禾灮成长进步的朋友们。你们的信任、支持和鼓励,鞭策着我们一路走到了今天。
感谢所有的合作伙伴,我们相互促进,共同见证了彼此的成长。
感谢所有曾经在禾灮彼此倚靠、相互鼓励、携手同心、砥砺同行的兄弟姐妹。这里承载了我们的青春与热血。
禾灮,感谢有你。
未来,我们将一如既往,砥砺前行。
禾灮·小楊
2018.08.12