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

بوصلة رقمية ومكتشف العنوان: 6 خطوات
بوصلة رقمية ومكتشف العنوان: 6 خطوات

فيديو: بوصلة رقمية ومكتشف العنوان: 6 خطوات

فيديو: بوصلة رقمية ومكتشف العنوان: 6 خطوات
فيديو: !!لماذا قال تسلا بأن الأرقام 3 6 و 9 هي مفتاح الكون 2024, يوليو
Anonim
بوصلة رقمية ومكتشف العنوان
بوصلة رقمية ومكتشف العنوان

المؤلفون:

كولان ويلان

أندرو لوفت

بليك جونسون

شكر وتقدير:

أكاديمية كاليفورنيا البحرية

إيفان تشانغ سيو

مقدمة:

أساس هذا المشروع هو بوصلة رقمية مع تتبع العنوان. يتيح ذلك للمستخدم متابعة العنوان عبر مسافات طويلة باستخدام جهاز رقمي. بالعامية ، العنوان هو زاوية تقاس في اتجاه عقارب الساعة من الشمال ، والتي تعتبر صفر درجة ، كما تشير البوصلة. للجهاز وظيفتان رئيسيتان: الأولى هي عرض العنوان الحالي للجهاز على مرجع عرض رقمي ، والثانية هي القدرة على إدخال العنوان الذي يطلبه المستخدم ، والذي سيتم عرضه على حلقة من مصابيح LED أعلى الشاشة. الإسكان البوصلة. يقوم المستخدم بعد ذلك بضبط اتجاه الجهاز المتعلق بمصباح LED المضيء. عند تغيير اتجاه الجهاز ، ينتقل مؤشر LED إلى مركز LED ، مما يشير إلى أنه تم تحديد العنوان الصحيح.

اللوازم:

- DIYmall 6M GPS وحدة

- HiLetgo MPU9250 / 6500 9 محاور 9 DOF 16 بت

- حلقة Adafruit NeoPixel 16

- 4 قطع من MakerFocus 3.7 فولت بطارية ليثيوم قابلة لإعادة الشحن

- لوحة ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo w / Mini-B USB Jack - USB LiIon / شاحن LiPoly - v1

- شاشة TFT LCD مقاس 2.8 بوصة مع لوحة اندلاع تعمل باللمس مع مقبس MicroSD

الخطوة 1: تصميم وظائف المشروع

تصميم وظائف المشروع
تصميم وظائف المشروع

الخطوة الأولى هي فهم المنطق والوظيفة التشغيلية النهائية. يوضح هذا الرسم البياني المنطقي حالات الجهاز الثلاث وحالتين من أجهزة الاستشعار.

الحالة 1: حالة التحميل

تُستخدم حالة التحميل للسماح لـ Arduino Mega باستعادة البيانات من جهازي الاستشعار عند بدء التشغيل. سيعرض الجهاز التحميل على الشاشة ، ويمسح جميع قيم الأرقام على الشاشة ، وستضيء مصابيح LED على حلقة NeoPixel في دائرة.

الحالة 2: وضع البوصلة

في هذه الحالة ، سيعمل الجهاز كبوصلة رقمية. ستضيء حلقة NeoPixel للإشارة إلى اتجاه الشمال فيما يتعلق بتوجيه الجهاز. سيتم أيضًا عرض عنوان الجهاز الحقيقي على شاشة LCD جنبًا إلى جنب مع خط الطول وخط العرض للجهاز. سيكون أيضًا ضمن هذه الحالة أن المستخدم سيكون قادرًا على إدخال عنوان المستخدم ليتم عرضه في الحالة 3.

الحالة 3: وضع تتبع العنوان

في هذه الحالة ، سيساعد الجهاز الآن المستخدم على أن يصبح ثابتًا على العنوان الذي يريده. سيعرض الجهاز الآن عنوان الأجهزة ويتجه المستخدمون على شاشة LCD جنبًا إلى جنب مع بيانات خطوط الطول والعرض. ستضيء حلقة NeoPixel الآن للإشارة إلى اتجاه المستخدمين فيما يتعلق بتوجيه الأجهزة.

داخل كل من الولاية 2 والحالة 3 ، توجد حالتان من أجهزة الاستشعار تسمح حالات المستشعر هذه للجهاز بسحب البيانات من المستشعر الذي يوفر البيانات الأكثر دقة اعتمادًا على الحالة التشغيلية للجهاز.

حالة المستشعر 1: MPU

إذا كان الجهاز لا يتحرك ، فسيتم سحب بيانات العنوان من وحدة MPU لأنها البيانات الأكثر دقة عندما لا يتحرك الجهاز.

حالة المستشعر 2: GPS

إذا كان الجهاز يتحرك ، فسيتم سحب بيانات العنوان من شريحة GPS حيث إنها البيانات الأكثر دقة في هذه الحالة.

يمكن للجهاز التبديل بين هذه إلى حالات المستشعر في أي وقت لمراعاة ظروف استخدام الوحدة المتغيرة. هذا مهم لتشغيل الجهاز حيث أن كلا المستشعرين المستخدمين في الجهاز لهما ظروف تؤثر على دقة البيانات التي يقدمونها. في حالة MPU ، يمكن أن تتأثر الشريحة بسهولة بالمجالات المغناطيسية المحلية التي تسببها السيارات ومواد البناء المعدنية في المباني. وبالتالي يتم استخدام شريحة GPS يمكن أن توفر عنوانًا أكثر دقة بكثير لا تتأثر بنفس التأثيرات. ومع ذلك ، لا يمكن لنظام تحديد المواقع العالمي (GPS) توفير بيانات العنوان إلا عند التحرك لأنه يحسب العنوان باستخدام التغيير في بيانات خطوط الطول والعرض. لذلك ، تكمل الرقائق بعضها البعض ، وباستخدام حالتين من أجهزة الاستشعار ، توفر وظائف الجهاز الأكثر دقة وموثوقية.

الخطوة 2: الإعداد ومخطط الأسلاك

الإعداد ومخطط الأسلاك
الإعداد ومخطط الأسلاك
الإعداد ومخطط الأسلاك
الإعداد ومخطط الأسلاك
الإعداد ومخطط الأسلاك
الإعداد ومخطط الأسلاك

يستخدم المشروع لوحة استنساخ Arduino Mega مماثلة للوحة أعلاه. سيتم توصيل جميع مكونات المشروع بهذه اللوحة. أعلاه هي مخططات تفصيلية لكيفية توصيل مكونات هذا المشروع. لا تحتوي الأزرار على دارة مفصلة حيث يمكن إعدادها بعدة طرق. في هذا المشروع ، يستخدمون المقاوم المنسدل 100K وزرًا بسيطًا لإرسال إشارة 3 فولت إلى الدبوس المخصص لها.

الخطوة 3: اختبار المكونات والكود الأساسي

سيقوم المشروع بسحب البيانات من كل من MPU و GPS رقاقة كما هو موضح سابقًا. تم إرفاق ثلاثة رموز تتيح اختبار البيانات من MPU و GPS و MPU مع شاشة للتحقق من وظائف الأجزاء. من المهم تشغيل المكونات في هذه المرحلة لأن الكود منفصل لكل شريحة ويمكن معالجة أي مشكلات دون خوف من التسبب في أخطاء غير متوقعة في الكود النهائي.

المكتبات المطلوبة:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. h

Adafruit_NeoPixel.h

MPU9250.h

يمكن العثور على كل هذه من خلال البحث في العناوين أعلاه. لن أقوم بنشر الروابط نظرًا لوجود العديد من نسخ هذه المكتبات من مصادر متعددة والالتزام بمعيار المجتمع المتمثل في الارتباط بالأصول فقط وسأسمح لك بالعثور عليها بنفسك.

الخطوة 4: معايرة MPU

معايرة MPU
معايرة MPU

تم تقسيم العنوان الموجود عبر MPU في الولاية 2 والدولة 3 إلى أربعة أرباع. كان هذا ضروريًا لأن طريقتنا في المعايرة تتطلب إيجاد الحد الأدنى والأقصى للمقدار من مقياس المغناطيسية على طول محوره x و y. تم ذلك من خلال تدوير الجهاز بشكل عشوائي حول محاوره الثلاثة ، خالٍ من أي مجالات كهرومغناطيسية مهمة غير تلك الموجودة في الأرض. أخذنا بعد ذلك القيمتين الدنيا والقصوى على محوري x و y وعوضناهما في معادلة قياس من أجل تقييد المقدار بين قيمتي سالب واحد وواحد. في الشكل أعلاه ، BigX و BigY هي القيم القصوى لبيانات مقياس المغناطيسية على طول المحور x و y على التوالي ، LittleX و LittleY هما القيم الدنيا لبيانات مقياس المغناطيسية على طول المحور x و y على التوالي ، IMU.getMagX_uT () و IMU.getMagY_uT () هي القيم التي يتم سحبها من مقياس المغناطيسية في أي وقت على طول المحور x و y على التوالي ، و Mx و My هي القيم الجديدة التي تم قياسها لحساب العنوان.

الخطوة 5: الكود النهائي

الكود النهائي
الكود النهائي
الكود النهائي
الكود النهائي
الكود النهائي
الكود النهائي
الكود النهائي
الكود النهائي

الخطوة الأخيرة هي إنشاء الكود النهائي. لقد أرفقت نسخة من الكود النهائي للمشروع. داخل الملاحظات تم إجراؤها للمساعدة في التنقل في التعليمات البرمجية. كان التحدي الأكبر في هذا القسم هو جعل الأرباع تعمل بشكل صحيح. ثبت أن تنفيذ الأرباع كان أكثر إرهاقًا وتحديًا للمنطق مما كنا نتوقعه. قمنا في البداية بتطبيق arctan الأساسي (My / Mx) ثم قمنا بتحويلها من راديان إلى درجات ، حيث أن إخراج Arduino بالراديان افتراضيًا. ومع ذلك ، فإن الربع الوحيد الذي نجح فيه هذا كان من 90 درجة إلى 180 درجة ، مما أعطانا ناتجًا سالبًا وانتهى بنا الأمر إلى الربع الثالث. كان حل هذا هو أخذ القيمة المطلقة ، لأنها لا تزال تتزايد بشكل صحيح. تم بعد ذلك طرح هذه القيمة من 360 لإضاءة مصباح NeoPixel LED الصحيح في الحالة 2 وتم استخدام عملية حسابية مماثلة في الحالة 3 بناءً على ما إذا كان العنوان أكبر أو أصغر من عنوان إدخال المستخدم ، وكلاهما يمكن رؤيته في رمز أعلاه. في الأشكال أعلاه ، يتوافق العنوان مع ضوء NeoPixel الذي سيضيء بناءً على الفرق بين عنوان الجهاز والانحراف عن الشمال في حالة الحالة 2 وعن عنوان المستخدم. في هذه الحالة ، 90 إلى 180 درجة تقابل الربع الثالث. في كلتا الحالتين ، يتسبب tft.print في قراءة الشاشة لتوجيه الجهاز من الشمال.

بالنسبة للأرباع الثلاثة الأخرى ، أدى تنفيذ arctan (My / Mx) إلى انعكاس الزيادة أثناء تدوير الجهاز ، أي أن زاوية العنوان ستعد تنازليًا عندما كان من المفترض أن يتم العد لأعلى والعكس صحيح. كان حل هذه المشكلة هو قلب قوس ظل الزاوية إلى شكل أركتان (Mx / My). في حين أن هذا أدى إلى حل الانعكاس المتزايد ، إلا أنه لم يقدم العنوان الصحيح للجهاز ، حيث تم تشغيل الأرباع. كان الإصلاح البسيط لهذا هو إضافة تحول بناءً على الربع المقابل. يمكن ملاحظة ذلك في الأشكال التالية ، والتي هي مرة أخرى أجزاء من التعليمات البرمجية من الدولتين 2 و 3 من كل ربع.

تم تنفيذ أول عبارة if إذا كان العنوان المحسوب بواسطة معادلة MPU أكبر من عنوان المستخدم. في ظل هذا الشرط ، تتم إضافة عنوان إدخال المستخدم إلى عنوان الجهاز ويتم طرح القيمة المقابلة من 360. إذا تم تنفيذ عبارة else ، فسيتم طرح معادلة عنوان MPU من عنوان إدخال المستخدم. تم تنفيذ هذه الشروط ليس فقط للحصول على قيمة دقيقة لـ NeoPixel ، ولكن لتجنب الحصول على قيمة خارج النطاق المقبول ، والذي يتراوح من 0 إلى 359 درجة.

موصى به: