![Измерване на разстояние с ултразвуков сензор HC-SR04 и OLED SSD1306 с Arduino](http://ardudevelop.eu/wp-content/uploads/2024/10/Измерване-на-разстояние-с-ултразвуков-сензор-HC-SR04-и-OLED-SSD1306-с-Arduino.png)
Въведение
В тази статия ще разгледаме как да използваме ултразвуков сензор HC-SR04 в комбинация с OLED дисплей SSD1306 и Arduino UNO. С този проект ще можем да измерваме разстояние и да го визуализираме както на серийния монитор, така и на OLED дисплея. HC-SR04 е популярен ултразвуков сензор, който може да измерва разстояния до 35см, докато SSD1306 е компактен дисплей, който ни позволява лесно да показваме текст и графики. Следващите секции ще включват детайлни инструкции за свързване на компонентите, примерен код и пълно обяснение на всяка част от него.
Свързване
За да съединим ултразвуковия сензор и OLED дисплея с Arduino UNO, следвайте следните указания:
- OLED SSD1306 Дисплей:
- VCC: Свържете към 5V на Arduino.
- GND: Свържете към GND на Arduino.
- SCL: Свържете към SCL на Arduino (пин A5 при Arduino UNO).
- SDA: Свържете към SDA на Arduino (пин A4 при Arduino UNO).
- HC-SR04 Ултразвуков Сензор:
- VCC: Свържете към 5V на Arduino.
- GND: Свържете към GND на Arduino.
- TRIG: Свържете към пин 9 на Arduino.
- ECHO: Свържете към пин 10 на Arduino.
За улеснение на свързването може да разгледате началната картинка на страницата.
Статии които използваме:
- Arduino UNO – ревю с пълна документация
- Сканиране на I2C интерфейса с Arduino – за да намерим I2C адреса на OLED SSD1306
- Управление на OLED SSD1306 дисплей с Arduino UNO – за управление на SSD1306 дисплея. Библиотеки за управление на дисплея може да намерите в страницата.
- HC-SR04 и Arduino: Измерване на Разстояние – за измерване на разстояние чрез ултразвук
След като свържете всички компоненти, сте готови да заредите кода в Arduino UNO.
Код
Това е кода, който ще измерва разстояние с HC-SR04 и ще го изписва на OLED дисплея:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Дефиниции за OLED дисплея
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Дефиниции за ултразвуковия сензор HC-SR04
#define TRIG_PIN 9
#define ECHO_PIN 10
void setup() {
// Настройка на серийна комуникация за конзола
Serial.begin(9600);
// Инициализация на OLED дисплея
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Настройка на пиновете за HC-SR04
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
long duration;
float distance;
// Изпращане на ултразвуков импулс
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Четене на времето на отговор от Echo пина
duration = pulseIn(ECHO_PIN, HIGH);
// Изчисляване на разстоянието в сантиметри
distance = (duration * 0.034) / 2;
if ( distance > 35 ) {
distance = 35;
}
// Принтиране на разстоянието в серийния монитор
Serial.print("Разстояние: ");
Serial.print(distance);
Serial.println(" см");
// Показване на разстоянието на OLED дисплея
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 20);
display.print("Distance: ");
display.print(distance);
display.println(" cm");
display.display();
// Забавяне преди следващото измерване
delay(200);
}
Обяснение на кода
- Импортиране на библиотеки:
#include <Wire.h>
,#include <Adafruit_GFX.h>
,#include <Adafruit_SSD1306.h>
: Тези библиотеки са необходими за управление на комуникацията с OLED дисплея и извеждане на текст и графики.
- Дефиниции:
SCREEN_WIDTH
иSCREEN_HEIGHT
: Определят размерите на екрана в пиксели (128×64).OLED_RESET
иSCREEN_ADDRESS
: Определят адреса и ресет пина на дисплея. В случая, ресет пинът е ненужен и стойността е зададена като-1
.TRIG_PIN
иECHO_PIN
: Пиновете, към които са свързани TRIG и ECHO от ултразвуковия сензор.
- Функция
setup()
:- Настройваме серийна комуникация с
Serial.begin(9600)
, за да можем да видим разстоянието в конзолата. - Инициализацията на OLED дисплея се извършва с
display.begin()
. Ако възникне грешка, се показва съобщение, и цикълът за програмата спира. - Настройваме
TRIG_PIN
катоOUTPUT
иECHO_PIN
катоINPUT
за работа с HC-SR04.
- Настройваме серийна комуникация с
- Функция
loop()
:- Изпращане на ултразвуков импулс: Първо, TRIG пинът се поставя в ниско състояние, след което се изпраща кратък импулс от 10 микросекунди, който генерира ултразвуков сигнал.
- Изчисляване на разстоянието: Чрез
pulseIn()
измерваме времето, през което ECHO пинът е вHIGH
състояние. С формулата(duration * 0.034) / 2
преобразуваме това време в разстояние в сантиметри. Факторът0.034
представлява скоростта на звука в см/микросекунда. - Ограничение на разстоянието: Добавено е ограничение, което свежда максималното измервано разстояние до 35 см. Ако стойността надвиши този лимит, тя ще бъде зададена на 35 см.
- Принтиране на разстоянието: Разстоянието се изписва както в серийния монитор, така и на OLED дисплея.
- Забавяне: Добавено е забавяне от 200 милисекунди преди следващото измерване, за да се избегнат нежелани ефекти от прекалено честите измервания.
Заключение
Този проект демонстрира как лесно можем да използваме ултразвуков сензор за измерване на разстояние и да покажем стойността на OLED дисплей с помощта на Arduino. Използването на OLED дисплея позволява визуално и удобно представяне на измерваните данни, а ултразвуковият сензор HC-SR04 предоставя точно измерване в рамките на определен диапазон. Тази комбинация е полезна за различни проекти, като системи за предупреждение за препятствия, измерване на ниво на течности, роботи и много други.