Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-23 15:10
Përshëndetje! Në këtë udhëzues do të shihni se si mund të bëni një busull dixhitale duke përdorur një Arduino dhe IDE të përpunimit. Ky është një projekt mjaft i thjeshtë, por interesant dhe i lezetshëm Arduino.
Ju mund të shikoni shembullin demo të këtij mësimi në videon e mësipërme. Gjithmonë mund të gjeni video më interesante si kjo në kanalin tim në YouTube, si dhe të gjeni shumë projekte elektronike dhe mësime në faqen time në internet, HowToMechatronics.com
Hapi 1: Pjesët e kërkuara
Për këtë projekt do t'ju duhet vetëm një bord Arduino dhe një magnetometër MEMS, për matjen e fushës magnetike të tokës. Unë do të përdor bordin e thyerjes GY - 80 i cili përmban MC5883L 3 - Aks Magnetometer.
Para se të vazhdojmë me kodin burimor për projektin Nëse keni nevojë për më shumë detaje se si funksionon magnetometri MEMS, si dhe si të lidhni dhe përdorni bordin e prishjes GY - 80 përmes Komunikimit I2C, mund të kontrolloni mësimet e mia të veçanta për këtë.
Hapi 2: Kodi Burimor Arduino
Ajo që duhet të bëjmë së pari është të ngarkojmë një skicë në Bordin Arduino që do të lexojë të dhënat nga magnetometri dhe do t'i dërgojë ato në IDE të Përpunimit. Këtu është Kodi Burimor Arduino:
/ * Arduino Compass * * nga Dejan Nedelkovski, * www. HowToMechatronics.com * */
#include // Biblioteka I2C Arduino
#përcakto Magnetometër_mX0 0x03
#përcaktoni magnetometrin_mX1 0x04 #përcaktoni magnetometrin_mZ0 0x05 #përcaktoni magnetometrin_mZ1 0x06 #përcaktoni magnetometrin_mY0 0x07 #përcaktoni magnetometrin_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;
titulli notues, kreuDegrees, headingFiltruar, declination;
noton Xm, Ym, Zm;
#define Magnetometër 0x1E // Adresa I2C 7bit e HMC5883
void setup () {
// Filloni komunikimin Serial dhe I2C Serial.begin (115200); Wire.begin (); vonesa (100); Wire.beginTransmetimi (Magnetometër); Wire.write (0x02); // Zgjidh regjimin e regjistrimit Wire.write (0x00); // Mënyra e matjes së vazhdueshme Wire.endTransmission (); }
lak void () {
// ---- X-Axis Wire.beginTransmission (Magnetometër); // transmetoni në pajisjen Wire.write (Magnetometer_mX1); Wire.endTransmission (); Tela. Kërkohet Nga (Magnetometër, 1); nëse (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (Magnetometër); // transmetoni në pajisjen Wire.write (Magnetometer_mX0); Wire.endTransmission (); Tela. Kërkohet Nga (Magnetometër, 1); nëse (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Boshti Y
Wire.beginTransmetimi (Magnetometër); // transmetoni në pajisjen Wire.write (Magnetometer_mY1); Wire.endTransmission (); Tela. Kërkohet Nga (Magnetometër, 1); nëse (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (Magnetometër); // transmetoni në pajisjen Wire.write (Magnetometer_mY0); Wire.endTransmission (); Tela. Kërkohet Nga (Magnetometër, 1); nëse (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (Magnetometër); // transmetoni në pajisjen Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Tela. Kërkohet Nga (Magnetometër, 1); nëse (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (Magnetometër); // transmetoni në pajisjen Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Tela. Kërkohet Nga (Magnetometër, 1); nëse (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- Boshti X mX1 = mX1 << 8; mX_out = mX0+mX1; // Të dhëna të papërpunuara // Nga fleta e të dhënave: 0.92 mG/shifra Xm = mX_out*0.00092; // Njësia Gauss //* Fusha magnetike e Tokës varion nga 0.25 në 0.65 Gauss, kështu që këto janë vlerat që duhet të marrim përafërsisht.
// ---- Boshti Y
mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0.00092;
// ---- Boshti Z
mZ1 = mZ1 <0.073 rad deklinacion = 0.073; kreu += rënie; // Korrigjimi kur shenjat respektohen nëse (titulli <0) kreu += 2*PI;
// Korrigjimi për shkak të shtimit të këndit të pjerrësisë
nëse (titulli> 2*PI) titulli -= 2*PI;
titulliDegrees = kreu * 180/PI; // Njësia e titullit në gradë
// Zbutja e këndit të daljes / Filtri me kalim të ulët
headingFiltered = headingFiltered*0.85 + kreuDegrees*0.15;
// Dërgimi i vlerës së titullit përmes Portit Serial në Processing IDE
Serial.println (titulliFiltruar);
vonesë (50); }
Hapi 3: Përpunimi i kodit burimor IDE
Pasi të kemi ngarkuar skicën e mëparshme Arduino, duhet të marrim të dhënat në IDE të përpunimit dhe të vizatojmë busullën dixhitale. Kompasi përbëhet nga një imazh në sfond, një imazh fiks i shigjetës dhe një imazh rrotullues i trupit të busullës. Pra, vlerat për fushën magnetike të tokës të llogaritura me Arduino përdoren për të rrotulluar busullën.
Këtu keni kodin burimor të IDE të përpunimit:
/ * Arduino Compass * * nga Dejan Nedelkovski, * www. HowToMechatronics.com * */ import processing.serial. *; import java.awt.event. KeyEvent; import java.io. IOException;
Seriali myPort;
PImage imgCompass; PImage imgCompassArrow; Sfondi i imazhit;
Të dhënat e vargut = "";
titulli notues;
void setup () {
madhësia (1920, 1080, P3D); qetë (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = Serial i ri (kjo, "COM4", 115200); // fillon komunikimin serik myPort.bufferUntil ('\ n'); }
tërheqje e pavlefshme () {
imazh (sfond, 0, 0); // Ngarkon imazhin e sfondit pushMatrix (); përkthe (gjerësia/2, lartësia/2, 0); // Përkthen sistemin koordinativ në qendër të ekranit, në mënyrë që rrotullimi të ndodhë pikërisht në qendër rrotullohetZ (radianët (-koka)); // Rrotullon busullën rreth Z -Imazhi i Boshtit (imgCompass, -960, -540); // Ngarkon imazhin e busullës dhe ndërsa sistemi i koordinatave zhvendoset ne duhet të vendosim imazhin në -960x, -540y (gjysma e madhësisë së ekranit) popMatrix (); // Sjell sistemi koordinativ është kthyer në pozicionin origjinal 0, 0, 0 imazh (imgCompassArrow, 0, 0); // Ngarkon imazhin CompassArrow i cili nuk ndikohet nga funksioni rotateZ () për shkak të funksionit popMatrix () textSize (30); tekst ("Titulli:" + titulli, 40, 40); // Shtyp vlerën e titullit në ekran
vonesa (40);
}
// fillon të lexojë të dhënat nga Porti Serial
void serialEvent (Seriali myPort) {data = myPort.readStringUntil ('\ n'); // lexon të dhënat nga Porti Serial dhe i vendos në variablin String "data". titulli = noton (të dhënat); // Konvertimi i vlerës String në Vlerë Float}
Shpresoj se do t'ju pëlqejë ky projekt. Nëse është kështu, ju gjithashtu mund të vizitoni faqen time për projekte më interesante.
Recommended:
Mikro: Bit Compass DIY: 6 hapa
Mikro: Bit Compass DIY: Si të kodoni një Micro: Bit busull
Argino Debounce Simple: 4 Hapa
Arduino Simple Debounce: Ky udhëzues ka të bëjë me mënyrën e bërjes së lehtë të heqjes me 2 butona. Të gjitha që ju nevojiten janë njohuri themelore në programimin elektronik dhe arduino. Video:https://youtu.be/Iw6rA0cduWgNëse keni ndonjë pyetje ose problem mund të kontaktoni mua në postën time: iwx
Shërbim Compass jashtëzakonisht themelor, i pakalibruar: 7 hapa
Shërbim Compass jashtëzakonisht themelor, i pakalibruar: Ky është vetëm një udhëzues bazë për një projekt në të cilin po punoj. Ky është i pakalibruar dhe është një prototip shumë themelor i bërë për klasën. Në një udhëzim të mëvonshëm, unë do të tregoj se si ta kalibroj atë. Nuk do të prisja shumë madhështi nga kjo nëse do të isha ti,
Argino Blink Basic: 5 hapa
Arduino Basic Blink: Ky shembull tregon gjënë më të thjeshtë që mund të bëni me një Arduino për të parë daljen fizike: ai ndez dritën LED në bord
Mikro: bit Compass: 9 hapa (me fotografi)
Micro: bit Compass: Këto udhëzime tregojnë se si të përdorni micro: bit për të bërë një busull të thjeshtë dixhitale