Turinys:
- 1 žingsnis: reikalingos dalys
- 2 žingsnis: „Arduino“šaltinio kodas
- 3 veiksmas: apdorokite IDE šaltinio kodą
Video: „Arduino“skaitmeninio kompaso projektas: 3 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Sveiki! Šioje instrukcijoje pamatysite, kaip galite sukurti skaitmeninį kompasą naudodami „Arduino“ir apdorojimo IDE. Tai gana paprastas, bet įdomus ir šauniai atrodantis „Arduino“projektas.
Šios pamokos demonstracinį pavyzdį galite peržiūrėti aukščiau esančiame vaizdo įraše. Visada galite rasti daugiau įdomių vaizdo įrašų, tokių kaip mano „YouTube“kanale, taip pat rasite daug elektronikos projektų ir vadovėlių mano svetainėje HowToMechatronics.com
1 žingsnis: reikalingos dalys
Šiam projektui jums reikės tik „Arduino“plokštės ir MEMS magnetometro žemės magnetiniam laukui matuoti. Aš naudoju GY -80 pertraukos plokštę, kurioje yra MC5883L 3 ašių magnetometras.
Prieš tęsdami projekto šaltinio kodą Jei jums reikia daugiau informacijos apie tai, kaip veikia MEMS magnetometras, taip pat kaip prijungti ir naudoti GY -80 atskyrimo plokštę per „I2C Communication“, galite patikrinti mano konkrečias pamokas.
2 žingsnis: „Arduino“šaltinio kodas
Pirmiausia turime įkelti eskizą į „Arduino“plokštę, kuri nuskaitys magnetometro duomenis ir nusiųs juos į apdorojimo IDE. Štai „Arduino“šaltinio kodas:
/ * „Arduino Compass“* * pateikė Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include // „I2C Arduino“biblioteka
#define Magnetometras_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;
plūdės antraštė, antraštė
plūdė Xm, Ym, Zm;
#define Magnetometras 0x1E // I2C 7 bitų HMC5883 adresas
void setup () {
// Inicijuoti serijinius ir I2C ryšius Serial.begin (115200); Wire.begin (); vėlavimas (100); Wire.beginTransmission (magnetometras); Wire.write (0x02); // Pasirinkite režimo registrą Wire.write (0x00); // Nuolatinio matavimo režimas Wire.endTransmission (); }
void loop () {
// ---- X ašies viela.beginTransmission (magnetometras); // perduoti į įrenginį Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometras, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (magnetometras); // perduoti į įrenginį Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometras, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y ašis
Wire.beginTransmission (magnetometras); // perduoti į įrenginį Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometras, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (magnetometras); // perduoti į įrenginį Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometras, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z ašies viela.beginTransmission (magnetometras); // perduoti į įrenginį Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometras, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (magnetometras); // perduoti į įrenginį Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometras, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X ašis mX1 = mX1 << 8; mX_out = mX0+mX1; // Neapdoroti duomenys // Iš duomenų lapo: 0,92 mG/skaitmuo Xm = mX_out*0,00092; // Gauso vienetas //* Žemės magnetinis laukas svyruoja nuo 0,25 iki 0,65 Gauso, taigi tai yra vertės, kurias turime gauti apytiksliai.
// ---- Y ašis
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0,00092;
// ---- Z ašis
mZ1 = mZ1 <0,073 rad deklinacija = 0,073; antraštė += nuokrypis; // Taisymas, kai ženklai yra gerbiami, jei (antraštė <0) antraštė += 2*PI;
// Taisymas dėl to, kad pridėtas nuolydžio kampas
if (antraštė> 2*PI) antraštė -= 2*PI;
headDegrees = antraštė * 180/PI; // Antraštė laipsniais
// Išėjimo kampo išlyginimas / Žemo dažnio filtras
antraštėFiltruota = antraštėFiltruota*0,85 + antraštėLaipsniai*0,15;
// Antraštės vertės siuntimas per nuoseklųjį prievadą apdorojant IDE
Serial.println (antraštėFiltruota);
vėlavimas (50); }
3 veiksmas: apdorokite IDE šaltinio kodą
Įkėlę ankstesnį „Arduino“eskizą, turime gauti duomenis į apdorojimo IDE ir nupiešti skaitmeninį kompasą. Kompasą sudaro fono vaizdas, fiksuotas rodyklės vaizdas ir besisukantis kompaso korpuso vaizdas. Taigi kompasui pasukti naudojamos įžeminimo magnetinio lauko vertės, apskaičiuotos naudojant „Arduino“.
Štai apdorojimo IDE šaltinio kodas:
/ * „Arduino Compass“* * pateikė Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; importuoti java.awt.event. KeyEvent; importuoti java.io. IOException;
Serijinis myPort;
PImage imgCompass; PImage imgCompassArrow; PImage fonas;
Eilutės duomenys = "";
plūdės antraštė;
void setup () {
dydis (1920, 1080, P3D); lygus (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); fonas = loadImage ("Background.png"); myPort = nauja serija (tai, "COM4", 115200); // paleidžia serijinį ryšį myPort.bufferUntil ('\ n'); }
void draw () {
vaizdas (fonas, 0, 0); // Įkelia fono paveikslėlį pushMatrix (); versti (plotis/2, aukštis/2, 0); // Išverčia koordinačių sistemą į ekrano centrą, kad sukimasis vyktų tiesiai centre rotateZ (radianai (-galvos)); // Pasuka kompasą aplink Z -ašies vaizdą (imgCompass, -960, -540); // Įkelia kompaso atvaizdą ir kai koordinačių sistema perkeliama, turime nustatyti vaizdą -960x, -540y (pusės ekrano dydžio) popMatrix (); // Atneša koordinačių sistemą į pradinę padėtį 0, 0, 0 vaizdas (imgCompassArrow, 0, 0); // Įkelia „CompassArrow“vaizdą, kuriam funkcija rotateZ () neturi įtakos dėl „popMatrix“() funkcijos textSize (30); tekstas ("Antraštė:" + antraštė, 40, 40); // Spausdina antraštės vertę ekrane
vėlavimas (40);
}
// pradeda skaityti duomenis iš nuoseklaus prievado
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // skaito duomenis iš nuoseklaus prievado ir įdeda juos į eilutės kintamąjį „data“. antraštė = plūdė (duomenys); // „String“vertės konvertavimas į „Float value“}
Tikiuosi, kad jums patiks šis projektas. Jei taip, taip pat galite apsilankyti mano svetainėje, kur rasite daugiau įdomių projektų.
Rekomenduojamas:
Sąsajos „HMC5883L“kompaso jutiklio su „Arduino“pamoka: 10 žingsnių (su paveikslėliais)
Sąsajos „HMC5883L“kompaso jutiklis su „Arduino“instrukcija: Aprašymas „HMC5883L“yra 3 ašių skaitmeninis kompasas, naudojamas dviem bendrais tikslais: matuoti magnetinės medžiagos, pvz., Feromagneto, įmagnetinimą arba matuoti stiprumą ir kai kuriais atvejais kryptį. magnetinis laukas s taške
Haptinis kompaso diržas: 9 žingsniai
Haptinis kompaso diržas: „Arduino“varomas diržas, vibruojantis į šiaurę. Žmogaus suvokimas visada apsiribojo mūsų biologiniais pojūčiais, bet kas būtų, jei galėtume tai pakeisti? Gamtoje yra gyvūnų, galinčių jausti magnetinius laukus, barometrinį slėgį, ambi
ESPcopter ir Visuino - konvertuokite kompaso kryptį į 3D kampą: 6 žingsniai
„ESPcopter“ir „Visuino“- konvertuokite kompaso kryptį į 3D kampą: „ESPcopter“dabar visiškai palaiko naujausia „Visuino“versija, todėl turbūt lengviausia užprogramuoti esamą droną! :-) Naudodami „Visuino“palaikymą galite valdyti variklius, šviesos diodas, dirbkite su pagreičio matuokliu, Gyr
„Arduino“skaitmeninio kodo užrakto projektas naudojant matricinę klaviatūrą: 9 žingsniai
„Arduino“skaitmeninio kodo užrakto projektas naudojant „Matrix“klaviatūrą: sukurkite skaitmeninio kodo užrakto įrenginį su „Arduino“ir „Qwiic“sistema naudodami „Zio M Uno“ir „Hex 4x3 Matrix“klaviatūrą. šioje pamokoje parodysime naudojimą
USB degiklis! Šis projektas gali sudegti per plastiką / medieną / popierių (įdomus projektas taip pat turi būti labai plonas medis): 3 žingsniai
USB degiklis! Šis projektas gali sudegti per plastiką / medieną / popierių (įdomus projektas taip pat turi būti labai plonas medis): NEDARYKITE ŠIO NAUDOTI USB! iš visų komentarų sužinojau, kad tai gali pakenkti jūsų kompiuteriui. mano kompiuteris gerai. Naudokite 600 mA 5v telefono įkroviklį. Aš tai naudoju ir jis veikia gerai, ir niekas negali būti sugadintas, jei naudosite apsauginį kištuką, kad sustabdytumėte maitinimą