Obsah:

Projekt digitálneho kompasu Arduino: 3 kroky
Projekt digitálneho kompasu Arduino: 3 kroky

Video: Projekt digitálneho kompasu Arduino: 3 kroky

Video: Projekt digitálneho kompasu Arduino: 3 kroky
Video: #15 HC 05 Bluetooth Modbus Android HMI | Внешний ПЛК Arduino 2024, November
Anonim
Image
Image

Ahoj! V tomto návode uvidíte, ako si môžete vytvoriť digitálny kompas pomocou Arduina a IDE pre spracovanie. Je to celkom jednoduchý, ale zaujímavý a chladne vyzerajúci projekt Arduino.

Demo ukážku tohto tutoriálu si môžete pozrieť vo videu vyššie. Vždy môžete nájsť ďalšie zaujímavé videá, ako je toto, na mojom kanáli YouTube, ako aj veľa elektronických projektov a návodov na mojom webe HowToMechatronics.com

Krok 1: Potrebné diely

Na tento projekt budete potrebovať iba dosku Arduino a magnetometer MEMS na meranie magnetického poľa Zeme. Budem používať oddeľovaciu dosku GY - 80, ktorá obsahuje 3 -osový magnetometer MC5883L.

Predtým, ako budeme pokračovať so zdrojovým kódom projektu Ak potrebujete ďalšie podrobnosti o tom, ako funguje magnetometer MEMS, ako aj o tom, ako pripojiť a používať oddeľovaciu dosku GY - 80 prostredníctvom komunikácie I2C, môžete si pozrieť moje konkrétne návody na to.

Krok 2: Zdrojový kód Arduino

Najprv musíme nahrať skicu na dosku Arduino, ktorá načíta údaje z magnetometra a odošle ich do IDE spracovania. Tu je zdrojový kód Arduino:

/ * Arduino Compass * * od Dejana Nedelkovského, * www. HowToMechatronics.com * */

#include // Knižnica Arduino I2C

#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;

plávajúci nadpis, nadpisStupne, nadpisFiltrované, deklinácia;

plavák Xm, Ym, Zm;

#define Magnetometer 0x1E // I2C 7bit address of HMC5883

neplatné nastavenie () {

// Inicializácia sériovej a I2C komunikácie Serial.begin (115200); Wire.begin (); oneskorenie (100); Wire.beginTransmission (magnetometer); Wire.write (0x02); // Vyberte režim register Wire.write (0x00); // Režim nepretržitého merania Wire.endTransmission (); }

prázdna slučka () {

// ---- X-Axis Wire.beginTransmission (magnetometer); // prenos do zariadenia Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (magnetometer, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (magnetometer); // prenos do zariadenia Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (magnetometer, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Os Y

Wire.beginTransmission (magnetometer); // prenos do zariadenia Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (magnetometer, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (magnetometer); // prenos do zariadenia Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (magnetometer, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Wire-beginTransmission (magnetometer); // prenos do zariadenia Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (magnetometer, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (magnetometer); // prenos do zariadenia Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (magnetometer, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- Os X mX1 = mX1 << 8; mX_out = mX0+mX1; // Surové údaje // Z technického listu: 0,92 mG/číslica Xm = mX_out*0,00092; // Gaussova jednotka //* Magnetické pole Zeme sa pohybuje od 0,25 do 0,65 Gaussa, takže toto sú hodnoty, ktoré musíme približne získať.

// ---- Os Y

mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0,00092;

// ---- Os Z

mZ1 = mZ1 <0,073 radová deklinácia = 0,073; nadpis += deklinácia; // Oprava pri vrátení znamienok, ak (nadpis <0) nadpis += 2*PI;

// Oprava v dôsledku pridania deklinačného uhla

ak (nadpis> 2*PI) nadpis -= 2*PI;

nadpisStupne = nadpis * 180/PI; // Nadpis v jednotke Stupne

// Vyhladenie výstupného uhla / dolnopriepustného filtra

headerFiltered = nadpisFiltrovaný*0,85 + nadpisStupne*0,15;

// Odoslanie hodnoty nadpisu cez sériový port na spracovanie IDE

Serial.println (nadpis Filtrovaný);

oneskorenie (50); }

Krok 3: Spracovanie zdrojového kódu IDE

Potom, čo sme nahrali predchádzajúci náčrt Arduina, musíme prijať údaje do Processing IDE a nakresliť digitálny kompas. Kompas sa skladá z obrázku na pozadí, pevného obrázku šípky a otočného obrázku tela kompasu. Hodnoty magnetického poľa ucha vypočítané pomocou Arduina sa teda používajú na otáčanie kompasu.

Tu je zdrojový kód IDE spracovania:

/ * Arduino Compass * * od Dejana Nedelkovského, * www. HowToMechatronics.com * *// spracovanie spracovania.sériové. *; import java.awt.event. KeyEvent; import java.io. IOException;

Sériový myPort;

PImage imgCompass; PImage imgCompassArrow; PImage background;

Reťazcové údaje = "";

plavákový kurz;

neplatné nastavenie () {

veľkosť (1920, 1080, P3D); hladký (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); pozadie = loadImage ("Background.png"); myPort = nový sériový port (tento, „COM4“, 115200); // spustí sériovú komunikáciu myPort.bufferUntil ('\ n'); }

void draw () {

obrázok (pozadie, 0, 0); // Načíta obrázok na pozadí pushMatrix (); prekladať (šírka/2, výška/2, 0); // Preloží súradnicový systém do stredu obrazovky, aby sa otáčanie uskutočnilo priamo v strede rotateZ (radiány (-hlavička)); // Otočí kompas okolo obrazu osi Z (imgCompass, -960, -540); // Načíta obrázok kompasu a pri premiestňovaní súradnicového systému potrebujeme nastaviť obrázok na -960x, -540y (polovičná veľkosť obrazovky) popMatrix (); // Vráti súradnicový systém späť na pôvodnú pozíciu 0, 0, 0 obrázku (imgCompassArrow, 0, 0); // Načíta obrázok CompassArrow, ktorý nie je ovplyvnený funkciou rotateZ () kvôli funkcii popMatrix () textSize (30); text („Nadpis:“+ nadpis, 40, 40); // Vytlačí hodnotu nadpisu na obrazovku

oneskorenie (40);

}

// začne čítať údaje zo sériového portu

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // načíta údaje zo sériového portu a vloží ich do premennej String „data“. nadpis = float (údaje); // Konvertovanie hodnoty String na Float value}

Dúfam, že sa vám tento projekt bude páčiť. Ak je to tak, môžete tiež navštíviť moju webovú stránku a nájsť ďalšie skvelé projekty.

Odporúča: