目录
一、硬件
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厘米内