Innholdsfortegnelse:
Video: Arduino Digital Compass Project: 3 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Hallo! I denne instruksjonsboken vil du se hvordan du kan lage et digitalt kompass ved hjelp av en Arduino og Processing IDE. Dette er ganske enkelt, men interessant og kult Arduino -prosjekt.
Du kan se demo -eksemplet på denne opplæringen på videoen ovenfor. Du kan alltid finne flere interessante videoer som dette på YouTube -kanalen min, samt finne mange elektronikkprosjekter og opplæringsprogrammer på nettstedet mitt, HowToMechatronics.com
Trinn 1: Deler påkrevd
For dette prosjektet trenger du bare et Arduino -bord og et MEMS -magnetometer for å måle jordmagnetfeltet. Jeg vil bruke GY - 80 breakout board som inneholder MC5883L 3 - Axis Magnetometer.
Før vi fortsetter med kildekoden for prosjektet. Hvis du trenger flere detaljer om hvordan MEMS magnetometer fungerer, samt hvordan du kobler til og bruker GY - 80 breakout board via I2C Communication, kan du sjekke mine spesielle opplæringsprogrammer for det.
Trinn 2: Arduino kildekode
Det vi først må gjøre er å laste opp en skisse til Arduino Board som vil lese dataene fra magnetometeret, og den vil sende den til Processing IDE. Her er Arduino kildekoden:
/ * Arduino Compass * * av Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include // I2C Arduino Library
#define Magnetometer_mX0 0x03
#define Magnetometer_mX1 0x04 #Definer 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, headingFiltrert, deklinasjon;
flyte Xm, Ym, Zm;
#define Magnetometer 0x1E // I2C 7bit adresse til HMC5883
ugyldig oppsett () {
// Initialiser seriell og I2C kommunikasjon Serial.begin (115200); Wire.begin (); forsinkelse (100); Wire.beginTransmission (Magnetometer); Wire.write (0x02); // Velg modusregister Wire.write (0x00); // Kontinuerlig målemodus Wire.endTransmission (); }
void loop () {
// ---- X-Axis Wire.beginTransmission (Magnetometer); // overføre til enheten Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); hvis (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (magnetometer); // overføre til enheten 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 enheten Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); hvis (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (magnetometer); // overføre til enheten 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 enheten Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); hvis (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (magnetometer); // overføre til enheten 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/siffer Xm = mX_out*0,00092; // Gauss -enhet //* Jordens magnetfelt varierer fra 0,25 til 0,65 Gauss, så dette er verdiene vi trenger for å få omtrent.
// ---- Y-akse
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0,00092;
// ---- Z-akse
mZ1 = mZ1 <0,073 rad deklinasjon = 0,073; overskrift += deklinasjon; // Korrigere når tegn er ærverdige hvis (overskrift <0) overskrift += 2*PI;
// Korrigering på grunn av tillegg av deklinasjonsvinkelen
hvis (overskrift> 2*PI) overskrift -= 2*PI;
headingDegrees = overskrift * 180/PI; // Overskriften i grader -enhet
// Utjevning av utgangsvinkelen / lavpassfilter
headingFiltered = headingFiltrert*0,85 + headingDegrees*0,15;
// Sende overskriftsverdien gjennom serieporten til prosessering IDE
Serial.println (headingFiltrert);
forsinkelse (50); }
Trinn 3: Behandler IDE -kildekoden
Etter at vi har lastet opp den forrige Arduino -skissen, må vi motta dataene i Processing IDE og tegne det digitale kompasset. Kompasset består av et bakgrunnsbilde, et fast bilde av pilen og et roterende bilde av kompassets kropp. Så verdiene for eart -magnetfeltet beregnet med Arduino brukes til å rotere kompasset.
Her er kildekoden til Processing IDE:
/ * Arduino Compass * * av Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; import java.awt.event. KeyEvent; importer java.io. IOException;
Seriell myPort;
PImage imgCompass; PImage imgCompassArrow; Bildebilde;
String data = "";
flyteoverskrift;
ugyldig oppsett () {
størrelse (1920, 1080, P3D); glatt(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = new Serial (dette, "COM4", 115200); // starter seriell kommunikasjon myPort.bufferUntil ('\ n'); }
ugyldig trekning () {
bilde (bakgrunn, 0, 0); // Laster bakgrunnsbildet pushMatrix (); translate (bredde/2, høyde/2, 0); // Oversetter koordinatsystemet til midten av skjermen, slik at rotasjonen skjer midt i midten rotateZ (radianer (-heading)); // Roter kompasset rundt Z -akse -bilde (imgCompass, -960, -540); // Laster inn kompassbildet, og ettersom koordinatsystemet flyttes, trenger vi å sette bildet til -960x, -540y (halv skjermstørrelse) popMatrix (); // Bringer koordinatsystemet er tilbake til den opprinnelige posisjonen 0, 0, 0 image (imgCompassArrow, 0, 0); // Laster inn CompassArrow -bildet som ikke påvirkes av rotateZ () -funksjonen på grunn av popMatrix () -funksjonen textSize (30); tekst ("Overskrift:" + overskrift, 40, 40); // Skriver ut verdien av overskriften på skjermen
forsinkelse (40);
}
// begynner å lese data fra serieporten
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // leser dataene fra serieporten og legger dem inn i strengvariabelen "data". heading = float (data); // Konvertere strengen til Float -verdi}
Jeg håper du vil like dette prosjektet. Hvis det er slik, kan du også besøke nettstedet mitt for flere kule prosjekter.
Anbefalt:
Micro: Bit Compass DIY: 6 trinn
Micro: Bit Compass DIY: Slik koder du et Micro: Bit kompass
DIY Compass Bot: 14 trinn
DIY Compass Bot: Hei! I dag skal jeg lage en Kompass -bot. Jeg fikk denne ideen ved å tenke på hvor vanskelig det er å tegne den perfekte sirkelen uten en matematisk boks. Vel, jeg har løsningen din? Som du vet at en sirkel er nøyaktig 360 grader, kan denne boten tegne et sha
Hvordan rive en digital tykkelse og hvordan fungerer en digital tykkelse: 4 trinn
Hvordan rive en digital tykkelse og hvordan fungerer en digital tykkelse: Mange vet hvordan man bruker måler for måling. Denne opplæringen vil lære deg hvordan du river en digital tykkelse og en forklaring på hvordan den digitale tykkelsen fungerer
Claqueta Digital Con Arduino (Digital Clapperboard With Arduino): 7 trinn
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.MATERIALES Display of 7 segmentos MAX7219 and 8 digitos compatible with arduino.Modulo de Reloj RTC model DS3231 con arduino.Arduin
Arduino Nano: Accelerometer Gyroscope Compass MPU9250 I2C Sensor With Visuino: 11 Steps
Arduino Nano: Accelerometer Gyroscope Compass MPU9250 I2C Sensor With Visuino: MPU9250 er en av de mest avanserte kombinerte Accelerometer, Gyroscope og Compass -sensorer i liten størrelse som er tilgjengelig for øyeblikket. De har mange avanserte funksjoner, inkludert lavpasfiltrering, bevegelsesdeteksjon og til og med en programmerbar spesialisert prosessor