基于Arduino超声波测距

任务要求

能够利用arduino和超声波传感器测量与物体之间的距离,精度可以实现小数点后两位。

系统总体设计

基于Arduino超声波测距_第1张图片
超声波传感器: 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停 止计时,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离。
Arduino: 为控制核心,在其中对传感器进行相应的处理和算法处理,获得距离。
Lcd1602: 将获得的距离值显示在lcd显示屏上。

硬件设计

超声波传感器:采用HC-SR04模块,HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。
超声波传感器模块电路:
基于Arduino超声波测距_第2张图片
LCD1602显示模块电路:
基于Arduino超声波测距_第3张图片

软件设计

超声波传感器的基本工作原理:
(1)采用IO口TRIG触发测距,给最少10us的高电平信号。
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回, 通过IO口ECHO输出一个高电平, 高电平持续的时间就是超声波从发射到返回的时间。 测试距离=(高电平时间*声速(344M/S))/2。

#include 
LiquidCrystal lcd(12,11,10,5,4,3,2);//定义LCD的引脚连接情况
 
// 设定SR04连接的Arduino引脚
const int TrigPin = 7; 
const int EchoPin = 6; 
float distance; 
void setup() 
{   // 初始化串口通信及连接SR04的引脚
        Serial.begin(9600); 
        pinMode(TrigPin, OUTPUT); 
    // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
        pinMode(EchoPin, INPUT); 
        lcd.begin(16,2);  //定义lcd列数及行数
        lcd.clear();//清屏
        lcd.setCursor(0,0);//光标位置置于0,0 
} 
void loop() 
{ 
    // 产生一个10us的高脉冲去触发TrigPin 
        digitalWrite(TrigPin, LOW); 
        delayMicroseconds(2); 
        digitalWrite(TrigPin, HIGH); 
        delayMicroseconds(10);
        digitalWrite(TrigPin, LOW); 
    // 检测脉冲宽度,并计算出距离
        distance = pulseIn(EchoPin, HIGH) / 58.00;
        delay(1000); 
        lcd.clear();//清屏
        lcd.setCursor(0,0);//光标从这里开始
        lcd.print("Distance is");
        lcd.setCursor(0,1);//换行后显示距离
        lcd.print(distance);
}

pulseIn函数用于读取引脚脉冲的时间长度,单位为微秒,声速344m/s
测试距离cm=pulseIn()(微秒)x344x100(cm)/1000000(微秒)/2约等于pulseIn()/58.0

结果

基于Arduino超声波测距_第4张图片

测量值(cm) 4.30 5.30 6.30 7.30 8.30
实际值(cm) 4.48 5.38 6.29 7.34 8.31

你可能感兴趣的:(基于Arduino超声波测距)