动手学arduino(7)请保持安全距离!

在交通事故中,两车追尾占很大比例。
引起事故的原因很多,其中有一个共同点:两车距离太近了。
是否能做一款报警器,用于检测两车之间的距离呢?
 

本文用超声波测距模块做一款报警器:当前方100CM处有物体时,绿灯亮;当物体在50~100CM之间时,黄灯亮;小于50CM时,红灯亮。
 

先介绍超声波模块:
超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s× t / 2 。这就是所谓的时间差测距法。

动手学arduino(7)请保持安全距离!

使用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;

     //检测脉冲宽度,并计算出距离

}
在仿真电路中,只要一个命令就能完成测距:

动手学arduino(7)请保持安全距离!

该命令中要选择trigger和echo与arduino连接的端口号(本文是11和8)
把测得距离保存在一个变量中:

动手学arduino(7)请保持安全距离!

再用分支结构,根据物体的距离做出反应。
 

元件连接图:

动手学arduino(7)请保持安全距离!

代码:

动手学arduino(7)请保持安全距离!

仿真效果:

智能小车就可以用超声波来躲避障碍物。