您现在的位置是:网站首页> 硬件
动手学arduino请保持安全距离
- 硬件
- 2021-03-28
- 849人已阅读
交通事故中,两车追尾占很大比例。
引起事故的原因很多,其中有一个共同点:两车距离太近了。
是否能做一款报警器,用于检测两车之间的距离呢?
本文用超声波测距模块做一款报警器:当前方100CM处有物体时,绿灯亮;当物体在50~100CM之间时,黄灯亮;小于50CM时,红灯亮。
先介绍超声波模块:
超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s× t / 2 。这就是所谓的时间差测距法。
使用Arduino的数字引脚给HC-SR04模块的Trig引脚至少10us的高电平信号,触发SR04模块的测距功能。
触发测距功能后,模块会自动发送八个40khz的超声波脉冲,并自动检测是否有信号返回。
若有信号返回,则Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。
此时可以使用pluseIn()函数获取测距结果,并计算出据被测物体的实际距离。
用arduino IDE来写代码,有十余行:
const
int ting=2;
//设定SR04连接到Arduino引脚
const
int echo=3;
//设定SR04连接到Arduino引脚
float distance;
//定义一个浮点型的变量
void setup()
{
Serial.begin(9600);
//设置波特率
pinMode(ting,OUTPUT);
//连接SR04的引脚
pinMode(echo,INPUT);
//设置输入状态
}
void loop()
{
digitalWrite(ting,LOW);
//产生一个10US的高脉冲去触发Trigpin
delayMicroseconds(2);
delayMicroseconds(10);
digitalWrite(ting,LOW);
distance=pluseIn(echo,HIGH)/58.00;
//检测脉冲宽度,并计算出距离
}
在仿真电路中,只要一个命令就能完成测距:
该命令中要选择trigger和echo与arduino连接的端口号(本文是11和8)
把测得距离保存在一个变量中:
再用分支结构,根据物体的距离做出反应。
元件连接图:
代码: