Daftar Isi:

Proyek Kompas Digital Arduino: 3 Langkah
Proyek Kompas Digital Arduino: 3 Langkah
Anonim
Image
Image

Halo! Dalam instruksi ini Anda akan melihat bagaimana Anda dapat membuat Kompas Digital menggunakan Arduino dan Processing IDE. Ini cukup sederhana namun menarik dan tampak keren Arduino Project.

Anda dapat menonton contoh demo tutorial ini pada video di atas. Anda selalu dapat menemukan lebih banyak video menarik seperti ini di saluran YouTube saya serta menemukan banyak proyek dan tutorial elektronik di situs web saya, HowToMechatronics.com

Langkah 1: Bagian yang Diperlukan

Untuk proyek ini, Anda hanya memerlukan Papan Arduino dan Magnetometer MEMS, untuk mengukur medan magnet bumi. Saya akan menggunakan papan breakout GY – 80 yang berisi MC5883L 3 – Axis Magnetometer.

Sebelum kita melanjutkan dengan kode sumber untuk proyek ini Jika Anda memerlukan rincian lebih lanjut bagaimana magnetometer MEMS bekerja serta bagaimana menghubungkan dan menggunakan papan breakout GY - 80 melalui Komunikasi I2C Anda dapat memeriksa tutorial khusus saya untuk itu.

Langkah 2: Kode Sumber Arduino

Yang perlu kita lakukan pertama adalah mengunggah sketsa ke Arduino Board yang akan membaca data dari magnetometer dan akan mengirimkannya ke Processing IDE. Berikut Kode Sumber Arduino:

/* Kompas Arduino * * oleh Dejan Nedelkovski, * www. HowToMechatronics.com * */

#termasuk //I2C Arduino Library

#define Magnetometer_mX0 0x03

#mendefinisikan Magnetometer_mX1 0x04 #mendefinisikan Magnetometer_mZ0 0x05 #mendefinisikan Magnetometer_mZ1 0x06 #mendefinisikan Magnetometer_mY0 0x07 #mendefinisikan Magnetometer_mY1 0x08

int mX0, mX1, mX_out;

int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;

pos mengambang, pos Derajat, pos Difilter, deklinasi;

mengapung Xm, Ym, Zm;

#menentukan Magnetometer 0x1E //I2C 7bit alamat HMC5883

batalkan pengaturan(){

//Inisialisasi komunikasi Serial dan I2C Serial.begin(115200); Kawat.mulai(); penundaan(100); Wire.beginTransmission(Magnetometer); Kawat.tulis (0x02); // Pilih mode register Wire.write(0x00); // Mode pengukuran berkelanjutan Wire.endTransmission(); }

lingkaran kosong(){

//---- X-Axis Wire.beginTransmission(Magnetometer); // kirim ke perangkat Wire.write(Magnetometer_mX1); Kawat.endTransmisi(); Kawat.permintaanDari(Magnetometer, 1); if(Wire.available()<=1) { mX0 = Wire.read(); } Wire.beginTransmission(Magnetometer); // kirim ke perangkat Wire.write(Magnetometer_mX0); Kawat.endTransmisi(); Kawat.permintaanDari(Magnetometer, 1); if(Wire.available()<=1) { mX1 = Wire.read(); }

//---- Sumbu Y

Wire.beginTransmission (Magnetometer); // kirim ke perangkat Wire.write(Magnetometer_mY1); Kawat.endTransmisi(); Kawat.permintaanDari(Magnetometer, 1); if(Wire.available()<=1) { mY0 = Wire.read(); } Wire.beginTransmission(Magnetometer); // kirim ke perangkat Wire.write(Magnetometer_mY0); Kawat.endTransmisi(); Kawat.permintaanDari(Magnetometer, 1); if(Wire.available()<=1) { mY1 = Wire.read(); } //---- Z-Axis Wire.beginTransmission(Magnetometer); // kirim ke perangkat Wire.write(Magnetometer_mZ1); Kawat.endTransmisi(); Kawat.permintaanDari(Magnetometer, 1); if(Wire.available()<=1) { mZ0 = Wire.read(); } Wire.beginTransmission(Magnetometer); // kirim ke perangkat Wire.write(Magnetometer_mZ0); Kawat.endTransmisi(); Kawat.permintaanDari(Magnetometer, 1); if(Wire.available()<=1) { mZ1 = Wire.read(); } //---- Sumbu X mX1=mX1<<8; mX_keluar =mX0+mX1; // Data mentah // Dari lembar data: 0,92 mG/digit Xm = mX_out*0,00092; // Satuan Gauss //* Medan magnet bumi berkisar antara 0,25 hingga 0,65 Gauss, jadi ini adalah nilai yang perlu kita dapatkan kira-kira.

//---- Sumbu Y

mY1=mY1<<8; mY_out = mY0+mY1; Ym = mY_out*0,00092;

//---- Sumbu Z

mZ1=mZ1< 0,073 rad deklinasi = 0,073; pos += deklinasi; // Mengoreksi saat tanda dibalik if(heading <0) heading += 2*PI;

// Koreksi karena penambahan sudut deklinasi

if(heading > 2*PI)heading -= 2*PI;

headingDerajat = heading * 180/PI; // Judul dalam satuan Derajat

// Menghaluskan sudut keluaran / Filter lolos rendah

headingFiltered = headingFiltered*0.85 + headingDegrees*0.15;

//Mengirim nilai heading melalui Serial Port ke Processing IDE

Serial.println(headingFilter);

penundaan (50); }

Langkah 3: Memproses Kode Sumber IDE

Setelah kami mengunggah sketsa Arduino sebelumnya, kami perlu menerima data ke dalam Processing IDE dan menggambar Kompas Digital. Kompas terdiri dari gambar latar belakang, gambar panah tetap, dan gambar badan kompas yang berputar. Jadi nilai medan magnet bumi yang dihitung dengan Arduino digunakan untuk memutar kompas.

Berikut kode sumber dari Processing IDE:

/* Kompas Arduino * * oleh Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial.*; impor java.awt.event. KeyEvent; impor java.io. IOException;

Port saya serial;

PImage imgKompas; PImage imgCompassArrow; PGambar latar belakang;

String data="";

pos mengambang;

batalkan pengaturan() {

ukuran (1920, 1080, P3D); halus(); imgKompas = loadImage("Kompas.png"); imgCompassArrow = loadImage("CompassArrow.png"); background = loadImage("Latar Belakang.png"); myPort = Serial baru(ini, "COM4", 115200); // memulai komunikasi serial myPort.bufferUntil('\n'); }

batal menggambar() {

gambar(latar belakang, 0, 0); // Memuat gambar Latar belakang pushMatrix(); terjemahkan(lebar/2, tinggi/2, 0); // Menerjemahkan sistem koordinat ke tengah layar, sehingga rotasi terjadi tepat di tengah rotateZ(radian(-heading)); // Memutar Kompas di sekitar Z - Gambar sumbu(imgCompass, -960, -540); // Memuat gambar Kompas dan saat sistem koordinat dipindahkan, kita perlu mengatur gambar pada -960x, -540y (setengah ukuran layar) popMatrix(); // Membawa sistem koordinat kembali ke posisi semula 0, 0, 0 image(imgCompassArrow, 0, 0); // Memuat gambar CompassArrow yang tidak terpengaruh oleh fungsi rotateZ() karena fungsi popMatrix() textSize(30); text("Judul: " + judul, 40, 40); // Mencetak nilai heading di layar

penundaan (40);

}

// mulai membaca data dari Port Serial

void serialEvent (Serial myPort) { data = myPort.readStringUntil('\n');// membaca data dari Serial Port dan memasukkannya ke dalam variabel String "data". judul = float(data); // Mengubah nilai String menjadi nilai Float }

Saya harap Anda akan menyukai proyek ini. Jika demikian, Anda juga dapat mengunjungi situs web saya untuk proyek-proyek keren lainnya.

Direkomendasikan: