使用Arduino和超声波传感器实现简单测距

一、一个超声波传感器的使用

1.接线部分

我使用Arduino MEGA 2560为例给大家展示一下接线
Vcc---------------5v
Trig---------------D50
Echo-------------D51
Gnd--------------Gnd
如果你使用的是Arduino uno可以按照实际情况来改变Trig和Echo的接线,因为Arduino uno没有D50和D51。

2.代码部分

//一个超声波
#define Trig 50 //引脚Tring 连接 IO D50
#define Echo 51 //引脚Echo 连接 IO D51

float cm; //距离变量
float temp;  

void setup() 
{
    Serial.begin(9600);
    
    //定义引脚
    pinMode(Trig, OUTPUT);
    pinMode(Echo, INPUT);
    
    void ceju1();
}

void loop() 
{
    ceju1();  
}

void ceju1()
{
  //给Trig发送一个低高低的短时间脉冲,触发测距
    
    digitalWrite(Trig, LOW); //给Trig发送一个低电平
    
    delayMicroseconds(2); //等待 2微妙
    
    digitalWrite(Trig,HIGH); //给Trig发送一个高电平
    
    delayMicroseconds(10); //等待 10微妙
    
    digitalWrite(Trig, LOW); //给Trig发送一个低电平
    
    temp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,
    
    //pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时
    
    //返回脉冲的长度
    
    //声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000
    
    //因为发送到接收,实际是相同距离走了2回,所以要除以2
    
    //距离(厘米) = (回波时间 * (34 / 1000)) / 2
    
    //简化后的计算公式为 (回波时间 * 17)/ 1000
    
    cm = (temp * 17 )/1000; //把回波时间换算成cm
    
    Serial.print("Echo =");
    
    Serial.print(temp);//串口输出等待时间的原始数据
    
    Serial.print(" | | Distance = ");
    
    Serial.print(cm);//串口输出距离换算成cm的结果
    
    Serial.println("cm");
    
    delay(100);
}

3.在串口看测到的数据

查看超声波传感器传来的数据

二、两个超声波传感器的使用

1.接线部分

我使用Arduino MEGA 2560为例给大家展示一下接线
Vcc---------------5v
Trig---------------D50
Echo-------------D51
Gnd--------------Gnd
Vcc---------------5v
Trig1--------------D52
Echo1------------D53
Gnd--------------Gnd
如果你使用的是Arduino uno可以按照实际情况来改变Trig和Echo的接线,因为Arduino uno没有D50、D51、
D52、D53。

2.代码部分

//两个超声波
#define Trig 50 //引脚Tring 连接 IO D50
#define Echo 51 //引脚Echo 连接 IO D51
#define Trig1 52 //引脚Tring 连接 IO D52
#define Echo1 53 //引脚Echo 连接 IO D53 

float cm; //距离变量
float temp;  
float cm1; //距离变量
float temp1;  

void setup() {

Serial.begin(9600);

//定义引脚
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Trig1, OUTPUT);
pinMode(Echo1, INPUT);

void ceju1();
void ceju2();

}

void loop() 
{
    ceju1();
    ceju2();   
}

void ceju1()
{
  //给Trig发送一个低高低的短时间脉冲,触发测距
    
    digitalWrite(Trig, LOW); //给Trig发送一个低电平
    
    delayMicroseconds(2); //等待 2微妙
    
    digitalWrite(Trig,HIGH); //给Trig发送一个高电平
    
    delayMicroseconds(10); //等待 10微妙
    
    digitalWrite(Trig, LOW); //给Trig发送一个低电平
    
    temp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,
    
    //pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时
    
    //返回脉冲的长度
    
    //声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000
    
    //因为发送到接收,实际是相同距离走了2回,所以要除以2
    
    //距离(厘米) = (回波时间 * (34 / 1000)) / 2
    
    //简化后的计算公式为 (回波时间 * 17)/ 1000
    
    cm = (temp * 17 )/1000; //把回波时间换算成cm
    
    Serial.print("Echo =");
    
    Serial.print(temp);//串口输出等待时间的原始数据
    
    Serial.print(" | | Distance = ");
    
    Serial.print(cm);//串口输出距离换算成cm的结果
    
    Serial.println("cm");
    
    delay(100);
}
void ceju2()
{
  //给Trig发送一个低高低的短时间脉冲,触发测距
    
    digitalWrite(Trig1, LOW); //给Trig发送一个低电平
    
    delayMicroseconds(2); //等待 2微妙
    
    digitalWrite(Trig1,HIGH); //给Trig发送一个高电平
    
    delayMicroseconds(10); //等待 10微妙
    
    digitalWrite(Trig1, LOW); //给Trig发送一个低电平
    
    temp1 = float(pulseIn(Echo1, HIGH)); //存储回波等待时间,
    
    //pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时
    
    //返回脉冲的长度
    
    //声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000
    
    //因为发送到接收,实际是相同距离走了2回,所以要除以2
    
    //距离(厘米) = (回波时间 * (34 / 1000)) / 2
    
    //简化后的计算公式为 (回波时间 * 17)/ 1000
    
    cm1 = (temp1 * 17 )/1000; //把回波时间换算成cm
    
    Serial.print("Echo1 =");
    
    Serial.print(temp1);//串口输出等待时间的原始数据
    
    Serial.print(" | | Distance = ");
    
    Serial.print(cm1);//串口输出距离换算成cm的结果
    
    Serial.println("cm");
    
    delay(100);
}

3.在串口看测到的数据

查看超声波传感器传来的数据

4.实物图连接

实物图连接
如果对你有用,点赞收藏哦!
创作不易,还需要你们的支持
后续还会更新更多Arduino和传感器的使用。

  • 10
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
以下是Arduino光敏传感器和超声波测距传感器测试代码: 光敏传感器: ``` int sensorPin = A0; // 光敏传感器连接到模拟输入A0 int sensorValue = 0; // 存储传感器值 void setup() { Serial.begin(9600); // 初始化串口通信 } void loop() { sensorValue = analogRead(sensorPin); // 读取传感器值 Serial.println(sensorValue); // 将传感器值输出到串口 delay(100); // 等待100毫秒 } ``` 超声波测距传感器: ``` #define trigPin 9 // 超声波测距传感器的Trig引脚连接到数字输出9 #define echoPin 10 // 超声波测距传感器的Echo引脚连接到数字输入10 void setup() { Serial.begin(9600); // 初始化串口通信 pinMode(trigPin, OUTPUT); // 将Trig引脚设置为输出模式 pinMode(echoPin, INPUT); // 将Echo引脚设置为输入模式 } void loop() { long duration, cm; digitalWrite(trigPin, LOW); // 将Trig引脚设置为低电平 delayMicroseconds(2); // 等待2微秒 digitalWrite(trigPin, HIGH); // 将Trig引脚设置为高电平 delayMicroseconds(10); // 等待10微秒 digitalWrite(trigPin, LOW); // 将Trig引脚设置为低电平 duration = pulseIn(echoPin, HIGH); // 读取Echo引脚的脉冲宽度 cm = duration / 58; // 将脉冲宽度转换为厘米距离 Serial.print(cm); // 将距离输出到串口 Serial.println("cm"); delay(100); // 等待100毫秒 } ``` 注意:在将以上代码上传到Arduino板子之前,需要先将光敏传感器和超声波测距传感器正确连接到Arduino板子的引脚上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是北豼不太皮吖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值