Arduino-超声波测距模块

 

关于Arduino超声波的接法与应用

简单介绍超声波测距模块

SR04超声波传感器:

是利用超声波特性检测距离的传感器,其带有两个超声波探头,分别用作于发射和接收超声波。范围在3-450cm。

工作原理:

超声波发射器向某一方向发射超声波,在发射的同时开始计时;

超声波在空气中传播,途中遇到障碍物则立即返回,超声波接收器收到反射波则立即停止计时。

声波在空气中传播速度为340m/s,根据计时器记录时间t,即可算出发射点距离障碍物的距离S,

即S=340m/s*t/2,这就是所谓的时间差测距法。

代码:

int trigPin = 8;          //发出信号
int echoPin = 7;         //接收信号
float v = 331.5+0.6*20;// 若不考虑温度的影响,声波在空气中传播速度为340m/s

void setup() {
  
Serial.begin(115200);//设置波特率
pinMode(trigPin,OUTPUT);//设置输出状态。或者写成:pinMode(8,OUTPUT);
pinMode(echoPin,INPUT);//设置输入状态
pinMode(6,OUTPUT);//蜂鸣器pin6,输出状态

}
float distanceM()
{
  digitalWrite(trigPin,LOW);//
  delayMicroseconds(3);//延时3微秒
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(5); 
 digitalWrite(trigPin,LOW); 
 
 /*float tUS = pulseIn(echoPin,HIGH);
 float t = tUs / 1000.0 / 1000.0 / 2;
 float d = t*v;
 return d*100;*/


 float d =pulseIn(echoPin,HIGH)/58.00;     //检测脉冲宽度,并计算出距离**cm.  

/*pulseIn()单位为微秒,声速340m/s,单片机的晶振频率约为14MHZ,所以距离cm=340*100/(1000000-14000)*pulseIn()/2,及化简为pulseIn()/[(1000000-14000)*2/(340*100)]等于pulseIn()/58.0.*/

 
  return d;
  
}

void loop() 
{
 while(1)
 {
 int d = distanceM();
  Serial.println(d,DEC);//BIN、OCT、HEX、DEC分别代表二、八、十六、十进制~~
  if(d>10)
  {
    digitalWrite(6,HIGH);//蜂鸣器
    delay(200);
    digitalWrite(6,LOW);
    
  }
  delay(200);
 }

}

米思齐:

 

 


(2021.04.14更新)

 

2021全国青少年机器人技术等级考试实操考题:

主题:超声波测距

器件:LED灯模块3个,超声波传感器1个,结构件若干(也可以使用普通电子元件结构面包板搭建)

搭建要求:

1、本项目由LED灯,超声波传感器组成;

2、当障碍物距离超声波传感器大于30厘米时,3盏LED灯均处于熄灭状态;

3、当障碍物逐渐接近超声波传感器时,随着距离的减小,3盏LED灯依次点亮(触发距离值由考生自行决定);

4、当障碍物逐渐远离超声波传感器时,3盏LED灯依次熄灭;

5、将超声波传感器返回的当前距离值,显示在串口监视器上。

 

电路原理图:

示例代码1:

 

volatile int Tpin;
volatile int Epin;
volatile int dISTANCE;

float checkdistance_Tpin_Epin() {
  digitalWrite(Tpin, LOW);
  delayMicroseconds(2);
  digitalWrite(Tpin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Tpin, LOW);
  float distance = pulseIn(Epin, HIGH) / 58.00;
  delay(10);
  return distance;
}

void setup(){
  Tpin = 3;
  Epin = 2;
  dISTANCE = 0;
  pinMode(Tpin, OUTPUT);
  pinMode(Epin, INPUT);
  Serial.begin(9600);
}

void loop(){
  dISTANCE = checkdistance_Tpin_Epin();
  Serial.print(dISTANCE);
  Serial.println("CM");

}

示例代码2:

 

volatile int Tpin;
volatile int Epin;
volatile int R;
volatile int G;
volatile int B;
volatile int dISTANCE;

float checkdistance_Tpin_Epin() {
  digitalWrite(Tpin, LOW);
  delayMicroseconds(2);
  digitalWrite(Tpin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Tpin, LOW);
  float distance = pulseIn(Epin, HIGH) / 58.00;
  delay(10);
  return distance;
}

void setup(){
  Tpin = 3;
  Epin = 2;
  R = 7;
  G = 8;
  B = 9;
  dISTANCE = 0;
  pinMode(Tpin, OUTPUT);
  pinMode(Epin, INPUT);
  Serial.begin(9600);
}

void loop(){
  dISTANCE = checkdistance_Tpin_Epin();
  Serial.print(dISTANCE);
  Serial.println("CM");
  delay(10);
  if (dISTANCE < 30) {
    pinMode(R, OUTPUT);
    digitalWrite(R,HIGH);
    delay(1000);
    pinMode(G, OUTPUT);
    digitalWrite(G,HIGH);
    delay(1000);
    pinMode(B, OUTPUT);
    digitalWrite(B,HIGH);

  }
  if (dISTANCE > 30) {
    pinMode(R, OUTPUT);
    digitalWrite(R,LOW);
    delay(1000);
    pinMode(G, OUTPUT);
    digitalWrite(G,LOW);
    delay(1000);
    pinMode(B, OUTPUT);
    digitalWrite(B,LOW);

  }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naiva

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值