Mundarija:
Video: Arduino raqamli kompas loyihasi: 3 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
Salom! Bu yo'riqnomada siz Arduino va Processing IDE yordamida raqamli kompas yasashni ko'rasiz. Bu juda oddiy, ammo qiziqarli va ajoyib ko'rinadigan Arduino loyihasi.
Siz yuqoridagi videodan ushbu darslikning demo misolini ko'rishingiz mumkin. Siz har doim mening YouTube kanalimda shunga o'xshash qiziqarli videolarni topishingiz mumkin, shuningdek, HowToMechatronics.com veb -saytida ko'plab elektronika loyihalari va qo'llanmalarini topishingiz mumkin.
1 -qadam: kerakli qismlar
Loyihani amalga oshirish uchun sizga er magnit maydonini o'lchash uchun Arduino platasi va MEMS magnitometri kerak bo'ladi. Men MC5883L 3 - eksa magnitometrini o'z ichiga olgan GY - 80 kesish taxtasidan foydalanaman.
Loyihaning manba kodini davom ettirishdan oldin, agar sizga MEMS magnitometrining qanday ishlashini, shuningdek G2 - 80 aloqa panelini I2C aloqasi orqali ulash va undan foydalanish haqida batafsil ma'lumot kerak bo'lsa, buning uchun mening maxsus darsliklarimni tekshirishingiz mumkin.
2 -qadam: Arduino manba kodi
Biz birinchi navbatda Arduino kartasiga eskizni yuklashimiz kerak, u magnitometrdan ma'lumotlarni o'qiydi va uni Processing IDE ga yuboradi. Bu erda Arduino manba kodi:
/ * Arduino kompas * * Dejan Nedelkovskiy, * www. HowToMechatronics.com * */
#qo'shing // I2C Arduino kutubxonasi
#magnitometr_mX0 0x03 ni aniqlang
#aniq magnitometr_mX1 0x04 #aniq magnitometr_mZ0 0x05 #aniq magnitometr_mZ1 0x06 #aniq magnitometr_mY0 0x07 #aniq magnitometr_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;
float heading, headingDegrees, headFiltered, moyillik;
suzuvchi Xm, Ym, Zm;
#define magnitometr 0x1E // HMC5883 I2C 7bit manzili
bo'sh o'rnatish () {
// Serial.begin va Serial va I2C aloqalarini ishga tushiring (115200); Wire.begin (); kechikish (100); Wire.beginTransmission (magnitometr); Wire.write (0x02); // Wire.write rejim registrini tanlang (0x00); // Doimiy o'lchash rejimi Wire.endTransmission (); }
void loop () {
// ---- X o'qi simlari.beginTransmission (magnitometr); // Wire.write (Magnetometer_mX1) qurilmasiga uzatish; Wire.endTransmission (); Wire.requestFrom (Magnetometr, 1); agar (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (magnitometr); // Wire.write (Magnetometer_mX0) qurilmasiga uzatish; Wire.endTransmission (); Wire.requestFrom (Magnetometr, 1); agar (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y o'qi
Wire.beginTransmission (magnitometr); // Wire.write (Magnetometer_mY1) qurilmasiga uzatish; Wire.endTransmission (); Wire.requestFrom (Magnetometr, 1); agar (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (magnitometr); // Wire.write (Magnetometer_mY0) qurilmasiga uzatish; Wire.endTransmission (); Wire.requestFrom (Magnetometr, 1); agar (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z o'qi simlari.beginTransmission (magnitometr); // Wire.write (Magnetometer_mZ1) qurilmasiga uzatish; Wire.endTransmission (); Wire.requestFrom (Magnetometr, 1); agar (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (magnitometr); // Wire.write (Magnetometer_mZ0) qurilmasiga uzatish; Wire.endTransmission (); Wire.requestFrom (Magnetometr, 1); agar (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X o'qi mX1 = mX1 << 8; mX_out = mX0+mX1; // Xom ma'lumotlar // Ma'lumotlar varag'idan: 0,92 mG/raqamli Xm = mX_out*0,00092; // Gauss birligi //* Er magnit maydoni 0,25 dan 0,65 Gaussgacha, shuning uchun bu qiymatlarni biz taxminan olishimiz kerak.
// ---- Y o'qi
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0.00092;
// ---- Z o'qi
mZ1 = mZ1 <0,073 rad og'ish = 0,073; sarlavha += burilish; // Belgilar qaytarilganda tuzatish, agar (<0 sarlavhasi) sarlavhasi += 2*PI bo'lsa;
// Burilish burchagi qo'shilishi tufayli tuzatish
agar (sarlavha> 2*PI) sarlavha -= 2*PI;
headingDegrees = sarlavha * 180/PI; // Darajalar birligi sarlavhasi
// Chiqish burchagini tekislash / Past o'tish filtri
headFiltered = headingFiltered*0,85 + headingDegrees*0.15;
// Sarlavha qiymatini ketma -ket port orqali Processing IDE -ga yuborish
Serial.println (sarlavhaFiltrlangan);
kechikish (50); }
3 -qadam: IDE manba kodini qayta ishlash
Oldingi Arduino eskizini yuklaganimizdan so'ng, ma'lumotlarni Processing IDE -ga olishimiz va raqamli kompasni chizishimiz kerak. Kompas fon rasmi, o'qning sobit tasviri va kompas tanasining aylanadigan tasviridan iborat. Shunday qilib, Arduino bilan hisoblangan er magnit maydonining qiymatlari kompasni aylantirish uchun ishlatiladi.
Bu erda Processing IDE kodi:
/ * Arduino Compass * * Dejan Nedelkovskiy, * www. HowToMechatronics.com * */ import ishlov berish.serial. *; java.awt.event. KeyEvent -ni import qilish; java.io. IOException ni import qilish;
Seriyali myPort;
ImgCompass tasviri; PImage imgCompassArrow; PI tasvir fon;
String ma'lumotlari = "";
suzuvchi sarlavha;
bo'sh o'rnatish () {
hajmi (1920, 1080, P3D); silliq (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); fon = loadImage ("Background.png"); myPort = yangi seriyali (bu, "COM4", 115200); // myPort.bufferUntil ('\ n') ketma -ket aloqasini boshlaydi; }
bekor chizish () {
rasm (fon, 0, 0); // Fon tasvirini yuklaydi pushMatrix (); tarjima qilish (kenglik/2, balandlik/2, 0); // Koordinatalar tizimini ekranning markaziga aylantiradi, shunda aylanish aylananing markazida aylanadi Z (radian (-sarlavha)); // Kompasni Z -o'qi atrofida aylantiradi (imgCompass, -960, -540); // Kompas tasvirini yuklaydi va koordinatali tizim boshqa joyga ko'chirilganda, biz tasvirni -960x, -540y (ekran o'lchamining yarmi) ga o'rnatishimiz kerak popMatrix (); // Koordinatali tizimni asl holatiga qaytaradi 0, 0, 0 tasvir (imgCompassArrow, 0, 0); // popMatrix () funktsiyasi textSize (30) tufayli rotateZ () funktsiyasiga ta'sir qilmaydigan CompassArrow tasvirini yuklaydi; matn ("Sarlavha:" + sarlavha, 40, 40); // Ekranda sarlavha qiymatini chop etadi
kechikish (40);
}
// ketma -ket portdan ma'lumotlarni o'qishni boshlaydi
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // ma'lumotlarni ketma -ket portdan o'qiydi va uni "ma'lumotlar" satrining o'zgaruvchisiga qo'yadi. sarlavha = float (ma'lumotlar); // String qiymatini Float qiymatiga aylantirish}
Umid qilamanki, sizga bu loyiha yoqadi. Agar shunday bo'lsa, siz boshqa ajoyib loyihalar uchun mening veb -saytimga tashrif buyurishingiz mumkin.
Tavsiya:
Raqamli kompas va sarlavha topuvchi: 6 qadam
Raqamli kompas va sarlavhani topuvchi: Mualliflar: Kullan Uilan Endryu Luft Bleyk Jonson Raxmat: Kaliforniya dengiz akademiyasi Evan Chang-Siu Kirish: Ushbu loyihaning asosini raqamli kompas, yo'nalishlarni kuzatib borish. Bu foydalanuvchiga uzoq masofani bosib o'tish imkoniyatini beradi
Arduino va HMC5883L magnitometridan foydalangan holda raqamli kompas: 6 qadam
Raqamli kompas Arduino va HMC5883L magnitometridan foydalanadi: Salom bolalar, bu sensor Shimoliy, Janubiy, Sharqiy va G'arbiy geografik joylarni ko'rsatishi mumkin, biz odamlar ham kerak bo'lganda undan foydalanishimiz mumkin edi. Shunday qilib Ushbu maqolada biz magnitometr sensori qanday ishlashini va uni mikrokontro bilan qanday bog'lashni tushunishga harakat qilaylik
GY511 modulini Arduino bilan qanday ishlatish kerak [Raqamli kompas yasash]: 11 qadam
GY511 modulini Arduino bilan qanday ishlatish kerak? Ushbu qo'llanmada siz raqamli kompalarni yaratish uchun Arduino bilan LSM303DLHC GY-511 kompas modulidan foydalanishni o'rganasiz
Matrisli klaviatura yordamida Arduino raqamli kodni qulflash loyihasi: 9 qadam
Matrix klaviaturasi yordamida Arduino raqamli kodni qulflash loyihasi: Zio M Uno va Hex 4x3 matritsali klaviatura yordamida Arduino va Qwiic tizimi yordamida raqamli kodni qulflash qurilmasini yarating. In. Bu qo'llanmada biz foydalanishni ko'rsatamiz
Raqamli zar: Arduino loyihasi: 4 qadam
Raqamli zar: Arduino loyihasi. Odamlar "yuqori texnologiyalar" o'yinlarini yaxshi ko'radilar. Masalan: mening mamlakatimda "Monopoliya" degan o'yin bor. Bu o'yinda "ko'chalarni" pul bilan sotib olish kerak. Yaqinda bu o'yin qog'oz bilan emas, balki kredit bilan to'lanadigan versiya chiqarildi