Indholdsfortegnelse:
Video: Arduino Digital Compass Project: 3 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Hej! I denne instruktive vil du se, hvordan du kan lave et digitalt kompas ved hjælp af en Arduino og Processing IDE. Dette er ganske enkelt, men interessant og sejt Arduino -projekt.
Du kan se demo -eksemplet på denne vejledning i videoen ovenfor. Du kan altid finde flere interessante videoer som denne på min YouTube -kanal samt finde en masse elektronikprojekter og selvstudier på mit websted, HowToMechatronics.com
Trin 1: Påkrævede dele
Til dette projekt skal du blot bruge et Arduino Board og et MEMS Magnetometer til måling af jordens magnetfelt. Jeg vil bruge GY - 80 breakout board, som indeholder MC5883L 3 - Axis Magnetometer.
Inden vi fortsætter med kildekoden til projektet Hvis du har brug for flere detaljer om, hvordan MEMS magnetometer fungerer, samt hvordan du tilslutter og bruger GY - 80 breakout board via I2C Communication, kan du tjekke mine særlige tutorials for det.
Trin 2: Arduino kildekode
Det, vi først skal gøre, er at uploade en skitse til Arduino Board, der vil læse dataene fra magnetometeret, og det vil sende det til Processing IDE. Her er Arduino kildekoden:
/ * Arduino Compass * * af Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include // I2C Arduino Library
#define Magnetometer_mX0 0x03
#define Magnetometer_mX1 0x04 #define Magnetometer_mZ0 0x05 #Definer Magnetometer_mZ1 0x06 #Definer Magnetometer_mY0 0x07 #Definer Magnetometer_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;
float heading, headingDegrees, headingFiltreret, deklination;
flyde Xm, Ym, Zm;
#define Magnetometer 0x1E // I2C 7bit adresse på HMC5883
ugyldig opsætning () {
// Initialiser seriel og I2C kommunikation Serial.begin (115200); Wire.begin (); forsinkelse (100); Wire.beginTransmission (Magnetometer); Wire.write (0x02); // Vælg tilstandsregistrering Wire.write (0x00); // Kontinuerlig målingstilstand Wire.endTransmission (); }
void loop () {
// ---- X-Axis Wire.beginTransmission (Magnetometer); // overføre til enheden Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); hvis (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // overføre til enheden Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); hvis (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y-akse
Wire.beginTransmission (Magnetometer); // overføre til enheden Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); hvis (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // overføre til enheden Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); hvis (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (Magnetometer); // overføre til enheden Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); hvis (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // overføre til enheden Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); hvis (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-akse mX1 = mX1 << 8; mX_out = mX0+mX1; // Rå data // Fra databladet: 0,92 mG/ciffer Xm = mX_out*0,00092; // Gauss -enhed //* Jordens magnetfelt spænder fra 0,25 til 0,65 Gauss, så det er de værdier, vi har brug for at få cirka.
// ---- Y-akse
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0,00092;
// ---- Z-akse
mZ1 = mZ1 <0,073 rad deklination = 0,073; overskrift += deklination; // Korrigering, når tegn er æret, hvis (overskrift <0) overskrift += 2*PI;
// Korrektion på grund af tilføjelsen af deklinationsvinklen
hvis (overskrift> 2*PI) overskrift -= 2*PI;
headingDegrees = overskrift * 180/PI; // Overskriften i grader -enhed
// Udjævning af outputvinklen / lavpasfilter
headingFiltered = headingFiltreret*0,85 + headingDegrees*0,15;
// Sende overskriftsværdien via den serielle port til Processing IDE
Serial.println (overskriftFiltreret);
forsinkelse (50); }
Trin 3: Behandling af IDE -kildekode
Efter at vi har uploadet den tidligere Arduino -skitse, skal vi modtage dataene i Processing IDE og tegne det digitale kompas. Kompasset består af et baggrundsbillede, et fast billede af pilen og et roterende billede af kompassets krop. Så værdierne for eart magnetfelt beregnet med Arduino bruges til at rotere kompasset.
Her er kildekoden til Processing IDE:
/ * Arduino Compass * * af Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; import java.awt.event. KeyEvent; import java.io. IOException;
Seriel myPort;
PImage imgCompass; PImage imgCompassArrow; PImage baggrund;
String data = "";
flydeoverskrift;
ugyldig opsætning () {
størrelse (1920, 1080, P3D); glat(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = ny Serial (dette, "COM4", 115200); // starter seriel kommunikation myPort.bufferUntil ('\ n'); }
ugyldig tegning () {
billede (baggrund, 0, 0); // Indlæser baggrundsbilledet pushMatrix (); translate (bredde/2, højde/2, 0); // Oversætter koordinatsystemet til midten af skærmen, så rotationen sker lige i midten rotateZ (radianer (-heading)); // Roterer kompasset omkring Z -akse billede (imgCompass, -960, -540); // Indlæser kompasbilledet, og da koordinatsystemet flyttes, skal vi indstille billedet til -960x, -540y (halv skærmstørrelse) popMatrix (); // Bringer koordinatsystemet er tilbage til den oprindelige position 0, 0, 0 image (imgCompassArrow, 0, 0); // Indlæser CompassArrow -billedet, som ikke påvirkes af funktionen rotateZ () på grund af popMatrix () -funktionen textSize (30); tekst ("Overskrift:" + overskrift, 40, 40); // Udskriver værdien af overskriften på skærmen
forsinkelse (40);
}
// begynder at læse data fra den serielle port
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // læser dataene fra serieporten og sætter dem i strengvariablen "data". heading = float (data); // Konvertering af strengværdien til Float -værdi}
Jeg håber, at du kan lide dette projekt. Hvis det er sådan, kan du også besøge min hjemmeside for flere fede projekter.
Anbefalede:
DIY Compass Bot: 14 trin
DIY Compass Bot: Hej! I dag skal jeg lave en Compass bot. Jeg fik denne idé ved at tænke på, hvor svært det er at tegne den perfekte cirkel uden en matematisk boks. Jamen jeg har din løsning? Som du ved, at en cirkel er præcis 360 grader, så kan denne bot tegne et sha
Sådan rives en digital tykkelse ned, og hvordan fungerer en digital tykkelse: 4 trin
Sådan rives en digital tykkelse ned, og hvordan fungerer en digital tykkelse: Mange mennesker ved, hvordan man bruger målepunkter. Denne vejledning lærer dig, hvordan du river en digital tykkelse og en forklaring på, hvordan den digitale tykkelse fungerer
Claqueta Digital Con Arduino (Digital Clapperboard With Arduino): 7 trin
Claqueta Digital Con Arduino (Digital Clapperboard With Arduino): Crea tu propia claqueta digital, también puedes convertir una claqueta no digital en una, utilizando Arduino.MATERIALER Display de 7 segmenter MAX7219 de 8 digitos compatible with arduino.Modulo de Reloj RTC model DS3231 con arduino.Arduin
Arduino Digital Code Lock Project Brug af Matrix -tastatur: 9 trin
Arduino Digital Code Lock Project Using Matrix Keypad: Byg en digital kodelås med Arduino og Qwiic system ved hjælp af Zio M Uno og et Hex 4x3 Matrix Keypad. i. I denne vejledning viser vi brug
Iron Man Reactor for Fun (Digital joystick til digital bevægelse): 7 trin (med billeder)
Iron Man Reactor for Fun (Digital Motion Processor Joystick): Hej kære! Dette er min første instruktion, så håber på din fordel og feedback! Projektet er en interaktiv platform til hjemmefester, konkurrencer, events - bare for sjov. Disse er to bevægelsessensorer fremstillet i designet af jernmandsreaktoren. Det