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

Три сензора у једном модулу
MPU-9250 комбинује акцелерометар, жироскоп и магнетометар у једном интегрисаном колу.

Акцелерометар у 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 се смањује
Важно запажање
Акцелерометар не мери директно угао нагиба, већ компоненте убрзања по свакој оси. Израчунавање угла представља математичку обраду измерених података.
Када се плочица брзо креће, поред гравитације јављају се и додатна убрзања, па мерење нагиба постаје мање прецизно. Због тога се у напреднијим системима акцелерометар комбинује са жироскопом.
Povezivanje MPU-9250 sa ESP32
| MPU-9250 | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | GPIO23 |
| SCL | GPIO22 |
Instalacija biblioteke
U Arduino IDE instalirati biblioteku:
MPU9250_asukiaaa
Prvo očitavanje akcelerometra
#include <Wire.h>
#include <MPU9250_asukiaaa.h>
#define SDA_PIN 23
#define SCL_PIN 22
MPU9250_asukiaaa mpu;
void setup() {
Serial.begin(115200);
delay(1000);
Wire.begin(SDA_PIN, SCL_PIN);
mpu.setWire(&Wire);
mpu.beginAccel();
Serial.println("MPU-9250 je spreman.");
}
void loop() {
// Učitavanje novog merenja
mpu.accelUpdate();
// Slanje: AX, AY, AZ i intenzitet ubrzanja
Serial.print(mpu.accelX(),3);
Serial.print(",");
Serial.print(mpu.accelY(),3);
Serial.print(",");
Serial.print(mpu.accelZ(),3);
Serial.print(",");
Serial.println(mpu.accelSqrt(),3);
delay(100);
}
Šta učenici treba da zapamte?
- Akcelerometar meri komponente ubrzanja.
- Ne meri direktno ugao.
- Pitch i Roll računaju se iz AX, AY i AZ.
- U sledećoj lekciji koristićemo ove podatke za 3D prikaz vektora ubrzanja u Processing-u.
Шта треба да се прикаже?
Уколико је све исправно повезано, у 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 постепено смањује.
Processing P3D
Ovaj program u okruženju Processing koristi biblioteku Serial za prijem podataka sa mikrokontrolera (preko serijske komunikacije) i njihov prikaz u 3D prostoru pomoću P3D renderera. Crvena, zelena i plava linija predstavljaju koordinatne ose (X, Y i Z), dok narandžasta linija prikazuje vektor ubrzanja dobijen sa senzora.
import processing.serial.*; // Biblioteka za serijsku komunikaciju
Serial port; // Objekat za komunikaciju preko serijskog porta
// Promenljive za komponente ubrzanja i ukupno ubrzanje
float ax, ay, az, a;
void setup() {
// Kreiranje prozora dimenzija 900x700 sa P3D rendererom
size(900, 700, P3D);
// Otvaranje prvog dostupnog serijskog porta brzinom 115200 bps
port = new Serial(this, Serial.list()[0], 115200);
// Čitanje podataka tek kada stigne novi red ('\n')
port.bufferUntil('\n');
}
void draw() {
// Svetlosiva pozadina
background(240);
// Uključivanje osvetljenja za 3D prikaz
lights();
// Pomeranje koordinatnog sistema u centar prozora
translate(width/2, height/2);
// Blago naginjanje scene radi boljeg prikaza
rotateX(-PI/6);
// Kontinuirana rotacija oko Y ose
rotateY(frameCount * 0.002);
// Debljina linija koordinatnih osa
strokeWeight(3);
// X osa - crvena
stroke(255, 0, 0);
line(0, 0, 0, 150, 0, 0);
// Y osa - zelena
stroke(0, 255, 0);
line(0, 0, 0, 0, 150, 0);
// Z osa - plava
stroke(0, 0, 255);
line(0, 0, 0, 0, 0, 150);
// Deblja narandžasta linija predstavlja vektor ubrzanja
strokeWeight(6);
stroke(255, 120, 0);
// Skaliranje vrednosti senzora radi preglednijeg prikaza
// Negativni znaci kod Y i Z prilagođavaju orijentaciju Processing koordinatnom sistemu
line(0, 0, 0,
ax * 120,
-ay * 120,
-az * 120);
}
// Funkcija se automatski poziva kada stigne novi red podataka
void serialEvent(Serial p) {
// Čitanje jednog reda i uklanjanje praznih karaktera
String s = trim(p.readString());
// Razdvajanje vrednosti po zarezu
String[] v = split(s, ',');
// Očekuje se format:
// ax,ay,az,a
if (v.length == 4) {
// Konverzija tekstualnih vrednosti u decimalne brojeve
ax = float(v[0]);
ay = float(v[1]);
az = float(v[2]);
// Ukupno ubrzanje (trenutno se ne koristi u prikazu,
// ali može poslužiti za ispis ili dodatne analize)
a = float(v[3]);
}
}
Израчунавање углова нагиба (Pitch и Roll)
Вредности које очитава акцелерометар представљају пројекције вектора гравитације на координатне осе сензора. Из тих вредности могуће је израчунати угао нагиба уређаја.
У овој лекцији користићемо два најважнија угла:
- Roll — нагиб лево–десно (око X осе)
- Pitch — нагиб напред–назад (око Y осе)
Функција atan2() враћа угао у радијанима, па је потребно резултат претворити у степене множењем са 180/PI.

