Isi kandungan:

Projek Kompas Digital Arduino: 3 Langkah
Projek Kompas Digital Arduino: 3 Langkah

Video: Projek Kompas Digital Arduino: 3 Langkah

Video: Projek Kompas Digital Arduino: 3 Langkah
Video: Tonton Sampai Habis !!! Belajar Arduino Di Jamin Bisa 2024, November
Anonim
Image
Image

Helo! Dalam arahan ini, anda akan melihat bagaimana anda dapat membuat Kompas Digital menggunakan Arduino dan IDE Pemprosesan. Ini adalah Projek Arduino yang agak mudah tetapi menarik dan menarik.

Anda boleh menonton contoh demo tutorial ini pada video di atas. Anda selalu dapat mencari lebih banyak video menarik seperti ini di saluran YouTube saya serta mencari banyak projek elektronik dan tutorial di laman web saya, HowToMechatronics.com

Langkah 1: Bahagian Diperlukan

Untuk projek ini, anda hanya memerlukan Arduino Board dan MEMS Magnetometer, untuk mengukur medan magnet bumi. Saya akan menggunakan papan pelarian GY - 80 yang mengandungi Magnetometer MC5883L 3 - Axis.

Sebelum kita meneruskan kod sumber untuk projek tersebut. Sekiranya anda memerlukan lebih banyak maklumat bagaimana magnetometer MEMS berfungsi serta cara menyambung dan menggunakan papan pemecah GY - 80 melalui Komunikasi I2C, anda boleh menyemak tutorial khusus saya untuk itu.

Langkah 2: Kod Sumber Arduino

Yang perlu kita lakukan terlebih dahulu adalah memuat naik lakaran ke Arduino Board yang akan membaca data dari magnetometer dan akan menghantarnya ke Processing IDE. Inilah Kod Sumber Arduino:

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

#include // Perpustakaan I2C Arduino

#tentukan Magnetometer_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;

kepala apungan, tajukDegrees, tajukFilter, deklinasi;

terapung Xm, Ym, Zm;

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

batal persediaan () {

// Memulakan komunikasi Serial dan I2C Serial.begin (115200); Wire.begin (); kelewatan (100); Wire.beginTransmission (Magnetometer); Wire.write (0x02); // Pilih mod daftar Wire.write (0x00); // Mod pengukuran berterusan Wire.endTransmission (); }

gelung kosong () {

// ---- X-Axis Wire.beginTransmission (Magnetometer); // hantar ke peranti Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); jika (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // hantar ke peranti Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); jika (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Y-Paksi

Wire.beginTransmission (Magnetometer); // hantar ke peranti Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); jika (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // hantar ke peranti Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); jika (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (Magnetometer); // hantar ke peranti Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); jika (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // hantar ke peranti Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); jika (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-Axis mX1 = mX1 << 8; mX_out = mX0 + mX1; // Data mentah // Dari lembar data: 0.92 mG / digit Xm = mX_out * 0.00092; // Unit Gauss // * Medan magnet bumi berkisar antara 0,25 hingga 0,65 Gauss, jadi ini adalah nilai yang perlu kita perolehi.

// ---- Y-Paksi

mY1 = mY1 << 8; mY_out = mY0 + mY1; Ym = mY_out * 0.00092;

// ---- Z-Paksi

mZ1 = mZ1 <0.073 penolakan rad = 0.073; tajuk + = deklinasi; // Memperbetulkan apabila tanda dibalikkan jika (tajuk <0) tajuk + = 2 * PI;

// Membetulkan kerana penambahan sudut deklinasi

jika (tajuk> 2 * PI) tajuk - = 2 * PI;

tajukDegrees = tajuk * 180 / PI; // Tajuk dalam unit Darjah

// Melicinkan sudut output / Penapis lulus rendah

tajukFiltered = headingFiltered * 0,85 + tajukDegrees * 0,15;

// Menghantar nilai tajuk melalui Serial Port ke Processing IDE

Serial.println (tajukFiltered);

kelewatan (50); }

Langkah 3: Memproses Kod Sumber IDE

Setelah memuat naik sketsa Arduino sebelumnya, kita perlu menerima data ke dalam Processing IDE dan melukis Digital Compass. Kompas terdiri daripada gambar latar, gambar tetap anak panah, dan gambar berpusing badan kompas. Jadi nilai untuk medan magnet eart yang dikira dengan Arduino digunakan untuk memutar kompas.

Berikut adalah kod sumber IDE Pemprosesan:

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

MyPort bersiri;

PImage imgCompass; PImage imgCompassArrow; Latar belakang gambar;

Data rentetan = "";

tajuk apungan;

batal persediaan () {

saiz (1920, 1080, P3D); halus (); imgCompass = loadImage ("Kompas.png"); imgCompassArrow = loadImage ("CompassArrow.png"); latar belakang = loadImage ("Background.png"); myPort = Serial baru (ini, "COM4", 115200); // memulakan komunikasi bersiri myPort.bufferUntil ('\ n'); }

undian tidak sah () {

gambar (latar belakang, 0, 0); // Memuatkan gambar Latar belakang pushMatrix (); terjemahkan (lebar / 2, tinggi / 2, 0); // Menterjemahkan sistem koordinat ke tengah skrin, sehingga putaran berlaku tepat di tengah rotateZ (radian (-heading)); // Memutar Kompas di sekitar gambar Z - Paksi (imgCompass, -960, -540); // Memuatkan gambar Kompas dan ketika sistem koordinat dipindahkan, kita perlu menetapkan gambar pada -960x, -540y (separuh ukuran skrin) popMatrix (); // Membawa sistem koordinat kembali ke kedudukan asal 0, 0, 0 gambar (imgCompassArrow, 0, 0); // Memuatkan gambar CompassArrow yang tidak dipengaruhi oleh fungsi rotateZ () kerana fungsi fungsi PopMatrix () textSize (30); teks ("Tajuk:" + tajuk, 40, 40); // Mencetak nilai tajuk di skrin

kelewatan (40);

}

// mula membaca data dari Serial Port

batal serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // membaca data dari Serial Port dan memasukkannya ke dalam String variabel "data". tajuk = apungan (data); // Menukar nilai String menjadi nilai Float}

Saya harap anda akan menyukai projek ini. Sekiranya demikian, anda juga boleh melayari laman web saya untuk projek yang lebih menarik.

Disyorkan: