Sadržaj:
Video: Arduino projekt digitalnog kompasa: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Zdravo! U ovom uputstvu ćete vidjeti 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 na videu iznad. Na mom YouTube kanalu uvijek možete pronaći zanimljivije video zapise poput ovog, kao i mnogo elektroničkih projekata 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 detalja o načinu rada MEMS magnetometra, kao i o tome kako spojiti i koristiti GY - 80 ploču za razbijanje putem I2C komunikacije, možete provjeriti moje posebne vodiče za to.
Korak 2: Arduino izvorni kod
Ono što prvo moramo učiniti je otpremiti skicu na Arduino ploču koja će očitavati podatke s magnetometra i poslati ih u IDE za obradu. Evo izvornog koda Arduina:
/ * Arduino kompas * * autora Dejana Nedelkovskog, * www. HowToMechatronics.com * */
#include // I2C Arduino biblioteka
#define Magnetometer_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}
// ---- X-Axis Wire.beginTransmission (Magnetometar); // prenosi na uređaj Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometar, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometar); // prenosi 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); // prenosi na uređaj Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometar, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometar); // prenosi 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); // prenosi na uređaj Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometar, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometar); // prenosi 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; // Gauss jedinica //* Magnetno polje Zemlje se kreće od 0,25 do 0,65 Gauss, 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 filter
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 IDE izvornog koda
Nakon što smo učitali prethodnu Arduino skicu, moramo primiti podatke u IDE za obradu i nacrtati digitalni kompas. Kompas se sastoji od slike u pozadini, nepomične 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 * * autora Dejana Nedelkovskog, * www. HowToMechatronics.com * */ import processing.serial. *; import java.awt.event. KeyEvent; import java.io. IOException;
Serijski myPort;
PImage imgCompass; PImage imgCompassArrow; PImage background;
Niz podataka = "";
plutajući zaglavlje;
void setup () {
veličina (1920, 1080, P3D); smooth (); 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 sistem u središte ekrana, tako da se rotacija dešava tačno u centru rotateZ (radijani (-glavlje)); // Rotira kompas oko Z -slike osi (imgCompass, -960, -540); // Učitava sliku Compass -a i kako se koordinatni sistem premješta potrebno je postaviti sliku na -960x, -540y (polovina veličine ekrana) popMatrix (); // Vraća koordinatni sistem na početnu poziciju 0, 0, 0 slika (imgCompassArrow, 0, 0); // Učitava sliku CompassArrow na koju funkcija rotateZ () ne utječe zbog funkcije popMatrix () textSize (30); text ("Naslov:" + naslov, 40, 40); // Štampa vrijednost naslova na ekranu
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 = float (podaci); // Pretvaranje vrijednosti String u Float vrijednost}
Nadam se da će vam se svideti ovaj projekat. Ako je tako, možete posjetiti i moju web stranicu za više kul projekata.
Preporučuje se:
Uputstvo za interfejs HMC5883L senzor kompasa sa Arduinom: 10 koraka (sa slikama)
Uputstvo za sučelje HMC5883L Senzor kompasa HMC5883L sa 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 čvrstoće i, u nekim slučajevima, smjera magnetsko polje u tački u s
Haptički pojas kompasa: 9 koraka
Pojas haptičkog kompasa: Pojas sa 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 kurs 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 kontrolirati motore, LED, radi sa 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 s sistemom Arduino i Qwiic koristeći Zio M Uno i Hex 4x3 matričnu tipkovnicu. Pregled projekta Za ovaj projekt izgradit ćemo jednostavnu digitalnu kodnu bravu koju korisnici mogu unijeti i unijeti in. U ovom vodiču ćemo 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 zmajem ili javne fotografije, osim ako vam se ne sviđa kupnja 200 -metarskog USB kabela. A trenutne tehnike za samostalni Arduino fot