Mündəricat:
Video: Arduino Rəqəmsal Kompas Layihəsi: 3 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
Salam! Bu təlimatda Arduino və Processing IDE -dən istifadə edərək rəqəmsal kompas necə qura biləcəyinizi görəcəksiniz. Bu olduqca sadə, lakin maraqlı və sərin görünüşlü Arduino Layihəsidir.
Bu təlimatın demo nümunəsini yuxarıdakı videoda izləyə bilərsiniz. Həmişə YouTube kanalımda bu kimi daha maraqlı videoları tapa bilərsiniz, veb saytım HowToMechatronics.com -da bir çox elektronika layihələri və dərsləri tapa bilərsiniz.
Addım 1: Lazım olan hissələr
Bu layihə üçün yerin maqnit sahəsini ölçmək üçün yalnız bir Arduino Board və MEMS Magnetometerə ehtiyacınız olacaq. MC5883L 3 - Axis Magnetometer olan GY - 80 qırılma lövhəsindən istifadə edəcəyəm.
Layihə üçün mənbə koduna davam etməzdən əvvəl MEMS maqnitometrinin necə işlədiyini və I2C Rabitə vasitəsi ilə GY - 80 qırılma lövhəsini necə bağlayacağınızı və istifadə edəcəyinizi daha ətraflı öyrənmək istəyirsinizsə, bunun üçün xüsusi dərslərimi yoxlaya bilərsiniz.
Addım 2: Arduino Mənbə Kodu
Əvvəlcə etməmiz lazım olan məlumatları maqnitometrdən oxuyacaq və onu Processing IDE -ə göndərəcək Arduino Board -a bir eskiz yükləməkdir. Budur Arduino Mənbə Kodu:
/ * Arduino Compass * * Dejan Nedelkovski, * www. HowToMechatronics.com * */
#daxil edin // I2C Arduino Kitabxanası
#define maqnitölçən_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, headingFiltered, meyl;
float Xm, Ym, Zm;
#define Magnetometer 0x1E // HMC5883 I2C 7bit ünvanı
boş quraşdırma () {
// Serial və I2C əlaqələrini işə salın Serial.begin (115200); Wire.begin (); gecikmə (100); Tel.beginTransmission (Magnetometer); Wire.write (0x02); // Wire.write (0x00) rejim qeydini seçin; // Davamlı ölçmə rejimi Wire.endTransmission (); }
boşluq döngəsi () {
// ---- X-Axis Wire.beginTrmission (Magnetometer); // cihaza ötürmək Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); əgər (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // cihaza ötürmək Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); əgər (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y ekseni
Tel.beginTransmission (Maqnitometr); // cihaza ötürmək Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); əgər (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // cihaza ötürmək Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); əgər (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTrmission (Magnetometer); // cihaza ötürmək Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); əgər (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // cihaza ötürmək Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); əgər (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X Ekseni mX1 = mX1 << 8; mX_out = mX0+mX1; // Xam məlumatlar // Məlumat cədvəlindən: 0.92 mG/rəqəm Xm = mX_out*0.00092; // Gauss vahidi //* Yerin maqnit sahəsi 0,25 ilə 0,65 Gauss arasında dəyişir, buna görə də təxminən əldə etməyimiz lazım olan dəyərlərdir.
// ---- Y ekseni
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0.00092;
// ---- Z oxu
mZ1 = mZ1 <0.073 rad sapması = 0.073; başlıq += meyl; // (<0 başlığı) başlığı += 2*PI olduqda işarələrə hörmət edildikdə düzəltmə;
// Açılma bucağının əlavə edilməsi səbəbindən düzəltmə
əgər (başlıq> 2*PI) başlıq -= 2*PI;
headingDegrees = başlıq * 180/PI; // Dərəcələr vahidində başlıq
// Çıxış bucağını hamarlaşdırmaq / Aşağı keçid filtri
headingFiltered = headingFiltered*0.85 + headingDegrees*0.15;
// Başlıq dəyərini Serial Port vasitəsilə IDE -nin İşlənməsinə göndərmək
Serial.println (başlıqFiltered);
gecikmə (50); }
Addım 3: IDE Mənbə Kodunun İşlənməsi
Əvvəlki Arduino eskizini yüklədikdən sonra məlumatları Processing IDE -ə almalı və Digital Compass çəkməliyik. Pusula arxa plan şəklindən, oxun sabit görüntüsündən və kompasın gövdəsinin fırlanan görüntüsündən ibarətdir. Beləliklə, Arduino ilə hesablanan yer maqnit sahəsinin dəyərləri pusulanı döndərmək üçün istifadə olunur.
İşlənmə IDE -nin mənbə kodu budur:
/ * Arduino Compass * * Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; java.awt.event. KeyEvent daxil edin; java.io. IOException idxal edin;
Serial myPort;
PImage imgCompass; PImage imgCompassArrow; Şəkil fonu;
String məlumatları = "";
üzən başlıq;
boş quraşdırma () {
ölçü (1920, 1080, P3D); hamar (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = yeni Serial (bu, "COM4", 115200); // seriyalı ünsiyyətə başlayır myPort.bufferUntil ('\ n'); }
boş çəkmə () {
şəkil (arxa plan, 0, 0); // Arka plan görüntüsünü yükləyir pushMatrix (); tərcümə (eni/2, hündürlüyü/2, 0); // Koordinat sistemini ekranın mərkəzinə çevirir, beləliklə fırlanma tam mərkəzdə olur rotateZ (radian (-başlıq)); // Pusulanı Z -Axis görüntüsünün ətrafında döndürür (imgCompass, -960, -540); // Pusula görüntüsünü yükləyir və koordinat sistemi köçürüldükdə, görüntünü -960x, -540y (ekran ölçüsünün yarısı) olaraq təyin etməliyik popMatrix (); // Koordinat sistemini əvvəlki vəziyyətinə qaytarır 0, 0, 0 görüntü (imgCompassArrow, 0, 0); // popMatrix () funksiyası textSize (30) səbəbindən rotateZ () funksiyasından təsirlənməyən CompassArrow görüntüsünü yükləyir; mətn ("Başlıq:" + başlıq, 40, 40); // Ekranda başlığın dəyərini yazır
gecikmə (40);
}
// Serial Limandan məlumatları oxumağa başlayır
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // məlumatları Serial Portdan oxuyur və String dəyişəninə daxil edir "data". başlıq = float (məlumatlar); // String dəyərini Float dəyərinə çevirmək}
Ümid edirəm bu layihəni bəyənəcəksiniz. Əgər belədirsə, daha gözəl layihələr üçün veb saytımı da ziyarət edə bilərsiniz.
Tövsiyə:
Rəqəmsal kaliper necə sökülür və rəqəmsal kaliper necə işləyir: 4 addım
Rəqəmsal kaliper necə söküləcək və rəqəmsal kaliper necə işləyir: Bir çox insan ölçü üçün kaliperdən necə istifadə edəcəyini bilir. Bu dərslik sizə rəqəmsal kaliperin necə yıxılacağını və rəqəmsal kaliperin necə işlədiyini izah edəcək
Arduino və HMC5883L Magnetometer istifadə edərək rəqəmsal kompas: 6 addım
Arduino və HMC5883L Magnetometer istifadə edərək rəqəmsal kompas: Salam uşaqlar, bu sensor coğrafi Şimal, Cənub, Şərq və Qərbi göstərə bilər, biz insanlar da lazım olduqda istifadə edə bilərik. Belə ki. Bu yazıda Maqnitometr sensorunun necə işlədiyini və mikrokontro ilə necə əlaqə quracağını anlamağa çalışaq
GY511 Modulunu Arduino ilə necə istifadə etmək olar [Rəqəmsal kompas düzəldin]: 11 addım
GY511 Modulunu Arduino ilə [Rəqəmsal Kompas Et] Necə İstifadə Edirik: Baxış Bəzi elektronika layihələrində hər an coğrafi yeri bilməli və buna uyğun olaraq xüsusi bir əməliyyat etməliyik. Bu təlimatda, rəqəmsal kompaslar yaratmaq üçün Arduino ilə LSM303DLHC GY-511 kompas modulundan necə istifadə edəcəyinizi öyrənəcəksiniz
Matrix Keypad istifadə edərək Arduino Rəqəmsal Kod Kilidi Layihəsi: 9 Addım
Matrix Keypad istifadə edərək Arduino Rəqəmsal Kod Kilidi Layihəsi: Zio M Uno və Hex 4x3 Matrix Keypad istifadə edərək Arduino və Qwiic sistemi ilə rəqəmsal kod kilidi qurğusu yaradın. Bu təlimatda, istifadəni göstərəcəyik
Rəqəmsal Zar: Arduino Layihəsi .: 4 Addım
Rəqəmsal Zar: Arduino Layihəsi: İnsanlar "yüksək texnologiyalı" oyunları sevirlər. Məsələn: mənim ölkəmdə "Monopoly" adlı bir oyun var. Bu oyunda pulla satın alaraq "küçələri" toplamaq lazımdır. Bu oyun bu yaxınlarda kağızla deyil, kreditlə ödəməyin bir versiyasını buraxdı