Мазмуну:
Video: Arduino Digital Compass долбоору: 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Салам! Бул көрсөтмөдө сиз Arduino жана Processing IDE менен Digital Compassти кантип жасоону көрөсүз. Бул абдан жөнөкөй, бирок кызыктуу жана кооз көрүнгөн Arduino долбоору.
Бул окуу куралынын демо мисалын жогорудагы видеодон көрө аласыз. Сиз ар дайым менин YouTube каналымда ушул сыяктуу кызыктуу видеолорду таба аласыз, ошондой эле менин веб -сайтымдан HowToMechatronics.comдо көптөгөн электроника долбоорлорун жана окуу куралдарын таба аласыз.
1 -кадам: Тетиктер талап кылынат
Бул долбоор үчүн сизге жердин магнит талаасын өлчөө үчүн Arduino Board жана MEMS Magnetometer гана керек болот. Мен MC5883L 3 - Axis магнитометрин камтыган GY - 80 сынык тактасын колдоном.
Долбоордун баштапкы кодун улантуудан мурун, эгер сизге MEMS магнитометринин кантип иштээри, ошондой эле I2C Байланыш аркылуу GY - 80 үзүлүү тактасын кантип туташтыруу жана колдонуу керектиги жөнүндө көбүрөөк маалымат керек болсо, бул үчүн менин атайын окуу куралдарымды текшере аласыз.
2 -кадам: Arduino Source Code
Биз биринчи эмне кылышыбыз керек - бул магнитометрден маалыматтарды окуган Arduino тактасына эскиз жүктөө жана аны Processing IDEге жөнөтүү. Бул жерде Arduino Source Code:
/ * Arduino Compass * * тарабынан Дежан Неделковский, * www. HowToMechatronics.com * */
#кошуу // I2C Arduino китепканасы
#define магнитометр_mX0 0x03
#define магнитометр_mX1 0x04 #аныктоо магнитометр_mZ0 0x05 #finine 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;
#define магнитометр 0x1E // HMC5883 I2C 7bit дареги
жараксыз орнотуу () {
// Serial. IgC Serial.begin (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.beginTransmission (магнитометр); // Wire.write (Magnetometer_mX0) түзмөгүнө өткөрүп берүү; Wire.endTransmission (); Wire.requestFrom (Магнитометр, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y-Axis
Wire.beginTransmission (магнитометр); // Wire.write (Magnetometer_mY1) түзмөгүнө өткөрүп берүү; Wire.endTransmission (); Wire.requestFrom (Магнитометр, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (магнитометр); // 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.beginTransmission (магнитометр); // Wire.write (Magnetometer_mZ0) түзмөгүнө өткөрүп берүү; Wire.endTransmission (); Wire.requestFrom (Магнитометр, 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-Axis
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0.00092;
// ---- Z-Axis
mZ1 = mZ1 <0.073 рад дефляциясы = 0.073; баш += ийилүү; // Белгилерди урматтоодо оңдоо, эгерде (<0 позициясы) + +2*PI башы;
// Тартуу бурчу кошулгандыктан улам оңдоо
if (heading> 2*PI) heading -= 2*PI;
headingDegrees = heading * 180/PI; // Даражалар бирдигиндеги аталыш
// Чыгаруу бурчун тегиздөө / Төмөн өтүү чыпкасы
headingFiltered = headFiltered*0.85 + headDegrees*0.15;
// Сериялык порт аркылуу IDEди иштетүү үчүн аталыштын маанисин жөнөтүү
Serial.println (headFiltered);
кечиктирүү (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; PImage background;
String data = "";
сүзүүчү баштык;
жараксыз орнотуу () {
өлчөмү (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 (радиандар (-баш)); // Компасты 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 өзгөрмөсүнө "data" киргизет. heading = float (data); // String маанисин Float маанисине айландыруу}
Бул долбоор сизге жагат деп ишенем. Эгер ошондой болсо, сиз дагы сонун долбоорлор үчүн менин веб -сайтыма кире аласыз.
Сунушталууда:
Ардуинону илим долбоору үчүн кантип RADAR кылса болот - Мыкты Arduino долбоорлору: 5 кадам
Ардуинону илим долбоору үчүн кантип RADAR кылса болот | Мыкты Arduino долбоорлору: Салам достор, бул көрсөтмөдө мен сизге ардуино нанонун жардамы менен курулган укмуштуудай радар системасын кантип жасоону көрсөтөм, бул долбоор илимий долбоорлор үчүн идеалдуу жана сиз муну өтө аз инвестиция жана мүмкүнчүлүк менен жасай аласыз, эгерде байге утуп алуу чоң болсо
Arduino автоматташтырылган көлөкө экраны долбоору үчүн кадам моторун жана драйверди тандоо: 12 кадам (сүрөттөр менен)
Arduino автоматташтырылган көлөкө экраны долбоору үчүн тепкич моторун жана драйверди тандоо: Бул Нускамада мен Automated Shade Screen долбоорунун прототипине Step Motor жана Driver тандоо үчүн жасаган кадамдарымдан өтөм. Көлөкөлүү экрандар - бул популярдуу жана арзан Coolaroo кол менен жасалган моделдер, мен аны алмаштыргым келди
Arduino менен кантип радар жасоо керек - Arduino долбоору: 4 кадам
Arduino менен кантип радар жасоо керек | Arduino долбоору: Бул макалада мен сизге ардуино менен кантип жөнөкөй радар жасоону үйрөтөм. Толук видео үйрөткүчтү бул жерден көрүңүз: Мени чыкылдатыңыз
Matrix баскычын колдонуу менен Arduino Digital Code Lock долбоору: 9 кадам
Matrix баскычын колдонуу менен Arduino Digital Code Lock Project: Zio M Uno жана Hex 4x3 Matrix Keypad аркылуу Arduino жана Qwiic системасы менен санариптик коддордун кулпу түзмөгүн куруңуз. Бул үйрөткүчтө биз колдонууну көрсөтөбүз
Digital Dice: Arduino долбоору: 4 кадам
Digital Dice: Arduino Project: Адамдар "жогорку технология" оюндарын жакшы көрүшөт. Мисалы: менин өлкөмдө "Монополия" деген оюн бар. Бул оюнда акча менен сатып алуу менен "көчөлөрдү" чогултуу керек. Бул оюн жакында кагаз менен эмес, кредит менен төлөгөн версиясын чыгарды