Orodha ya maudhui:

Mradi wa Dira ya Dijiti ya Arduino: Hatua 3
Mradi wa Dira ya Dijiti ya Arduino: Hatua 3

Video: Mradi wa Dira ya Dijiti ya Arduino: Hatua 3

Video: Mradi wa Dira ya Dijiti ya Arduino: Hatua 3
Video: Управление серводвигателем с помощью потенциометра с помощью Arduino 2024, Novemba
Anonim
Image
Image

Halo! Katika hii inayoweza kufundishwa utaona jinsi unaweza kutengeneza Dira ya Dijiti ukitumia Arduino na IDE ya Usindikaji. Huu ni Mradi wa Arduino rahisi lakini wa kuvutia na mzuri.

Unaweza kutazama mfano wa onyesho la mafunzo haya kwenye video hapo juu. Unaweza kupata video za kupendeza zaidi kama hii kwenye kituo changu cha YouTube na pia kupata miradi na vifaa vya elektroniki kwenye wavuti yangu, HowToMechatronics.com

Hatua ya 1: Sehemu Zinazohitajika

Kwa mradi huu utahitaji tu Bodi ya Arduino na MEMS Magnetometer, kwa kupima uwanja wa sumaku wa dunia. Nitatumia bodi ya kuzuka ya GY - 80 ambayo ina MC5883L 3 - Axis Magnetometer.

Kabla ya kuendelea na nambari ya chanzo ya mradi Ikiwa unahitaji maelezo zaidi jinsi sumaku ya MEMS inavyofanya kazi na pia jinsi ya kuunganisha na kutumia bodi ya kuzuka ya GY - 80 kupitia Mawasiliano ya I2C unaweza kuangalia mafunzo yangu kwa hiyo.

Hatua ya 2: Msimbo wa Chanzo wa Arduino

Tunachohitaji kufanya kwanza ni kupakia mchoro kwenye Bodi ya Arduino ambayo itasoma data kutoka kwa sumaku ya sumaku na itaipeleka kwa IDE ya Usindikaji. Hapa kuna Nambari ya Chanzo ya Arduino:

/ * Arduino Compass * * na Dejan Nedelkovski, * www. HowToMechatronics.com * * /

# pamoja na // I2C Arduino Library

#fafanua Magnetometer_mX0 0x03

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

int mX0, mX1, mX_out;

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

kichwa cha kuelea, kichwaDaraja, kichwa kilichochujwa, kukata;

kuelea Xm, Ym, Zm;

#fafanua Magnetometer 0x1E // Anwani ya I2C 7bit ya HMC5883

usanidi batili () {

// Anzisha Serial na mawasiliano ya I2C Serial.begin (115200); Wire.begin (); kuchelewesha (100); Uwasilishaji wa waya (Magnetometer); Andika waya (0x02); // Chagua rejista ya mode Wire.write (0x00); // Njia ya kipimo ya kuendelea Wire.endTransmission (); }

kitanzi batili () {

// ---- X-Axis Wire.anza Uwasilishaji (Magnetometer); // kusambaza kwa kifaa Wire.write (Magnetometer_mX1); Uwasilishaji wa waya (); Ombi la Wire. Toka (Magnetometer, 1); ikiwa (Waya haipatikani () <= 1) {mX0 = Wire.read (); } Waya.anza Usafirishaji (Magnetometer); // kusambaza kwa kifaa Wire.write (Magnetometer_mX0); Uwasilishaji wa waya (); Ombi la Wire. Toka (Magnetometer, 1); ikiwa (Waya haipatikani () <= 1) {mX1 = Wire.read (); }

// ---- Y-Mhimili

Uwasilishaji wa waya (Magnetometer); // kusambaza kwa kifaa Wire.write (Magnetometer_mY1); Uwasilishaji wa waya (); Ombi la Wire. Toka (Magnetometer, 1); ikiwa (Waya haipatikani () <= 1) {mY0 = Wire.read (); } Waya.anza Usafirishaji (Magnetometer); // kusambaza kwa kifaa Wire.write (Magnetometer_mY0); Uwasilishaji wa waya (); Ombi la Wire. Toka (Magnetometer, 1); ikiwa (Waya haipatikani () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.anza Uwasilishaji (Magnetometer); // kusambaza kwa kifaa Wire.write (Magnetometer_mZ1); Uwasilishaji wa waya (); Ombi la Wire. Toka (Magnetometer, 1); ikiwa (Waya haipatikani () <= 1) {mZ0 = Wire.read (); } Waya.anza Usafirishaji (Magnetometer); // kusambaza kwa kifaa Wire.write (Magnetometer_mZ0); Uwasilishaji wa waya (); Ombi la Wire. Toka (Magnetometer, 1); ikiwa (Waya haipatikani () <= 1) {mZ1 = Wire.read (); } // ---- X-Axis mX1 = mX1 << 8; mX_out = mX0 + mX1; // Takwimu mbichi // Kutoka kwa data: 0.92 mG / tarakimu Xm = mX_out * 0.00092; // Kitengo cha Gauss // * Sehemu ya sumaku ya Dunia ni kati ya 0.25 hadi 0.65 Gauss, kwa hivyo hizi ndio maadili ambayo tunahitaji kupata takriban.

// ---- Y-Mhimili

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

// ---- Z-Mhimili

mZ1 = mZ1 <0.073 kupungua kwa rad = 0.073; kichwa + = kukataa; // Kurekebisha wakati ishara zinaonyeshwa ikiwa (kichwa <0) kichwa + = 2 * PI;

// Kurekebisha kwa sababu ya kuongezwa kwa pembe ya kupungua

ikiwa (kichwa> 2 * PI) kichwa - = 2 * PI;

headingDegree = kichwa * 180 / PI; // Kichwa katika kitengo cha Digrii

// Lainisha pembe ya pato / Kichujio cha chini cha kupitisha

headingFiltered = headingFiltered * 0.85 + headingDegree * 0.15;

// Kutuma dhamana ya kichwa kupitia Bandari ya Siri kwa Usindikaji IDE

Serial.println (headingFiltered);

kuchelewesha (50); }

Hatua ya 3: Inasindika Msimbo wa Chanzo wa IDE

Baada ya kupakia mchoro uliopita wa Arduino tunahitaji kupokea data kwenye IDE ya Usindikaji na kuteka Dira ya Dijiti. Dira hiyo inaundwa na picha ya mandharinyuma, picha iliyowekwa ya mshale, na picha inayozunguka ya mwili wa dira. Kwa hivyo maadili ya uwanja wa sumaku wa eart uliohesabiwa na Arduino hutumiwa kuzunguka dira.

Hapa kuna nambari ya chanzo ya IDE ya Usindikaji:

/ * Arduino Compass * * na Dejan Nedelkovski, * www. HowToMechatronics.com * * / kuagiza usindikaji.serial. *; kuagiza java.awt.event. KeyEvent; kuagiza java.io. IOException;

Serial myPort;

Picha ya PImage imgCompass; Picha ya PImage imgCompassArrow; Historia ya PImage;

Data ya kamba = "";

kuelea kichwa;

usanidi batili () {

saizi (1920, 1080, P3D); Nyororo(); imgCompass = mzigoImage ("Compass.png"); imgCompassArrow = mzigoImage ("CompassArrow.png"); background = mzigoImage ("Background.png"); myPort = mpya Serial (hii, "COM4", 115200); // huanza mawasiliano ya serial myPort.bufferUntil ('\ n'); }

chora batili () {

picha (nyuma, 0, 0); // Inapakia picha ya Usuli pushMatrix (); kutafsiri (upana / 2, urefu / 2, 0); // Inatafsiri mfumo wa kuratibu katikati ya skrini, ili mzunguko utokee katikati kabisa Z (radians (-heading)); // Inazunguka Dira karibu na Z - Picha ya mhimili (imgCompass, -960, -540); // Inapakia picha ya Dira na mfumo wa kuratibu unahamishwa tunahitaji kuweka picha kwenye -960x, -540y (nusu ya ukubwa wa skrini) popMatrix (); // Huleta mfumo wa kuratibu umerudi kwenye nafasi ya asili 0, 0, picha ya 0 (imgCompassArrow, 0, 0); // Inapakia picha ya CompassArrow ambayo haiathiriwi na kazi ya kuzungukaZ () kwa sababu ya kazi ya popMatrix () textSize (30); maandishi ("Kichwa:" + kichwa, 40, 40); // Inachapisha thamani ya kichwa kwenye skrini

kuchelewesha (40);

}

// huanza kusoma data kutoka Port Serial

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); kichwa = kuelea (data); // Kubadilisha Thamani ya Kamba kuwa Thamani ya Kuelea}

Natumai utaupenda mradi huu. Ikiwa ni hivyo unaweza pia kutembelea wavuti yangu kwa miradi mizuri zaidi.

Ilipendekeza: