Вежба: Дигитални компас помоћу MPU-9250 и ESP32 платформе
У претходној лекцији упознали смо се са MPU-9250 сензором и сазнали да он у себи обједињује три различита сензора: акцелерометар, жироскоп и магнетометар. У овој лекцији посветићемо се само магнетометру, који омогућава одређивање правца у односу на Земљино магнетно поље и представља основу за израду дигиталног компаса.
Ученици ће научити како функционише магнетометар, зашто је неопходна његова калибрација и како се добијени подаци могу обрадити на ESP32 платформи. На крају лекције направићемо једноставан дигитални компас, а затим приказати његов рад помоћу графичке визуелизације у програмском окружењу Processing.

Магнетометар у MPU-9250 модулу
Магнетометар омогућава мерење Земљиног магнетног поља и одређивање смера кретања, па се користи као дигитални компас у бројним електронским системима.
📑 Садржај
- Шта је магнетометар?
- Земљино магнетно поље
- Како ради компас?
- Магнетометар AK8963 у MPU-9250
- Повезивање са ESP32
- Калибрација магнетометра
- Вежба 1 – Очитавање магнетног поља
- Вежба 2 – Израда дигиталног компаса
- Визуелизација у Processing-у
- Домаћи задатак
Шта је магнетометар?
Магнетометар је електронски сензор који мери јачину и правац магнетног поља. Он не мери растојање нити положај, већ детектује магнетне силе које делују у његовој околини. Захваљујући томе, магнетометар може да одреди где се налази магнетни север, па се често користи као основа за дигитални компас.
У MPU-9250 модулу магнетометар истовремено мери магнетно поље дуж три просторне осе:
- X – магнетно поље у правцу лево–десно,
- Y – магнетно поље у правцу напред–назад,
- Z – магнетно поље у правцу горе–доле.
Комбиновањем ова три мерења могуће је одредити оријентацију уређаја у простору и израчунати угао окретања у односу на север.

Три осе магнетометра
Магнетометар истовремено мери компоненте магнетног поља по X, Y и Z оси.
X оса
Прати магнетно поље у хоризонталном правцу лево–десно.
Y оса
Мери компоненту магнетног поља у смеру напред–назад.
Z оса
Одређује вертикалну компоненту магнетног поља.
Земљино магнетно поље
Да би магнетометар могао да одреди правац, потребно је да постоји природно магнетно поље које ће мерити. Управо то омогућава Земљино магнетно поље. Наша планета се понаша као огроман магнет чије се линије магнетног поља простиру од једног пола до другог.
Игла класичног компаса увек покушава да се поравна са овим линијама, па зато показује приближно ка северу. Дигитални компас не користи механичку иглу већ магнетометар који електронски мери исти ефекат.
Magnetne linije prikazuju oblik Земљиног магнетног поља. У свакој тачки простора постоји вектор магнетног поља B , који је увек тангента на магнетну линију у тој тачки. Магнетометар не мери саме линије, већ компоненте тог вектора по X, Y и Z осама свог координатног система.

Земља као огроман магнет
Линије магнетног поља окружују Земљу и омогућавају компасу да одреди правац севера.
Занимљивост
Птице селице, морске корњаче и неке врсте риба користе Земљино магнетно поље за оријентацију током миграција. Научници сматрају да поседују природни „биолошки компас“ који им омогућава да проналазе пут и након више хиљада километара.
Јачина Земљиног магнетног поља није свуда иста. Она зависи од географске локације и најчешће износи између 25 и 65 μT (микротесла). Управо тако мале вредности магнетометар може веома прецизно да измери.
Шта магнетометар мери?
Мери јачину и правац магнетног поља које делује на сензор.
Јединица мере
Магнетно поље се најчешће изражава у микротеслама (μT).
Практична примена
Навигација, роботика, дронови, паметни телефони и аутономни системи.
Како ради компас?
Класичан компас садржи магнетну иглу која може слободно да се окреће. Пошто је игла магнетисана, она се увек поставља у смеру Земљиног магнетног поља. Један крај игле показује ка магнетном северу, а други ка магнетном југу.
Дигитални компас ради по истом принципу, али уместо механичке игле користи магнетометар. Сензор мери вредности магнетног поља по X и Y оси, а затим микроконтролер израчунава угао у односу на север.

Принцип рада компаса
И механички и дигитални компас користе Земљино магнетно поље за одређивање правца.
За израчунавање смера најчешће се користи функција:
ugao = atan2(Y, X)
Функција atan2() израчунава угао на основу односа вредности X и Y осе. Добијени резултат представља смер у степенима:
- 0° → север (N)
- 90° → исток (E)
- 180° → југ (S)
- 270° → запад (W)
Север (N)
0° или 360°
Исток (E)
90°
Југ (S)
180°
Запад (W)
270°
Магнетометар AK8963 у MPU-9250 модулу
Унутар MPU-9250 модула налази се посебан магнетометар под називом AK8963. Овај сензор производи компанија Asahi Kasei Microsystems и комуницира са главним MPU чипом преко интерне I2C магистрале.
AK8963 омогућава мерење магнетног поља по све три осе и има довољну прецизност за израду дигиталног компаса, навигационих система и роботичких пројеката.

AK8963 магнетометар
Посебан чип унутар MPU-9250 модула задужен за мерење магнетног поља.
Резолуција
14-битни и 16-битни режим рада.
Три осе
Истовремено мери X, Y и Z компоненту магнетног поља.
Примена
Компас, навигација, роботи, дронови и системи оријентације.
Повезивање MPU-9250 са ESP32
За рад магнетометра није потребно посебно повезивање. Пошто је AK8963 део MPU-9250 модула, довољно је повезати цео модул са ESP32 преко I2C комуникације.
| MPU-9250 | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | GPIO21 |
| SCL | GPIO22 |

Повезивање ESP32 и MPU-9250
За коришћење магнетометра користе се исте I2C везе као и за цео MPU-9250 модул.
Важно
Иако у овој лекцији користимо само магнетометар, повезује се комплетан MPU-9250 модул јер су акцелерометар, жироскоп и магнетометар интегрисани у исти уређај.
У каснијим лекцијама користићемо и остале сензоре без икаквих измена у повезивању.
Калибрација магнетометра
Један од најважнијих корака приликом рада са магнетометром је калибрација. Без калибрације компас може показивати погрешан смер чак и када сензор ради исправно.
На мерења утичу:
- метални предмети у близини сензора,
- електромотори и звучници,
- магнети,
- струје које протичу кроз проводнике,
- сама електроника на плочи.
Због тога је потребно одредити минималне и максималне вредности које сензор очитава током окретања у свим правцима.

Поступак калибрације
Сензор се полако окреће у облику броја 8 како би се измериле максималне и минималне вредности свих оса.
Практичан поступак
- Покренути програм за очитавање магнетометра.
- Полако ротирати сензор у свим правцима.
- Правити покрет у облику броја 8.
- Забележити минималне и максималне вредности.
- Израчунати корекционе офсете.
Овај поступак је стандардна процедура код свих дигиталних компаса, паметних телефона и дронова.
Припрема Arduino IDE окружења
Пре него што започнемо програмирање потребно је припремити Arduino IDE и инсталирати библиотеку која омогућава једноставан рад са MPU-9250 сензором.
Корак 1
Повежите ESP32 плочу USB каблом са рачунаром.
Корак 2
Покрените Arduino IDE и изаберите одговарајућу ESP32 плочу.
Корак 3
Инсталирајте библиотеку MPU9250_asukiaaa преко Library Manager-а.

Инсталација библиотеке
У Arduino IDE отворити Sketch → Include Library → Manage Libraries и потражити библиотеку MPU9250_asukiaaa.
Први програм – очитавање магнетометра
Следећи програм чита вредности магнетног поља по све три осе и приказује их у Serial Monitor-у. Ово је основа за све наредне пројекте који користе дигитални компас.
#include <Wire.h>
#include <MPU9250_asukiaaa.h>
MPU9250_asukiaaa mpu;
void setup() {
Serial.begin(115200);
Wire.begin(21,22);
mpu.setWire(&Wire);
mpu.beginAccel();
mpu.beginGyro();
mpu.beginMag();
Serial.println("MPU9250 Magnetometar");
}
void loop() {
mpu.magUpdate();
Serial.print("X: ");
Serial.print(mpu.magX());
Serial.print(" Y: ");
Serial.print(mpu.magY());
Serial.print(" Z: ");
Serial.println(mpu.magZ());
delay(200);
}
Објашњење програма
- Wire.begin(21,22) покреће I2C комуникацију преко GPIO21 и GPIO22.
- mpu.beginMag() активира магнетометар AK8963.
- magUpdate() чита најновије вредности са сензора.
- magX(), magY() и magZ() враћају измерене вредности магнетног поља.
- Подаци се шаљу у Serial Monitor ради праћења мерења.
Како изгледају резултати?
Након покретања програма у Serial Monitor-у појављују се три вредности које представљају јачину магнетног поља по X, Y и Z оси.
X: -32.5 Y: 18.7 Z: 41.9
X: -31.9 Y: 19.3 Z: 42.0
X: -29.4 Y: 20.5 Z: 41.8
...

Приказ резултата
Очитане вредности магнетног поља приказују се у реалном времену у Serial Monitor-у.
Вежба 1 – Посматрање магнетног поља
Циљ ове вежбе је да ученици разумеју да магнетометар непрекидно мери магнетно поље које окружује сензор.
Поступак
- Повезати ESP32 и MPU-9250.
- Учитајте претходни програм.
- Отворите Serial Monitor.
- Полако ротирајте модул у свим правцима.
- Посматрајте како се мењају вредности X, Y и Z.
Питање 1
Која оса највише мења вредност када ротираш модул лево и десно?
Питање 2
Шта се дешава ако приближиш магнет сензору?
Питање 3
Да ли се вредности враћају када удаљиш магнет?
Шта ученици треба да закључе?
- магнетометар реагује на Земљино магнетно поље;
- реагује и на сваки други магнет у близини;
- очитане вредности зависе од оријентације сензора;
- на основу X и Y осе може се израчунати правац.
Израчунавање смера компаса
Саме вредности X и Y осе нису довољне да бисмо знали ка ком правцу је окренут сензор. Због тога се користи математичка функција atan2() која на основу односа X и Y вредности израчунава угао у односу на магнетни север.
У Arduino окружењу функција atan2() враћа угао у радијанима, па је потребно извршити конверзију у степене.
float heading = atan2(mpu.magY(), mpu.magX());
heading = heading * 180.0 / PI;
if (heading < 0)
heading += 360.0;
Објашњење
- atan2(Y,X) одређује угао у односу на X осу.
- Резултат је у радијанима.
- Множењем са 180/PI добијају се степени.
- Ако је резултат негативан, додаје се 360° како би угао био између 0° и 360°.
ESP32 програм – дигитални компас
Следећи програм очитава магнетометар и израчунава смер компаса који се приказује у Serial Monitor-у.
#include <Wire.h>
#include <MPU9250_asukiaaa.h>
MPU9250_asukiaaa mpu;
void setup() {
Serial.begin(115200);
Wire.begin(21,22);
mpu.setWire(&Wire);
mpu.beginAccel();
mpu.beginGyro();
mpu.beginMag();
}
void loop() {
mpu.magUpdate();
float heading = atan2(mpu.magY(), mpu.magX());
heading *= 180.0 / PI;
if (heading < 0)
heading += 360;
Serial.println(heading);
delay(100);
}

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

Дигитални компас
Стрелица се ротира у реалном времену на основу података које шаље ESP32.
Processing програм
import processing.serial.*;
Serial port;
float heading = 0;
void setup() {
size(600,600);
port = new Serial(this, Serial.list()[0],115200);
port.bufferUntil('\n');
}
void draw(){
background(240);
translate(width/2,height/2);
rotate(radians(heading));
strokeWeight(5);
line(0,0,0,-180);
fill(255,0,0);
ellipse(0,-180,18,18);
}
void serialEvent(Serial p){
String s = trim(p.readStringUntil('\n'));
if(s!=null){
heading=float(s);
}
}
Како ради програм?
- Processing отвара серијски порт.
- Чита угао који шаље ESP32.
- Угао смешта у променљиву heading.
- Функција rotate() ротира стрелицу.
- Ученици одмах виде како се смер мења приликом окретања сензора.
Вежба 2 – Прављење дигиталног компаса
Циљ вежбе је да се направи компас који приказује смер у степенима и графички приказује оријентацију на екрану.
Поступак
- Учитати ESP32 програм.
- Покренути Processing програм.
- Окренути сензор у различитим правцима.
- Посматрати ротацију стрелице.
Задатак 1
Проверити да ли стрелица показује север када је модул окренут ка северу.
Задатак 2
Приближити магнет и посматрати како се компас понаша.
Задатак 3
Покушати калибрацију и упоредити резултате пре и после ње.
Вежба 3 – Одређивање страна света
Модификовати ESP32 програм тако да, поред угла, исписује и назив стране света:
- Север (N)
- Исток (E)
- Југ (S)
- Запад (W)
У Processing програму додати приказ слова N, E, S и W око кружнице компаса тако да визуелизација буде што сличнија правом дигиталном компасу.
Идеје за самосталне пројекте
Након што су ученици савладали основе рада са магнетометром и израдили једноставан дигитални компас, могу започети развој сложенијих пројеката. Следећи предлози представљају добру основу за школске, STEM и роботичке пројекте.
Електронски компас
Приказ смера на OLED или TFT екрану уз приказ страна света.
Навигација робота
Робот користи магнетометар за одређивање смера кретања.
Паметан ранац
Детекција оријентације и аларм ако се ранац окрене.
Мини навигација
Приказ тренутног смера кретања на LCD или OLED дисплеју.
Bluetooth компас
Слање података паметном телефону преко Bluetooth комуникације.
3D визуелизација
Приказ оријентације сензора у Processing окружењу.
Изазов за ученике
Покушајте да проширите програм тако да компас приказује не само угао већ и назив стране света.
| Угао | Правац |
|---|---|
| 337.5° – 22.5° | Север (N) |
| 22.5° – 67.5° | Североисток (NE) |
| 67.5° – 112.5° | Исток (E) |
| 112.5° – 157.5° | Југоисток (SE) |
| 157.5° – 202.5° | Југ (S) |
| 202.5° – 247.5° | Југозапад (SW) |
| 247.5° – 292.5° | Запад (W) |
| 292.5° – 337.5° | Северозапад (NW) |
Напредни задатак
Уместо исписивања само угла, измените програм тако да на основу измереног угла исписује и назив стране света.
Домаћи задатак
- Покренути програм и измерити угао компаса у четири различита смера.
- Записати очитане вредности.
- Приказати смер и у степенима и као страну света.
- Покушати калибрацију магнетометра и упоредити резултате пре и после калибрације.
- Додати приказ угла директно у Processing прозору.
Питања за проверу знања
Питање 1
Шта мери магнетометар?
Питање 2
Која функција се користи за израчунавање угла компаса?
Питање 3
Зашто је потребна калибрација магнетометра?
Питање 4
Који GPIO пинови ESP32 се најчешће користе за I2C комуникацију?
Питање 5
Коју улогу има програм Processing у овој лекцији?
Питање 6
Шта ће се догодити ако магнет приближимо магнетометру?
Шта смо научили?
- шта је Земљино магнетно поље;
- како функционише дигитални компас;
- како ради магнетометар AK8963 унутар MPU-9250 модула;
- како се магнетометар повезује са ESP32;
- како се читају подаци из магнетометра;
- како се израчунава угао компаса;
- како се врши основна калибрација;
- како се подаци визуализују у Processing окружењу.
Закључак
Магнетометар је један од најважнијих сензора за одређивање оријентације у простору. Иако самостално може да функционише као дигитални компас, у пракси се скоро увек комбинује са акцелерометром и жироскопом како би се добили што прецизнији подаци о положају и кретању уређаја.
У наредним лекцијама ученици ће научити како се комбинују сва три сензора MPU-9250 модула и како се добија потпуна оријентација уређаја у тродимензионалном простору, што представља основу за рад дронова, мобилних робота, паметних уређаја и система за стабилизацију.