Table des matières:
Vidéo: Projet de boussole numérique Arduino : 3 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Salut! Dans cette instructable, vous verrez comment vous pouvez créer une boussole numérique à l'aide d'un Arduino et de l'IDE de traitement. C'est un projet Arduino assez simple mais intéressant et cool.
Vous pouvez regarder l'exemple de démonstration de ce tutoriel sur la vidéo ci-dessus. Vous pouvez toujours trouver des vidéos plus intéressantes comme celle-ci sur ma chaîne YouTube ainsi que de nombreux projets et tutoriels électroniques sur mon site Web, HowToMechatronics.com
Étape 1: Pièces requises
Pour ce projet, vous n'aurez besoin que d'une carte Arduino et d'un magnétomètre MEMS, pour mesurer le champ magnétique terrestre. J'utiliserai la carte de dérivation GY - 80 qui contient le magnétomètre à 3 axes MC5883L.
Avant de continuer avec le code source du projet Si vous avez besoin de plus de détails sur le fonctionnement du magnétomètre MEMS ainsi que sur la connexion et l'utilisation de la carte de dérivation GY - 80 via la communication I2C, vous pouvez consulter mes tutoriels particuliers à ce sujet.
Étape 2: code source Arduino
Ce que nous devons d'abord faire, c'est télécharger un croquis sur la carte Arduino qui lira les données du magnétomètre et l'enverra à l'IDE de traitement. Voici le code source Arduino:
/* Boussole Arduino * * par Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include //Bibliothèque Arduino I2C
#define Magnétomètre_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 monY0, monY1, monY_out; entier mZ0, mZ1, mZ_out;
titre flottant, titreDegrés, titreFiltré, déclinaison;
flotteur Xm, Ym, Zm;
#define Magnétomètre 0x1E //I2C Adresse 7 bits du HMC5883
void setup(){
//Initialiser les communications série et I2C Serial.begin(115200); Fil.begin(); retard (100); Wire.beginTransmission (magnétomètre); Wire.write(0x02); // Sélection du registre de mode Wire.write(0x00); // Mode de mesure en continu Wire.endTransmission(); }
boucle vide(){
//---- X-Axis Wire.beginTransmission(Magnetometer); // transmettre à l'appareil Wire.write(Magnetometer_mX1); Wire.endTransmission(); Wire.requestFrom(Magnétomètre, 1); if(Wire.available()<=1) { mX0 = Wire.read(); } Wire.beginTransmission(Magnétomètre); // transmettre à l'appareil Wire.write(Magnetometer_mX0); Wire.endTransmission(); Wire.requestFrom(Magnétomètre, 1); if(Wire.available()<=1) { mX1 = Wire.read(); }
//---- Axe Y
Wire.beginTransmission (magnétomètre); // transmettre à l'appareil Wire.write(Magnetometer_mY1); Wire.endTransmission(); Wire.requestFrom(Magnétomètre, 1); if(Wire.available()<=1) { mY0 = Wire.read(); } Wire.beginTransmission(Magnétomètre); // transmettre à l'appareil Wire.write(Magnetometer_mY0); Wire.endTransmission(); Wire.requestFrom(Magnétomètre, 1); if(Wire.available()<=1) { mY1 = Wire.read(); } //---- Z-Axis Wire.beginTransmission(Magnetometer); // transmettre à l'appareil Wire.write(Magnetometer_mZ1); Wire.endTransmission(); Wire.requestFrom(Magnétomètre, 1); if(Wire.available()<=1) { mZ0 = Wire.read(); } Wire.beginTransmission(Magnétomètre); // transmettre à l'appareil Wire.write(Magnetometer_mZ0); Wire.endTransmission(); Wire.requestFrom(Magnétomètre, 1); if(Wire.available()<=1) { mZ1 = Wire.read(); } //---- Axe X mX1=mX1<<8; mX_out =mX0+mX1; // Données brutes // De la fiche technique: 0.92 mG/chiffre Xm = mX_out*0.00092; // Unité Gauss //* Le champ magnétique terrestre varie de 0,25 à 0,65 Gauss, ce sont donc les valeurs que nous devons obtenir approximativement.
//---- Axe Y
mY1=mY1<<8; mY_out =mY0+mY1; Ym = mY_out*0.00092;
//---- Axe z
mZ1=mZ1< 0,073 rad déclinaison = 0,073; cap += déclinaison; // Correction lorsque les signes sont inversés if(heading <0) header += 2*PI;
// Correction due à l'ajout de l'angle de déclinaison
if(titre > 2*PI)titre -= 2*PI;
titreDegrés = titre * 180/PI; // Le titre en Degrés
// Lissage de l'angle de sortie / Filtre passe-bas
titreFiltré = titreFiltré*0.85 + titreDegrés*0.15;
//Envoi de la valeur d'en-tête via le port série à l'IDE de traitement
Serial.println(headingFiltered);
retard (50); }
Étape 3: Traitement du code source IDE
Après avoir téléchargé le croquis Arduino précédent, nous devons recevoir les données dans l'IDE de traitement et dessiner la boussole numérique. La boussole est composée d'une image d'arrière-plan, d'une image fixe de la flèche et d'une image rotative du corps de la boussole. Ainsi, les valeurs du champ magnétique terrestre calculées avec l'Arduino sont utilisées pour faire tourner la boussole.
Voici le code source de l'IDE de traitement:
/* Boussole Arduino * * par Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial.*; importer java.awt.event. KeyEvent; importer java.io. IOException;
myPort série;
PImage imgBoussole; PImage imgCompassArrow; Arrière-plan de l'image;
Données de chaîne="";
cap du flotteur;
void setup() {
taille (1920, 1080, P3D); lisse(); imgBoussole = loadImage("Boussole.png"); imgCompassArrow = loadImage("CompassArrow.png"); background = loadImage("Background.png"); myPort = new Serial(this, "COM4", 115200); // démarre la communication série myPort.bufferUntil('\n'); }
tirage nul () {
image(fond, 0, 0); // Charge l'image de fond pushMatrix(); translate(largeur/2, hauteur/2, 0); // Traduit le système de coordonnées au centre de l'écran, de sorte que la rotation se produise juste au centre rotateZ(radians(-heading)); // Fait pivoter la boussole autour de l'image Z - Axis (imgCompass, -960, -540); // Charge l'image de la boussole et comme le système de coordonnées est déplacé, nous devons définir l'image à -960x, -540y (la moitié de la taille de l'écran) popMatrix(); // Ramène le système de coordonnées à sa position d'origine 0, 0, 0 image(imgCompassArrow, 0, 0); // Charge l'image CompassArrow qui n'est pas affectée par la fonction rotateZ() à cause de la fonction popMatrix() textSize(30); text("En-tête: " + en-tête, 40, 40); // Imprime la valeur de l'en-tête à l'écran
retard (40);
}
// commence à lire les données du port série
void serialEvent (Serial myPort) { data = myPort.readStringUntil('\n'); // lit les données du port série et les place dans la variable String "data". titre = float(données); // Conversion de la valeur String en valeur Float }
J'espère que vous aimerez ce projet. Si c'est le cas, vous pouvez également visiter mon site Web pour des projets plus sympas.
Conseillé:
Boussole numérique et recherche de cap : 6 étapes
Boussole numérique et recherche de cap : Auteurs : Cullan Whelan Andrew Luft Blake Johnson Remerciements : Académie maritime de Californie Evan Chang-SiuIntroduction : La base de ce projet est une boussole numérique avec suivi de cap. Cela permet à l'utilisateur de suivre un cap sur une longue distance
Dés Ludo numérique avec projet d'affichage à 7 segments Arduino : 3 étapes
Dés Ludo numérique avec projet d'affichage à 7 segments Arduino: Dans ce projet, l'affichage à 7 segments est utilisé pour afficher un nombre de 1 à 6 de manière aléatoire chaque fois que nous appuyons sur le bouton-poussoir. C'est l'un des projets les plus cool que tout le monde aime réaliser. Pour apprendre à travailler avec l'affichage à 7 segments, cliquez ici : -7 segme
Boussole numérique utilisant Arduino et magnétomètre HMC5883L : 6 étapes
Boussole numérique utilisant Arduino et magnétomètre HMC5883L : Salut les gars, ce capteur pourrait indiquer le nord, le sud, l'est et l'ouest géographiques, nous, les humains, pourrions également l'utiliser à certains moments lorsque cela est nécessaire. Donc. Dans cet article essayons de comprendre comment fonctionne le capteur Magnétomètre et comment l'interfacer avec un microcontrôleur
Comment utiliser le module GY511 avec Arduino [Créer une boussole numérique] : 11 étapes
Comment utiliser le module GY511 avec Arduino [Créer une boussole numérique] : aperçu Dans certains projets électroniques, nous devons connaître l'emplacement géographique à tout moment et effectuer une opération spécifique en conséquence. Dans ce didacticiel, vous apprendrez à utiliser le module de boussole LSM303DLHC GY-511 avec Arduino pour créer une boussole numérique
Projet de verrouillage par code numérique Arduino à l'aide du clavier matriciel : 9 étapes
Projet de verrouillage à code numérique Arduino à l'aide d'un clavier matriciel : créez un dispositif de verrouillage à code numérique avec les systèmes Arduino et Qwiic à l'aide de Zio M Uno et d'un clavier matriciel hexagonal 4x3. in. Dans ce tutoriel, nous allons montrer l'utilisation