Акцелерометар (MPU-9250) са ESP32 платформом
У овој лекцији ученици ће научити како ради акцелерометар, један од три сензора који се налазе у оквиру MPU-9250 модула. Акцелерометар мери убрзање по три међусобно нормалне осе (X, Y и Z) и омогућава одређивање нагиба, детекцију покрета и анализу кретања објекта.
Иако назив говори да мери убрзање, акцелерометар може да одреди и оријентацију у односу на Земљину гравитацију. Управо зато се користи у мобилним телефонима, дроновима, паметним сатовима, роботима и бројним STEM пројектима.

Акцелерометар у MPU-9250
Акцелерометар непрекидно мери убрзање по три осе и омогућава одређивање нагиба и кретања уређаја.
📑 Садржај
- Шта је акцелерометар?
- Гравитација и убрзање
- Координатни систем и осе мерења
- Како се одређује нагиб?
- Практична примена
- Закључак
Шта је акцелерометар?
Акцелерометар је електронски сензор који мери убрзање. Под убрзањем не подразумевамо само повећање брзине, већ сваку промену кретања: полазак, успоравање, окретање или нагло заустављање.
Када је сензор потпуно миран на столу, он и даље мери приближно 1 g, јер на њега делује Земљина гравитација. Управо захваљујући томе можемо да одредимо како је плочица нагнута у простору.
Мери убрзање
Региструје промену брзине кретања по свакој оси.
Мери нагиб
Користи Земљину гравитацију као референтни правац.
Детектује покрет
Може да препозна пад, тресење, удар или промену положаја.

Координатни систем акцелерометра
Акцелерометар мери убрзање по X, Y и Z оси које су везане за сам сензор.
Гравитација и убрзање
На Земљиној површини сва тела привлачи сила гравитације. Ако је сензор потпуно миран, једино убрзање које региструје потиче управо од гравитације и има вредност приближно:
g ≈ 9.81 m/s²
Када је плочица положена хоризонтално, скоро целокупно гравитационо убрзање пројектује се на Z осу, док су вредности на X и Y осама близу нуле.
При нагињању плочице мењају се пројекције вектора гравитације на све три осе. Управо из тих вредности могуће је израчунати угао нагиба.

Пројекције вектора гравитације
Нагињањем сензора мењају се компоненте гравитације по X, Y и Z оси, што омогућава одређивање нагиба.
Шта ученици треба да запамте?
- Акцелерометар увек мери убрзање по три осе.
- Када мирује, мери Земљину гравитацију.
- Нагињањем плочице мењају се вредности на X, Y и Z осама.
- Из тих вредности може да се израчуна угао нагиба.
Координатни систем и осе мерења
Акцелерометар мери убрзање по три међусобно нормалне осе које су везане за сам сензор. То значи да се координатни систем увек окреће заједно са плочицом, а не са простором у коме се она налази.
Када окренемо ESP32 или MPU-9250 модул, мења се положај његових оса у односу на Земљину гравитацију. Због тога ће се променити и вредности које очитавамо на X, Y и Z оси.

Осе су везане за сензор
Приликом окретања плочице окрећу се и координатне осе акцелерометра. Сензор увек мери компоненте убрзања у свом локалном координатном систему.
Како се одређује нагиб?
Док се плочица не креће нагло, највећи део измереног убрзања представља Земљина гравитација. Због тога се из односа компоненти убрзања могу израчунати углови нагиба.
Најчешће се користе два угла:
- Roll – нагиб око X осе.
- Pitch – нагиб око Y осе.
У пракси се најчешће користе следеће формуле:
Roll = atan2(AY, AZ)
Pitch = atan2(-AX, √(AY² + AZ²))
Функција atan2() враћа угао на основу односа две величине и омогућава исправно одређивање нагиба у свим квадрантима.

Pitch и Roll
Нагиб око X и Y осе израчунава се на основу вредности које мери акцелерометар.
Како изгледају мерења?
Замислимо да је ESP32 постављен потпуно хоризонтално на сто. Тада ће вредности бити приближно:
- AX ≈ 0 g
- AY ≈ 0 g
- AZ ≈ +1 g
Ако затим нагнемо плочицу улево, вредност по X оси почиње да расте или опада, док се вредност по Z оси смањује. Исто важи и за нагиб напред или назад, само што се тада мењају AY и AZ.
Хоризонтално
AX≈0
AY≈0
AZ≈1g
Нагиб улево
AX се мења
AZ се смањује
Нагиб напред
AY се мења
AZ се смањује
Важно запажање
Акцелерометар не мери директно угао нагиба, већ компоненте убрзања по свакој оси. Израчунавање угла представља математичку обраду измерених података.
Када се плочица брзо креће, поред гравитације јављају се и додатна убрзања, па мерење нагиба постаје мање прецизно. Због тога се у напреднијим системима акцелерометар комбинује са жироскопом.
Повезивање MPU-9250 са ESP32
За очитавање вредности акцелерометра користимо исто повезивање као и у претходним лекцијама. Комуникација се обавља преко I2C магистрале, која користи само две сигналне линије.
Повезивање пинова
| MPU-9250 | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | GPIO21 |
| SCL | GPIO22 |

