2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-23 15:04
Buna! În acest instructable veți vedea cum puteți crea o busolă digitală folosind un Arduino și IDE-ul de procesare. Acesta este un proiect Arduino destul de simplu, dar interesant și interesant.
Puteți urmări exemplul demonstrativ al acestui tutorial pe videoclipul de mai sus. Puteți găsi oricând mai multe videoclipuri interesante de genul acesta pe canalul meu YouTube, precum și multe proiecte electronice și tutoriale pe site-ul meu, HowToMechatronics.com
Pasul 1: Piese necesare
Pentru acest proiect veți avea nevoie doar de o placă Arduino și un magnetometru MEMS, pentru măsurarea câmpului magnetic al pământului. Voi folosi placa GY-80 care conține magnetometrul cu 3 axe MC5883L.
Înainte de a continua cu codul sursă al proiectului. Dacă aveți nevoie de mai multe detalii despre modul în care funcționează magnetometrul MEMS, precum și despre modul de conectare și utilizare a plăcii GY-80 prin intermediul comunicării I2C, puteți verifica tutorialele mele speciale.
Pasul 2: Codul sursă Arduino
Ceea ce trebuie să facem mai întâi este să încărcăm o schiță pe placa Arduino care va citi datele de pe magnetometru și le va trimite la IDE-ul de procesare. Iată codul sursă Arduino:
/ * Arduino Compass * * de Dejan Nedelkovski, * www. HowToMechatronics.com * * /
#include // Biblioteca I2C Arduino
#define 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;
float heading, headingDegrees, headingFiltered, declinare;
plutitor Xm, Ym, Zm;
#define Magnetometru 0x1E // I2C 7bit adresa HMC5883
configurare nulă () {
// Inițializați comunicațiile Serial și I2C Serial.begin (115200); Wire.begin (); întârziere (100); Wire.beginTransmission (magnetometru); Wire.write (0x02); // Selectați modul de înregistrare Wire.write (0x00); // Mod de măsurare continuă Wire.endTransmission (); }
bucla nulă () {
// ---- X-Axis Wire.beginTransmission (magnetometru); // transmite dispozitivului Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometru, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (magnetometru); // transmite dispozitivului Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometru, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Axa Y
Wire.beginTransmission (magnetometru); // transmite dispozitivului Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometru, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (magnetometru); // transmite dispozitivului Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometru, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (magnetometru); // transmite dispozitivului Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometru, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (magnetometru); // transmite dispozitivului Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometru, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- Axa X mX1 = mX1 << 8; mX_out = mX0 + mX1; // Date brute // Din foaia de date: 0,92 mG / cifră Xm = mX_out * 0,00092; // Unitatea Gauss // * Câmpul magnetic al Pământului variază de la 0,25 la 0,65 Gauss, deci acestea sunt valorile pe care trebuie să le obținem aproximativ.
// ---- Axa Y
mY1 = mY1 << 8; mY_out = mY0 + mY1; Ym = mY_out * 0,00092;
// ---- Axa Z
mZ1 = mZ1 <0,073 declinare rad = 0,073; titlu + = declinare; // Corectarea când semnele sunt venerate dacă (titlu <0) titlu + = 2 * PI;
// Corectarea datorită adăugării unghiului de declinare
if (antet> 2 * PI) antet - = 2 * PI;
headingDegrees = rubrica * 180 / PI; // Rubrica din unitatea de grade
// Netezirea unghiului de ieșire / Filtru trece jos
headingFiltered = headingFiltered * 0.85 + headingDegrees * 0.15;
// Trimiterea valorii de titlu prin portul serial către IDE de procesare
Serial.println (headingFiltered);
întârziere (50); }
Pasul 3: Procesarea codului sursă IDE
După ce am încărcat schița anterioară Arduino, trebuie să primim datele în IDE de procesare și să desenăm busola digitală. Busola este compusă dintr-o imagine de fundal, o imagine fixă a săgeții și o imagine rotativă a corpului busolei. Deci valorile pentru câmpul magnetic eart calculate cu Arduino sunt folosite pentru a roti busola.
Iată codul sursă al IDE de procesare:
/ * Arduino Compass * * de Dejan Nedelkovski, * www. HowToMechatronics.com * * / import processing.serial. *; import java.awt.event. KeyEvent; import java.io. IOException;
Serial myPort;
PImage imgCompass; PImage imgCompassArrow; PImage fundal;
Date șir = "";
direcția plutitor;
configurare nulă () {
dimensiune (1920, 1080, P3D); neted(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = serial nou (acesta, "COM4", 115200); // pornește comunicarea în serie myPort.bufferUntil ('\ n'); }
draw nul () {
imagine (fundal, 0, 0); // Încarcă imaginea de fundal pushMatrix (); traducere (lățime / 2, înălțime / 2, 0); // Traduce sistemul de coordonate în centrul ecranului, astfel încât rotația să aibă loc chiar în centrul rotireZ (radiani (-heading)); // Rotește busola în jurul Z - imagine Axis (imgCompass, -960, -540); // Încarcă imaginea Compass și pe măsură ce sistemul de coordonate este mutat, trebuie să setăm imaginea la -960x, -540y (jumătate din dimensiunea ecranului) popMatrix (); // Aduce sistemul de coordonate înapoi la poziția inițială 0, 0, 0 imagine (imgCompassArrow, 0, 0); // Încarcă imaginea CompassArrow care nu este afectată de funcția rotateZ () din cauza funcției popMatrix () textSize (30); text („Antet:” + antet, 40, 40); // Tipărește valoarea titlului pe ecran
întârziere (40);
}
// începe să citească date din portul serial
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // citește datele din portul serial și le pune în variabila Șir „date”. antet = float (date); // Conversia valorii String în valoare Float}
Sper să vă placă acest proiect. Dacă este așa, puteți vizita site-ul meu web pentru proiecte mai interesante.
Recomandat:
Refacerea bateriei telefonului mobil pentru proiectul dvs. Arduino: 3 pași
Refacerea bateriei telefonului mobil pentru proiectul dvs. Arduino: Așa am reciclat o baterie veche de telefon mobil pentru alimentarea unui proiect arduino. Acest tip partcular este un Nokia BLY4W de 2000 mAh. Cu toate acestea, tehnicile utilizate sunt comune în majoritatea bateriilor de telefon. Această baterie a murit brusc, arătând 0 v
Proiectul Arduino-Tamagotchi (Eu sunt Tamagotchi): 5 pași (cu imagini)
Proiectul Arduino-Tamagotchi (Eu sunt Tamagotchi): M-am plictisit în carantină și am decis să fac un Arduino Tamagotchi. Pentru că urăsc multe animale, mă aleg ca pe Tamagotchi. Mai întâi îmi construiesc consola pe o placă de calcul. Cablarea este foarte simplă. Există doar trei butoane, un buzzer și un
Re-propunerea unei cutii de router vechi pentru proiectul dvs. Arduino: 3 pași
Re-propunerea unei cutii de router vechi pentru proiectul dvs. Arduino: Acest proiect a apărut din necesitatea de a găzdui proiectul meu de automatizare a casei. Am decis să refac cazul de pe un vechi router PlusNet defect (router Thomson TG585). carcasa era :: Cutie suspendată de perete cu profil redus Ușor de tăiat capacul tăvii
Cum să trimiteți mesaje text SMS din proiectul dvs. Arduino ESP: 6 pași
Cum să trimiteți mesaje text SMS din proiectul dvs. Arduino ESP: Această instrucțiune demonstrează cum să trimiteți mesaje text SMS din proiectul dvs. arduino utilizând un dispozitiv ESP8266 și o conexiune WiFi. De ce să utilizați SMS-uri? mesaje. * Mesajele SMS pot, de asemenea
STALKER GUARD (Proiectul Arduino Uno): 4 pași
STALKER GUARD (Proiectul Arduino Uno): Proiectul nostru se numește Stalker Guard. Am ales subiectul mai ales pentru că, în calitate de fete, am căzut nesiguri mergând singuri în întuneric, deoarece poate fi periculos. Proiectul nostru s-a dezvoltat din această idee pentru a fi modernizat cu motor servo SG90 astfel încât să poată include s