INHOUDSOPGAWE:
Video: Arduino Digital Compass Project: 3 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Hallo! In hierdie instruksies sal u sien hoe u 'n digitale kompas kan maak met 'n Arduino en die verwerkings -IDE. Dit is redelik eenvoudig, maar interessant en koel Arduino -projek.
U kan die demo -voorbeeld van hierdie tutoriaal in die video hierbo sien. U kan altyd meer interessante video's soos hierdie op my YouTube -kanaal vind, sowel as baie elektroniese projekte en tutoriale op my webwerf, HowToMechatronics.com.
Stap 1: Onderdele benodig
Vir hierdie projek benodig u slegs 'n Arduino -bord en 'n MEMS -magnetometer om die aardmagnetiese veld te meet. Ek sal die GY -80 uitbreekbord gebruik wat die MC5883L 3 -as magnetometer bevat.
Voordat ons voortgaan met die bronkode vir die projek. As u meer inligting benodig oor hoe die MEMS -magnetometer werk, asook hoe u die GY - 80 -uitbreekbord kan koppel en gebruik via die I2C -kommunikasie, kan u my spesifieke tutoriale daarvoor nagaan.
Stap 2: Arduino -bronkode
Wat ons eers moet doen, is om 'n skets op te laai na die Arduino -bord wat die data van die magnetometer sal lees en dit na die verwerkings -IDE sal stuur. Hier is die Arduino -bronkode:
/ * Arduino Compass * * deur Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include // I2C Arduino -biblioteek
#definieer magnetometer_mX0 0x03
#define Magnetometer_mX1 0x04 #definieer Magnetometer_mZ0 0x05 #definieer Magnetometer_mZ1 0x06 #definieer Magnetometer_mY0 0x07 #definieer Magnetometer_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;
float heading, headingDegrees, headingFiltreer, deklinasie;
dryf Xm, Ym, Zm;
#define Magnetometer 0x1E // I2C 7bit adres van HMC5883
ongeldige opstelling () {
// Initialiseer Serial- en I2C -kommunikasie Serial.begin (115200); Wire.begin (); vertraging (100); Wire.begin Transmissie (Magnetometer); Wire.write (0x02); // Kies modusregister Wire.write (0x00); // Deurlopende metingsmodus Wire.endTransmission (); }
leemte -lus () {
// ---- X-Axis Wire.beginTransmission (Magnetometer); // stuur na toestel Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); as (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.begin Transmissie (magnetometer); // stuur na toestel Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); as (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y-as
Wire.begin Transmissie (Magnetometer); // stuur na toestel Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); as (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.begin Transmissie (magnetometer); // stuur na toestel Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); as (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.begin Transmissie (Magnetometer); // stuur na toestel Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); as (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.begin Transmissie (magnetometer); // stuur na toestel Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); as (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-as mX1 = mX1 << 8; mX_out = mX0+mX1; // Rou data // Uit die datablad: 0.92 mG/syfer Xm = mX_out*0.00092; // Gauss -eenheid //* Aardmagnetiese veld wissel van 0,25 tot 0,65 Gauss, dus dit is die waardes wat ons ongeveer moet kry.
// ---- Y-as
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0.00092;
// ---- Z-as
mZ1 = mZ1 <0,073 rad deklinasie = 0,073; opskrif += deklinasie; // Regstel wanneer tekens vereer word as (opskrif <0) opskrif += 2*PI;
// Korrigering as gevolg van die byvoeging van die deklinasiehoek
as (opskrif> 2*PI) opskrif -= 2*PI;
headingDegrees = opskrif * 180/PI; // Die opskrif in Graad -eenheid
// Maak die uitvoerhoek glad / Laag deurlaatfilter
headingFiltered = headingFiltered*0.85 + headingDegrees*0.15;
// Stuur die opskrifwaarde deur die seriële poort na die verwerking van IDE
Serial.println (opskrif gefilter);
vertraging (50); }
Stap 3: Verwerking van IDE -bronkode
Nadat ons die vorige Arduino -skets opgelaai het, moet ons die data in die verwerkings -IDE ontvang en die digitale kompas teken. Die kompas bestaan uit 'n agtergrondbeeld, 'n vaste beeld van die pyl en 'n roterende beeld van die liggaam van die kompas. Dus word die waardes vir die aardmagnetiese veld bereken met die Arduino gebruik om die kompas te draai.
Hier is die bronkode van die verwerkings -IDE:
/ * Arduino Compass * * deur Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; invoer java.awt.event. KeyEvent; invoer java.io. IOException;
Seriële myPort;
PImage imgCompass; PImage imgCompassArrow; Beeld agtergrond;
String data = "";
dryfkop;
ongeldige opstelling () {
grootte (1920, 1080, P3D); glad (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = new Serial (hierdie, "COM4", 115200); // begin die seriële kommunikasie myPort.bufferUntil ('\ n'); }
nietige trekking () {
beeld (agtergrond, 0, 0); // Laai die agtergrondprent pushMatrix (); translate (breedte/2, hoogte/2, 0); // Vertaal die koördinaatstelsel in die middel van die skerm, sodat die rotasie in die middelste rotasie Z plaasvind (radiale (-opskrif)); // Draai die kompas om Z -As -beeld (imgCompass, -960, -540); // Laai die kompasbeeld af, en namate die koördinaatstelsel hervestig word, moet ons die beeld op -960x, -540y (die helfte van die skermgrootte) popMatrix () stel; // Bring die koördinaatstelsel terug na die oorspronklike posisie 0, 0, 0 image (imgCompassArrow, 0, 0); // Laai die CompassArrow -beeld wat nie deur die rotateZ () -funksie beïnvloed word nie as gevolg van die popMatrix () -funksie textSize (30); teks ("Opskrif:" + opskrif, 40, 40); // Druk die waarde van die opskrif op die skerm af
vertraging (40);
}
// begin data vanaf die seriële poort lees
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // lees die data van die seriële poort en plaas dit in die string veranderlike "data". opskrif = float (data); // Om die string -waarde in float -waarde oor te dra}
Ek hoop dat u van hierdie projek sal hou. As dit so is, kan u ook my webwerf besoek vir nog meer interessante projekte.
Aanbeveel:
Micro: Bit Compass DIY: 6 stappe
Micro: Bit Compass DIY: Hoe om 'n Micro: Bit kompas te kodeer
Hoe om RADAR te maak met behulp van Arduino for Science Project - Beste Arduino -projekte: 5 stappe
Hoe om RADAR te maak met behulp van Arduino for Science Project | Beste Arduino -projekte: Hallo vriende, in hierdie instruksies sal ek u wys hoe u 'n wonderlike radarsisteem kan bou wat met arduino nano gebou is, hierdie projek is ideaal vir wetenskaplike projekte, en u kan dit maklik maak met baie minder belegging en kans as die wenprys groot is
Arduino Flappy Bird - Arduino 2.4 "TFT Touchscreen SPFD5408 Bird Game Project: 3 stappe
Arduino Flappy Bird | Arduino 2.4 "TFT Touchscreen SPFD5408 Bird Game Project: Flappy Bird was in 'n paar jaar te gewild daar, en baie mense het dit op hul eie manier geskep, ek ook, ek het my weergawe van flappy bird geskep met Arduino en die goedkoop 2.4 " TFT Raakskerm SPFD5408, so laat ons begin
Claqueta Digital Con Arduino (Digital Clapperboard With Arduino): 7 stappe
Claqueta Digital Con Arduino (Digital Clapperboard With Arduino): Digitale kleure, digitale weergawes vir digitale en digitale weergawes, gebruik Arduino. con arduino.Arduin
Arduino teks na spraak omskakelaar met behulp van LM386 - Talking Arduino Project - Talkie Arduino -biblioteek: 5 stappe
Arduino teks na spraak omskakelaar met behulp van LM386 | Talking Arduino Project | Talkie Arduino -biblioteek: Hallo ouens, in baie projekte benodig ons arduino om iets soos praatklok te spreek of data te vertel, sodat ons in hierdie instruksies teks in spraak kan omskakel met Arduino