穷创客教育之Arduino编程第十九课:超声波雷达

网友投稿 2019-10-19 13:51

穷创客教育之Arduino编程第十九课:超声波雷达

超声波的原理是先发射一束超声波并且开始计时,等到超声波碰到前方物体就会发生反射,超声波测距传感器在收到回声后会停止计时,通过这个时间结合声音的速度可以判定前方距离。

https://cdn.china-scratch.com/timg/191021/135110A96-0.jpg

一、实验现象

通过超声波传感器将前方障碍物的距离显示在串行监视器。

二、实验器材:

开发板、超声波传感器1个、三色LED1个、200Ω电阻3个和杜邦线若干。

三、实验所用函数及语句

要启动测距过程,Arduin板必须要在超声波测距传感器的引脚上发送一个很短的脉冲。然后使用pulseln()函数监听相同引脚上的脉冲宽度。测量到的脉冲宽度就是声音传播的时间了。

delayMicroseconds(2): 等待 2微妙

pulseIn(Echo, HIGH):函数用于读取引脚脉冲的时间长度,脉冲可以是HIGH或LOW。如果是HIGH,函数将先等引脚变为高电平,然后开始计时,一直到变为低电平为止。

四、实验电图

【注意】板上接线方式:VCC、trig(控制端)、echo(接收端)、GND;接线时先接上超声波模块再通电,或先将GND 连接以免将模块烧坏。Circuits中超声波元件只有三个角,将trig和echo合并成一个不影响我们做实验。

https://cdn.china-scratch.com/timg/191021/13511050c-1.jpg

五、编写程序

测试距离=(高电平时间*声速(340M/S))/2经过计算后:测试距离=(高电平时间/58)(厘米)。

float temp;

void setup()

{

  pinMode(9, OUTPUT);

  pinMode(10, OUTPUT);

  pinMode(11, OUTPUT);

}

void loop()

{

  pinMode(5, OUTPUT);  

  digitalWrite(5, LOW); //给Trig发送一个低电平  

  delayMicroseconds(2);    //等待 2微妙  

  digitalWrite(5,HIGH); //给Trig发送一个高电平  

  delayMicroseconds(10);    //等待 10微妙  

  digitalWrite(5, LOW); //给Trig发送一个低电平  

  pinMode(5, INPUT);

  temp = float(pulseIn(5, HIGH)); //存储回波等待时间,  

  temp = temp /58;

  if(temp<=50){ //红灯

      analogWrite(11, 255);

      analogWrite(10, 0);

      analogWrite(9, 0);

  }

    if(150>=temp && temp>50){//黄灯

      analogWrite(11, 255);

      analogWrite(10, 0);

      analogWrite(9, 255);

  }

    if(temp>150){//绿灯

      analogWrite(11, 0);

      analogWrite(10, 0);

      analogWrite(9, 255);

  }

  delay(10);

}

用真实的模块时,将trig接在5号端口,echo接在6号端口。程序如下:

float temp;

void setup()

{

  pinMode(9, OUTPUT);

  pinMode(10, OUTPUT);

  pinMode(11, OUTPUT);

pinMode(5, OUTPUT);

pinMode(6, INPUT);

}

void loop()

{

  digitalWrite(5, LOW); //给Trig发送一个低电平  

  delayMicroseconds(2);    //等待 2微妙  

  digitalWrite(5,HIGH); //给Trig发送一个高电平  

  delayMicroseconds(10);    //等待 10微妙  

  digitalWrite(5, LOW); //给Trig发送一个低电平  

  temp = float(pulseIn(6, HIGH)); //存储回波等待时间,  

  temp = temp /58;

  if(temp<=50){ //红灯

      analogWrite(11, 255);

      analogWrite(10, 0);

      analogWrite(9, 0);

  }

    if(150>=temp && temp>50){//黄灯

      analogWrite(11, 255);

      analogWrite(10, 0);

      analogWrite(9, 255);

  }

    if(temp>150){//绿灯

      analogWrite(11, 0);

      analogWrite(10, 0);

      analogWrite(9, 255);

  }

  delay(10);

}

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com