Kazalo:
Video: Projekt digitalnega kompasa Arduino: 3 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Zdravo! V tem navodilu boste videli, kako lahko z Arduinom in IDE -jem za obdelavo naredite digitalni kompas. To je precej preprost, a zanimiv in kul projekt Arduino.
Predstavitveni primer te vadnice si lahko ogledate v zgornjem videu. Na mojem kanalu v YouTubu lahko vedno najdete več zanimivih videoposnetkov, kot je ta, na moji spletni strani HowToMechatronics.com pa najdete veliko projektov in vaj za elektroniko.
1. korak: potrebni deli
Za ta projekt potrebujete le ploščo Arduino in magnetometer MEMS za merjenje zemeljskega magnetnega polja. Uporabil bom ploščo GY - 80, ki vsebuje 3 -osni magnetometer MC5883L.
Preden nadaljujemo z izvorno kodo za projekt. Če potrebujete več podrobnosti o delovanju magnetometra MEMS ter o tem, kako povezati in uporabiti prekinjeno ploščo GY -80 prek komunikacije I2C, lahko za to preverite moje posebne vaje.
2. korak: izvorna koda Arduino
Najprej moramo narediti, da na ploščo Arduino naložimo skico, ki bo prebrala podatke z magnetometra in jih poslala v IDE za obdelavo. Tu je izvorna koda Arduino:
/ * Arduino kompas * * Dejana Nedelkovskega, * www. HowToMechatronics.com * */
#include // Knjiž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;
float heading, headingDegrees, headingFiltered, deklinacija;
plovec Xm, Ym, Zm;
#define Magnetometer 0x1E // 7 -bitni naslov I2C HMC5883
void setup () {
// Inicializiraj serijsko in I2C komunikacijo Serial.begin (115200); Wire.begin (); zamuda (100); Wire.beginTransmission (Magnetometer); Wire.write (0x02); // Izberite register načina Wire.write (0x00); // Način neprekinjenega merjenja Wire.endTransmission (); }
void loop () {
// ---- žica X-osi.beginTransmission (magnetometer); // pošiljanje na napravo Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); če (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // prenesite na napravo Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); če (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Y-os
Wire.beginTransmission (Magnetometer); // pošiljanje na napravo Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); če (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // pošiljanje na napravo Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); če (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- žica Z-osi.beginTransmission (magnetometer); // pošiljanje na napravo Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); če (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometer); // prenesite na napravo Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); če (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-os mX1 = mX1 << 8; mX_out = mX0+mX1; // Neobdelani podatki // Iz podatkovnega lista: 0,92 mG/številka Xm = mX_out*0,00092; // Gaussova enota //* Magnetno polje Zemlje se giblje od 0,25 do 0,65 Gauss, zato so to vrednosti, ki jih moramo približno dobiti.
// ---- Y-os
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0,00092;
// ---- os Z
mZ1 = mZ1 <0,073 deklinacija rad = 0,073; naslov += deklinacija; // Popravljanje, ko so znaki razveljavljeni, če (naslov <0) naslov += 2*PI;
// Popravljanje zaradi dodatka kota deklinacije
če (naslov> 2*PI) naslov -= 2*PI;
headingDegrees = naslov * 180/PI; // naslov v enotah stopinj
// Glajenje izhodnega kota / nizkoprepustni filter
headingFiltered = headFiltered*0,85 + headingDegrees*0,15;
// Pošiljanje vrednosti naslova skozi zaporedna vrata v IDE za obdelavo
Serial.println (headFiltrirano);
zamuda (50); }
3. korak: Obdelava izvorne kode IDE
Ko naložimo prejšnjo skico Arduino, moramo podatke prejeti v IDE za obdelavo in narisati digitalni kompas. Kompas je sestavljen iz slike ozadja, fiksne slike puščice in vrtljive slike telesa kompasa. Tako se vrednosti za zemeljsko magnetno polje, izračunane z Arduinom, uporabljajo za vrtenje kompasa.
Tu je izvorna koda IDE -ja za obdelavo:
/ * Arduino Compass * * Dejana Nedelkovskega, * www. HowToMechatronics.com * */ import processing.serial. *; uvoz java.awt.event. KeyEvent; uvoz java.io. IOException;
Serijski myPort;
PImage imgCompass; PImage imgCompassArrow; Ozadje PImage;
Niz podatkov = "";
plavajoči naslov;
void setup () {
velikost (1920, 1080, P3D); gladko (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = nov serijski (to, "COM4", 115200); // zažene serijsko komunikacijo myPort.bufferUntil ('\ n'); }
void draw () {
slika (ozadje, 0, 0); // naloži sliko ozadja pushMatrix (); prevesti (širina/2, višina/2, 0); // prevede koordinatni sistem v sredino zaslona, tako da se vrtenje zgodi ravno v središču rotateZ (radiani (-glavje)); // Zavrti kompas okoli slike Z -os (imgCompass, -960, -540); // Naloži sliko Compass in ko se koordinatni sistem premakne, moramo sliko nastaviti na -960x, -540y (polovica velikosti zaslona) popMatrix (); // Vrne koordinatni sistem nazaj v prvotni položaj slike 0, 0, 0 (imgCompassArrow, 0, 0); // naloži sliko CompassArrow, na katero funkcija rotateZ () ne vpliva zaradi funkcije popMatrix () textSize (30); besedilo ("Naslov:" + naslov, 40, 40); // Natisne vrednost naslova na zaslonu
zamuda (40);
}
// začne brati podatke iz zaporednih vrat
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // prebere podatke iz zaporednih vrat in jih vstavi v spremenljivko "data". naslov = plavajoči (podatki); // Pretvarjanje vrednosti String v vrednost Float}
Upam, da vam bo ta projekt všeč. Če je tako, lahko obiščete tudi mojo spletno stran za bolj kul projekte.
Priporočena:
Dodajanje digitalnega zaslona staremu komunikacijskemu sprejemniku: 6 korakov (s slikami)
Dodajanje digitalnega zaslona staremu komunikacijskemu sprejemniku: Ena od pomanjkljivosti uporabe starejše komunikacijske opreme je dejstvo, da analogni gumb ni zelo natančen. Vedno ugibate o frekvenci, ki jo prejemate. V pasovih AM ali FM to na splošno ni problem, ker običajno
Porazdelitev moči digitalnega avtomata: 9 korakov (s slikami)
Porazdelitev moči digitalnih avtomatov: Ste kdaj izdelali veliko postavitev avtomatov in ugotovili, da avtomobili nimajo enakih zmogljivosti? Ali pa sovražite, ko vaše dirke prekinejo avtomobili, ki se ustavijo zaradi slabih spojev? Ta navodila vam bodo pokazala, kako
Ustvarjanje digitalnega časovnika z uporabo Blynka: 5 korakov
Ustvarjanje digitalnega časovnika z uporabo Blynka: V tem prispevku se učimo, kako začeti z Blynk - platformo IoT, ki je zasnovana tako, da nam poenostavi celoten postopek in deluje tudi z več internetnimi ploščami
Obdelava avdio in digitalnega signala Bluetooth: okvir Arduino: 10 korakov
Obdelava avdio in digitalnega signala Bluetooth: okvir Arduino: povzetek Ko pomislim na Bluetooth, pomislim na glasbo, žal večina mikrokrmilnikov ne more predvajati glasbe prek Bluetootha. Raspberry Pi lahko, a to je računalnik. Želim razviti okvir, ki temelji na Arduinu, za mikrokrmilnike za predvajanje zvoka prek Bluet
Raspberry Pi - Java -senzor digitalnega senzorja zunanje svetlobe BH1715: 4 koraki
Raspberry Pi - BH1715 digitalni senzor zunanje svetlobe Java Vadnica: BH1715 je digitalni senzor zunanje svetlobe z vmesnikom vodila I²C. BH1715 se običajno uporablja za pridobivanje podatkov o svetlobi v okolici za prilagajanje moči osvetlitve LCD in tipkovnice za mobilne naprave. Ta naprava ponuja 16-bitno ločljivost in prilagaja