Taula de continguts:
Vídeo: Projecte Arduino Digital Compass: 3 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
Hola! En aquest instructiu veureu com podeu fer una brúixola digital mitjançant un Arduino i l’IDE de processament. Això és bastant senzill, però interessant i amb un aspecte genial del projecte Arduino.
Podeu veure l'exemple de demostració d'aquest tutorial al vídeo anterior. Sempre podeu trobar vídeos més interessants com aquest al meu canal de YouTube, així com trobar molts projectes i tutorials d’electrònica al meu lloc web, HowToMechatronics.com
Pas 1: requereixen parts
Per a aquest projecte només necessitareu una placa Arduino i un magnetòmetre MEMS per mesurar el camp magnètic terrestre. Utilitzaré el tauler GY-80 que conté el magnetòmetre de 3 eixos MC5883L.
Abans de continuar amb el codi font del projecte. Si necessiteu més detalls sobre el funcionament del magnetòmetre MEMS i sobre com connectar i utilitzar el tauler GY-80 mitjançant la comunicació I2C, podeu consultar els meus tutorials particulars.
Pas 2: Codi font Arduino
El que hem de fer primer és pujar un esbós a la placa Arduino que llegirà les dades del magnetòmetre i les enviarà a l’IDE de processament. Aquí teniu el codi font Arduino:
/ * Arduino Compass * * de Dejan Nedelkovski, * www. HowToMechatronics.com * * /
#include // Biblioteca Arduino I2C
#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;
títol flotant, headingDegrees, headingFiltered, declinació;
flotador Xm, Ym, Zm;
#define Magnetometer 0x1E // Adreça I2C de 7 bits de HMC5883
configuració nul·la () {
// Inicialitzar les comunicacions sèrie i I2C Serial.begin (115200); Wire.begin (); retard (100); Wire.beginTransmission (magnetòmetre); Wire.write (0x02); // Selecciona el mode de registre Wire.write (0x00); // Mode de mesura contínua Wire.endTransmission (); }
bucle buit () {
// ---- X-Axis Wire.beginTransmission (magnetòmetre); // transmetre al dispositiu Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (magnetòmetre, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (magnetòmetre); // transmetre al dispositiu Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (magnetòmetre, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Eix Y
Wire.beginTransmission (magnetòmetre); // transmetre al dispositiu Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (magnetòmetre, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (magnetòmetre); // transmetre al dispositiu Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (magnetòmetre, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Eix Z. Wire.beginTransmission (magnetòmetre); // transmetre al dispositiu Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (magnetòmetre, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (magnetòmetre); // transmetre al dispositiu Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (magnetòmetre, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- Eix X mX1 = mX1 << 8; mX_out = mX0 + mX1; // Dades brutes // Del full de dades: 0,92 mG / dígit Xm = mX_out * 0,00092; // Unitat de Gauss // * El camp magnètic terrestre oscil·la entre 0,25 i 0,65 Gauss, de manera que aquests són els valors que necessitem per obtenir aproximadament.
// ---- Eix Y
mY1 = mY1 << 8; mY_out = mY0 + mY1; Ym = mY_out * 0,00092;
// ---- Eix Z
mZ1 = mZ1 <0,073 declinació rad = 0,073; encapçalament + = declinació; // Corregint quan es reverencien els signes si (encapçalament <0) encapçalament + = 2 * PI;
// Correcció a causa de l’addició de l’angle de declinació
if (encapçalament> 2 * PI) encapçalament - = 2 * PI;
headingDegrees = encapçalament * 180 / PI; // L'encapçalament de la unitat de Graus
// Suavitzar l’angle de sortida / Filtre de pas baix
headingFiltered = headingFiltered * 0,85 + headingDegrees * 0,15;
// Enviament del valor de l'encapçalament a través del port sèrie a l'IDE de processament
Serial.println (headingFiltered);
retard (50); }
Pas 3: processament del codi font IDE
Després de penjar l'esbós anterior d'Arduino, hem de rebre les dades a l'IDE de processament i dibuixar la brúixola digital. La brúixola es compon d'una imatge de fons, una imatge fixa de la fletxa i una imatge giratòria del cos de la brúixola. De manera que els valors del camp magnètic eart calculats amb l’Arduino s’utilitzen per girar la brúixola.
Aquí teniu el codi font de l’IDE de processament:
/ * Arduino Compass * * de Dejan Nedelkovski, * www. HowToMechatronics.com * * / import processing.serial. *; importació java.awt.event. KeyEvent; importació java.io. IOException;
MyPort en sèrie;
PImage imgCompass; PImage imgCompassArrow; PImatge de fons;
Dades de cadena = "";
capçalera flotant;
configuració nul·la () {
mida (1920, 1080, P3D); llis(); imgCompass = loadImage ("Brúixola.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = new Serial (this, "COM4", 115200); // inicia la comunicació serial myPort.bufferUntil ('\ n'); }
sorteig buit () {
imatge (fons, 0, 0); // Carrega la imatge de fons pushMatrix (); traduir (amplada / 2, alçada / 2, 0); // Tradueix el sistema de coordenades al centre de la pantalla, de manera que la rotació es produeixi al centre rotateZ (radians (-heading)); // Gira la brúixola al voltant de la imatge de l’eix Z (imgCompass, -960, -540); // Carrega la imatge de la brúixola i, a mesura que es trasllada el sistema de coordenades, hem d’establir la imatge a -960x, -540y (la meitat de la mida de la pantalla) popMatrix (); // El sistema de coordenades torna a la posició original 0, 0, 0 imatge (imgCompassArrow, 0, 0); // Carrega la imatge CompassArrow que no es veu afectada per la funció rotateZ () a causa de la funció popMatrix () textSize (30); text ("Encapçalament:" + encapçalament, 40, 40); // Imprimeix el valor de l'encapçalament a la pantalla
retard (40);
}
// comença a llegir dades del port sèrie
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // llegeix les dades del port sèrie i les posa a la variable Cadena "dades". encapçalament = float (dades); // Converteix el valor de la cadena en valor flotant}
Espero que aquest projecte us agradi. Si és així, també podeu visitar el meu lloc web per obtenir projectes més interessants.
Recomanat:
Projecte 1 de fabricació digital UVG: 4 passos
Projecte 1 De Fabricació Digital UVG: Diagrama Esquemàtic del circuit de la làmpara. Materials: 3 NeoPixels Puents de cables 3 potenciómetros de 10K Un button Un sensor DHT11 Un Arduino Una resistència de 220 ohmios Un interruptor Un protoboardEl projecte consistió in realizar una
DIY Compass Bot: 14 passos
DIY Compass Bot: Hola! Avui faré un robot Compass. Vaig tenir aquesta idea pensant en el difícil que és dibuixar el cercle perfecte sense cap quadre matemàtic. Doncs tinc la teva solució? Com ja sabeu, un cercle té exactament 360 graus, de manera que aquest robot pot dibuixar un sha
Projecte Rockola Manufactura Digital: 4 passos
Proyecto Rockola Manufactura Digital: Nombre d’alumnes: Javier Molina 19714Angel Murli 19057Como projecte final de la classe de manufactura digital nos tocó realizar una rockola hecha a base de equipo electrónico Arduino. Les limitacions establertes per a aquest projecte és que teniu que et
Projecte de bloqueig de codi digital Arduino mitjançant el teclat Matrix: 9 passos
Projecte de bloqueig de codi digital Arduino mitjançant el teclat Matrix: creeu un dispositiu de bloqueig de codi digital amb el sistema Arduino i Qwiic mitjançant Zio M Uno i un teclat matricial Hex 4x3. Visió general del projecte in. En aquest tutorial, mostrarem l'ús
Gravador USB Aquest projecte es pot cremar a través de plàstics / fusta / paper (el divertit projecte també ha de ser fusta molt fina): 3 passos
Gravador alimentat per USB. Aquest projecte pot cremar-se a través de plàstics / fusta / paper (el divertit projecte també ha de ser fusta molt fina): NO FEREU AIX US mitjançant USB !!!! He descobert que pot fer malbé el vostre ordinador per tots els comentaris. el meu ordinador està bé. Utilitzeu un carregador de telèfon de 600 ma 5 v. He utilitzat això i funciona bé i res es pot danyar si utilitzeu un endoll de seguretat per aturar l'alimentació