Израчунавање нагиба
Из измерених вредности AX, AY и AZ могу се израчунати углови нагиба Pitch и Roll.
ESP32 program za izračunavanje nagiba (biblioteka MPU9250_asukiaaa)
Ovaj program koristi biblioteku MPU9250_asukiaaa za komunikaciju sa MPU9250 IMU senzorom preko I²C magistrale. U svakom prolazu kroz glavnu petlju očitavaju se vrednosti ubrzanja po osama X, Y i Z, nakon čega se na osnovu akcelerometra izračunavaju uglovi pitch (nagib napred–nazad) i roll (nagib levo–desno). Dobijeni uglovi se šalju preko serijskog porta u formatu pitch,roll, što omogućava njihovu jednostavnu obradu ili vizuelizaciju u programu Processing.
#include <Wire.h>
#include <MPU9250_asukiaaa.h>
// Kreiranje objekta za rad sa MPU9250 senzorom
MPU9250_asukiaaa imu;
// Promenljive za komponente ubrzanja
float ax, ay, az;
// Promenljive za uglove nagiba
float pitch, roll;
void setup() {
// Pokretanje serijske komunikacije
Serial.begin(115200);
// Pokretanje I2C magistrale
// SDA = GPIO21
// SCL = GPIO22
Wire.begin(21, 22);
// Povezivanje biblioteke sa I2C magistralom
imu.setWire(&Wire);
// Inicijalizacija senzora
imu.beginAccel();
Serial.println("MPU9250 inicijalizovan.");
}
void loop() {
// Očitavanje novih podataka sa akcelerometra
imu.accelUpdate();
// Učitavanje ubrzanja po osama (u jedinicama g)
ax = imu.accelX();
ay = imu.accelY();
az = imu.accelZ();
// Izračunavanje ugla roll
// Određuje nagib oko X ose
roll = atan2(ay, az) * 180.0 / PI;
// Izračunavanje ugla pitch
// Određuje nagib oko Y ose
pitch = atan2(-ax,
sqrt(ay * ay + az * az))
* 180.0 / PI;
// Slanje rezultata preko serijskog porta
// Format:
// pitch,roll
Serial.print(pitch);
Serial.print(",");
Serial.println(roll);
// Očitavanje približno 50 puta u sekundi
delay(20);
}
Program koristi samo podatke sa akcelerometra, zbog čega je veoma jednostavan i pogodan za određivanje statičkog nagiba senzora. Međutim, prilikom brzih pokreta ili vibracija merenja mogu biti manje stabilna, jer akcelerometar registruje i dinamička ubrzanja. Za preciznije određivanje orijentacije u pokretu potrebno je kombinovati podatke akcelerometra i žiroskopa primenom odgovarajućeg filtra (npr. komplementarnog ili Kalmanovog filtra).
Објашњење програма
- Најпре се очитају вредности 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. Ово представља основу за бројне наредне пројекте као што су дигитална либела, баланс роботи, системи стабилизације и управљање покретима.