Sommario:
- Passaggio 1: parti necessarie
- Passaggio 2: codice sorgente Arduino
- Passaggio 3: elaborazione del codice sorgente IDE
Video: Progetto bussola digitale Arduino: 3 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Ciao! In questo tutorial vedrai come puoi creare una bussola digitale usando un Arduino e l'IDE di elaborazione. Questo è un progetto Arduino abbastanza semplice ma interessante e dall'aspetto interessante.
Puoi guardare l'esempio demo di questo tutorial nel video qui sopra. Puoi sempre trovare video più interessanti come questo sul mio canale YouTube, nonché molti progetti di elettronica e tutorial sul mio sito Web, HowToMechatronics.com
Passaggio 1: parti necessarie
Per questo progetto avrai bisogno solo di una scheda Arduino e di un Magnetometro MEMS, per misurare il campo magnetico terrestre. Userò la scheda breakout GY - 80 che contiene il magnetometro a 3 assi MC5883L.
Prima di continuare con il codice sorgente del progetto Se hai bisogno di maggiori dettagli su come funziona il magnetometro MEMS e su come connettere e utilizzare la scheda breakout GY - 80 tramite la comunicazione I2C, puoi controllare i miei tutorial specifici per questo.
Passaggio 2: codice sorgente Arduino
Quello che dobbiamo fare prima è caricare uno schizzo sulla scheda Arduino che leggerà i dati dal magnetometro e li invierà all'IDE di elaborazione. Ecco il codice sorgente di Arduino:
/* Arduino Compass * * di Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include //Libreria Arduino I2C
#define Magnetometro_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;
intestazione float, intestazioneGradi, intestazioneFiltrata, declinazione;
galleggiante Xm, Ym, Zm;
#define Magnetometro 0x1E //Indirizzo I2C a 7 bit di HMC5883
void setup(){
//Inizializza le comunicazioni seriali e I2C Serial.begin(115200); Wire.begin(); ritardo(100); Wire.beginTransmission(Magnetometro); Wire.write(0x02); // Seleziona la modalità di registro Wire.write(0x00); // Modalità di misurazione continua Wire.endTransmission(); }
ciclo vuoto(){
//---- X-Axis Wire.beginTransmission(Magnetometro); // trasmette al dispositivo Wire.write(Magnetometer_mX1); Wire.endTransmission(); Wire.requestFrom(Magnetometro, 1); if(Filo.disponibile()<=1) { mX0 = Filo.read(); } Wire.beginTransmission(Magnetometro); // trasmette al dispositivo Wire.write(Magnetometer_mX0); Wire.endTransmission(); Wire.requestFrom(Magnetometro, 1); if(Filo.disponibile()<=1) { mX1 = Filo.read(); }
//---- Asse Y
Wire.beginTransmission(Magnetometro); // trasmette al dispositivo Wire.write(Magnetometer_mY1); Wire.endTransmission(); Wire.requestFrom(Magnetometro, 1); if(Filo.disponibile()<=1) { mY0 = Filo.read(); } Wire.beginTransmission(Magnetometro); // trasmette al dispositivo Wire.write(Magnetometer_mY0); Wire.endTransmission(); Wire.requestFrom(Magnetometro, 1); if(Filo.disponibile()<=1) { mY1 = Filo.read(); } //---- Z-Axis Wire.beginTransmission(Magnetometro); // trasmette al dispositivo Wire.write(Magnetometer_mZ1); Wire.endTransmission(); Wire.requestFrom(Magnetometro, 1); if(Filo.disponibile()<=1) { mZ0 = Filo.read(); } Wire.beginTransmission(Magnetometro); // trasmette al dispositivo Wire.write(Magnetometer_mZ0); Wire.endTransmission(); Wire.requestFrom(Magnetometro, 1); if(Filo.disponibile()<=1) { mZ1 = Filo.read(); } //---- Asse X mX1=mX1<<8; mX_out =mX0+mX1; // Dati grezzi // Dal datasheet: 0,92 mG/digit Xm = mX_out*0.00092; // Unità di Gauss //* Il campo magnetico terrestre varia da 0,25 a 0,65 Gauss, quindi questi sono i valori che dobbiamo ottenere approssimativamente.
//---- Asse Y
mY1=mY1<<8; mY_out = mY0+mY1; Ym = mY_out*0.00092;
//---- Asse Z
mZ1=mZ1< 0,073 declinazione rad = 0,073; intestazione += declinazione; // Correzione quando i segni sono invertiti if(heading <0) titolo += 2*PI;
// Correzione dovuta all'aggiunta dell'angolo di declinazione
if(titolo > 2*PI)titolo -= 2*PI;
titoloGradi = titolo * 180/PI; // L'intestazione in unità Gradi
// Levigazione dell'angolo di uscita / Filtro passa basso
intestazioneFiltered = intestazioneFiltered*0.85 + intestazioneGradi*0.15;
//Invio del valore dell'intestazione tramite la porta seriale all'IDE di elaborazione
Serial.println(headingFiltered);
ritardo(50); }
Passaggio 3: elaborazione del codice sorgente IDE
Dopo aver caricato il precedente schizzo Arduino, dobbiamo ricevere i dati nell'IDE di elaborazione e disegnare la bussola digitale. La bussola è composta da un'immagine di sfondo, un'immagine fissa della freccia e un'immagine rotante del corpo della bussola. Quindi i valori per il campo magnetico terrestre calcolati con Arduino vengono utilizzati per ruotare la bussola.
Ecco il codice sorgente dell'IDE di elaborazione:
/* Arduino Compass * * di Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial.*; import java.awt.event. KeyEvent; import java.io. IOException;
myPort seriale;
PImage imgCompass; PImage imgCompassArrow; Sfondo immagine;
Dati stringa="";
intestazione galleggiante;
void setup() {
dimensione (1920, 1080, P3D); liscio(); imgCompass = loadImage("Compass.png"); imgCompassArrow = loadImage("CompassArrow.png"); background = loadImage("Background.png"); myPort = new Serial(this, "COM4", 115200); // avvia la comunicazione seriale myPort.bufferUntil('\n'); }
disegno vuoto() {
immagine(sfondo, 0, 0); // Carica l'immagine di sfondo pushMatrix(); translate(larghezza/2, altezza/2, 0); // Trasla il sistema di coordinate al centro dello schermo, in modo che la rotazione avvenga proprio al centro ruotareZ(radianti(-intestazione)); // Ruota la bussola attorno a Z - Axis image(imgCompass, -960, -540); // Carica l'immagine della bussola e poiché il sistema di coordinate viene riposizionato, è necessario impostare l'immagine a -960x, -540y (metà della dimensione dello schermo) popMatrix(); // Riporta il sistema di coordinate alla posizione originale 0, 0, 0 image(imgCompassArrow, 0, 0); // Carica l'immagine CompassArrow che non è influenzata dalla funzione rotateZ() a causa della funzione popMatrix() textSize(30); text("Titolo: " + titolo, 40, 40); // Stampa il valore dell'intestazione sullo schermo
ritardo(40);
}
// inizia a leggere i dati dalla porta seriale
void serialEvent (Serial myPort) { data = myPort.readStringUntil('\n');// legge i dati dalla porta seriale e li inserisce nella variabile String "data". intestazione = float(dati); // Conversione del valore String in valore Float }
Spero che questo progetto vi piaccia. Se è così, puoi anche visitare il mio sito Web per altri progetti interessanti.
Consigliato:
Bussola digitale e cercatore di rotta: 6 passaggi
Bussola digitale e Heading Finder: Autori: Cullan Whelan Andrew Luft Blake Johnson Ringraziamenti: California Maritime Academy Evan Chang-Siu Introduzione: La base di questo progetto è una bussola digitale con tracciamento della rotta. Ciò consente all'utente di seguire una rotta a lunga distanza
Bussola digitale con magnetometro Arduino e HMC5883L: 6 passaggi
Bussola digitale con Arduino e magnetometro HMC5883L: Ciao ragazzi, questo sensore potrebbe indicare il nord, il sud, l'est e l'ovest geografico, anche noi umani potremmo usarlo quando necessario. Così. In questo articolo cerchiamo di capire come funziona il sensore Magnetometro e come interfacciarlo con un microcontrollore
Come Usare il Modulo GY511 con Arduino [Crea una Bussola Digitale]: 11 Passaggi
Come utilizzare il modulo GY511 con Arduino [Crea una bussola digitale]: PanoramicaIn alcuni progetti di elettronica, è necessario conoscere la posizione geografica in qualsiasi momento ed eseguire un'operazione specifica di conseguenza. In questo tutorial imparerai come utilizzare il modulo bussola LSM303DLHC GY-511 con Arduino per creare una bussola digitale
Progetto Blocco codice digitale Arduino utilizzando la tastiera a matrice: 9 passaggi
Progetto Arduino Digital Code Lock utilizzando Matrix Keypad: Costruisci un dispositivo di blocco digitale con codice con Arduino e il sistema Qwiic utilizzando Zio M Uno e una tastiera Matrix Hex 4x3. in. In questo tutorial, mostreremo l'uso
Bruciatore alimentato tramite USB! Questo progetto può bruciare attraverso plastica/legno/carta (il progetto divertente deve anche essere un legno molto fine): 3 passaggi
Bruciatore alimentato tramite USB! Questo progetto può bruciare attraverso plastica/legno/carta (il progetto divertente deve anche essere un legno molto fine): NON FARLO UTILIZZANDO USB!!!! ho scoperto che può danneggiare il tuo computer da tutti i commenti. il mio computer va bene comunque Utilizzare un caricabatterie per telefono da 600 mA 5 V. ho usato questo e funziona bene e nulla può essere danneggiato se usi una spina di sicurezza per interrompere l'alimentazione