תוכן עניינים:

פרויקט מצפן דיגיטלי של ארדואינו: 3 שלבים
פרויקט מצפן דיגיטלי של ארדואינו: 3 שלבים

וִידֵאוֹ: פרויקט מצפן דיגיטלי של ארדואינו: 3 שלבים

וִידֵאוֹ: פרויקט מצפן דיגיטלי של ארדואינו: 3 שלבים
וִידֵאוֹ: Navigator Robot Controlled Phone 1 2024, יולי
Anonim
Image
Image

שלום! במדריך זה תראה כיצד תוכל ליצור מצפן דיגיטלי באמצעות Arduino ו- IDE עיבוד. זהו פרויקט ארדואינו פשוט למדי אך מעניין ומגניב.

אתה יכול לצפות בדוגמא להדגמה של הדרכה זו בסרטון למעלה. אתה תמיד יכול למצוא סרטונים מעניינים יותר כאלה בערוץ היוטיוב שלי, כמו גם למצוא הרבה פרויקטים והדרכות אלקטרוניקה באתר שלי, HowToMechatronics.com

שלב 1: דרושים חלקים

לפרויקט זה תזדקק ללוח ארדואינו ומגנטומטר MEMS למדידת השדה המגנטי של כדור הארץ. אשתמש בלוח הפריצה GY - 80 המכיל את מגנטומטר 3 - ציר MC5883L.

לפני שנמשיך עם קוד המקור לפרויקט אם אתה זקוק לפרטים נוספים כיצד פועל מגנטומטר MEMS וכן כיצד להתחבר ולהשתמש בלוח הפריצה GY - 80 באמצעות תקשורת I2C תוכל לבדוק את ההדרכות הספציפיות שלי לגבי זה.

שלב 2: קוד המקור של Arduino

מה שעלינו לעשות קודם כל הוא להעלות סקיצה ללוח Arduino שיקרא את הנתונים ממגנטומטר והוא ישלח אותם ל- IDE Processing. להלן קוד המקור של ארדואינו:

/ * מצפן ארדואינו * * מאת דג'אן נדלקובסקי, * www. HowToMechatronics.com * */

#include // I2C ספריית Arduino

#מגדיר מגנטומטר_מקס 0 0x03

#מגדיר מגנטומטר_מקס 1 0x04 #מגדיר מגנטומטר_מז 0 0x05 #מגדיר מגנטומטר_מז 1 0x06 #מגדיר מגנטומטר_מי 0 0x07 #מגדיר מגנטומטר_מי -1 0x08

int mX0, mX1, mX_out;

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

צף כותרת, כותרת מעלות, כותרת מסוננת, דחייה;

לצוף Xm, Ym, Zm;

#define Magnetometer 0x1E // I2C כתובת 7bit של HMC5883

הגדרת בטל () {

// אתחל תקשורת סדרתית ו- I2C Serial.begin (115200); Wire.begin (); עיכוב (100); שידור Wire.beginTransmission (Magnetometer); Wire.write (0x02); // בחר מצב רשום Wire.write (0x00); // מצב מדידה רציף Wire.endTransmission (); }

לולאת חלל () {

// ---- X-Axis Wire.beginTransmission (Magnetometer); // לשדר להתקן Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); אם (Wire.available () <= 1) {mX0 = Wire.read (); } שידור Wire.beginTransmission (Magnetometer); // לשדר להתקן Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); אם (Wire.available () <= 1) {mX1 = Wire.read (); }

// ---- ציר Y

שידור Wire.beginTransmission (Magnetometer); // לשדר להתקן Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); אם (Wire.available () <= 1) {mY0 = Wire.read (); } שידור Wire.beginTransmission (Magnetometer); // לשדר להתקן Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); אם (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Z-Axis Wire.beginTransmission (Magnetometer); // לשדר להתקן Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (Magnetometer, 1); אם (Wire.available () <= 1) {mZ0 = Wire.read (); } שידור Wire.beginTransmission (Magnetometer); // לשדר להתקן 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/digit Xm = mX_out*0.00092; // יחידת גאוס //* השדה המגנטי של כדור הארץ נע בין 0.25 ל- 0.65 גאוס, כך שאלו הערכים שעלינו לקבל בערך.

// ---- ציר Y

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

// ---- ציר Z

mZ1 = mZ1 <0.073 rad declination = 0.073; כותרת += דחייה; // תיקון כאשר הסימנים נערצים אם (כותרת <0) כותרת += 2*PI;

// תיקון עקב הוספת זווית הנטייה

if (כותרת> 2*PI) כותרת -= 2*PI;

headingDegrees = כותרת * 180/PI; // הכותרת ביחידת תארים

// החלקת זווית הפלט / מסנן מעבר נמוך

headingFiltered = headingFiltered*0.85 + headingDegrees*0.15;

// שליחת ערך הכותרת דרך הנמל הטורי לעיבוד IDE

Serial.println (headingFiltered);

עיכוב (50); }

שלב 3: עיבוד קוד מקור IDE

לאחר שהעלנו את הסקיצה הקודמת של Arduino עלינו לקבל את הנתונים לתוך IDE עיבוד ולצייר את המצפן הדיגיטלי. המצפן מורכב מתמונת רקע, תמונה קבועה של החץ ותמונה מסתובבת של גוף המצפן. אז הערכים של השדה המגנטי של הארט המחושב עם הארדואינו משמשים לסיבוב המצפן.

להלן קוד המקור של מזהה העיבוד:

/ * מצפן ארדואינו * * מאת דג'אן נדלקובסקי, * www. HowToMechatronics.com * */ import processing.serial. *; יבוא java.awt.event. KeyEvent; יבוא java.io. IOException;

MyPort סידורי;

PImage imgCompass; PImage imgCompassArrow; רקע PImage;

נתוני מחרוזת = "";

כותרת צפה;

הגדרת בטל () {

גודל (1920, 1080, P3D); חלק(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Background.png"); myPort = סידורי חדש (זה, "COM4", 115200); // מתחיל את התקשורת הטורית myPort.bufferUntil ('\ n'); }

צייר חלל () {

תמונה (רקע, 0, 0); // טוען את תמונת הרקע pushMatrix (); תרגם (רוחב/2, גובה/2, 0); // מתרגם את מערכת הקואורדינטות למרכז המסך, כך שהסיבוב יתרחש ממש במרכז rotateZ (radians (-heading)); // מסובב את המצפן סביב תמונת Z -Axis (imgCompass, -960, -540); // טוען את תמונת המצפן וככל שמערכת הקואורדינטות ממוקמת מחדש אנחנו צריכים להגדיר את התמונה ב -960x, -540y (חצי מגודל המסך) popMatrix (); // מערכת הקואורדינטות Brings חוזרת למיקום המקורי 0, 0, 0 image (imgCompassArrow, 0, 0); // טוען את תמונת CompassArrow שאינה מושפעת מהפונקציה rotateZ () בגלל הפונקציה popMatrix () textSize (30); טקסט ("כותרת:" + כותרת, 40, 40); // מדפיסה את ערך הכותרת על המסך

עיכוב (40);

}

// מתחיל לקרוא נתונים מהנמל הסידורי

void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // קורא את הנתונים מהנמל הסידורי ומכניס אותם למשתנה 'נתונים' של משתנה המחרוזת. הכותרת = float (נתונים); // העברת ערך המחרוזת לערך Float}

אני מקווה שתאהבו את הפרויקט הזה. אם זה כך אתה יכול גם לבקר באתר שלי לפרויקטים מגניבים נוספים.

מוּמלָץ: