Регионални центар за таленте "Михајло Пупин"

 

Вежба: Мерење растојања помоћу HC-SR04 сензора и ESP32 платформе

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

Вежба повезује рад са сензорима, ESP32 програмирање, серијску комуникацију и визуелизацију података.

ESP32 i HC-SR04

ESP32 + HC-SR04

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

Processing

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 priključci

ESP32 страна

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

HC-SR04 priključci

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?


 

Вежба: Мерење растојања помоћу HC-SR04 сензора и ESP32 платформе

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

Вежба повезује рад са сензорима, ESP32 програмирање, серијску комуникацију и визуелизацију података.

ESP32 i HC-SR04

ESP32 + HC-SR04

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

Processing

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 priključci

ESP32 страна

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

HC-SR04 priključci

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?


Vrati se na vrh