Arduino+oled+超声波传感器,实时显示距离

当你使用 Arduino 控制超声波传感器时,你可能需要实时监测超声波传感器与目标物体之间的距离。为了更方便地实时显示超声波传感器的测距结果,我们可以使用 OLED 屏幕来显示测距结果。本篇博客将向你展示如何使用 Arduino 和 OLED 屏幕来实现这一功能。

所需材料

Arduino 开发板
超声波传感器
OLED 屏幕
杜邦线若干

步骤

1、连接电路

将超声波传感器和 OLED 屏幕分别连接到 Arduino 开发板上。超声波传感器的 VCC 引脚连接到 Arduino 的 5V 引脚,GND 引脚连接到 Arduino 的 GND 引脚,Trig 引脚连接到 Arduino 的 12 号引脚,Echo 引脚连接到 Arduino 的 11 号引脚。OLED 屏幕的 VCC 引脚连接到 Arduino 的 3.3V或者5v 引脚,GND 引脚连接到 Arduino 的 GND 引脚,SDA 引脚连接到 Arduino 的 A4 引脚,SCL 引脚连接到 Arduino 的 A5 引脚。

2、引入库

在 Arduino 开发环境中,需要添加一些库文件,以便控制 OLED 屏幕。首先,在 Arduino 开发环境中选择“工具” -> “管理库”,然后搜索并安装 Adafruit_SSD1306 库和 Adafruit_GFX 库。这两个库是用于控制 OLED 屏幕的必备库文件。

初始化 OLED 屏幕

在程序的开头,添加以下代码,以初始化 OLED 屏幕:

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>

#define OLED_RESET 4
Adafruit_SSD1306 OLED(OLED_RESET);//定义oled对象
#define TRIGGER_PIN A0//定义超声波引脚
#define ECHO_PIN A1

void setup() {
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.begin(9600);
  OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C);//SSD1306_SWITCHCAPVCC 是电源类型,表示使用内部电源,0x3C 是 I2C 地址,指定 OLED 屏幕的地址。必须写
  OLED.clearDisplay();//清除 OLED 屏幕上的显示内容
  OLED.setTextColor(WHITE);//设置字体颜色
  OLED.setTextSize(1);//设置字体大小
}
}

在这段代码中,我们首先引入了 Wire.h、Adafruit_SSD1306.h 和 Adafruit_GFX.h 库文件,然后定义了 OLED 屏幕的复位引脚号,接着定义了一个 OLED 对象,用于控制 OLED 屏幕的操作。在 setup() 函数中,我们需要将超声波传感器的 TRIGGER 引脚和 ECHO 引脚分别设置为输出和输入,我们使用 OLED.begin() 函数初始化 OLED 屏幕,并使用 OLED.clearDisplay() 函数清空屏幕上的显示内容,最后使用 OLED.display() 函数将清空的屏幕显示出来。

4、测量距离并显示

在 loop() 函数中,我们使用 ping() 函数测量超声波传感器和目标物体之间的距离,并将测量结果保存在 duration 变量中。然后,我们使用 cm 函数将毫秒数转换为厘米数,保存在 distance 变量中。最后,我们使用 OLED.setCursor() 函数将光标移动到 OLED 屏幕的左上角,并使用 OLED.println() 函数将距离显示在屏幕上。

void loop() {
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  unsigned long duration = pulseIn(ECHO_PIN, HIGH);
  unsigned int distance = duration / 58; // 将微秒转换为厘米
  OLED.clearDisplay();//刷新屏幕内容
  OLED.setCursor(0, 0);//文本显示位置,这里表示从0行0列的位置开始显示
  OLED.println("Distance:");//在屏幕上换行打印distance
  OLED.setCursor(0, 10);
  OLED.print(distance);
  OLED.print(" cm");
  OLED.display();
  Serial.println(distance);//在串口打印
  delay(100); // 刷新屏幕的时间间隔
}

}

在这段代码中,我们首先定义了 duration 和 distance 变量,用于保存测量结果。然后,我们设置 TRIGGER_PIN引脚为输出模式,并将其输出低电平,延时 2 微秒后将其输出高电平,延时 10 微秒后将其输出低电平,从而触发超声波传感器的测距操作。接着使用 pulseIn() 函数测量超声波传感器和目标物体之间的距离。

测量距离后,我们使用 OLED.clearDisplay() 函数清空 OLED 屏幕上的显示内容,并使用 OLED.setCursor() 函数将光标移动到 OLED 屏幕的左上角。然后,我们使用 OLED.println() 函数将“Distance:”和测量结果显示在 OLED 屏幕上,并使用 OLED.display() 函数将显示内容显示出来。最后,我们使用 delay() 函数延时 500 毫秒,以便更好地观察显示结果。

接下来就可以上传程序了,看下显示效果

显示效果

完整代码

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 OLED(OLED_RESET);

#define TRIGGER_PIN A0
#define ECHO_PIN A1

void setup() {
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.begin(9600);
  OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C);//SSD1306_SWITCHCAPVCC 是电源类型,表示使用内部电源,0x3C 是 I2C 地址,指定 OLED 屏幕的地址。必须写
  OLED.clearDisplay();//清除 OLED 屏幕上的显示内容
  OLED.setTextColor(WHITE);//设置字体颜色
  OLED.setTextSize(1);//设置字体大小
}

void loop() {
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  unsigned long duration = pulseIn(ECHO_PIN, HIGH);
  unsigned int distance = duration / 58; // 将微秒转换为厘米
  OLED.clearDisplay();//刷新屏幕内容
  OLED.setCursor(0, 0);//文本显示位置,这里表示从0行0列的位置开始显示
  OLED.println("Distance:");//在屏幕上换行打印distance
  OLED.setCursor(0, 10);
  OLED.print(distance);
  OLED.print(" cm");
  OLED.display();
  Serial.println(distance);//在串口打印
  delay(100); // 刷新屏幕的时间间隔
}

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,下面是一个使用Arduino IDE编写的控制超声波传感器并接收回波信号并嵌入到OLED屏幕上的示例程序: 首先你需要购买一个OLED屏幕,并将其连接到Arduino板上。 ``` #include <Wire.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); const int trigPin = 9; // 超声波传感器的触发引脚 const int echoPin = 10; // 超声波传感器的回波引脚 void setup() { Serial.begin(9600); // 初始化串口通信,波特率为9600 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // 初始化OLED屏幕 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); } void loop() { digitalWrite(trigPin, LOW); // 发送低电平信号,保证超声波传感器处于空闲状态 delayMicroseconds(2); digitalWrite(trigPin, HIGH); // 发送高电平信号,触发超声波传感器发射脉冲 delayMicroseconds(10); digitalWrite(trigPin, LOW); // 计算回波时间,单位为微秒 long duration = pulseIn(echoPin, HIGH); // 将回波时间转换为距离,单位为厘米 float distance = duration * 0.034 / 2; // 清空OLED屏幕 display.clearDisplay(); // 显示距离值到OLED屏幕 display.setCursor(0,0); display.print("Distance: "); display.print(distance); display.print(" cm"); display.display(); // 延时一段时间,避免频繁发送脉冲信号 delay(500); } ``` 这个程序会周期性地发送超声波脉冲,并接收回波信号。然后计算回波时间并将其转换为距离值。程序会将距离显示OLED屏幕上。程序会每隔500毫秒执行一次循环。你可以将这个程序上传到Arduino板并测试超声波传感器OLED屏幕的功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悸尢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值