Arduino中使用超声波测距实验

版权声明:本博客所有原创文章未经准许不得转载或保存转发,本人保留版权法律追诉权。 https://blog.csdn.net/haigear/article/details/84895381

尽管网上已经有很多使用超声波测距的案例,但为了配合我们的前面用Processing写好的雷达扫描程序付诸实践,所以我们还是要把超声波的测距的完整步骤在这里列出来,以供初学者来参考,尤其是让前面看到了Processing雷达扫描程序而不知道如何实践硬件部分的小伙伴们有依样画葫的“葫芦”。

一、超声波传感器(Ultrasonic Sensor)
我们常用的超声波传感器有好几种,我这里有两种,一种是SR04、SR05 ,(US-100)Y401 US-015等,这些都是做好了电路集成的模块了。所以叫做超声波传感器模块。如下图:

在这里插入图片描述在这里插入图片描述
但真正的传感器没有模块的,就是一个发送一个接收(对应到我们上面的模块就是Trig和Echo两个脚了)
在这里插入图片描述

实物连接图

在这里插入图片描述

了解外形之后,我们还要来看看她是如何配合工作的。其实说到超声波,我们就会想到蝙蝠,是的,它的工作原理就是模仿蝙蝠的。先发出一个声音,然后在接收返回的声音,通过发出和返回的时间差来可以计算出距离,就这么简单。
所以,我们就要有一个机制,发出多长的声波信号(和发电报一样),回收采集的理论上应该是发出的同时就要采样收集了。
但我们的单片机或者这里说的arduino采用的是单线程的程序运行机制,故而发送的同时肯定不能收集,一般是等发送完毕后开始收集,所以这个模块中则有一个缓冲机制,将收到的信号暂时存储等待设备来读取。

那么发送多长的信号呢?一般是10个毫秒。所以这里必须有触发脚Trig拉高电平10毫秒的动作;我们从图中可以看到,一共有四个脚,分别为VC,Trig,Echo,GND,两边的两个为接电源的正负极,中间的两个一个发送一个接收,可以连接在任意信号端口是包括1到13口及A0~A5,当日在程序中也必须对应设置好。

二、代码实现
编写代码我们一如既往的要使用串口,这里不再赘述。使用超声波模块,我们要特别注意pluseIn函数的使用,它用于检测引脚输出的高低电平的脉冲宽度。
pulseIn(pin, value) //value为LOW或者HIGH
pulseIn(pin, value, timeout)
可以看出,这和我们之前使用到的digitalWrite基本相同,一般都是两个参数,一个参数是管脚一个是高低电平的设定。

好了,了解好这些了,我们可以看看代码:

int TrgPin = A0;
int EcoPin = A1;
float dist;
void setup()
{   
Serial.begin(9600);
//设置TrgPin为输出状态
pinMode(TrgPin, OUTPUT);
// 设置EcoPin为输入状态
pinMode(EcoPin, INPUT);
}
void loop()
{
digitalWrite(TrgPin, LOW);
delayMicroseconds(8);
digitalWrite(TrgPin, HIGH);
// 维持10毫秒高电平用来产生一个脉冲
delayMicroseconds(10);
digitalWrite(TrgPin, LOW);
// 读取脉冲的宽度并换算成距离
dist = pulseIn(EcoPin, HIGH) / 58.00;
Serial.print("Distance:");
Serial.print(dist);
Serial.println("cm");
delay(300);
}

运行效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/haigear/article/details/84895381