【雕爷学编程】Arduino动手做(58)---HC-SR04超声波传感器模块4

在这里插入图片描述

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验五十八:宽电压HC-SR04超声波模块3.3V-5V 测距离传感器板 带UART IIC接口

在这里插入图片描述
HC-SR04超声波测距传感器模块的实验环境
一、HC-SR04超声波测距传感器模块实验所需硬件清单

TM1637四位数码管X1
Arduino Uno开发板 X1
杜邦线 若干(备了9条)
LED发光二极管(蓝、绿色)X2
IIC/I2C 1602 LCD液晶屏模块X1
HC-SR04超声波测距传感器模块X1
Proto Shield原型扩展板(带mini面包板)X1

在这里插入图片描述

实验接线示意图

在这里插入图片描述

在这里插入图片描述

HC-SR04超声波测距传感器模块的几个实验
程序一:HC-SR04 2022.5.14测距开始
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序一:HC-SR04 2022.5.14测距开始
  Arduino------HG-SR04
  5V------------VCC
  GND-----------GND
  D2------------Echo
  D3------------Trig
*/

float    distance;
const int  echo = 2;                        //echO接D2脚
const int  trig = 3;                        //trig接D3脚

void setup() {
    
    
  Serial.begin(9600);                       //波特率9600
  pinMode(echo, INPUT);                      //设置echo为输入脚
  pinMode(trig, OUTPUT);                     //设置trig为输出脚
  Serial.println("HC-SR04 2022.5.14测距开始:");
}

void loop() {
    
    
  digitalWrite(trig, LOW);
  delayMicroseconds(20);
  digitalWrite(trig, HIGH);
  delayMicroseconds(20);
  digitalWrite(trig, LOW);   //发一个20US的高脉冲去触发Trig

  distance  = pulseIn(echo, HIGH);    //计数接收高电平时间
//计算距离 1:声速:340M/S  2:实际距离1/2声速距离 3:计数时钟为1US
  distance  = distance * 340 / 2 / 10000;       
Serial.print("距离: ");
  Serial.print(distance);
  Serial.println("cm");
  delay(20);  //单次测离完成后加20mS的延时再进行下次测量。防止近距离测量时,测量到上次余波,导致测量不准确。
  delay(500);                             //500mS测量一次
}

(3)实验串口返回情况

在这里插入图片描述
(3)实验场景图

在这里插入图片描述
程序二:阙值50厘米控制板载LED
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序二:阙值50厘米控制板载LED
  Arduino------HG-SR04
  5V------------VCC
  GND-----------GND
  D2------------Echo
  D3------------Trig
*/

int inputPin = 2; // 定义超声波信号接收接口
int outputPin = 3; // 定义超声波信号发出接口
int ledpin = 13;

void setup() {
    
    
  Serial.begin(9600);
  pinMode(ledpin, OUTPUT);
  pinMode(inputPin, INPUT);
  pinMode(outputPin, OUTPUT);
}

void loop() {
    
    
  digitalWrite(outputPin, LOW); // 使发出发出超声波信号接口低电平2μs
  delayMicroseconds(2);
  digitalWrite(outputPin, HIGH); // 使发出发出超声波信号接口高电平10μs,这里是至少10μs
  delayMicroseconds(10);
  digitalWrite(outputPin, LOW); // 保持发出超声波信号接口低电平
  int distance = pulseIn(inputPin, HIGH); // 读出脉冲时间
  distance = distance / 58; // 将脉冲时间转化为距离(单位:厘米)
  Serial.println(distance); //输出距离值
  delay(50);
  if (distance >= 50)
  {
    
     //如果距离大于50厘米小灯亮起
    digitalWrite(ledpin, HIGH);
    Serial.println("LED ON");
  }//如果距离小于50厘米小灯熄灭
  else
    digitalWrite(ledpin, LOW);
}

(2)实验串口返回情况(大于等于50厘米时LED亮)

在这里插入图片描述
(3)打开Arduino IDE——工具——串口绘图器,查看实验波形
实验串口绘图器返回情况(移动一本书产生的距离变动波形)

在这里插入图片描述
(4)实验场景图

在这里插入图片描述
程序三,串口输出等待时间的原始数据
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序三:串口输出等待时间的原始数据
*/

#define Echo 2 // 定义超声波信号接收接口
#define Trig 3 // 定义超声波信号发出接口

float cm; //距离变量
float temp; //返回原始数值

void setup() {
    
    
  Serial.begin(115200);
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);
}

void loop() {
    
    
  //给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("原始 ");
  Serial.println(temp);//串口输出等待时间的原始数据
  Serial.print("距离 ");
  Serial.println(cm);//串口输出距离换算成cm的结果

  delay(50);
}

(3)打开Arduino IDE——工具——串口绘图器,查看实验波形
实验串口绘图器返回情况(这里是测距返回原始数值的波形)

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132333723
今日推荐