找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 lxf 于 2020-8-17 13:36 编辑

第20课 超声波报警器实验案例


目标

1、超声波传感器的使用
2、实现当物体接近超声波时,蜂鸣器发出警报,否则蜂鸣器不发出警报

实验材料

Arduino UNO开发板
HC-SR04超声波传感器模块
蜂鸣器模块(频率可控)
配套USB数据线
配套杜邦线若干
Arduino IDE软件

微信图片_20200624113919.png

内容

接线图

图片1.png

接线方式

Arduino UNO    <------>  HC-SR04超声波传感器模块
        5V             <------>                      VCC
      GND           <------>                      GND
        7               <------>                      Trig
        3               <------>                      Echo
Arduino UNO    <------>         蜂鸣器模块
       5V              <------>                  VCC
     GND            <------>                  GND
       6                <------>                   IO

流程图

微信图片_20200624113955.png

程序实现代码

  1. float checkdistance_7_3() {   //定义一个浮点型函数checkdistance_7_3()
  2.   digitalWrite(7, LOW);     //低高低电平发一个短时间脉冲去Trigpin   
  3.   delayMicroseconds(2);
  4.   digitalWrite(7, HIGH);
  5.   delayMicroseconds(10);
  6.   digitalWrite(7, LOW);
  7.   float distance = pulseIn(3, HIGH) / 58.00;   //将回波时间换算成distance
  8.   delay(10);
  9.   return distance;  //向调用函数返回distance
  10. }
  11. void setup(){
  12.   pinMode(7, OUTPUT);   //定义7号数字管脚类型为输出
  13.   pinMode(3, INPUT);    // 定义3号数字管脚类型为输入
  14.   pinMode(6, OUTPUT);  //定义6号数字管脚类型为输出
  15. }
  16. void loop(){
  17.   if (checkdistance_7_3() < 30) {   //如果超声波传感检测到物体的距离小于30
  18.     tone(6,131);            //那么蜂鸣器6号管脚响起C调do的低音
  19.   } else {
  20.     noTone(6);   //否则,蜂鸣器6号管脚不响
  21.   }
  22. }
复制代码

float 浮点型

float,浮点型数据,就是有小数点的数字,浮点数经常被用来模拟连续值,因为他们比整数具有更大的精确度,浮点数的取值范围在3.4028235 E+38 ~ -3.4028235 E+38,浮点型数据可存储4个字节的数据。float只有6-7位有效数字,这指的是总位数,而不是小数点右边的数字,在Arduino Uno中,double型与float型的大小相同,这一点是和其它平台不同的。浮点数字在有些情况下是不准确的,在数据大小比较时,可能会产生奇怪的结果,例如 6.0 / 3.0 可能不等于 2.0。假如Arduino所运行的程序需要很快速度执行,这时应尽量避免使用浮点型数据运算而采用整数运算,因为浮点运算速度远远慢于整数运算。进行浮点数值运算时,应在数值末尾加上小数点,否则Arduino将以int类型进行运算处理。

示例:

  1. Int x;
  2. Int y;
  3. flaot z;
  4. float s = 1.117;
  5. x = 1;
  6. y = x / 2; //运算结果y为0
  7. //因为整数不能容纳小数
  8. z = (float)x / 2.0; //运算结果z为0.5
  9. // 浮点数运算时必须使用小数点,即使用2.0而不是2。
复制代码

语法

float var = val;
var——float型变量名称
val——分配给该变量的值

delayMicroseconds()

delayMicroseconds()与delay()函数都可用于暂停程序运行,不同的是,delayMicroseconds()的参数单位是微秒(1毫秒=1000微秒)。

语法

delayMicroseconds(us)

参数

us: 暂停时间,该时间单位是微秒(unsigned long型数据)

返回值


pulseIn()

读引脚的脉冲信号, 被读取的脉冲信号可以是 HIGH 或 LOW,例如我们要检测HIGH脉冲信号, Arduino将在引脚变为高电平时开始计时, 当引脚变为低电平时停止记时,并返回脉冲持续时长(时间单位:微秒)。如果在超时时间内没有读到脉冲信号的话, 将返回0。
根据经验发现,pulseIn()函数在检测脉冲间隔过短的信号时会产生错误。Arduino可检测的脉冲间隔时间范围是10微秒到3分钟。请留意假如调用pulseIn()函数时读取信号的引脚上已经为高电平,此时Arduino将等待该引脚变为低电平以后再开始检测脉冲信号。另外只有Arduino的中断是开启时,才能使用pulseIn()。

语法

pulseIn(pin, value)
pulseIn(pin, value, timeout)

参数

pin 引脚编号
value 脉冲状态
timeout 超时时间(单位:微秒)
如果Arduino在超时时间(timeout)内没有读到脉冲信号的话, 该函数将返回0,超时时间参数是可选参数,其默认值为1秒。

返回值

脉冲持续时长。
如果在超时时间内没有读到脉冲信号, 将返回0。

return

终止一个函数,并向调用此函数的函数返回一个值

语法

return;
return value; // 有无返回值value都可以

参数

value: 任何类型的变量或常量

示例:

  1. int checkSensor(){
  2. if (analogRead(0) > 400) {
  3. return 1; //向调用函数返回数值1
  4. else{
  5. return 0; //向调用函数返回数值0
  6. }
  7. }
复制代码
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册