Sisällysluettelo:
Video: Arduino Digital Compass Project: 3 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Hei! Tässä ohjeessa näet, kuinka voit tehdä digitaalisen kompassin Arduinon ja Processing IDE: n avulla. Tämä on melko yksinkertainen, mutta mielenkiintoinen ja siistin näköinen Arduino -projekti.
Voit katsoa tämän opetusohjelman demoesimerkin yllä olevasta videosta. Löydät aina tällaisia mielenkiintoisempia videoita YouTube -kanavaltani sekä paljon elektroniikkaprojekteja ja opetusohjelmia verkkosivustoltani, HowToMechatronics.com
Vaihe 1: Tarvittavat osat
Tätä projektia varten tarvitset vain Arduino -levyn ja MEMS -magnetometrin maan magneettikentän mittaamiseen. Käytän GY -80 -katkaisulautaa, joka sisältää MC5883L 3 -akselisen magneettimittarin.
Ennen kuin jatkamme projektin lähdekoodilla Jos tarvitset lisätietoja MEMS -magnetometrin toiminnasta sekä GY -80 -katkaisukortin liittämisestä ja käyttämisestä I2C -tiedonsiirron kautta, voit tarkistaa oppaistani.
Vaihe 2: Arduinon lähdekoodi
Meidän on ensin tehtävä luonnos Arduino Boardille, joka lukee tiedot magnetometristä ja lähettää sen Processing IDE: lle. Tässä on Arduinon lähdekoodi:
/ * Arduino Compass * * kirjoittanut Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include // I2C Arduino -kirjasto
#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;
kelluva otsikko, otsikkoAsetukset, nimikeSuodatettu, deklinaatio;
kelluva Xm, Ym, Zm;
#define Magnetometri 0x1E // I2C HMC5883 7 -bittinen osoite
void setup () {
// Alusta sarja- ja I2C -viestintä Serial.begin (115200); Wire.begin (); viive (100); Wire.beginTransmission (Magnetometri); Wire.write (0x02); // Valitse tilarekisteri Wire.write (0x00); // Jatkuva mittaustila Wire.endTransmission (); }
void loop () {
// ---- X-Axis Wire.beginTransmission (Magnetometer); // lähettää laitteelle Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometri, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometri); // lähettää laitteelle Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometri, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y-akseli
Wire.beginTransmission (Magnetometri); // lähettää laitteelle Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometri, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometri); // lähettää laitteelle Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometri, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-akselin lanka.beginTransmission (Magnetometer); // lähettää laitteelle Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometri, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometri); // lähettää laitteelle Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometri, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-akseli mX1 = mX1 << 8; mX_out = mX0+mX1; // Raakatiedot // Tietolomakkeesta: 0,92 mG/numero Xm = mX_out*0,00092; // Gauss -yksikkö //* Maan magneettikenttä vaihtelee välillä 0,25 - 0,65 Gauss, joten nämä ovat arvoja, jotka meidän on saatava suunnilleen.
// ---- Y-akseli
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0,00092;
// ---- Z-akseli
mZ1 = mZ1 <0,073 rad deklinaatio = 0,073; otsikko += deklinaatio; // Korjataan, kun merkkejä kunnioitetaan, jos (otsikko <0) otsikko += 2*PI;
// Korjaus deklinaatiokulman lisäämisen vuoksi
if (otsikko> 2*PI) otsikko -= 2*PI;
headDegrees = nimike * 180/PI; // Otsikko asteina
// Lähtökulman tasoittaminen / Alipäästösuodatin
otsikkoSuodatettu = otsikkoSuodatettu*0,85 + otsikkoTasot*0,15;
// Otsikon arvon lähettäminen sarjaportin kautta IDE -käsittelyyn
Serial.println (otsikkoSuodatettu);
viive (50); }
Vaihe 3: IDE -lähdekoodin käsittely
Kun olemme ladanneet edellisen Arduino -luonnoksen, meidän on vastaanotettava tiedot Processing IDE: hen ja piirrettävä digitaalinen kompassi. Kompassi koostuu taustakuvasta, kiinteästä nuolen kuvasta ja pyörivästä kuvasta kompassin rungosta. Joten Arduinolla laskettuja korva -magneettikentän arvoja käytetään kompassin pyörittämiseen.
Tässä on Processing IDE: n lähdekoodi:
/ * Arduino Compass * * Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; tuo java.awt.event. KeyEvent; tuoda java.io. IOException;
Sarja myPort;
KUVA imgCompass; KUVA imgCompassArrow; PImage -tausta;
Merkkijonotiedot = "";
kelluva otsikko;
void setup () {
koko (1920, 1080, P3D); sileä(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = uusi sarja (tämä, "COM4", 115200); // aloittaa sarjaliikenteen myPort.bufferUntil ('\ n'); }
void draw () {
kuva (tausta, 0, 0); // Lataa taustakuvan pushMatrix (); kääntää (leveys/2, korkeus/2, 0); // Kääntää koordinaattijärjestelmän näytön keskelle siten, että kierto tapahtuu suoraan keskellä rotateZ (radiaanit (-pää)); // Kierrä kompassia Z -akselin kuvan ympäri (imgCompass, -960, -540); // Lataa kompassikuvan ja koordinaattijärjestelmän siirron yhteydessä meidän on asetettava kuva -960x, -540y (puolet näytön koosta) popMatrix (); // Tuo koordinaatiston takaisin alkuperäiseen asentoonsa 0, 0, 0 kuva (imgCompassArrow, 0, 0); // Lataa CompassArrow -kuvan, johon rotateZ () -toiminto ei vaikuta popMatrix () -funktion vuoksi textSize (30); teksti ("Otsikko:" + otsikko, 40, 40); // Tulostaa otsikon arvon näytölle
viive (40);
}
// aloittaa tietojen lukemisen sarjaportista
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // lukee tiedot sarjaportista ja laittaa ne merkkijonomuuttujaan "data". otsikko = kelluva (data); // String -arvon muuntaminen Float -arvoksi}
Toivottavasti pidät tästä projektista. Jos näin on, voit myös vierailla verkkosivustollani saadaksesi lisää hienoja projekteja.
Suositeltava:
STALKER GUARD (Arduino Uno Project): 4 vaihetta
STALKER GUARD (Arduino Uno Project): Projektimme nimi on Stalker Guard. Valitsimme aiheen lähinnä siksi, että olimme tytöinä vaarallisia kävelemään yksin pimeässä, koska se voi olla vaarallista. Projektimme kehitettiin tästä ideasta päivitettäväksi servo SG90 -moottorilla, jotta se voi sisältää
Arduino Flappy Bird - Arduino 2,4 "TFT -kosketusnäyttö SPFD5408 Bird Game Project: 3 vaihetta
Arduino Flappy Bird | Arduino 2,4 "TFT -kosketusnäyttö SPFD5408 Bird Game Project: Flappy Bird oli liian suosittu peli siellä muutamassa vuodessa, ja monet ihmiset loivat sen omalla tavallaan, niin minäkin, loin oman versioni flappy birdistä Arduinolla ja halvalla 2,4" TFT: llä Kosketusnäyttö SPFD5408, joten aloitetaan
Claqueta Digital Con Arduino (Digital Clapperboard With Arduino): 7 vaihetta
Claqueta Digital Con Arduino (Digital Clapperboard With Arduino): Crea tu propia claqueta digital, también puedes convertir una claqueta no digital en una, utilizando Arduino. con arduino.Arduin
Arduino -teksti puheeksi -muunnin LM386 -: n avulla Talking Arduino Project - Talkie Arduino -kirjasto: 5 vaihetta
Arduino -teksti puheeksi -muunnin LM386 |: n avulla Talking Arduino Project | Talkie Arduino -kirjasto: Hei kaverit, monissa projekteissa vaadimme arduinoa puhumaan jotain, kuten puhuvaa kelloa tai kertomaan joitain tietoja, joten tämän ohjeen mukaan muutamme tekstin puheeksi Arduinon avulla
Arduino Digital Code Lock Project Matrix -näppäimistöllä: 9 vaihetta
Arduino Digital Code Lock Project Matrix -näppäimistön avulla: Rakenna digitaalinen koodilukituslaite Arduino- ja Qwiic -järjestelmällä Zio M Unon ja Hex 4x3 Matrix -näppäimistön avulla. Tässä opetusohjelmassa näytämme käytön