Sadržaj:
Video: Arduino projekt digitalnog kompasa: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:36
Zdravo! U ovom uputstvu vidjet ćete kako možete napraviti digitalni kompas pomoću Arduina i IDE -a za obradu. Ovo je prilično jednostavan, ali zanimljiv i cool projekt Arduino.
Demo primjer ovog vodiča možete pogledati u videu iznad. Na mojem YouTube kanalu uvijek možete pronaći više zanimljivih video zapisa poput ovog, kao i mnogo projekata o elektronici i vodiča na mojoj web stranici, HowToMechatronics.com
Korak 1: Potrebni dijelovi
Za ovaj projekt trebat će vam samo Arduino ploča i MEMS magnetometar za mjerenje magnetskog polja zemlje. Koristit ću ploču za razbijanje GY - 80 koja sadrži MC5883L 3 - osni magnetometar.
Prije nego nastavimo s izvornim kodom za projekt Ako vam je potrebno više pojedinosti o načinu rada MEMS magnetometra, kao i o tome kako spojiti i koristiti razvodnu ploču GY - 80 putem I2C komunikacije, možete provjeriti moje posebne upute za to.
Korak 2: Arduino izvorni kod
Ono što prvo moramo učiniti je učitati skicu na Arduino ploču koja će očitavati podatke s magnetometra i poslati ih u IDE za obradu. Evo Arduino izvornog koda:
/ * Arduino kompas * * autora Dejana Nedelkovskog, * www. HowToMechatronics.com * */
#include // I2C Arduino knjižnica
#define Magnetometar_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;
float heading, headingDegrees, headingFiltered, deklinacija;
plovak Xm, Ym, Zm;
#define Magnetometar 0x1E // I2C 7 -bitna adresa HMC5883
void setup () {
// Inicijalizacija serijske i I2C komunikacije Serial.begin (115200); Wire.begin (); kašnjenje (100); Wire.beginTransmission (Magnetometar); Wire.write (0x02); // Odabir registra načina Wire.write (0x00); // Kontinuirani način mjerenja Wire.endTransmission (); }
void loop () {{100} {101}
// ---- žica X-osi.početak prijenosa (magnetometar); // prijenos na uređaj Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometar, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometar); // prijenos na uređaj Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometar, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y-os
Wire.beginTransmission (Magnetometar); // prijenos na uređaj Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometar, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometar); // prijenos na uređaj Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometar, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Žica Z-osi.beginTransmission (Magnetometar); // prijenos na uređaj Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometar, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometar); // prijenos na uređaj Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometar, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-os mX1 = mX1 << 8; mX_out = mX0+mX1; // Sirovi podaci // Iz podatkovne tablice: 0,92 mG/znamenka Xm = mX_out*0,00092; // Gaussova jedinica //* Magnetsko polje Zemlje kreće se od 0,25 do 0,65 Gaussa, pa su to vrijednosti koje moramo približno dobiti.
// ---- Y-os
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0,00092;
// ---- Z-os
mZ1 = mZ1 <0,073 deklinacija rada = 0,073; naslov += deklinacija; // Ispravljanje pri poništavanju znakova if (zaglavlje <0) zaglavlje += 2*PI;
// Ispravljanje zbog dodavanja kuta deklinacije
if (naslov> 2*PI) naslov -= 2*PI;
headingDegrees = zaglavlje * 180/PI; // Jedinica naslova u stupnjevima
// Zaglađivanje izlaznog kuta / niskopropusni filtar
headingFiltered = headingFiltered*0,85 + headingDegrees*0,15;
// Slanje vrijednosti naslova kroz serijski port u Processing IDE
Serial.println (headingFiltered);
kašnjenje (50); }
Korak 3: Obrada izvornog koda IDE -a
Nakon što smo učitali prethodnu Arduino skicu, moramo primiti podatke u IDE za obradu i nacrtati digitalni kompas. Kompas se sastoji od pozadinske slike, fiksne slike strelice i rotirajuće slike tijela kompasa. Dakle, vrijednosti za magnetsko polje uzemljenja izračunate s Arduinom koriste se za rotiranje kompasa.
Evo izvornog koda IDE -a za obradu:
/ * Arduino kompas * * by Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; uvoz java.awt.event. KeyEvent; import java.io. IOException;
Serijski myPort;
PImage imgCompass; PImage imgCompassArrow; PImage pozadina;
Niz podataka = "";
plutajući zaglavlje;
void setup () {
veličina (1920, 1080, P3D); glatko, nesmetano(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = novi serijski (ovo, "COM4", 115200); // pokreće serijsku komunikaciju myPort.bufferUntil ('\ n'); }
void draw () {
slika (pozadina, 0, 0); // Učitava pozadinsku sliku pushMatrix (); prevesti (širina/2, visina/2, 0); // Prevodi koordinatni sustav u središte zaslona, tako da se rotacija događa upravo u središtu rotateZ (radijani (-glavlje)); // Rotira kompas oko Z -slike osi (imgCompass, -960, -540); // Učitava sliku Compass -a i kako se koordinatni sustav premješta potrebno je postaviti sliku na -960x, -540y (polovica veličine zaslona) popMatrix (); // Vraća koordinatni sustav natrag u izvorni položaj slike 0, 0, 0 (imgCompassArrow, 0, 0); // Učitava sliku CompassArrow na koju funkcija rotateZ () ne utječe zbog funkcije popMatrix () textSize (30); text ("Naslov:" + naslov, 40, 40); // Ispisuje vrijednost naslova na zaslonu
kašnjenje (40);
}
// počinje čitanje podataka sa serijskog porta
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // čita podatke sa serijskog porta i stavlja ih u String varijablu "data". zaglavlje = plutajući (podaci); // Pretvaranje vrijednosti String u vrijednost Float}
Nadam se da će vam se svidjeti ovaj projekt. Ako je tako, možete posjetiti i moju web stranicu za više cool projekata.
Preporučeni:
Vodič za sučelje senzora kompasa HMC5883L s Arduinom: 10 koraka (sa slikama)
Vodič za sučelje Senzor kompasa HMC5883L s Arduinom: Opis HMC5883L je troosni digitalni kompas koji se koristi u dvije opće svrhe: za mjerenje magnetiziranja magnetskog materijala poput feromagneta, ili za mjerenje jakosti i, u nekim slučajevima, smjera magnetsko polje u točki u s
Haptički pojas kompasa: 9 koraka
Pojas haptičkog kompasa: Pojas s Arduino pogonom koji vibrira prema sjeveru. Ljudska percepcija uvijek je bila ograničena na naša biološka osjetila, ali što ako bismo to mogli promijeniti? U prirodi postoje životinje sa sposobnošću osjetiti magnetsko polje, barometarski tlak, ambijent
ESPcopter i Visuino - Pretvorite smjer kompasa u 3D kut: 6 koraka
ESPcopter i Visuino - Pretvorite smjer kompasa u 3D kut: ESPcopter sada u potpunosti podržava najnovija verzija Visuina, što ga čini vjerojatno najjednostavnijim za programiranje bespilotnih letjelica koje postoje! :-) Uz Visuino podršku možete upravljati motorima, LED, radi s akcelerometrom, žirom
Arduino projekt digitalnog zaključavanja koda pomoću matrične tipkovnice: 9 koraka
Arduino projekt digitalnog zaključavanja koda pomoću matrične tipkovnice: Izgradite uređaj za zaključavanje digitalnog koda sa sustavom Arduino i Qwiic pomoću Zio M Uno i matrice s matricom Hex 4x3. Pregled projekta Za ovaj projekt izgradit ćemo jednostavnu digitalnu kodnu bravu koju korisnici mogu unijeti i unijeti in. U ovom ćemo vodiču pokazati upotrebu
Hakiranje digitalnog fotoaparata privjeska za Arduino kontrolu: 6 koraka
Hakiranje digitalnog fotoaparata privjeska za Arduino kontrolu: Mogućnosti fotografije za Arduino su rijetke. Web kamere nisu praktične za aplikacije poput fotografiranja zmajevima ili javne fotografije, osim ako ne želite kupiti 200 -metarski USB kabel. A trenutne tehnike za samostalni Arduino fot