Բովանդակություն:

Arduino Digital Compass նախագիծ ՝ 3 քայլ
Arduino Digital Compass նախագիծ ՝ 3 քայլ

Video: Arduino Digital Compass նախագիծ ՝ 3 քայլ

Video: Arduino Digital Compass նախագիծ ՝ 3 քայլ
Video: How to use MPU-9250 Gyroscope, Accelerometer, Magnetometer for Arduino 2024, Հուլիսի
Anonim
Image
Image

Բարեւ Ձեզ! Այս ձեռնարկում դուք կտեսնեք, թե ինչպես կարող եք թվային կողմնացույց պատրաստել Arduino- ի և Processing IDE- ի միջոցով: Սա բավականին պարզ, բայց հետաքրքիր և զով տեսք ունեցող Arduino նախագիծ է:

Այս ձեռնարկի ցուցադրական օրինակը կարող եք դիտել վերևի տեսանյութում: Դուք միշտ կարող եք գտնել այսպիսի ավելի հետաքրքիր տեսանյութեր իմ YouTube ալիքում, ինչպես նաև գտնել բազմաթիվ էլեկտրոնիկայի նախագծեր և ձեռնարկներ իմ կայքում ՝ HowToMechatronics.com

Քայլ 1: Պահանջվում են մասեր

Այս նախագծի համար ձեզ հարկավոր կլինի ընդամենը Arduino տախտակ և MEMS մագնիսաչափ, երկրի մագնիսական դաշտը չափելու համար: Ես կօգտագործեմ GY -80 բեկման տախտակ, որը պարունակում է MC5883L 3 - առանցքի մագնիսաչափ:

Նախքան նախագծի սկզբնաղբյուրը շարունակելը Եթե Ձեզ անհրաժեշտ են ավելի շատ մանրամասներ, թե ինչպես է գործում MEMS մագնիսաչափը, ինչպես նաև ինչպես միացնել և օգտագործել GY -80 ճեղքման տախտակը I2C հաղորդակցության միջոցով, կարող եք ստուգել դրա համար իմ հատուկ ձեռնարկները:

Քայլ 2: Arduino կոդ

Այն, ինչ մենք պետք է անենք, առաջինն է ՝ Arduino Board- ում ներբեռնել էսքիզ, որը կկարդա մագնիսաչափից ստացված տվյալները և այն կուղարկի Processing IDE- ին: Ահա Arduino- ի աղբյուրի կոդը.

/ * Arduino Compass * * ՝ Դեյան Նեդելկովսկու, * www. HowToMechatronics.com * */

#ներառել // I2C Arduino գրադարան

#սահմանի մագնիսաչափ_մX0 0x03

#սահմանել մագնիսաչափ_մX1 0x04 #սահմանել մագնիսաչափ_մZ0 0x05 #սահմանել

int mX0, mX1, mX_out;

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

բոց վերնագիր, վերնագիր Աստիճաններ, վերնագիր ilտված, անկում;

բոց Xm, Ym, Zm;

#define Magnetometer 0x1E // I2C 7bit հասցե HMC5883

void setup () {

// Initialize Serial and I2C Communications Serial.begin (115200); Wire.begin (); ուշացում (100); Wire.beginTransmission (Magnetometer); Wire.write (0x02); // Ընտրեք ռեժիմի գրանցում Wire.write (0x00); // Չափման շարունակական ռեժիմ Wire.endTransmission (); }

դատարկ շրջան () {

// ---- X-Axis Wire.beginTransmission (Magnetometer); // փոխանցել սարքին Wire.write (Magnetometer_mX1); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (մագնիսաչափ, 1); եթե (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Մագնիսաչափ); // փոխանցել սարքին Wire.write (Magnetometer_mX0); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (մագնիսաչափ, 1); եթե (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Y- առանցք

Wire.beginTransmission (Magnetometer); // փոխանցել սարքին Wire.write (Magnetometer_mY1); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (մագնիսաչափ, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Մագնիսաչափ); // փոխանցել սարքին Wire.write (Magnetometer_mY0); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (մագնիսաչափ, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (Magnetometer); // փոխանցել սարքին Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (մագնիսաչափ, 1); եթե (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Մագնիսաչափ); // փոխանցել սարքին Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (մագնիսաչափ, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-Axis mX1 = mX1 << 8; mX_out = mX0+mX1; // Հում տվյալներ // Տվյալների թերթից ՝ 0.92 մգ/թվանշան Xm = mX_out*0.00092; // Գաուսի միավոր //* Երկրի մագնիսական դաշտը տատանվում է 0.25 -ից 0.65 Գաուսի միջև, ուստի դրանք այն արժեքներն են, որոնք մենք պետք է մոտավորապես ստանանք:

// ---- Y- առանցք

mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0.00092;

// ---- Z- առանցք

mZ1 = mZ1 <0.073 ռադի անկում = 0.073; վերնագիր += անկում; // Ուղղում, երբ նշանները հարգվում են, եթե (վերնագիր <0) վերնագիր += 2*PI;

// Ուղղում `թեքության անկյունի ավելացման պատճառով

if (վերնագիր> 2*PI) վերնագիր -= 2*PI;

headingDegrees = վերնագիր * 180/PI; // Վերնագիրը աստիճանների բաժնում

// Ելքի անկյունի հարթեցում / passածր փոխանցման զտիչ

headingFiltered = headingFiltered*0.85 + headingDegrees*0.15;

// Վերնագրի արժեքը Սերիական նավահանգստի միջոցով ուղարկելով Processing IDE

Serial.println (վերնագիր ilտված);

ուշացում (50); }

Քայլ 3: Մշակեք IDE աղբյուրի կոդը

Arduino- ի էսքիզը վերբեռնելուց հետո մենք պետք է տվյալները ստանանք Processing IDE և գծենք թվային կողմնացույցը: Կողմնացույցը կազմված է ֆոնային պատկերից, սլաքի ֆիքսված պատկերից և կողմնացույցի մարմնի պտտվող պատկերից: Այսպիսով, Arduino- ով հաշվարկված ականջի մագնիսական դաշտի արժեքները օգտագործվում են կողմնացույցը պտտելու համար:

Ահա Processing IDE- ի աղբյուրի կոդը.

/ * Arduino Compass * * ՝ Դեյան Նեդելկովսկու, * www. HowToMechatronics.com * */ ներմուծում processing.serial. *; ներմուծել java.awt.event. KeyEvent; ներմուծում java.io. IOException;

Սերիական myPort;

PImage imgCompass; PImage imgCompassArrow; PImage ֆոն;

Լարային տվյալներ = "";

բոց վերնագիր;

void setup () {

չափը (1920, 1080, P3D); հարթ(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = նոր Սերիա (սա, «COM4», 115200); // սկսում է սերիական հաղորդակցությունը myPort.bufferUntil ('\ n'); }

դատարկ վիճակահանություն () {

պատկեր (ֆոն, 0, 0); // Բեռնում է հետին պլանի պատկերը pushMatrix (); թարգմանել (լայնություն/2, բարձրություն/2, 0); // Կոորդինատային համակարգը թարգմանում է էկրանի կենտրոն, այնպես որ պտույտը տեղի է ունենում հենց կենտրոնի պտույտ Z- ում (ռադիաններ (-գլուխ)); // Պտտում է կողմնացույցը Z -առանցքի պատկերի շուրջ (imgCompass, -960, -540); // Բեռնում է կողմնացույցի պատկերը և երբ կոորդինատային համակարգը տեղափոխվում է, մենք պետք է պատկերը սահմանենք -960x, -540y (էկրանի չափի կեսը) popMatrix (); // Կոորդինատային համակարգը բերում է սկզբնական դիրքի 0, 0, 0 պատկեր (imgCompassArrow, 0, 0); // Բեռնում է CompassArrow պատկերը, որի վրա չի ազդում rotateZ () գործառույթը popMatrix () գործառույթի պատճառով textSize (30); տեքստ («Վերնագիր.» + վերնագիր, 40, 40); // Տպում է վերնագրի արժեքը էկրանին

ուշացում (40);

}

// սկսում է կարդալ տվյալները Սերիական նավահանգստից

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // կարդում է սերիական նավահանգստի տվյալները և դրանք դնում է String փոփոխական «տվյալների» մեջ: վերնագիր = բոց (տվյալներ); // Լարի արժեքը փոխարկելով Float արժեքի}

Հուսով եմ, որ ձեզ դուր կգա այս նախագիծը: Եթե այդպես է, ապա կարող եք նաև այցելել իմ կայքը ՝ ավելի հետաքրքիր նախագծերի համար:

Խորհուրդ ենք տալիս: