Arduino超声波测距

目录

一、硬件

1、型号

2、接线

二、超声波测距和串口显示测量距离

1、代码

2、物体测量和串口显示

三、检测距离小于设定值输出IO控制

1、代码

2、距离检测和继电器输出

(1)串口显示测量距离

(2)物体检测和继电器输出


一、硬件

1、型号

超声波模块:HC-SR04

Arduino单片机:Mega。

Arduino Mega单片机

超声波HC-SR04

2、接线

超声波和单片机连接

二、超声波测距和串口显示测量距离

1、代码


const long _1000msTime = 1000;    // 1000 milli seconds
unsigned long _1000msLastTime;
const long _100msTime = 100;      // 100 milli seconds
unsigned long _100msLastTime; 
const long _10msTime = 10;        // 10 milli seconds
unsigned long _10msLastTime;

const int EchoPin = 8; //超声波信号输入
const int TrigPin = 9; //超声波控制信号输出
int currDistance = 0; // 距离

//测量距离 单位厘米
long MeasuringDistance()
{
  long duration;
   
  digitalWrite(TrigPin, LOW); 
  delayMicroseconds(2); 
  digitalWrite(TrigPin, HIGH); //输出高电平,延时10ms
  delayMicroseconds(10);
  digitalWrite(TrigPin, LOW);
  
  duration = pulseIn(EchoPin, HIGH); //接受返回信号
  return duration /58; //计算距离
}

void setup()
{
  pinMode(EchoPin, INPUT); //声明各引脚模式
  pinMode(TrigPin, OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
  currDistance = MeasuringDistance(); //读取前端距离
  TimeProc();
  
}


void TimeProc()
{
  //1000ms执行一次
  if ((millis() - _1000msLastTime) >= _1000msTime)
  {
    _1000msLastTime = millis( );    
 
    //
    Serial.print("Distance is: "); 
    Serial.print(currDistance);
    Serial.println(" cm;");
  }
  //100ms执行一次
  if ((millis() - _100msLastTime) >= _100msTime)
  {
    _100msLastTime = millis( );  

     //
     
  }
  //10ms执行一次
  if ((millis() - _10msLastTime) >= _10msTime)
  {
    _10msLastTime = millis( );  

     //
     
  }

}


2、物体测量和串口显示

钢尺测量

串口显示

注意:测量时候被测物体放置不要晃动,否则测量数据有变化

三、检测距离小于设定值输出IO控制

1、代码


const long _1000msTime = 1000;    // 1000 milli seconds
unsigned long _1000msLastTime;
const long _100msTime = 100;      // 100 milli seconds
unsigned long _100msLastTime; 
const long _10msTime = 10;        // 10 milli seconds
unsigned long _10msLastTime;

const int EchoPin = 8; //超声波信号输入
const int TrigPin = 9; //超声波控制信号输出
int currDistance = 0; // 距离

const int jdq=10;

//测量距离 单位厘米
long MeasuringDistance()
{
  long duration;
   
  digitalWrite(TrigPin, LOW); 
  delayMicroseconds(2); 
  digitalWrite(TrigPin, HIGH); //输出高电平,延时10ms
  delayMicroseconds(10);
  digitalWrite(TrigPin, LOW);
  
  duration = pulseIn(EchoPin, HIGH); //接受返回信号
  return duration /58; //计算距离
}

void setup()
{
  //继电器
  pinMode(jdq,OUTPUT);
  digitalWrite(jdq, HIGH);
  //超声波
  pinMode(EchoPin, INPUT); //声明各引脚模式
  pinMode(TrigPin, OUTPUT);
  //串口
  Serial.begin(9600);
}

void loop() 
{
  currDistance = MeasuringDistance(); //读取前端距离
  TimeProc();
  
}


void TimeProc()
{
  //1000ms执行一次
  if ((millis() - _1000msLastTime) >= _1000msTime)
  {
    _1000msLastTime = millis( );    
 
    //
    Serial.print("Distance is: "); 
    Serial.print(currDistance);
    Serial.println(" cm;");
  }
  //100ms执行一次
  if ((millis() - _100msLastTime) >= _100msTime)
  {
    _100msLastTime = millis( );  

     //
     if(currDistance < 10)
     {
        digitalWrite(jdq, LOW);
     }
     else
     {
        digitalWrite(jdq, HIGH);
     }
  }
  //10ms执行一次
  if ((millis() - _10msLastTime) >= _10msTime)
  {
    _10msLastTime = millis( );  

     //
     
  }

}

2、距离检测和继电器输出

(1)串口显示测量距离

(2)物体检测和继电器输出

在设置的距离范围10厘米之外,继电器没有输出

在设置的距离范围10厘米内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Big_潘大师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值