Мазмұны:

Arduino Digital Compass жобасы: 3 қадам
Arduino Digital Compass жобасы: 3 қадам

Бейне: Arduino Digital Compass жобасы: 3 қадам

Бейне: Arduino Digital Compass жобасы: 3 қадам
Бейне: Free Code Arduino Project Compass using SSD1306 OLED & MPU9250 Magnetometer 2024, Қараша
Anonim
Image
Image

Сәлеметсіз бе! Бұл нұсқаулықта сіз Arduino мен Processing IDE көмегімен цифрлық компасты қалай жасауға болатынын көресіз. Бұл өте қарапайым, бірақ қызықты және керемет көрінетін Arduino жобасы.

Сіз бұл оқулықтың демо үлгісін жоғарыдағы бейнеден көре аласыз. Сіз әрқашан менің YouTube каналымда осындай қызықты бейнелерді таба аласыз, сонымен қатар HowToMechatronics.com веб -сайтында электроника бойынша көптеген жобалар мен оқулықтарды таба аласыз.

1 -қадам: қажет бөлшектер

Бұл жоба үшін сізге жердің магнит өрісін өлшеуге арналған Arduino тақтасы мен MEMS магнитометрі қажет. Мен MC5883L 3 - осьті магнитометрі бар GY - 80 үзіліс тақтасын қолданамын.

Жобаның бастапқы кодын жалғастырмас бұрын, егер сізге MEMS магнитометрінің қалай жұмыс істейтіні, сондай -ақ G2 - 80 байланыс тақтасын I2C байланысы арқылы қосу және пайдалану туралы толығырақ ақпарат қажет болса, бұл үшін менің арнайы оқулықтарымды тексеруге болады.

2 -қадам: Arduino бастапқы коды

Бізге бірінші кезекте қажет нәрсе - эскизді Arduino тақтасына жүктеу, ол магнитометрден деректерді оқиды және оны Processing IDE -ге жібереді. Міне Arduino бастапқы коды:

/ * Arduino Compass * * Дежан Неделковский, * www. HowToMechatronics.com * */

#қосу // I2C Arduino кітапханасы

#анықтайтын магнитометр_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;

float heading, headingDegrees, headFiltered, declination;

өзгермелі Xm, Ym, Zm;

#dexine магнитометрі 0x1E // HMC5883 I2C 7 биттік мекенжайы

жарамсыз орнату () {

// Serial.begin сериялық және I2C байланыстарын баптандыру (115200); Wire.begin (); кешіктіру (100); Wire.beginTransmission (магнитометр); Wire.write (0x02); // Wire.write режимінің регистрін таңдаңыз (0x00); // Үздіксіз өлшеу режимі Wire.endTransmission (); }

void loop () {

// ---- X-Axis Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Y осі

Wire.beginTransmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTrmission (магнитометр); // Wire.write құрылғысына жіберу (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (магнитометр, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X осі 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 тақырыбы; // Дәрежелер бірлігіндегі тақырып

// Шығу бұрышын тегістеу / Төмен өту сүзгісі

headFiltered = headFiltered*0.85 + headDegrees*0.15;

// Тақырып мәнін Сериялық порт арқылы IDE өңдеуге жіберу

Serial.println (тақырыпFiltered);

кешіктіру (50); }

3 -қадам: IDE бастапқы кодын өңдеу

Алдыңғы Arduino эскизін жүктегеннен кейін, біз деректерді Processing IDE -ге алуымыз керек және Digital Compass сызуымыз керек. Компас фондық суреттен, жебенің бекітілген кескінінен және циркуль денесінің айналатын кескінінен тұрады. Жерді магнит өрісі үшін Arduino көмегімен есептелген мәндер компасты айналдыру үшін қолданылады.

Міне Processing IDE бастапқы коды:

/ * Arduino Compass * * Дежан Неделковский, * www. HowToMechatronics.com * */ импортты өңдеу.сериал. *; java.awt.event. KeyEvent импорттау; java.io. IOException импорттау;

Сериялық myPort;

PImage imgCompass; PImage imgCompassArrow; PI суретінің фоны;

Жолдық деректер = «»;

өзгермелі тақырып;

жарамсыз орнату () {

өлшемі (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); // Координат жүйесін экранның ортасына айналдырады, осылайша айналу дәл rotateZ орталығында болады (radians (-позиция)); // Компасты Z айналдырады -ось суреті (imgCompass, -960, -540); // Компас кескінін жүктейді және координаттар жүйесі басқа жаққа ауыстырылған кезде суретті -960x, -540y (экран өлшемінің жартысы) popMatrix () мәніне қою керек; // Координат жүйесін қайтарады 0, 0, 0 кескін бастапқы күйіне оралады (imgCompassArrow, 0, 0); // popMatrix () функциясы textSize (30) арқасында rotateZ () функциясына әсер етпейтін CompassArrow кескінін жүктейді; мәтін («Тақырып:» + тақырып, 40, 40); // Экрандағы тақырыптың мәнін басып шығарады

кешіктіру (40);

}

// деректерді сериялық порттан оқи бастайды

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // деректерді сериялық порттан оқиды және оны «деректер» String айнымалысына қояды. тақырып = өзгермелі (деректер); // String мәнін Float мәніне түрлендіру}

Сізге бұл жоба ұнайды деп сенемін. Егер солай болса, сіз менің веб -сайтқа кіріп, керемет жобаларды көре аласыз.

Ұсынылған: