Satura rādītājs:

Arduino digitālā kompasa projekts: 3 soļi
Arduino digitālā kompasa projekts: 3 soļi

Video: Arduino digitālā kompasa projekts: 3 soļi

Video: Arduino digitālā kompasa projekts: 3 soļi
Video: Top 5 Arduino Projects for Beginners. Full tutorial videos in Youtube Channel #arduino 2024, Novembris
Anonim
Image
Image

Sveiki! Šajā pamācībā jūs redzēsit, kā jūs varat izveidot digitālo kompasu, izmantojot Arduino un apstrādes IDE. Šis ir diezgan vienkāršs, bet interesants un foršs Arduino projekts.

Jūs varat noskatīties šīs apmācības demonstrācijas piemēru iepriekš redzamajā videoklipā. Manā YouTube kanālā vienmēr varat atrast interesantākus šādus videoklipus, kā arī atrast daudz elektronikas projektu un pamācību.

1. darbība. Nepieciešamās detaļas

Šim projektam jums būs nepieciešama tikai Arduino plāksne un MEMS magnetometrs zemes magnētiskā lauka mērīšanai. Es izmantošu GY -80 sadalīšanas paneli, kas satur MC5883L 3 ass magnetometru.

Pirms turpināt projekta avota kodu Ja jums nepieciešama sīkāka informācija par to, kā darbojas MEMS magnetometrs, kā arī par to, kā savienot un izmantot GY -80 sadalīšanas paneli, izmantojot I2C paziņojumu, varat pārbaudīt manas īpašās apmācības.

2. darbība: Arduino avota kods

Vispirms mums ir jāaugšupielādē skice Arduino panelī, kas nolasīs datus no magnetometra un nosūtīs tos apstrādes IDE. Šeit ir Arduino avota kods:

/ * Arduino kompass * * autors Dejan Nedelkovski, * www. HowToMechatronics.com * */

#include // I2C Arduino bibliotēka

#define Magnetometrs_mX0 0x03

#define Magnetometer_mX1 0x04 #define Magnetometer_mZ0 0x05 #define Magnetometer_mZ1 0x06 #define Magnetometer_mY0 0x07 #define Magnetometer_mY1 0x08

int mX0, mX1, mX_out;

int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;

pludiņa pozīcija, virsrakstsGrādi, pozīcijaFiltrēts, deklinācija;

pludiņš Xm, Ym, Zm;

#define Magnetometrs 0x1E // I2C HMC5883 7 bitu adrese

void setup () {

// Inicializēt seriālos un I2C sakarus Serial.begin (115200); Wire.begin (); kavēšanās (100); Wire.beginTransmission (magnetometrs); Wire.write (0x02); // Izvēlieties režīma reģistru Wire.write (0x00); // Nepārtrauktas mērīšanas režīms Wire.endTransmission (); }

void loop () {

// ---- X ass stieple.beginTransmission (magnetometrs); // pārraidīt uz ierīci Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometrs, 1); ja (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometrs); // pārraidīt uz ierīci Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometrs, 1); ja (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Y ass

Wire.beginTransmission (magnetometrs); // pārraidīt uz ierīci Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometrs, 1); ja (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometrs); // pārraidīt uz ierīci Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometrs, 1); ja (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-ass stieple.beginTransmission (magnetometrs); // pārraidīt uz ierīci Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometrs, 1); ja (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometrs); // pārraidīt uz ierīci Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometrs, 1); ja (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X ass mX1 = mX1 << 8; mX_out = mX0+mX1; // Neapstrādāti dati // No datu lapas: 0,92 mG/cipars Xm = mX_out*0,00092; // Gausa vienība //* Zemes magnētiskais lauks svārstās no 0,25 līdz 0,65 Gauss, tāpēc šīs ir vērtības, kas mums ir jāiegūst aptuveni.

// ---- Y ass

mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0,00092;

// ---- Z-ass

mZ1 = mZ1 <0,073 rad deklinācija = 0,073; virsraksts += deklinācija; // Labošana, kad zīmes tiek godātas, ja (pozīcija <0) virsraksts += 2*PI;

// Labošana, pateicoties deklinācijas leņķa pievienošanai

if (pozīcija> 2*PI) pozīcija -= 2*PI;

headDegrees = pozīcija * 180/PI; // Virsraksts grādu vienībā

// Izvades leņķa izlīdzināšana / Zemas caurlaidības filtrs

virsrakstsFiltrēts = virsrakstsFiltrēts*0,85 + virsrakstsGrādi*0,15;

// Virsraksta vērtības nosūtīšana caur seriālo portu apstrādes IDE

Serial.println (virsrakstsFiltrēts);

kavēšanās (50); }

3. darbība: IDE avota koda apstrāde

Pēc iepriekšējās Arduino skices augšupielādes mums ir jāsaņem dati apstrādes IDE un jāuzzīmē digitālais kompass. Kompass sastāv no fona attēla, fiksēta bultiņas attēla un rotējoša kompasa korpusa attēla. Tātad ar Arduino aprēķinātās zemes magnētiskā lauka vērtības tiek izmantotas, lai pagrieztu kompasu.

Šeit ir apstrādes IDE avota kods:

/ * Arduino Compass * * autors Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; importēt java.awt.event. KeyEvent; importēt java.io. IOException;

Sērijas myPort;

PImage imgCompass; PImage imgCompassArrow; PImage fons;

Stīgu dati = "";

pludiņa pozīcija;

void setup () {

izmērs (1920, 1080, P3D); gluda (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); fons = loadImage ("Background.png"); myPort = jauns seriāls (šis, "COM4", 115200); // sāk sērijveida komunikāciju myPort.bufferUntil ('\ n'); }

void draw () {

attēls (fons, 0, 0); // Ielādē fona attēlu pushMatrix (); tulkot (platums/2, augstums/2, 0); // Pārvērš koordinātu sistēmu ekrāna centrā, lai rotācija notiktu tieši centrā rotateZ (radiāni (-virsraksts)); // Pagriež kompasu ap Z -ass attēlu (imgCompass, -960, -540); // Ielādē kompasa attēlu un, pārvietojot koordinātu sistēmu, mums ir jāiestata attēls -960x, -540y (puse no ekrāna izmēra) popMatrix (); // Atved koordinātu sistēmu atpakaļ sākotnējā pozīcijā 0, 0, 0 attēls (imgCompassArrow, 0, 0); // Ielādē CompassArrow attēlu, kuru funkcija rotateZ () neietekmē popMatrix () funkcijas textSize (30) dēļ; teksts ("Virsraksts:" + virsraksts, 40, 40); // Izdrukā virsraksta vērtību ekrānā

kavēšanās (40);

}

// sāk lasīt datus no seriālā porta

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // nolasa datus no seriālā porta un ievieto tos virknes mainīgajā "data". virsraksts = pludiņš (dati); // String vērtības konvertēšana Float value}

Es ceru, ka jums patiks šis projekts. Ja tas tā ir, varat arī apmeklēt manu vietni, lai iegūtu vairāk foršu projektu.

Ieteicams: