Sisukord:

Arduino digitaalse kompassi projekt: 3 sammu
Arduino digitaalse kompassi projekt: 3 sammu

Video: Arduino digitaalse kompassi projekt: 3 sammu

Video: Arduino digitaalse kompassi projekt: 3 sammu
Video: #2 Основы FLProg Элементы и триггер | ESP32 NodeMCU | Визуальное программирование для Arduino 2024, November
Anonim
Image
Image

Tere! Selles juhendis näete, kuidas saate Arduino ja töötleva IDE abil digitaalset kompassi teha. See on üsna lihtne, kuid huvitav ja lahe välimus Arduino projekt.

Selle õpetuse demo näidet saate vaadata ülaltoodud videost. Minu YouTube'i kanalilt leiate alati rohkem selliseid huvitavaid videoid, aga ka palju elektroonikaprojekte ja õpetusi minu veebisaidilt HowToMechatronics.com

Samm: vajalikud osad

Selle projekti jaoks vajate maa magnetvälja mõõtmiseks lihtsalt Arduino plaati ja MEMS magnetomeetrit. Kasutan GY -80 katkestusplaati, mis sisaldab MC5883L 3 -teljelist magnetomeetrit.

Enne projekti lähtekoodiga jätkamist Kui vajate lisateavet selle kohta, kuidas MEMS -i magnetomeeter töötab, samuti kuidas ühendada ja kasutada GY -80 katkestusplaati I2C kommunikatsiooni kaudu, saate vaadata minu konkreetseid õpetusi.

Samm: Arduino lähtekood

Kõigepealt peame üles laadima visandi Arduino pardale, mis loeb magnetomeetri andmed ja saadab need töötlevale IDE -le. Siin on Arduino lähtekood:

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

#include // I2C Arduino raamatukogu

#define Magnetomeeter_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;

ujukipealkiri, rubriikKraadid, rubriikFiltreeritud, deklinatsioon;

ujuk Xm, Ym, Zm;

#define Magnetomeeter 0x1E // I2C HMC5883 7 -bitine aadress

tühine seadistus () {

// Initsialiseeri jada- ja I2C -side Serial.begin (115200); Wire.begin (); viivitus (100); Wire.beginTransmission (magnetomeeter); Wire.write (0x02); // Vali režiimi register Wire.write (0x00); // Pideva mõõtmise režiim Wire.endTransmission (); }

void loop () {

// ---- X-telje traat.beginTransmission (magnetomeeter); // edastada seadmesse Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetomeeter, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetomeeter); // edastada seadmesse Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetomeeter, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Y-telg

Wire.beginTransmission (magnetomeeter); // edastada seadmesse Wire.write (Magnetomeeter_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetomeeter, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetomeeter); // edastada seadmesse Wire.write (Magnetomeeter_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetomeeter, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-telje traat.beginTransmission (magnetomeeter); // edastada seadmesse Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetomeeter, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetomeeter); // edastada seadmesse Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetomeeter, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-telg mX1 = mX1 << 8; mX_out = mX0+mX1; // Toorandmed // Andmelehelt: 0,92 mG/number Xm = mX_out*0,00092; // Gaussi ühik //* Maa magnetväli on vahemikus 0,25–0,65 Gaussi, seega on need väärtused, mida peame ligikaudselt saama.

// ---- Y-telg

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

// ---- Z-telg

mZ1 = mZ1 <0,073 rad deklinatsioon = 0,073; rubriik += deklinatsioon; // Parandamine märkide austamisel, kui (rubriik <0) rubriik += 2*PI;

// Parandamine deklinatsiooninurga lisamise tõttu

if (rubriik> 2*PI) rubriik -= 2*PI;

rubriikKraadid = rubriik * 180/PI; // Pealkiri kraadiühikus

// Väljundnurga silumine / madalpääsfilter

rubriikFiltreeritud = rubriikFiltreeritud*0,85 + rubriikKraadid*0,15;

// Pealkirja väärtuse saatmine jadapordi kaudu IDE töötlemiseks

Serial.println (rubriikFiltreeritud);

viivitus (50); }

3. toiming: IDE lähtekoodi töötlemine

Pärast eelmise Arduino eskiisi üleslaadimist peame andmed töötlevasse IDE -sse vastu võtma ja digitaalse kompassi joonistama. Kompass koosneb taustapildist, noole fikseeritud kujutisest ja kompassi keha pöörlevast pildist. Seega kasutatakse kompassi pööramiseks Arduino abil arvutatud magnetvälja väärtusi.

Siin on töötlemise IDE lähtekood:

/ * Arduino kompass * * autor Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; import java.awt.event. KeyEvent; importige java.io. IOException;

Seeria myPort;

PImage imgCompass; PImage imgCompassArrow; PImage taust;

Stringi andmed = "";

ujukipealkiri;

tühine seadistus () {

suurus (1920, 1080, P3D); sile (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = uus seeria (see, "COM4", 115200); // käivitab jadaühenduse myPort.bufferUntil ('\ n'); }

tühine viik () {

pilt (taust, 0, 0); // Laeb taustapildi pushMatrix (); tõlkima (laius/2, kõrgus/2, 0); // Tõlgib koordinaatsüsteemi ekraani keskele, nii et pöörlemine toimub otse keskel rotateZ (radiaanid (-pealkiri)); // Pöörab kompassi Z -telje ümber (imgCompass, -960, -540); // Laeb kompassi pildi ja kuna koordinaatsüsteem on ümber paigutatud, peame pildi määrama -960x, -540y (pool ekraani suurust) popMatrix (); // Toob koordinaatsüsteemi tagasi algasendisse 0, 0, 0 image (imgCompassArrow, 0, 0); // Laeb CompassArrow pildi, mida funktsioon rotateZ () ei mõjuta funktsiooni popMatrix () tõttu textSize (30); tekst ("Pealkiri:" + pealkiri, 40, 40); // Prindib pealkirja väärtuse ekraanile

viivitus (40);

}

// alustab jadaportist andmete lugemist

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // loeb jadapordist andmeid ja paneb need String muutuja "data". rubriik = ujuk (andmed); // Stringi väärtuse teisendamine Float -väärtuseks}

Loodan, et teile meeldib see projekt. Kui see nii on, võite minu veebisaiti külastada ka lahedamate projektide jaoks.

Soovitan: