Obsah:
Video: Projekt Arduino Digital Compass: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
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:
Micro: Bit Compass DIY: 6 kroků
Micro: Bit Compass DIY: Jak kódovat Micro: Bit kompas
Tutorial to Interface HMC5883L Compass Sensor With Arduino: 10 Steps (with Pictures)
Tutorial to Interface HMC5883L Compass Sensor With Arduino: Description HMC5883L is a 3-axis digital compass used for two general purposes: to measurement the magnetization of an magnetic material like a ferromagnet, or to measurement the force and, some cases, direction of magnetické pole v bodě v
DIY Arduino Compass: 6 kroků
DIY Arduino Compass: Všichni víme, co je to kompas a k čemu se používá. Kompas nám říká směr, tj. E-W-N-S. Tradiční kompas fungoval s magnetickou jehlou uprostřed. Severní pól jehly vždy směřuje k zeměpisnému severnímu pólu Země s
Arduino Nano: akcelerometr Gyroscope Compass MPU9250 I2C senzor s Visuino: 11 kroků
Arduino Nano: Akcelerometr Gyroscope Compass MPU9250 I2C senzor s Visuino: MPU9250 je jedním z nejpokročilejších kombinovaných snímačů akcelerometru, gyroskopu a kompasu, který je v současné době k dispozici. Mají mnoho pokročilých funkcí, včetně filtrování dolní propusti, detekce pohybu a dokonce i programovatelný specializovaný procesor
USB vypalovačka! Tento projekt může hořet plasty / dřevem / papírem (zábavný projekt také musí být velmi jemné dřevo): 3 kroky
USB vypalovačka! Tento projekt může hořet plasty / dřevem / papírem (zábavný projekt také musí být velmi jemné dřevo): NEDĚLEJTE TOTO POUŽÍVÁNÍ USB !!!! ze všech komentářů jsem zjistil, že může poškodit váš počítač. můj počítač je v pořádku Použijte 600mA 5v nabíječku telefonu. Použil jsem to a funguje to dobře a nic se nemůže poškodit, pokud použijete bezpečnostní zástrčku k zastavení napájení