ዝርዝር ሁኔታ:

የአርዱዲኖ ዲጂታል ኮምፓስ ፕሮጀክት 3 ደረጃዎች
የአርዱዲኖ ዲጂታል ኮምፓስ ፕሮጀክት 3 ደረጃዎች

ቪዲዮ: የአርዱዲኖ ዲጂታል ኮምፓስ ፕሮጀክት 3 ደረጃዎች

ቪዲዮ: የአርዱዲኖ ዲጂታል ኮምፓስ ፕሮጀክት 3 ደረጃዎች
ቪዲዮ: በ30 ቀን እራስን መለወጥ Change Yourself in 30 Days 2024, ህዳር
Anonim
Image
Image

ሰላም! በዚህ አስተማሪ ውስጥ አርዱዲኖን እና የሂደቱን አይዲኢ በመጠቀም እንዴት ዲጂታል ኮምፓስ ማድረግ እንደሚችሉ ያያሉ። ይህ በጣም ቀላል ግን አስደሳች እና አሪፍ የሚመስል የአርዱዲኖ ፕሮጀክት ነው።

ከላይ ባለው ቪዲዮ ላይ የዚህን ትምህርት ማሳያ ምሳሌ ማየት ይችላሉ። በ YouTube ጣቢያዬ ላይ እንደዚህ ያሉ የበለጠ አስደሳች ቪዲዮዎችን ሁል ጊዜ ማግኘት ይችላሉ እንዲሁም ብዙ የኤሌክትሮኒክስ ፕሮጄክቶችን እና ትምህርቶችን በድር ጣቢያዬ ፣ HowToMechatronics.com ላይ ማግኘት ይችላሉ።

ደረጃ 1: ክፍሎች ያስፈልጋሉ

ለዚህ ፕሮጀክት የምድር መግነጢሳዊ መስክን ለመለካት የአርዱዲኖ ቦርድ እና የ MEMS ማግኔትሜትር ብቻ ያስፈልግዎታል። MC5883L 3 - Axis Magnetometer የያዘውን GY - 80 breakout board እጠቀማለሁ።

ለፕሮጀክቱ የምንጭ ኮድ ከመቀጠላችን በፊት የ MEMS ማግኔቶሜትር እንዴት እንደሚሠራ እንዲሁም GY - 80 የመለያ ሰሌዳ በ I2C ግንኙነት በኩል እንዴት እንደሚገናኝ እና እንደሚጠቀም ተጨማሪ ዝርዝሮችን ከፈለጉ ለዚያ የእኔን ልዩ ትምህርቶች መመርመር ይችላሉ።

ደረጃ 2 - የአርዱዲኖ ምንጭ ኮድ

መጀመሪያ ማድረግ ያለብን መረጃውን ከማግኔትቶሜትር የሚያነብ እና ወደ ፕሮሰሲንግ አይዲ (IDE) ይልካል ወደ አርዱinoኖ ቦርድ ስዕል መስቀል ነው። የአርዱዲኖ ምንጭ ኮድ እዚህ አለ

/ * Arduino Compass * * በ Dejan Nedelkovski ፣ * www. HowToMechatronics.com * */

#ያካትቱ // I2C Arduino Library

#መግነጢሳዊው_mX0 0x03

#መግነጢሳዊ_mX1 0x04 #መግነጢሳዊ_mZ0 0x05 #መግነጢሳዊ_mZ1 0x06 #መግነጢሳዊ_mY0 0x07 #መግነጢሳዊ_mY1 0x08

int mX0 ፣ mX1 ፣ mX_out;

int mY0 ፣ mY1 ፣ mY_out; int mZ0 ፣ mZ1 ፣ mZ_out;

ተንሳፋፊ ርዕስ ፣ ርዕስ ዲግሪዎች ፣ ርዕስ ማጣራት ፣ መቀነስ

ተንሳፈፈ ኤክስ ፣ ኢም ፣ ዚም;

#መግለፅ መግነጢሳዊ 0x1E // I2C 7bit አድራሻ የ HMC5883

ባዶነት ማዋቀር () {

// ተከታታይ እና የ I2C ግንኙነቶችን Serial.begin (115200) ያስጀምሩ። Wire.begin (); መዘግየት (100); Wire.begin ማስተላለፊያ (ማግኔትሜትር); Wire.write (0x02); // ሞድ ምዝግብ ይምረጡ Wire.write (0x00); // ቀጣይ የመለኪያ ሁኔታ Wire.endTransmission (); }

ባዶነት loop () {

// ---- X-Axis Wire.begin ማስተላለፊያ (ማግኔትሜትር); // ወደ መሣሪያ Wire.write (Magnetometer_mX1) ያስተላልፉ ፤ Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); ከሆነ (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.begin ማስተላለፊያ (ማግኔትሜትር); // ወደ መሣሪያ Wire.write (Magnetometer_mX0) ያስተላልፉ ፤ Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); ከሆነ (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- Y-Axis

Wire.begin ማስተላለፊያ (ማግኔትሜትር); // ወደ መሣሪያ Wire.write (Magnetometer_mY1) ያስተላልፉ ፤ Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); ከሆነ (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.begin ማስተላለፊያ (ማግኔትሜትር); // ወደ መሣሪያ Wire.write (Magnetometer_mY0) ያስተላልፉ ፤ Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); ከሆነ (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.begin ማስተላለፊያ (ማግኔትሜትር); // ወደ መሣሪያ Wire.write (Magnetometer_mZ1) ያስተላልፉ ፤ Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); ከሆነ (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.begin ማስተላለፊያ (ማግኔትሜትር); // ወደ መሣሪያ Wire.write (Magnetometer_mZ0) ያስተላልፉ ፤ Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); ከሆነ (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- X-Axis mX1 = mX1 << 8; mX_out = mX0+mX1; // ጥሬ ውሂብ // ከውሂብ ሉህ 0.92 mG/አሃዝ Xm = mX_out*0.00092; // የ Gauss አሃድ //* የምድር መግነጢሳዊ መስክ ከ 0.25 እስከ 0.65 ጋውስ ይደርሳል ፣ ስለዚህ እነዚህ በግምት ማግኘት ያለብን እሴቶች ናቸው።

// ---- Y-Axis

mY1 = mY1 << 8; mY_out = mY0+mY1; Ym = mY_out*0.00092;

// ---- ዘ-አክሲዮን

mZ1 = mZ1 <0.073 rad declination = 0.073; ርዕስ += መቀነስ; // (ርዕስ <0) ርዕስ += 2*PI ከሆነ ምልክቶች በሚከበሩበት ጊዜ ማረም።

// የመቀነስ አንግል በመጨመር ምክንያት ማረም

ከሆነ (ርዕስ> 2*PI) ርዕስ -= 2*PI;

titleDegrees = ርዕስ * 180/PI; // በዲግሪዎች ክፍል ውስጥ ያለው ርዕስ

// የውጤቱን ማእዘን / ዝቅተኛ ማለፊያ ማጣሪያን ማለስለስ

ርዕስFiltered = ርዕስFiltered*0.85 + ርዕስ ደረጃዎች*0.15;

// የርዕስ እሴቱን በ Serial Port በኩል ወደ IDE ማቀናበር

Serial.println (ርዕስ ተጣራ);

መዘግየት (50); }

ደረጃ 3 ፦ የ IDE ምንጭ ኮድ ማስኬድ

ቀዳሚውን የአርዲኖን ንድፍ ከሰቀልን በኋላ ውሂቡን ወደ ማቀነባበሪያ IDE መቀበል እና ዲጂታል ኮምፓስን መሳል አለብን። ኮምፓሱ የጀርባ ምስል ፣ የቀስት ቋሚ ምስል እና የኮምፓሱ አካል የሚሽከረከር ምስል የተዋቀረ ነው። ስለዚህ ከአርዱዲኖ ጋር የተሰላው የምድር መግነጢሳዊ መስክ እሴቶች ኮምፓሱን ለማሽከርከር ያገለግላሉ።

የሂደቱ IDE ምንጭ ኮድ እዚህ አለ -

/ * Arduino Compass * * በ Dejan Nedelkovski ፣ * www. HowToMechatronics.com * */ import processing.serial. *; አስመጪ java.awt.event. KeyEvent; ማስመጣት java.io. IOException;

ተከታታይ myPort;

PImage imgCompass; PImage imgCompassArrow; የፎቶግራፍ ዳራ;

ሕብረቁምፊ ውሂብ = "";

ተንሳፋፊ ርዕስ;

ባዶነት ማዋቀር () {

መጠን (1920 ፣ 1080 ፣ P3D); ለስላሳ (); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); ዳራ = loadImage ("Background.png"); myPort = አዲስ ተከታታይ (ይህ ፣ “COM4” ፣ 115200); // ተከታታይ ግንኙነቱን ይጀምራል myPort.bufferUntil ('\ n'); }

ባዶ ባዶ ()

ምስል (ዳራ ፣ 0 ፣ 0); // የበስተጀርባውን ምስል ይጭናል ማትሪክስ (); መተርጎም (ስፋት/2 ፣ ቁመት/2 ፣ 0); // ማዞሪያው በማዕከሉ rotateZ (ራዲያን (ራስጌ)) ውስጥ በትክክል እንዲከሰት የማስተባበር ስርዓቱን በማያ ገጹ መሃል ላይ ይተረጉመዋል ፤ // ኮምፓሱን በ Z -Axis ምስል (imgCompass ፣ -960 ፣ -540) ዙሪያ ያሽከረክራል ፤ // የኮምፓሱን ምስል ይጭናል እና አስተባባሪ ስርዓቱ ወደ ሌላ ቦታ ሲዛወር ምስሉን በ -960x ፣ -540y (ግማሽ ማያ መጠን) ፖፕ ማትሪክስ () ማዘጋጀት ያስፈልገናል። // የአስተባባሪ ስርዓት ያመጣል ወደ መጀመሪያው ቦታ 0 ፣ 0 ፣ 0 ምስል (imgCompassArrow ፣ 0 ፣ 0)። // በፖፕ ማትሪክስ () ተግባር ጽሑፍ መጠን (30) ምክንያት በ rotateZ () ተግባር የማይጎዳውን የ CompassArrow ምስል ይጭናል። ጽሑፍ ("ርዕስ:" + ርዕስ ፣ 40 ፣ 40); // በማያ ገጹ ላይ ያለውን የርዕስ እሴት ያትማል

መዘግየት (40);

}

// መረጃን ከሲሪያል ወደብ ማንበብ ይጀምራል

ባዶነት serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n') ፤ // ውሂቡን ከሴሪያል ወደብ ያነብና ወደ ሕብረቁምፊው ተለዋዋጭ "ውሂብ" ውስጥ ያስቀምጠዋል። ርዕስ = ተንሳፋፊ (መረጃ); // የሕብረቁምፊውን እሴት ወደ ተንሳፋፊ እሴት መለወጥ}

ይህንን ፕሮጀክት እንደወደዱት ተስፋ አደርጋለሁ። እንደዚያ ከሆነ ለተጨማሪ አሪፍ ፕሮጄክቶች የእኔን ድር ጣቢያ መጎብኘት ይችላሉ።

የሚመከር: