Adăugarea unui modul de busolă la microcontrolerul dvs. Arduino deschide o serie de posibilități pentru proiecte. Iată cum să conectați unul și să îl utilizați.

În proiectele moderne de bricolaj, este destul de comun să găsiți senzori avansați, cum ar fi accelerometre și magnetometre, interfațați cu microcontrolere. Deși este posibil să fi folosit acești senzori pe telefon, este greu de imaginat cum funcționează aceste module, dar este surprinzător de simplu.

Senzorul magnetometrului busolă GY-271 permite detectarea orientării pentru diverse aplicații. Aici vom explora procesul de interfață a senzorului GY-271 cu un microcontroler Arduino, cum să-l calibrați și să ne uităm la problemele cu care vă puteți confrunta în timp ce faceți acest lucru.

Ce este modulul busolă GY-271?

Modulul de busolă GY-271 este un magnetometru foarte sensibil care poate măsura câmpuri magnetice în trei dimensiuni. Este folosit pentru a detecta câmpul magnetic al Pământului și pentru a determina direcția sau orientarea dispozitivelor în aplicații precum sisteme de navigație, robotică și drone. Gândește-te la asta ca la o busolă digitală foarte precisă. Acest senzor este echipat cu un design compact și robust, care îl face ușor de instalat și utilizat într-o gamă largă de proiecte.

instagram viewer

Cum funcționează modulul busolă GY-271?

Modulul de busolă GY-271 HCM5883L conține un senzor magnetometru cu 3 axe, care se bazează pe tehnologia magnetorezistentă anizotropă (AMR). Senzorul măsoară puterea și direcția câmpului magnetic al Pământului prin detectarea modificărilor rezistenței elementelor sale interne AMR.

Când senzorul este expus la un câmp magnetic, rezistența elementelor AMR se modifică, generând o tensiune proporțională cu puterea și direcția câmpului magnetic. Procesorul de semnal digital al senzorului convertește apoi această tensiune într-un semnal digital, care poate fi citit de un microcontroler. Măsurând tensiunea în toate cele trei axe, senzorul poate oferi citiri foarte precise ale intensității și direcției câmpului magnetic în trei dimensiuni.

Conectarea GY-271 la un Arduino Uno

Conectarea acestui modul la Arduino este destul de simplă. Am acoperit și altele module Arduino ușor de utilizat care vă poate ajuta la extinderea proiectului dvs. în viitor. Modulul GY-271 are un total de cinci pini, inclusiv VCC, GNDși trei pini de semnal (SDA, SCL, și DRDY).

Veți avea nevoie de următoarele componente:

  • Modul busolă GY-271 HMC5883L
  • Arduino Uno (sau alt model)
  • Fire jumper (mascul-la-mascul și de la bărbat-la-femelă)
  • Breadboard (opțional)

Mai întâi, conectați VCC și GND pinii modulului GY-271 la 5V și GND pinii Arduino Uno, respectiv.

Apoi, conectați SDA și SCL pinii modulului la A4 și A5 pini analogi ai Arduino Uno, respectiv.

Instalarea bibliotecilor necesare

Înainte de a începe să lucrați cu modulul de busolă GY-271 și Arduino, trebuie să instalați bibliotecile necesare pentru a comunica cu senzorul.

Prima bibliotecă pe care trebuie să o includeți în schiță este biblioteca Wire, care este utilizată pentru comunicarea I2C între Arduino și senzor. Biblioteca Wire vine preinstalată cu Arduino IDE, deci nu trebuie să o descărcați separat. Pentru a instala cel de-al doilea, cel HMC5883L bibliotecă, va trebui să urmați acești pași:

Deschideți Arduino IDE și accesați Schiță > Includeți biblioteca > Gestionați bibliotecile.

În Managerul bibliotecii, căutați HMC5883L în bara de căutare.

Selectează HMC5883L biblioteca special de la Adafruit. Odată ce biblioteca este instalată, o puteți include în schița Arduino accesând Schiță > Includeți biblioteca > HMC5883L.

Înțelegerea Codului

Trebuie să scrieți un program care inițializează senzorul, îi citește datele și calculează puterea și direcția câmpului magnetic al Pământului. Codul complet poate fi descărcat de la oficialul nostru Depozitul GitHub.

La începutul codului, trebuie să includeți bibliotecile necesare pe care tocmai le-ați descărcat.

#include
#include
#include

Nu uitați să atribuiți un ID unic senzorului. Utilizați această linie pentru a face asta:

Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);

În codul de configurare, începeți monitorul serial și verificați dacă senzorul răspunde. Puteți imprima mesaje pe monitor pentru a actualiza starea senzorului:

golînființat(gol)
{
Serial.ÎNCEPE(9600);
Serial.println(„Testul magnetometrului HMC5883”); Serial.println("");

/* Inițializează senzorul */
dacă(!mag.ÎNCEPE())
{
Serial.println(„Hopa, nu a fost detectat niciun HMC5883... Verifică-ți cablajul!");
in timp ce(1);
}
}

În buclă, mai întâi, obțineți un nou eveniment de senzor:

senzori_event_t eveniment;
mag.getEvent(&event);

Apoi afișați citirile senzorului pe monitorul serial. Nu uitați să setați rata baud la 9600​​​​.

Serial.imprimare("X: "); Serial.imprimare(eveniment.magnetic.x); Serial.imprimare(" ");
Serial.imprimare("Y:"); Serial.imprimare(eveniment.magnetic.y); Serial.imprimare(" ");
Serial.imprimare("Z:"); Serial.imprimare(eveniment.magnetic.z); Serial.imprimare(" ");Serial.println("uT");

Țineți modulul astfel încât Z este îndreptată „în sus” și măsurați titlul cu X și Y. Făcând acest lucru, puteți calcula direcția atunci când magnetometrul este la nivel. Această linie de cod ajută la asta:

pluti titlu = atan2(eveniment.magnetic.y, eveniment.magnetic.x);

Odată ce ai rubrica, trebuie apoi să adăugați dvs declinationAngle, care este eroarea câmpului magnetic din locația dvs.

pluti declinationAngle = 0.663;
 titlu += declinationAngle;

Puteți găsi convenabil unghiul de declinare al zonei dvs. locale pe Site-ul declinației magnetice. Dacă dintr-un motiv oarecare nu puteți găsi unghiul de declinare, comentați cele două rânduri din codul dvs.

Comentarea celor două linii de cod poate duce la citiri defectuoase ale senzorului. Încercați tot posibilul să calibrați senzorul înainte de utilizare.

În cele din urmă, imprimați titlul pe monitorul serial și adăugați o întârziere pentru a aștepta o jumătate de secundă înainte de a citi din nou.

Serial.imprimare(„Titul (grade):”);
Serial.println(titluGrade);
întârziere(500);

De aici, puteți personaliza codul pentru a se potrivi nevoilor proiectului și puteți adăuga caracteristici suplimentare, cum ar fi înregistrarea datelor.

Dacă preferați să utilizați biblioteca Adafruit, vă recomandăm să o obțineți de la Depozitul GitHub al Adafruit.

Citirea și interpretarea datelor busolei

Datele senzorului afișate pe monitorul serial arată valorile vectorului câmpului magnetic măsurat de magnetometru în microtesla (μT) pentru axele X, Y și, respectiv, Z. Aceste valori pot fi utilizate pentru a determina orientarea și magnitudinea câmpului magnetic.

Valoarea direcției afișată în grade este de asemenea importantă și reprezintă direcția polului nord magnetic în raport cu poziția senzorului. Această citire poate fi utilizată în proiecte în care trebuie determinată direcția unui obiect în mișcare, cum ar fi sistemele de robotică, navigație și geolocalizare.

Calibrarea senzorului

Dacă ați instalat deja o bibliotecă diferită pentru modulul HMC5883L, va trebui să o dezinstalați sau să o ștergeți. În caz contrar, este posibil să primiți erori de compilare sau să vedeți avertismente pe monitorul serial în timpul calibrării. Vă recomandăm să utilizați biblioteca lui Jarzebski disponibil pe GitHub, deoarece are resursele complete de calibrare necesare pentru această secțiune.

Mai întâi, descărcați fișierul zip din depozit făcând clic pe Cod > Descărcați ZIP.

Apoi, deschideți Arduino IDE și faceți clic pe Schiță > Includeți biblioteca > Adăugați o bibliotecă.

Selectează Arduino-HMC5883 zip pe care tocmai l-ați descărcat, iar IDE-ul Arduino va instala automat biblioteca pentru dvs.

Rulați schița de calibrare disponibilă în depozit în timp ce mutați senzorul pe o suprafață plană la încărcare. Valorile obținute de la monitorul serial sunt valorile offset ale senzorului, pe care le puteți utiliza pentru a vă corecta citirile în timp ce utilizați busola în timpul proiectelor.

Probleme cu care ați putea întâlni

Există mai multe erori în care cineva poate întâlni atunci când interfață modulul busolă cu Arduino. Iată câteva exemple și soluțiile lor:

Erori de compilare: Acestea pot apărea dacă bibliotecile necesare nu sunt incluse sau dacă există erori de sintaxă în cod. Pentru a remedia acest lucru, asigurați-vă că ați instalat bibliotecile corecte și verificați codul pentru eventuale erori de sintaxă. După cum am văzut de multe ori, este posibil să fi instalat accidental mai multe biblioteci HCM5883L.

Eroare de compilare: „Adafruit_HMC5883_Unified” face nu denumește un tip

Erori de comunicare: Dacă nu puteți comunica cu modulul busolei, asigurați-vă că l-ați conectat la pinii corespunzători de pe Arduino și că cablurile sunt corecte. De asemenea, poate fi necesar să ajustați adresa I2C a modulului din codul dvs. dacă este diferită de cea implicită, care este 0x1E.

Eroare folosind hmc5883l/testDevice (linia246) Eroare la comunicarea cu senzorul HMC5883L. Valoarea citit de la ID_A, ID_B și ID_C se înregistrează donu potriviți cu valorile așteptate.

Interferență magnetică: Dacă citirile busolei sunt instabile sau fluctuează, aceasta poate fi din cauza interferențelor magnetice de la obiectele din apropiere. Mutați modulul departe de orice magneți sau alte surse de interferență magnetică pentru a obține citiri mai stabile.

Îmbunătățiți-vă proiectele cu modulul busolă GY-271

Capacitatea de a utiliza modulul de busolă GY-271 HCM5883L deschide o ușă pentru construirea de proiecte DIY mai complexe folosind Arduino, cum ar fi roverele ghidate de GPS și dronele DIY. Posibilitățile sunt nesfârșite, mai ales când adăugați alți senzori.