风筝
发表于: 2020-4-10 16:23:40 | 显示全部楼层

在本篇文章中,我们将使用超声波传感器、Arduino开发板和OLED显示屏设计一款测距仪。超声波传感器用于测量距离,充当声纳。它发送一定频率的超声波,该超声波在撞击物体后会返回,然后计算其传播的时间。现在,让我们了解如何使用Arduino和HC-SR04超声波传感器进行距离测量。

Ultrasonic-Sensor-Arduino-with-OLED-Display.jpg


所需的组件

●    Arduino Uno开发板

●    超声波传感器HC-SR04

●    0.96英寸OLED显示屏

●    面包板

●    连接线

●    5V电源


超声波传感器HC-SR04

HC-SR04超声波传感器像蝙蝠一样使用声纳来确定到物体的距离。它易于使用,提供出色的非接触范围检测,具有高精度和稳定的读数。


HC-SR04的测量范围从2厘米到400厘米。它的操作不受日光或黑色材料的影响(尽管像布这样的声学上柔软的材料可能很难检测到)。它带有超声波发射器和接收器模块。


超声波距离传感器HC-SR04的规格如下:

●    最小测量范围:2厘米

●    最大测量范围:400厘米

●    精度:3毫米

●    工作电压:+ 5V

●    工作电流:15mA

●    工作频率:40 KHz

●    触发输入信号:10us脉冲

●    测量角度:15度


它是如何工作的?

超声波传感器会定期发出短的高频声脉冲。它们以声速在空气中传播。如果它们撞击物体,则它们将作为回波信号反射回传感器,传感器本身根据发射信号和接收回波之间的时间间隔来计算到目标的距离。


我们必须将这段时间转换为厘米,以计算行进距离。我们将使用以下方程式计算距离。

S = v * t

超声波基本上是一种以340 m / s(0.034 cm / s)的速度传播的声波。超声波传感器正在测量撞击物体然后返回的时间,但是我们只需要撞击物体的时间。因此,我们将其除以2。

S =(t * 0.034)/ 2


0.96英寸I2C OLED显示屏

本文使用的是一个0.96英寸的蓝色OLED显示屏模块。显示屏模块可以使用SPI / I2C协议与任何微控制器连接。分辨率为128×64。该模块包括显示电路板、显示屏、预焊接到板上的4针公接头。

i2c-oled.jpg


OLED(有机发光二极管)是一种自发光技术,由置于阳极和阴极之间的多层有机薄膜组成。与LCD技术相比,OLED不需要背光。 OLED在几乎所有类型的显示屏中都具有很高的应用潜力,并且被认为是下一代平板显示屏的替代技术。


连接电路图

以下是超声波传感器和arduino的连接方式:

circuit-diagram.jpg


源代码/程序

首先请复制该测距仪的代码,然后编译并上传到Arduino开发板。但是在此之前,您需要添加这些库,请从下面链接进行下载。

1.  Adafruit SSD1306库

2.  Adafruit GFX库

  1. #include <SPI.h>
  2. #include <Wire.h>
  3. #include <Adafruit_GFX.h>
  4. #include <Adafruit_SSD1306.h>

  5. #define trigPin 9
  6. #define echoPin 8

  7. #define OLED_RESET 4
  8. Adafruit_SSD1306 display(OLED_RESET);

  9. void setup() {
  10. Serial.begin (9600);
  11. pinMode(trigPin, OUTPUT);
  12. pinMode(echoPin, INPUT);
  13. display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64)
  14. display.clearDisplay();

  15. }

  16. void loop() {
  17. float duration;
  18. float distance_cm;
  19. float distance_in;

  20. digitalWrite(trigPin, LOW); //PULSE ___|---|___
  21. delayMicroseconds(2);
  22. digitalWrite(trigPin, HIGH);
  23. delayMicroseconds(10);
  24. digitalWrite(trigPin, LOW);

  25. duration = pulseIn(echoPin, HIGH);

  26. distance_cm = (duration/2) / 29.1;
  27. distance_in = (duration/2) / 73.914;

  28. display.setCursor(30,0); //oled display
  29. display.setTextSize(1);
  30. display.setTextColor(WHITE);
  31. display.println("Range Finder");

  32. display.setCursor(10,20); //oled display
  33. display.setTextSize(2);
  34. display.setTextColor(WHITE);
  35. display.println(distance_cm);
  36. display.setCursor(90,20);
  37. display.setTextSize(2);
  38. display.println("cm");

  39. display.setCursor(10,45); //oled display
  40. display.setTextSize(2);
  41. display.setTextColor(WHITE);
  42. display.println(distance_in);
  43. display.setCursor(90,45);
  44. display.setTextSize(2);
  45. display.println("in");
  46. display.display();

  47. delay(500);
  48. display.clearDisplay();

  49. Serial.println(distance_cm);
  50. Serial.println(distance_in);
  51. }
复制代码

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

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 11:47 , Processed in 0.051859 second(s), 9 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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