ESP32 и MPU-9250
За очитавање акцелерометра довољно је повезати напајање и I2C линије SDA и SCL.
Инсталација библиотеке
У Arduino IDE потребно је инсталирати библиотеку:
- SparkFun MPU-9250 Digital Motion Processing (DMP)
Инсталација се врши преко менија:
Sketch → Include Library → Manage Libraries…
У поље за претрагу потребно је укуцати:
SparkFun MPU-9250

Инсталација библиотеке
Библиотека омогућава једноставно очитавање свих сензора који се налазе у MPU-9250 модулу.
Прво очитавање акцелерометра
Следећи програм приказује вредности убрзања по X, Y и Z оси у Serial Monitor-у. За разлику од претходне лекције, сада користимо стварни код који комуницира са MPU-9250 сензором.
#include <Wire.h>
#include <SparkFunMPU9250-DMP.h>
MPU9250_DMP imu;
void setup()
{
Serial.begin(115200);
Wire.begin(21,22);
if (imu.begin() != INV_SUCCESS)
{
Serial.println("MPU-9250 nije pronađen!");
while (1);
}
Serial.println("Akcelerometar je spreman.");
}
void loop()
{
if (imu.dataReady())
{
imu.update();
Serial.print("AX: ");
Serial.print(imu.calcAccel(imu.ax), 2);
Serial.print(" AY: ");
Serial.print(imu.calcAccel(imu.ay), 2);
Serial.print(" AZ: ");
Serial.println(imu.calcAccel(imu.az), 2);
}
}
Објашњење програма
- Укључују се библиотеке Wire и SparkFun MPU-9250.
- Функција Wire.begin(21,22) покреће I2C комуникацију.
- imu.begin() иницијализује сензор.
- imu.dataReady() проверава да ли постоје нови подаци.
- imu.update() преузима ново мерење.
- calcAccel() претвара сирове вредности у убрзање изражено у јединици g.
Шта треба да се прикаже?
Уколико је све исправно повезано, у Serial Monitor-у добијају се вредности сличне следећим:
AX: 0.01 AY: -0.03 AZ: 0.99
AX: 0.02 AY: -0.04 AZ: 0.98
AX: 0.00 AY: -0.02 AZ: 1.00
Запажање
Вредност по Z оси је близу 1 g, јер сензор мирује и региструје Земљину гравитацију. Ако нагнете плочицу, приметићете да се вредности по X и Y осама мењају, док се вредност по Z постепено смањује.
Израчунавање углова нагиба (Pitch и Roll)
Вредности које очитава акцелерометар представљају пројекције вектора гравитације на координатне осе сензора. Из тих вредности могуће је израчунати угао нагиба уређаја.
У овој лекцији користићемо два најважнија угла:
- Roll — нагиб лево–десно (око X осе)
- Pitch — нагиб напред–назад (око Y осе)
Функција atan2() враћа угао у радијанима, па је потребно резултат претворити у степене множењем са 180/PI.

Израчунавање нагиба
Из измерених вредности AX, AY и AZ могу се израчунати углови нагиба Pitch и Roll.
ESP32 програм за израчунавање нагиба
#include <Wire.h>
#include <SparkFunMPU9250-DMP.h>
MPU9250_DMP imu;
float ax, ay, az;
float pitch, roll;
void setup()
{
Serial.begin(115200);
Wire.begin(21,22);
if (imu.begin() != INV_SUCCESS)
{
Serial.println("MPU nije pronađen!");
while(true);
}
}
void loop()
{
if (imu.dataReady())
{
imu.update();
// Učitavanje ubrzanja u jedinicama g
ax = imu.calcAccel(imu.ax);
ay = imu.calcAccel(imu.ay);
az = imu.calcAccel(imu.az);
// Izračunavanje uglova
roll = atan2(ay, az) * 180.0 / PI;
pitch = atan2(-ax,
sqrt(ay*ay + az*az))
*180.0/PI;
Serial.print(pitch);
Serial.print(",");
Serial.println(roll);
delay(20);
}
}
Објашњење програма
- Најпре се очитају вредности AX, AY и AZ.
- Функција atan2() израчунава угао нагиба.
- Резултат се претвара из радијана у степене.
- ESP32 преко Serial порта шаље два броја раздвојена зарезом.
- Овај формат је погодан за директно читање у Processing програму.
Визуелизација у Processing окружењу
Један од најзанимљивијих начина да ученици разумеју рад акцелерометра јесте приказ нагиба на екрану рачунара. Processing ће читати вредности које шаље ESP32 и приказивати линију која се окреће у складу са нагибом плочице.
Processing код
import processing.serial.*;
Serial port;
float pitch = 0;
void setup()
{
size(600,600);
println(Serial.list());
port = new Serial(this,
Serial.list()[0],
115200);
port.bufferUntil('\n');
}
void draw()
{
background(240);
translate(width/2,height/2);
rotate(radians(pitch));
strokeWeight(8);
line(-150,0,150,0);
fill(0);
ellipse(0,0,20,20);
}
void serialEvent(Serial p)
{
String data = p.readStringUntil('\n');
if(data!=null)
{
data=trim(data);
String vrednosti[] = split(data,',');
if(vrednosti.length==2)
{
pitch=float(vrednosti[0]);
}
}
}

Processing визуелизација
Како ученик помера ESP32 плочицу, линија на екрану ротира и приказује угао нагиба у реалном времену.
Шта ученици уочавају?
- Хоризонталан положај даје угао близак нули.
- Нагињање улево или удесно мења угао.
- Вредности се ажурирају више десетина пута у секунди.
- Processing омогућава визуелизацију без потребе за додатним дисплејем.
Визуелизација нагиба у Processing-у
Једна од великих предности рада са ESP32 је могућност да се измерени подаци не приказују само као бројеви у Serial Monitor-у, већ и графички. На тај начин много је лакше разумети како се вредности акцелерометра мењају приликом померања сензора.
У овој лекцији направићемо једноставан индикатор нагиба. ESP32 ће преко серијске комуникације слати вредности углова израчунатих на основу акцелерометра, а Processing ће приказати линију која представља тренутни нагиб плоче.

Визуелизација нагиба
У Processing-у се угао нагиба приказује графички, што омогућава једноставно праћење оријентације ESP32 плоче.
Пример програма у Processing-у
import processing.serial.*;
Serial port;
float angle = 0;
void setup() {
size(600,600);
port = new Serial(this,"COM5",115200);
port.bufferUntil('\n');
}
void draw(){
background(240);
translate(width/2,height/2);
rotate(radians(angle));
strokeWeight(8);
line(0,0,180,0);
fill(255,0,0);
ellipse(0,0,18,18);
}
void serialEvent(Serial p){
String s = trim(p.readString());
angle = float(s);
}
Како функционише програм?
- ESP32 шаље један број који представља угао нагиба.
- Processing чита вредност преко серијског порта.
- Линија се ротира за исти угао.
- При сваком померању плоче мења се положај линије на екрану.
Практичне вежбе
✅ Вежба 1 – Посматрање гравитације
Поставите ESP32 на сто тако да мирује. Запишите вредности AX, AY и AZ. Потом ротирајте плочу за 90° око сваке осе и поново измерите вредности.
Питања:
- Која оса показује вредност приближно 1 g?
- Шта се дешава када се плоча окрене?
- Зашто једна компонента постаје већа, а друга мања?
✅ Вежба 2 – Мерење нагиба
Напишите програм који приказује угао нагиба око X осе. Полако нагињите плочу и пратите како се угао мења.
Задатак:
- одредити максимални угао који може да се измери,
- испитати како брзо очитавања реагују на промену положаја.
✅ Вежба 3 – Processing визуелизација
Повежите ESP32 са Processing програмом и прикажите линију која прати угао нагиба.
Проширење:
- уместо линије приказати стрелицу,
- додати испис угла,
- приказати две осе нагиба истовремено.
Домаћи задатак
Задатак 1
Направити дигиталну либелу која приказује да ли је плоча у хоризонталном положају.
Задатак 2
Приказати угао нагиба као казаљку на екрану Processing програма.
Задатак 3
Испробати различите брзине освежавања (20 ms, 50 ms и 100 ms) и упоредити како то утиче на глаткоћу приказа.
Закључак
Акцелерометар је један од најважнијих сензора у савременој електроници. Иако је његова основна намена мерење убрзања, у мировању се може користити и за одређивање нагиба јер региструје Земљину гравитацију.
У овој лекцији научили сте како функционише акцелерометар, како се читају вредности помоћу ESP32 платформе, како се израчунава угао нагиба и како се резултати могу приказати у програму Processing. Ово представља основу за бројне наредне пројекте као што су дигитална либела, баланс роботи, системи стабилизације и управљање покретима.