جدول المحتويات:

مشروع Arduino Digital Compass: 3 خطوات
مشروع Arduino Digital Compass: 3 خطوات

فيديو: مشروع Arduino Digital Compass: 3 خطوات

فيديو: مشروع Arduino Digital Compass: 3 خطوات
فيديو: How To Make Radar With Arduino || Arduino Project. 2024, شهر نوفمبر
Anonim
Image
Image

أهلا! في هذا الدليل ، سترى كيف يمكنك إنشاء بوصلة رقمية باستخدام Arduino و Processing IDE. هذا مشروع Arduino بسيط للغاية ولكنه مثير للاهتمام ورائع المظهر.

يمكنك مشاهدة المثال التوضيحي لهذا البرنامج التعليمي على الفيديو أعلاه. يمكنك دائمًا العثور على مقاطع فيديو أكثر إثارة للاهتمام مثل هذه على قناتي على YouTube بالإضافة إلى العثور على الكثير من مشاريع الإلكترونيات والبرامج التعليمية على موقع الويب الخاص بي ، HowToMechatronics.com

الخطوة 1: الأجزاء المطلوبة

بالنسبة لهذا المشروع ، ستحتاج فقط إلى لوحة Arduino ومقياس مغناطيسي MEMS ، لقياس المجال المغناطيسي للأرض. سأستخدم لوحة الاختراق GY - 80 التي تحتوي على MC5883L 3 - مقياس المغناطيسية.

قبل أن نواصل استخدام الكود المصدري للمشروع ، إذا كنت بحاجة إلى مزيد من التفاصيل حول كيفية عمل مقياس المغناطيسية MEMS وكذلك كيفية الاتصال واستخدام لوحة الاختراق GY - 80 عبر I2C Communication ، يمكنك التحقق من البرامج التعليمية الخاصة بي لذلك.

الخطوة 2: كود مصدر اردوينو

ما نحتاج إلى القيام به أولاً هو تحميل رسم تخطيطي إلى لوحة Arduino الذي سيقرأ البيانات من مقياس المغناطيسية وسيقوم بإرسالها إلى IDE للمعالجة. إليك كود مصدر Arduino:

/ * Arduino Compass * * بواسطة Dejan Nedelkovski ، * www. HowToMechatronics.com * * /

# تضمين // مكتبة I2C Arduino

#define Magnetometer_mX0 0x03

#define Magnetometer_mX1 0x04 #define Magnetometer_mZ0 0x05 #define Magnetometer_mZ1 0x06 # تعريف Magnetometer_mY0 0x07 # تعريف Magnetometer_mY1 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 (مقياس المغناطيسية) ؛ Wire.write (0x02) ؛ // حدد وضع التسجيل Wire.write (0x00) ؛ // وضع القياس المستمر Wire.endTransmission () ؛ }

حلقة فارغة(){

// ---- X-Axis Wire.beginTransmission (مقياس المغناطيسية) ؛ // الإرسال إلى الجهاز Wire.write (Magnetometer_mX1) ؛ Wire.endTransmission () ؛ طلب الأسلاك من (مقياس المغناطيسية ، 1) ؛ إذا (Wire.available () <= 1) {mX0 = Wire.read () ؛ } Wire.beginTransmission (مقياس المغناطيسية) ؛ // الإرسال إلى الجهاز Wire.write (Magnetometer_mX0) ؛ Wire.endTransmission () ؛ طلب الأسلاك من (مقياس المغناطيسية ، 1) ؛ إذا (Wire.available () <= 1) {mX1 = Wire.read () ؛ }

// ---- المحور ص

Wire.beginTransmission (مقياس المغناطيسية) ؛ // الإرسال إلى الجهاز Wire.write (Magnetometer_mY1) ؛ Wire.endTransmission () ؛ طلب الأسلاك من (مقياس المغناطيسية ، 1) ؛ إذا (Wire.available () <= 1) {mY0 = Wire.read () ؛ } Wire.beginTransmission (مقياس المغناطيسية) ؛ // الإرسال إلى الجهاز Wire.write (Magnetometer_mY0) ؛ Wire.endTransmission () ؛ طلب الأسلاك من (مقياس المغناطيسية ، 1) ؛ إذا (Wire.available () <= 1) {mY1 = Wire.read () ؛ } // ---- Z-Axis Wire.beginTransmission (مقياس المغناطيسية) ؛ // الإرسال إلى الجهاز Wire.write (Magnetometer_mZ1) ؛ Wire.endTransmission () ؛ طلب الأسلاك من (مقياس المغناطيسية ، 1) ؛ إذا (Wire.available () <= 1) {mZ0 = Wire.read () ؛ } Wire.beginTransmission (مقياس المغناطيسية) ؛ // الإرسال إلى الجهاز Wire.write (Magnetometer_mZ0) ؛ Wire.endTransmission () ؛ طلب الأسلاك من (مقياس المغناطيسية ، 1) ؛ إذا (Wire.available () <= 1) {mZ1 = Wire.read () ؛ } // ---- المحور السيني mX1 = mX1 << 8 ؛ mX_out = mX0 + mX1 ؛ // البيانات الأولية // من ورقة البيانات: 0.92 mG / digit Xm = mX_out * 0.00092 ؛ // وحدة غاوس // * يتراوح المجال المغناطيسي للأرض من 0.25 إلى 0.65 جاوس ، لذلك هذه هي القيم التي نحتاج إلى الحصول عليها تقريبًا.

// ---- المحور ص

mY1 = mY1 << 8 ؛ mY_out = mY0 + mY1 ؛ ص = mY_out * 0.00092 ؛

// ---- المحور Z

mZ1 = mZ1 <0.073 راد انحراف = 0.073 ؛ العنوان + = الانحراف ؛ // تصحيح وقت التبجيل إذا كان (العنوان <0) العنوان + = 2 * PI ؛

// تصحيح بسبب إضافة زاوية الانحراف

إذا كان (العنوان> 2 * PI) العنوان - = 2 * PI ؛

headDegrees = العنوان * 180 / PI ؛ // العنوان في وحدة الدرجات

// تجانس زاوية الإخراج / مرشح تمرير منخفض

العنوان تمت تصفيته = العنوان تمت تصفيته * 0.85 + العنوانالدرجات * 0.15 ؛

// إرسال قيمة العنوان من خلال المنفذ التسلسلي إلى IDE المعالجة

Serial.println (هيدفينتيرد) ؛

تأخير (50) ؛ }

الخطوة 3: معالجة كود مصدر IDE

بعد أن قمنا بتحميل رسم Arduino السابق ، نحتاج إلى تلقي البيانات في IDE للمعالجة ورسم البوصلة الرقمية. تتكون البوصلة من صورة خلفية ، وصورة ثابتة للسهم ، وصورة دوارة لجسم البوصلة. لذلك تُستخدم قيم المجال المغناطيسي للأرض المحسوبة باستخدام Arduino لتدوير البوصلة.

إليك الكود المصدري لـ 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")؛ background = loadImage ("Background.png") ؛ myPort = مسلسل جديد (هذا ، "COM4" ، 115200) ؛ // يبدأ الاتصال التسلسلي myPort.bufferUntil ('\ n') ؛ }

رسم باطل () {

الصورة (الخلفية ، 0 ، 0) ؛ // تحميل صورة الخلفية pushMatrix () ؛ ترجمة (عرض / 2 ، ارتفاع / 2 ، 0) ؛ // يترجم نظام الإحداثيات إلى وسط الشاشة ، بحيث يحدث الدوران مباشرة في المركز الدوار Z (راديان (- الرأس)) ؛ // يقوم بتدوير البوصلة حول صورة المحور Z - (imgCompass، -960، -540) ؛ // يقوم بتحميل صورة البوصلة ومع تغيير موقع نظام الإحداثيات ، نحتاج إلى ضبط الصورة على -960x ، -540y (نصف حجم الشاشة) popMatrix () ؛ // يجلب نظام الإحداثيات إلى الموضع الأصلي 0 ، 0 ، 0 صورة (imgCompassArrow ، 0 ، 0) ؛ // يقوم بتحميل صورة CompassArrow التي لا تتأثر بوظيفة rotateZ () بسبب وظيفة popMatrix () textSize (30) ؛ نص ("العنوان:" + العنوان ، 40 ، 40) ؛ // يطبع قيمة العنوان على الشاشة

تأخير (40) ؛

}

// يبدأ في قراءة البيانات من المنفذ التسلسلي

باطل serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n')؛ // يقرأ البيانات من المنفذ التسلسلي ويضعها في "بيانات" متغير السلسلة. العنوان = تعويم (بيانات) ؛ // تحويل قيمة السلسلة إلى قيمة تعويم}

أتمنى أن يعجبك هذا المشروع. إذا كان الأمر كذلك ، فيمكنك أيضًا زيارة موقع الويب الخاص بي لمزيد من المشاريع الرائعة.

موصى به: