Arduino超声波测距
2023-12-19 21:15:35
    		目录
一、硬件
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!