风筝
发表于: 2018-10-4 18:47:06 | 显示全部楼层

超声波传感器不仅提供距离测量实用程序,而且没有任何物理接触,但需要我们在无噪音和光线的情况下进行测量,与基于激光的距离测量仪器不同。此外,即使在基于激光的仪器经常降低其效率的日光下,这些仪器也便宜且更可靠。距离测量仪器已经使用了几个世纪,并且随着时间的推移已经在其设计中进行了改进。今天,诸如尺和英寸带之类的距离测量仪器已经过时,并且数字仪器被用于更大规模的这种目的。从一点测量任何距离的高精度和更方便使得该过程容易。这种仪器广泛用于建筑工地和液位监测。在需要精确和远程控制液位监测的容器和场所中,基于超声波传感器的距离测量仪器易于操作。由于该设计基于嵌入式系统,整个过程由微控制器控制,因此可以添加许多功能。例如,远程传输液位和相应的数字流体开关的ON / OFF功能。

Distance-measurement-arduino.jpg


理论知识

Arduino UNO开发板因其庞大的库和简单的编程而受到欢迎。带有多个定时器的数字和I / O引脚使我们能够轻松地设计和开发复杂项目。 Arduino UNO开发板兼容各种传感器,并以低成本提供卓越的效率。微控制器是一个免费的源设计,是世界上最苛刻的电路板之一。


超声波传感器也称为声纳传感器已经使用了数十年。它们曾被用于海上船舶的测绘和机械系统中破损/故障部件的检测。超声波传感器通过发射超声波来工作,这些波浪撞击发射器前方的障碍物。波被反射并撞击接收器。相对于超声波的速度,波从发射到接收所花费的时间用于测量前方存在的障碍物的距离。


空气中声速约为每秒341米(1100英尺)。超声波距离传感器使用该信息以及发送和接收声音信号之间的时间差来确定物体之间的距离。它使用以下数学公式。

距离=时间x声速除以2

时间=发送超声波与接收超声波之间的时间

此数字除以2,因为声波必须传播到物体并返回。


由于在模拟中物理上不能改变距离,因此SR04的仿真模型与电位计连接,并且使用该电位计改变传感器的距离。

ultrasonic-distance-sensor.jpg


距离的测量需要以某种方式表达,对于嵌入式系统,最好的方法是使用LCD。基于16×2 HDD44780驱动器的LCD以低廉的价格提供高效,流畅的功能。 16列和2行提供足够的空间来显示结果。 LCD与所有型号的Arduino板均兼容,因此也适用于该项目。


需要的组件

该项目所需的组件简单且成本低。

●    Arduino UNO开发板

●    超声波传感器SR04

●    LCD液晶显示屏1602(基于HDD44780驱动)

●    6v电池或5v USB电源(移动适配器/笔记本电脑)

●    10K电位器

●    连接导线

●    面包板


连接原理图

Arduino-UNO-Ultrasonic-Distance-Measurement-1.jpg


仿真

在这里已经演示了基于Proteus 8的仿真模型。该仿真使设计人员和开发人员能够在进行硬件设计之前验证电路的功能。如果最终产品由于错误的连接而无法运行,则直接在PCB或veroboard上开发硬件会很紧张。模拟有助于跟踪错误和改进设计,您可以随时为您的设计添加更多创意,并在模拟上进行测试。用于Arduino UNO和超声波传感器的仿真模型在互联网上很容易获得。所需的唯一工作是按照电路图中的描述连接所有组件。


该项目的工作机制简单易懂。超声波传感器有4个引脚,其中2个引脚用于供电,其余2个引脚用于触发和回波。 MCU通过触发引脚发送超声波,然后在回波引脚上读取超声波的接收时间。定义超声波行进的速度,并因此测量距离。


必须在其仿真模型中添加Arduino代码的hex文件。 hex文件以二进制指令的形式提供给MCU进行处理。


LCD用作显示结果的图形界面。 可以通过在引脚3上提供0-5v来调整显示亮度,这在模拟的情况下是不必要的,但是适用于硬件设计。 确保引脚与Arduino小心连接,如电路图中所述。


10k Preset的使用仅用于在传感器之间制作对象的模拟中。这里预设作为对象。


使用带超声波传感器的电位器使用户能够控制传感器的输入距离并相应地观察结果的变化。该电位计的值必须高于1K欧姆。


由于仿真模型确保了设计的正常运行,因此如果您的仿真工作正常,您可以继续开发硬件设计。但是,如果您的模拟无法正常工作,则需要对错误进行故障排除。


如果您的液晶显示屏显示距离且变化但距离不正确,您可能会以错误的方式指示您的超声波传感器,确保目标障碍物和超声波传感器之间的路径畅通,并且传感器面临障碍物。或者,超声波传感器与Arduino的连接可能是错误的。如果液晶显示屏上没有显示,则需要检查LCD与Arduino的代码和连接。


如果未按照电路图中的说明连接所有组件,则模拟可能不起作用或未按预期显示。


代码

代码已在Arduino IDE上成功编译。代码从LCD库开始。定义LCD和Arduino UNO的引脚连接,用于正常通信。然后定义所有使用的组件和引脚。


在setup()函数中定义了波特率,并在引脚的输入/输出功能之间进行选择。这里定义了LCD尺寸1602,以及最初几个命令用于清除LCD。


loop()函数包含指令的主体。只要MCU运行,它就会不断迭代。这里使用多个命令处理基于超声波的测量的整个机制。使用命令在LCD上显示计算后计算距离。

  1. #include <LiquidCrystal.h>;

  2. LiquidCrystal LCD(10,9,5,4,3,2);

  3. const int trigPin=13;
  4. const int echoPin=11;
  5. int myCounter=0;
  6. int servoControlPin=6;

  7. long distance , duration;

  8. void setup() {
  9. Serial.begin (9600);
  10. LCD.begin (16,2);
  11. pinMode (trigPin, OUTPUT);
  12. pinMode (echoPin, INPUT);
  13. LCD.setCursor(0,0);
  14. }

  15. void loop() {

  16. digitalWrite(13,LOW); //
  17. delayMicroseconds(2000);
  18. digitalWrite(13,HIGH);
  19. delayMicroseconds(15);
  20. digitalWrite(13,LOW);
  21. delayMicroseconds(10);

  22. duration = pulseIn(11, HIGH); //To receive the reflected signal.

  23. distance= duration*0.034/2;

  24. LCD.setCursor(0,0); //set the cursor to column 0 and line 1
  25. LCD.print(” Distance meter”);
  26. LCD.setCursor(0,1);
  27. LCD.print(“Distance = “);
  28. LCD.print(distance);
  29. LCD.print(“cm”);
  30. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 02:05 , Processed in 0.159907 second(s), 10 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表