İçindekiler:
Video: Arduino Dijital Pusula Projesi: 3 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Merhaba! Bu talimatta, Arduino ve İşleme IDE'sini kullanarak nasıl Dijital Pusula yapabileceğinizi göreceksiniz. Bu oldukça basit ama ilginç ve havalı görünen Arduino Projesi.
Bu eğitimin demo örneğini yukarıdaki videoda izleyebilirsiniz. YouTube kanalımda her zaman bunun gibi daha ilginç videolar bulabilir ve web sitem HowToMechatronics.com'da birçok elektronik proje ve öğretici bulabilirsiniz.
Adım 1: Gerekli Parçalar
Bu proje için, dünyanın manyetik alanını ölçmek için sadece bir Arduino Kartına ve bir MEMS Manyetometreye ihtiyacınız olacak. MC5883L 3 – Eksen Manyetometresini içeren GY – 80 devre kartını kullanacağım.
Projenin kaynak koduna devam etmeden önce MEMS manyetometresinin nasıl çalıştığı ve ayrıca GY - 80 devre kartının I2C İletişimi aracılığıyla nasıl bağlanıp kullanılacağı hakkında daha fazla ayrıntıya ihtiyacınız varsa, bunun için özel derslerime göz atabilirsiniz.
Adım 2: Arduino Kaynak Kodu
İlk yapmamız gereken şey, manyetometreden gelen verileri okuyacak ve onu Processing IDE'ye gönderecek olan Arduino Board'a bir kroki yüklemek. İşte Arduino Kaynak Kodu:
/* Arduino Pusulası * * Dejan Nedelkovski tarafından, * www. HowToMechatronics.com * */
#include //I2C Arduino Kütüphanesi
#define Manyetometre_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;
kayan yön, başlıkDereceler, başlıkFiltrelenmiş, sapma;
yüzer Xm, Ym, Zm;
#define Manyetometre 0x1E //I2C HMC5883'ün 7 bit adresi
geçersiz kurulum(){
//Seri ve I2C iletişimini başlat Serial.begin(115200); Wire.begin(); gecikme(100); Wire.beginTransmission(Manyetometre); Wire.write(0x02); // Modu seçin register Wire.write(0x00); // Sürekli ölçüm modu Wire.endTransmission(); }
boşluk döngüsü(){
//---- X-Axis Wire.beginTransmission(Magnetometer); // cihaza ilet Wire.write(Magnetometer_mX1); Wire.endTransmission(); Wire.requestFrom(Manyetometre, 1); if(Wire.available()<=1) { mX0 = Wire.read(); } Wire.beginTransmission(Manyetometre); // cihaza ilet Wire.write(Magnetometer_mX0); Wire.endTransmission(); Wire.requestFrom(Manyetometre, 1); if(Wire.available()<=1) { mX1 = Wire.read(); }
//---- Y Ekseni
Wire.beginTransmission(Manyetometre); // cihaza ilet Wire.write(Magnetometer_mY1); Wire.endTransmission(); Wire.requestFrom(Manyetometre, 1); if(Wire.available()<=1) { mY0 = Wire.read(); } Wire.beginTransmission(Manyetometre); // cihaza ilet Wire.write(Magnetometer_mY0); Wire.endTransmission(); Wire.requestFrom(Manyetometre, 1); if(Wire.available()<=1) { mY1 = Wire.read(); } //---- Z-Ekseni Kablosu.beginTransmission(Magnetometer); // cihaza ilet Wire.write(Magnetometer_mZ1); Wire.endTransmission(); Wire.requestFrom(Manyetometre, 1); if(Wire.available()<=1) { mZ0 = Wire.read(); } Wire.beginTransmission(Manyetometre); // cihaza ilet Wire.write(Magnetometer_mZ0); Wire.endTransmission(); Wire.requestFrom(Manyetometre, 1); if(Wire.available()<=1) { mZ1 = Wire.read(); } //---- X Ekseni mX1=mX1<<8; mX_out =mX0+mX1; // Ham veri // Veri sayfasından: 0.92 mG/digit Xm = mX_out*0.00092; // Gauss birimi //* Dünyanın manyetik alanı 0.25 ila 0.65 Gauss arasında değişir, yani bunlar yaklaşık olarak almamız gereken değerlerdir.
//---- Y Ekseni
mY1=mY1<<8; mY_out =mY0+mY1; Ym = mY_out*0.00092;
//---- Z ekseni
mZ1=mZ1< 0.073 rad sapma = 0.073; başlık += sapma; // İşaretler ters çevrildiğinde düzeltiliyor if(heading <0) Heading += 2*PI;
// Sapma açısının eklenmesi nedeniyle düzeltme
if(pozisyon > 2*PI)pozisyon -= 2*PI;
başlıkDerece = başlık * 180/PI; // Derece birimindeki başlık
// Çıkış açısını yumuşatma / Alçak geçiren filtre
başlıkFiltrelenmiş = başlıkFiltrelenmiş*0.85 + başlıkDereceler*0.15;
// Başlık değerini Seri Port üzerinden Processing IDE'ye gönderme
Serial.println(başlıkFiltrelenmiş);
gecikme(50); }
Adım 3: IDE Kaynak Kodunun İşlenmesi
Önceki Arduino taslağını yükledikten sonra verileri Processing IDE'ye almamız ve Dijital Pusulayı çizmemiz gerekiyor. Pusula, bir arka plan görüntüsünden, okun sabit görüntüsünden ve pusula gövdesinin dönen bir görüntüsünden oluşur. Böylece Arduino ile hesaplanan dünya manyetik alanı değerleri pusulayı döndürmek için kullanılır.
İşte Processing IDE'nin kaynak kodu:
/* Arduino Pusulası * * Dejan Nedelkovski tarafından, * www. HowToMechatronics.com * */ import process.serial.*; java.awt.event. KeyEvent'i içe aktar; java.io. IOException'ı içe aktarın;
Seri myPort;
PImage imgCompass; PImage imgCompassArrow; PResim arka planı;
Dize verisi="";
yüzer başlık;
geçersiz kurulum() {
boyut (1920, 1080, P3D); düz(); imgCompass = loadImage("Compass.png"); imgCompassArrow = loadImage("CompassArrow.png"); arkaplan = loadImage("Arkaplan.png"); myPort = yeni Seri(bu, "COM4", 115200); // seri iletişimi başlatır myPort.bufferUntil('\n'); }
geçersiz beraberlik() {
resim(arka plan, 0, 0); // Arkaplan resmini yükler pushMatrix(); çevir(genişlik/2, yükseklik/2, 0); // Koordinat sistemini ekranın merkezine çevirir, böylece döndürme tam merkezde olur döndürmeZ(radyan(-başlık)); // Pusulayı Z - Ekseni görüntüsü etrafında döndürür(imgCompass, -960, -540); // Pusula görüntüsünü yükler ve koordinat sisteminin yeri değiştirildiği için görüntüyü -960x, -540y (ekran boyutunun yarısı) olarak ayarlamamız gerekir popMatrix(); // Koordinat sistemini orijinal konumuna geri getirir 0, 0, 0 image(imgCompassArrow, 0, 0); // popMatrix() işlevi textSize(30) nedeniyle döndürmeZ() işlevinden etkilenmeyen CompassArrow görüntüsünü yükler; text("Başlık: " + başlık, 40, 40); // Başlığın değerini ekrana yazdırır
gecikme(40);
}
// Seri Porttan veri okumaya başlar
void serialEvent (Serial myPort) { data = myPort.readStringUntil('\n');// Seri Bağlantı Noktasından verileri okur ve "data" String değişkenine koyar. başlık = kayan nokta(veri); // String değerini Float değerine dönüştürme }
Umarım bu projeyi beğenirsiniz. Eğer öyleyse, daha güzel projeler için web sitemi de ziyaret edebilirsiniz.
Önerilen:
Dijital Pusula ve Yön Bulucu: 6 Adım
Dijital Pusula ve Yön Bulucu: Yazarlar: Cullan Whelan Andrew Luft Blake Johnson Teşekkür: California Denizcilik Akademisi Evan Chang-SiuGiriş: Bu projenin temeli, rota izleme özelliğine sahip dijital bir pusuladır. Bu, kullanıcının uzun mesafeler boyunca bir başlığı takip etmesini sağlar
Arduino 7 Segment Ekranlı Dijital Ludo Zar Projesi: 3 Adım
Arduino ile Dijital Kızma Birader 7 Segment Ekran Projesi: Bu projede, butona her bastığımızda 1'den 6'ya kadar rastgele bir sayıyı göstermek için 7 segmentli ekran kullanılmıştır. Herkesin yapmaktan keyif aldığı en havalı projelerden biri. 7 segment display ile çalışmayı öğrenmek için tıklayın: -7 segment
Arduino ve HMC5883L Manyetometre Kullanan Dijital Pusula: 6 Adım
Arduino ve HMC5883L Manyetometre Kullanan Dijital Pusula: Merhaba arkadaşlar, Bu sensör coğrafi Kuzey, Güney, Doğu ve Batı'yı gösterebilir, biz insanlar da gerektiğinde kullanabiliriz. Yani. Bu yazıda Manyetometre sensörünün nasıl çalıştığını ve bir mikrokontrol ile nasıl arayüzleneceğini anlamaya çalışalım
GY511 Modülü Arduino İle Nasıl Kullanılır [Dijital Pusula Yapın]: 11 Adım
GY511 Modülü Arduino İle Nasıl Kullanılır [Dijital Pusula Yap]: Genel Bakış Bazı elektronik projelerinde her an coğrafi konumu bilmemiz ve buna göre belirli bir işlem yapmamız gerekir. Bu eğitimde, dijital bir pusula yapmak için LSM303DLHC GY-511 pusula modülünü Arduino ile nasıl kullanacağınızı öğreneceksiniz
Matrix Tuş Takımı Kullanarak Arduino Dijital Kod Kilidi Projesi: 9 Adım
Matrix Tuş Takımını Kullanarak Arduino Dijital Kod Kilidi Projesi: Zio M Uno ve Hex 4x3 Matrix Tuş Takımı kullanarak Arduino ve Qwiic sistemi ile bir dijital kod kilidi cihazı oluşturun.Projeye genel bakışBu proje için, kullanıcıların girip tuşlayabileceği basit bir dijital kod kilidi oluşturacağız. Bu eğitimde, kullanımı göstereceğiz