Вежба: Мерење растојања помоћу HC-SR04 сензора и ESP32 платформе
У овој вежби ученици ће научити како да користе HC‑SR04 ултразвучни сензор за мерење растојања до објекта помоћу ESP32 микроконтролера. Добијене вредности биће послате на рачунар преко серијске комуникације и приказане у реалном времену у Processing окружењу.
Вежба повезује рад са сензорима, ESP32 програмирање, серијску комуникацију и визуелизацију података.

ESP32 + HC-SR04
Мерење растојања до препреке помоћу ултразвучног сензора.

Processing визуелизација
Приказ измереног растојања у реалном времену.
📑 Садржај
- Шта је HC-SR04?
- Потребна опрема
- Повезивање компоненти
- ESP32 програм
- Processing програм
- Како систем функционише?
- Могућа проширења
- На шта треба обратити пажњу
Шта је HC-SR04?
HC-SR04 је ултразвучни сензор који служи за бесконтактно мерење растојања. Сензор емитује кратак ултразвучни импулс и мери време које је потребно да се одбијени сигнал врати до пријемника.
Пошто је брзина звука позната, микроконтролер може израчунати растојање до препреке. Овај тип сензора често се користи у роботици, паметним системима паркирања и STEM пројектима.
🧰 Потребна опрема
- ESP32 развојна плоча
- HC-SR04 ултразвучни сензор
- Breadboard плоча
- Повезне жице
- USB кабл
- Arduino IDE
- Processing окружење
Напомена за кориснике ESP32-WROOM-32E
Уколико користите развојну плочу са модулом ESP32-WROOM-32E, ова вежба се изводи на исти начин као и са ESP32-WROOM-32D. Није потребно мењати програмски код, бирати други Board у Arduino IDE нити инсталирати додатне библиотеке.
Једино на шта треба обратити пажњу јесте означавање GPIO пинова на самој развојној плочи. Код појединих ESP32-WROOM-32E плоча пинови могу бити означени као P18, IO18 или GPIO18, као и P19, IO19 или GPIO19. Иако су ознаке различите, реч је о истим GPIO пиновима који се користе у програму. Пре повезивања проверите распоред и ознаке пинова на својој плочи.
Повезивање компоненти
У овој вежби користи се следеће повезивање:
- VCC → 3V3
- GND → GND
- TRIG → GPIO18
- ECHO → GPIO19

ESP32 страна
Приказ прикључака који се користе на ESP32 плочи.

HC-SR04 страна
Приказ прикључака на ултразвучном сензору.
Напомена о напону
ESP32 користи логичке нивое од 3,3 V. Класичан HC-SR04 се најчешће напаја са 5 V, при чему ECHO пин може враћати сигнал близу 5 V.
Да бисмо избегли додатне компоненте за обарање напона, у овој вежби сензор напајамо директно са 3V3 пина ESP32 плоче. Тако ECHO сигнал остаје у безбедном опсегу за ESP32.
ESP32 програм
// GPIO pin koji pokreće ultrazvučni impuls
int trigPin = 18;
// GPIO pin na kome se prima povratni impuls
int echoPin = 19;
// Promenljiva u kojoj će biti sačuvano
// trajanje povratnog impulsa (u mikrosekundama)
long duration;
// Izračunato rastojanje u centimetrima
float distance;
void setup() {
// Pokretanje serijske komunikacije
// Brzina mora biti ista kao u Processing programu
Serial.begin(115200);
// TRIG pin je izlaz
pinMode(trigPin, OUTPUT);
// ECHO pin je ulaz
pinMode(echoPin, INPUT);
}
void loop() {
// Kratak LOW impuls kako bi se senzor resetovao
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Slanje ultrazvučnog impulsa
digitalWrite(trigPin, HIGH);
delayMicroseconds(15);
// Završetak impulsa
digitalWrite(trigPin, LOW);
// Merenje trajanja povratnog impulsa
duration = pulseIn(echoPin, HIGH);
// Izračunavanje rastojanja.
// 0.034 predstavlja brzinu zvuka u cm/µs,
// a deljenje sa 2 je potrebno zato što
// talas putuje do prepreke i nazad.
distance = duration * 0.034 / 2;
// Slanje izračunatog rastojanja
// preko serijskog porta.
// Šalju se dve decimale.
Serial.println(distance, 2);
// Kratka pauza između dva merenja
delay(200);
}
Објашњење ESP32 програма
- ESP32 шаље кратак импулс на TRIG пин.
- Сензор емитује ултразвучни талас.
- ECHO пин враћа информацију о времену повратка сигнала.
- Функција pulseIn() мери трајање импулса.
- Растојање се израчунава у центиметрима.
- Резултат се шаље преко серијске комуникације.
distance = duration * 0.034 / 2
Број 0.034 представља брзину звука изражену у cm/μs. Дељење са 2 је неопходно јер талас путује до препреке и назад.
Визуелизација мерења у Processing окружењу
Поред приказа у Serial Monitor-у, измерено растојање може се приказати и графички. Processing прима вредности које шаље ESP32 и приказује хоризонтални индикатор чија се дужина мења у зависности од измереног растојања.
Processing програм
import processing.serial.*;
// Objekat za serijsku komunikaciju
Serial myPort;
// Trenutno izmereno rastojanje
float distance = 0;
void setup()
{
// Kreiranje prozora
size(600,250);
// Prikaz svih dostupnih serijskih portova
println(Serial.list());
// Otvaranje prvog pronađenog porta
// Brzina mora biti ista kao u ESP32 programu
myPort = new Serial(this,
Serial.list()[0],
115200);
// Funkcija serialEvent()
// pozivaće se kada stigne jedan red teksta
myPort.bufferUntil('\n');
textSize(20);
}
void draw()
{
// Boja pozadine
background(245);
// Naslov
fill(0);
text("Измерено растојање",40,40);
// Okvir indikatora
noFill();
strokeWeight(2);
rect(40,80,500,40);
// Popunjavanje indikatora.
// Pretpostavlja se da senzor meri
// do približno 200 cm.
fill(100,200,255);
noStroke();
rect(
40,
80,
map(distance,0,200,0,500),
40
);
// Ispis numeričke vrednosti
fill(0);
text("Distance: " + nf(distance,0,2) + " cm",40,170);
}
// Funkcija se automatski poziva
// kada stigne jedan red teksta
void serialEvent(Serial port)
{
// Čitanje jednog reda
String data = port.readStringUntil('\n');
if(data!=null)
{
// Uklanjanje znaka novog reda
data = trim(data);
// Pretvaranje primljenog teksta u broj
distance = float(data);
}
}
Објашњење Processing програма
- ESP32 шаље Processing програму једну вредност растојања након сваког мерења.
- Функција bufferUntil('\n') обезбеђује да се подаци обрађују тек када стигне цео ред текста.
- Функција readStringUntil('\n') чита једну линију текста коју је послао ESP32.
- Функција trim() уклања знак новог реда (\n) и евентуалне празне карактере са почетка и краја текста.
- Функција float() претвара примљени текст у реалан број који представља измерено растојање.
- Функција map() пресликава измерено растојање из опсега од 0 до 200 cm у ширину хоризонталног индикатора од 0 до 500 пиксела.
- Током рада програма плави индикатор се продужава или скраћује у зависности од удаљености препреке од сензора.
Како систем функционише?
📌 ESP32 активира TRIG пин.
📌 HC-SR04 емитује ултразвучни талас.
📌 Талас путује до препреке.
📌 Одбијени талас се враћа ка сензору.
📌 ESP32 мери време повратка.
📌 Израчунава се растојање.
📌 Processing приказује резултат у реалном времену.
Могућа проширења пројекта
- LED сигнализација близине препреке
- Звучно упозорење помоћу buzzer-а
- Приказ графика мерења
- Чување података у CSV датотеку
- Слање података преко Wi‑Fi мреже
- ESP32 веб сервер
- Робот који избегава препреке
⚠️ На шта треба обратити пажњу
- Проверити исправност свих жица.
- Проверити да су GPIO18 и GPIO19 правилно повезани.
- Проверити серијски порт у Processing програму.
- Избегавати лабаве контакте на breadboard плочи.
- Пре покретања проверити целокупно коло.
📚 Додатно учење
🔎 Продуби знање
Истражи различите типове сензора који се користе са ESP32 платформом.
🧪 Идеје за експеримент
- Мери растојање до различитих објеката.
- Упореди мерења за различите материјале.
- Направи паркинг сензор.
Следећи корак
Покушај да направиш Wi‑Fi систем за праћење растојања преко веб прегледача.
Мини квиз
1. Шта мери HC-SR04 сензор?
2. Који пин покреће ултразвучни импулс?
3. Која је брзина серијске комуникације?
4. Зашто се сензор у овој вежби напаја са 3.3V?