给小车加避障、给机器人加个“眼睛”看距离,除了超声波,夏普GP2Y0A21也是经典选择。它用红外反射原理测距,量程10到80厘米,输出的是模拟电压,接Arduino一个模拟脚就能读。这篇文章把接线和换算讲清楚。

三根线的连接器别接反
GP2Y0A21通常带一个JST/PH2.0的三针连接器,引出三根线,颜色和功能要认准:黄色是信号输出Vo,黑色是地GND,红色是电源正VCC。传感器要用5V供电(工作电压4.5到5.5V),别接3.3V,电压不够它工作不起来。
接线:黄色信号线接Arduino的模拟输入脚A0,黑色接GND,红色接5V。它输出的是随距离变化的模拟电压,距离越近电压越低(是非线性的反比关系),所以必须接模拟脚才能读,不能读数字脚。

电压换距离:非线性曲线要用公式
GP2Y0A21输出0.3V到约3.1V的电压,与距离成反比关系。它没有单一的线性公式,但官方/datasheet给了拟合曲线,常用近似公式是:distance = 25.3 / (voltage ^ 1.15)(厘米),其中voltage是模拟读到的电压。代码里先做 analogRead→换算成电压(0到5V),再用这个公式算出距离。
也可以用查表法:datasheet上的电压-距离对应表直接查,更贴近真实曲线。程序里把表存成数组,采到电压后插值查找,距离就出来了。
应用:红外避障、边防检测
量程10到80厘米,正适合小车做近距离避障——比超声波方向性更好、不吵、也测得更“从同一根轴”上有遮挡。还可以用来做接近报警,物体进入设定距离就触发。
它跟超声波比,好处是体积小、方向性好、价格也便宜;短板是对颜色和表面反射敏感(黑色墙面、亮面会偏)、量程不如超声波远、而且容易受强环境光(比如直射阳光)干扰。两者各有各的适合场景。
供电、采样和三个坑
GP2Y0A21上电瞬间会有一个稳定的建立时间,读取前最好等一下(比如上电后延时几十到几百毫秒)。还有它输出是模拟的,单独一次读取会有噪声,多采几次取平均更稳定。
坑有三个:一是必须5V供电,很多3.3V的控制器直接怼3.3V它不干活;二是信号线必须接模拟脚A0这类,接数字脚读出的只有高/低电平没法测距离;三是它和超声波不同,对斜面的角度、反射材质很敏感,用在避障时别期望它对所有障碍都均匀测到,实测校准一下换算系数更靠谱。强光直射时读数可能跳,尽量避开阳光直射窗口。
GP2Y0A21是给近距离测距需求一个“红外”思路的好选择。三根线、一个模拟脚、一个换算公式,量个10到80厘米的距离稳稳当当,做避障和边防够用。


多采几次取平均,单次读数会抖
电压和距离是非线性反比,那个换算公式记下来
对黑色亮面确实不灵敏,避障时要注意材质
必须5V供电,接3.3V它根本不干活,踩过