Arduino超声波测距

2023-12-19 21:15:35

目录

一、硬件

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厘米内

文章来源:https://blog.csdn.net/panjinliang066333/article/details/135085306
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。