Obsah:

Projekt Arduino Digital Compass: 3 kroky
Projekt Arduino Digital Compass: 3 kroky

Video: Projekt Arduino Digital Compass: 3 kroky

Video: Projekt Arduino Digital Compass: 3 kroky
Video: #15 HC 05 Bluetooth Modbus Android HMI | Внешний ПЛК Arduino 2024, Listopad
Anonim
Image
Image

Ahoj! V tomto pokynu uvidíte, jak můžete vytvořit digitální kompas pomocí Arduina a IDE pro zpracování. Je to docela jednoduchý, ale zajímavý a skvěle vypadající projekt Arduino.

Na výše uvedeném videu se můžete podívat na ukázkový příklad tohoto tutoriálu. Na mém kanálu YouTube můžete vždy najít další zajímavá videa, jako je tato, stejně jako spoustu elektronických projektů a návodů na mém webu HowToMechatronics.com

Krok 1: Potřebné díly

Pro tento projekt budete potřebovat pouze desku Arduino a magnetometr MEMS pro měření magnetického pole Země. Použiji odlamovací desku GY - 80, která obsahuje 3osý magnetometr MC5883L.

Než budeme pokračovat se zdrojovým kódem projektu Pokud potřebujete další podrobnosti o tom, jak funguje magnetometr MEMS a jak se připojit a používat desku GY - 80 breakout prostřednictvím komunikace I2C, můžete si o tom přečíst mé konkrétní návody.

Krok 2: Zdrojový kód Arduino

Nejdříve musíme nahrát skicu na desku Arduino, která načte data z magnetometru a odešle je do IDE zpracování. Zde je zdrojový kód Arduina:

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

#include // I2C Arduino Library

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

plovoucí nadpis, nadpisStupně, nadpisFiltrováno, deklinace;

float Xm, Ym, Zm;

#define Magnetometr 0x1E // I2C 7bit adresa HMC5883

neplatné nastavení () {

// Inicializace sériové a I2C komunikace Serial.begin (115200); Wire.begin (); zpoždění (100); Wire.beginTransmission (magnetometr); Wire.write (0x02); // Vyberte režim registru Wire.write (0x00); // Režim kontinuálního měření Wire.endTransmission (); }

prázdná smyčka () {

// ---- Osa X Wire.beginTransmission (magnetometr); // přenos do zařízení Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (magnetometr, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (magnetometr); // přenos do zařízení Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (magnetometr, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Osa Y

Wire.beginTransmission (magnetometr); // přenos do zařízení Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (magnetometr, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (magnetometr); // přenos do zařízení Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (magnetometr, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Osa Z Wire.beginTransmission (magnetometr); // přenos do zařízení Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (magnetometr, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (magnetometr); // přenos do zařízení Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (magnetometr, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- Osa X mX1 = mX1 << 8; mX_out = mX0+mX1; // Nezpracovaná data // Z datového listu: 0,92 mG/číslice Xm = mX_out*0,00092; // Gaussova jednotka //* Magnetické pole Země se pohybuje od 0,25 do 0,65 Gaussa, takže toto jsou hodnoty, které musíme přibližně získat.

// ---- Osa Y

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

// ---- Osa Z

mZ1 = mZ1 <0,073 rad deklinace = 0,073; nadpis += deklinace; // Oprava, když jsou značky obnoveny, pokud (nadpis <0) nadpis += 2*PI;

// Korekce díky přidání úhlu deklinace

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

nadpisDegrees = nadpis * 180/PI; // Nadpis v jednotce Stupně

// Vyhlazení výstupního úhlu / dolní propust

nadpisFiltrovaný = nadpis filtrovaný*0,85 + nadpisStupně*0,15;

// Odeslání hodnoty záhlaví přes sériový port do Processing IDE

Serial.println (záhlaví Filtrováno);

zpoždění (50); }

Krok 3: Zpracování zdrojového kódu IDE

Poté, co jsme nahráli předchozí skicu Arduino, potřebujeme data přijmout do IDE zpracování a nakreslit digitální kompas. Kompas se skládá z obrázku na pozadí, pevného obrázku šipky a rotujícího obrazu těla kompasu. K otáčení kompasu se tedy používají hodnoty pro magnetické pole Eart vypočítané pomocí Arduina.

Zde je zdrojový kód Processing IDE:

/ * Arduino Compass * * od Dejana Nedelkovského, * www. HowToMechatronics.com * */ import processing.serial. *; import java.awt.event. KeyEvent; import java.io. IOException;

Sériový myPort;

PImage imgCompass; PImage imgCompassArrow; PImage pozadí;

Řetězcová data = "";

plovoucí kurz;

neplatné nastavení () {

velikost (1920, 1080, P3D); hladký(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); pozadí = loadImage ("Background.png"); myPort = new Serial (this, "COM4", 115200); // spustí sériovou komunikaci myPort.bufferUntil ('\ n'); }

void draw () {

obrázek (pozadí, 0, 0); // Načte obrázek na pozadí pushMatrix (); translate (šířka/2, výška/2, 0); // Přeloží souřadnicový systém do středu obrazovky, aby rotace probíhala přímo ve středu rotateZ (radiány (-heading)); // Otočí kompas kolem obrazu osy Z (imgCompass, -960, -540); // Načte obrázek kompasu a při přemístění souřadnicového systému potřebujeme nastavit obrázek na -960x, -540y (poloviční velikost obrazovky) popMatrix (); // Přivede souřadnicový systém zpět do původní polohy 0, 0, 0 obrázku (imgCompassArrow, 0, 0); // Načte obrázek CompassArrow, který není ovlivněn funkcí rotateZ () kvůli funkci popMatrix () textSize (30); text ("Nadpis:" + nadpis, 40, 40); // Vytiskne hodnotu nadpisu na obrazovku

zpoždění (40);

}

// začne číst data ze sériového portu

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // načte data ze sériového portu a vloží je do proměnné String "data". nadpis = float (data); // Převod hodnoty String na hodnotu Float}

Doufám, že se vám tento projekt bude líbit. Pokud je to tak, můžete také navštívit můj web, kde najdete další skvělé projekty.

Doporučuje: