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

مقياس اردوينو لشريط الغلاف الجوي / عرض MS5611 GY63 GY86: 4 خطوات (بالصور)
مقياس اردوينو لشريط الغلاف الجوي / عرض MS5611 GY63 GY86: 4 خطوات (بالصور)

فيديو: مقياس اردوينو لشريط الغلاف الجوي / عرض MS5611 GY63 GY86: 4 خطوات (بالصور)

فيديو: مقياس اردوينو لشريط الغلاف الجوي / عرض MS5611 GY63 GY86: 4 خطوات (بالصور)
فيديو: محاكاة انفجار نووي 😳💔 2024, شهر نوفمبر
Anonim
مقياس اردوينو لشريط الغلاف الجوي / عرض MS5611 GY63 GY86
مقياس اردوينو لشريط الغلاف الجوي / عرض MS5611 GY63 GY86

هذا حقًا مقياس الضغط الجوي / مقياس الارتفاع ولكنك سترى سبب العنوان من خلال النظر إلى الفيديو.

يوفر مستشعر الضغط MS5611 الموجود في لوحتي الانهيار Arduino GY63 و GY86 أداءً مذهلاً. في يوم هادئ ، سيقيس طولك إلى حدود 0.2 متر. هذا هو قياس المسافة من رأسك إلى الفضاء الخارجي بشكل فعال وطرحها من مسافة قدميك إلى الفضاء الخارجي (عن طريق قياس الضغط - أي وزن الهواء أعلاه). يحتوي هذا الجهاز المذهل على نطاق يقيس ارتفاع إيفرست بشكل مريح - ويمكن أيضًا قياسه حتى بضع بوصات.

كان الهدف من هذا المشروع هو: مشروع مدارس ، ومثال على تعديل كود Arduino ومكان بداية جيد للاستكشاف باستخدام مستشعر MS5611. هناك الكثير من أسئلة المنتدى من أولئك الذين يواجهون صعوبات مع هذا المستشعر. النهج هنا يجعل استخدامه بسيطًا جدًا. بعد القيام بهذا المشروع ستكون مجهزًا جيدًا لتطوير تطبيقات أخرى متعلقة بالضغط.

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

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

لاحظ أن لوحة GY63 تحتوي فقط على مستشعر الضغط MS5611. يُطلق على GY86 لوحة 10 درجات من الحرية وتتضمن أيضًا مقياس تسارع ثلاثي المحاور و 3 محاور جيروسكوبية ومقياس مغناطيسي ثلاثي المحاور مقابل بضعة دولارات إضافية.

سوف تحتاج:

1. Arduino UNO (أو غيره مع pinout القياسي) وكابل USB الخاص به

2. لوحة اندلاع GY63 أو GY86

3. 4 دوبونت يقود ذكر - أنثى - أو سلك توصيل

4. درع لوحة مفاتيح اردوينو LCD

5. بطارية 9V والرصاص

6. شريط مقبس 2.54 مم (اختياري لكن موصى به)

تحضير

قم بتنزيل Arduino IDE (بيئة التطوير المتكاملة) من:

بعض القطع الفنية للفائدة

يقدم MS5611 أدائه الرائع من خلال حساب متوسط عدد كبير من القياسات. يمكنه إجراء 4096 3 بايت (24 بت) قياسات تناظرية في 8 مللي ثانية فقط وإعطاء متوسط القيمة. يجب أن يقيس كل من الضغط ودرجة الحرارة بحيث يمكن تصحيح بيانات الضغط لدرجة الحرارة الداخلية. ومن ثم يمكن أن تقدم حوالي 60 زوجًا من قراءات الضغط ودرجة الحرارة في الثانية.

ورقة البيانات متاحة على:

الاتصالات عبر I2C. لذلك يمكن لمستشعرات I2C الأخرى مشاركة الحافلة (كما هو الحال على لوحة GY86 10DOF حيث توجد جميع الرقائق على I2C).

الخطوة 1: احصل على مكتبة MS5611

تستخدم العديد من مستشعرات Arduino مكتبة قياسية مضمنة مع Arduino IDE أو مزودة بملف مضغوط به مكتبة يمكن تثبيتها بسهولة. لا يكون هذا هو الحال بالنسبة لأجهزة الاستشعار MS5611. ومع ذلك ، تم العثور على بحث: https://github.com/gronat/MS5611 يحتوي على مكتبة لـ MS5611 ، بما في ذلك إجراء تصحيح درجة الحرارة.

الخيار 1

انتقل إلى موقع الويب أعلاه ، وانقر على "استنساخ أو تنزيل" وحدد "تنزيل ZIP". يجب أن يسلم هذا MS5611-master.zip إلى دليل التنزيلات. الآن ، إذا كنت ترغب في ذلك ، انقله إلى مجلد حيث يمكنك العثور عليه في المستقبل. أستخدم دليلًا يسمى "البيانات" مضافًا إلى مجلدات Arduino الخاصة بي.

لسوء الحظ ، لا يتضمن ملف.zip الذي تم تنزيله أي نماذج تخطيطية وسيكون من الجيد إضافة المكتبة والأمثلة إلى Arduino IDE. يوجد مثال أدنى في ملف README.md يمكن نسخه ولصقه في رسم تخطيطي وحفظه. هذه طريقة واحدة للمضي قدمًا.

الخيار 2

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

قم بتنزيل الملف المضغوط أدناه. انقل هذا إلى مجلد أفضل إذا كنت ترغب في ذلك.

ابدأ تشغيل Arduino IDE. انقر فوق رسم> تضمين مكتبة> إضافة ملف مضغوط وحدد الملف. أعد تشغيل IDE. سيتم الآن تثبيت مكتبة IDE بالإضافة إلى جميع الأمثلة الموضحة هنا. تحقق من خلال النقر فوق ملف> أمثلة >> MS5611-master. يجب أن يتم سرد ثلاثة اسكتشات.

الخطوة 2: قم بتوصيل المستشعر بـ Arduino والاختبار

قم بتوصيل المستشعر بـ Arduino والاختبار
قم بتوصيل المستشعر بـ Arduino والاختبار
قم بتوصيل المستشعر بـ Arduino والاختبار
قم بتوصيل المستشعر بـ Arduino والاختبار

عادةً ما تأتي لوحات GY63 / GY86 برؤوس ولكن غير ملحومة. لذا ، فمن اختيارك إما لحام الرؤوس في مكانها واستخدام خيوط دوبونت من الذكور والإناث ، أو (كما قررت) يؤدي اللحام مباشرة إلى اللوحة وإضافة دبابيس إلى السلك لتوصيله بـ Arduino. يكون الخيار الأخير أفضل إذا كنت تعتقد أنك قد ترغب في لحام اللوحة في مشروع لاحقًا. السابق أفضل إذا كنت تريد استخدام اللوحة للتجريب. فك الخيوط أسهل بكثير من رأس الدبوس.

التوصيلات المطلوبة هي:

GY63 / GY86 اردوينو

VCC - 5 فولت Power GND - GND Ground SCL - ساعة A5 I2C> SDA - A4 I2C data

قم بتوصيل لوحة المستشعر بـ Arduino كما هو مذكور أعلاه وقم بتوصيل Arduino بجهاز الكمبيوتر / الكمبيوتر المحمول عبر سلك USB الخاص به. قم أيضًا بتغطية المستشعر ببعض المواد غير الشفافة / السوداء. المستشعر حساس للضوء (كما هو الحال بالنسبة لمعظم هذا النوع من أجهزة الاستشعار).

ابدأ تشغيل Arduino IDE. انقر:

ملف> أمثلة >> MS5611-master> MS5611data2serial.

سيظهر مثيل جديد من IDE مع الرسم التخطيطي. انقر فوق الزر تحميل (السهم الأيمن).

ابدأ بعد ذلك الرسام التسلسلي - انقر فوق Tools> Serial Plotter وإذا لزم الأمر ، اضبط الباود على 9600. البيانات التي يتم إرسالها هي الضغط في باسكال. بعد ثانية أو نحو ذلك ، سيتم إعادة القياس ورفع المستشعر وخفضه بمقدار 0.3 متر ، يجب أن يظهر على أنه خفض ورفع الأثر (الارتفاع الأدنى هو ضغط أعلى).

البيانات بها بعض الضوضاء. انظر المؤامرة الأولى أعلاه. يمكن تنعيم هذا باستخدام مرشح رقمي (أداة مفيدة حقًا).

معادلة المرشح هي:

القيمة = القيمة + K (قيمة جديدة)

حيث "القيمة" هي البيانات التي تمت تصفيتها ، و "الجديد" هي أحدث البيانات التي تم قياسها. إذا كان K = 1 فلا يوجد تصفية. بالنسبة للقيم المنخفضة لـ K ، يتم تسوية البيانات باستخدام ثابت زمني لـ T / K حيث T هو الوقت بين العينات. هنا T تساوي حوالي 17 مللي ثانية ، لذا فإن القيمة 0.1 تعطي ثابتًا زمنيًا يبلغ 170 مللي ثانية أو حوالي 1 / 6s.

يمكن إضافة الفلتر من خلال:

أضف متغيرًا للبيانات التي تمت تصفيتها قبل الإعداد ():

تعويم مصفى = 0 ؛

ثم أضف معادلة المرشح بعد الضغط =…. خط.

مفلترة = مصفاة + 0.1 * (مصفاة بالضغط) ؛

إنها لفكرة جيدة تهيئة القيمة التي تمت تصفيتها إلى القراءة الأولى. لذا أضف عبارة "if" حول السطر أعلاه بحيث تبدو كما يلي:

إذا (تم التصفية! = 0) {

مفلترة = مصفاة + 0.1 * (مصفاة بالضغط) ؛ } وإلا {مصفاة = ضغط؛ // القراءة الأولى لذلك تم التصفية من القراءة}

الاختبار "! =" هو "لا يساوي". لذلك إذا كانت "المصفاة" لا تساوي 0 ، يتم تنفيذ معادلة المرشح ولكن إذا كانت كذلك ، يتم تعيينها على قراءة الضغط.

أخيرًا ، نحتاج إلى تغيير "الضغط" إلى "التصفية" في عبارة Serial.println حتى نرى القيمة التي تمت تصفيتها.

يتم تحقيق أفضل تعلم عن طريق إجراء التغييرات المذكورة أعلاه يدويًا. ومع ذلك فقد قمت بتضمينها في المثال MS5611data2serialWfilter. لذلك إذا كانت هناك مشاكل فيمكن تحميل المثال.

الآن قم بتحميل الكود إلى Arduino وشاهد التحسن. انظر الرسم الثاني أعلاه ولاحظ أن المقياس Y يتم توسيعه بمقدار x2.

جرب قيمة أقل لثابت المرشح ، قل 0.02 بدلاً من 0.1 ، وشاهد الفرق. البيانات أكثر سلاسة ولكن مع استجابة أبطأ. هذا حل وسط يجب البحث عنه عند استخدام هذا المرشح البسيط. الخاصية هي نفسها لمرشح RC (المقاومة والسعة) المستخدم على نطاق واسع في الدوائر الإلكترونية.

الخطوة 3: اجعلها قائمة بذاتها

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

مع درع LCD على Arduino ، يجب توصيل المستشعر بدرع LCD. لسوء الحظ ، تأتي دروع LCD عادةً بدون المقابس المناسبة. لذا فإن الخيارات هي إجراء اتصالات لحام أو الحصول على بعض شرائح المقبس. شريط المقبس متاح على موقع ئي باي ليس أكثر بكثير من تكلفة البريد. قم بالبحث على "شريط مقبس 2.54 مم" وابحث عن تلك التي تشبه تلك الموجودة في Arduino. تأتي هذه عادة بطول 36 أو 40 دبوسًا. أود أن أتجنب الدبوس المخروطي لأنه ليس عميقًا بما يكفي لخيوط دوبونت القياسية.

يجب قطع شريط المقبس بالطول ويجب أن يتم القطع في نفس مكان الدبوس. لذلك بالنسبة لشريط 6 دبابيس - قم بإزالة الدبوس السابع ببعض الكماشة الدقيقة ، ثم قصه في ذلك المكان باستخدام منشار صغير. أقوم برفع النهايات لجعلها نظيفة.

تأكد من عدم وجود جسور لحام عند لحامها على السبورة.

مع القرار المناسب بشأن توصيل المستشعر ، قم بتوصيل واقي LCD في Arduino وقم بتوصيل المستشعر بنفس المسامير - ولكن الآن على درع LCD.

قم أيضًا بتجهيز البطارية والرصاص. لقد صنعت الرصاص الخاص بي من أجزاء في حاوية الخردة الخاصة بي ولكنها متوفرة أيضًا على موقع ئي باي - بما في ذلك خيار رائع يتضمن صندوق بطارية ومفتاح. ابحث عن "PP3 2.1mm lead".

الاستهلاك الحالي حوالي 80ma. ومن ثم ، إذا كنت تريد التشغيل لأكثر من بضع دقائق ، ففكر في بطارية 9 فولت أكبر من بطارية PP3.

الخطوة 4: أضف رمزًا للارتفاع وشاشة LCD

Image
Image

نحتاج إلى المزيد من الترميز لتحويل الضغط إلى ارتفاع وقيادة العرض.

في بداية الرسم ، أضف مكتبة العرض وأخبر هذا بالدبابيس المستخدمة:

#يشمل

// تهيئة المكتبة بأرقام دبابيس الواجهة LiquidCrystal LCD (8 ، 9 ، 4 ، 5 ، 6 ، 7) ؛

بعد ذلك ، نحتاج إلى بعض المتغيرات ووظيفة لقراءة أزرار لوحة المفاتيح. هذه كلها متصلة بمدخل تناظري A0. يعطي كل زر جهدًا مختلفًا لـ A0. وجد البحث عن "كود أزرار حماية اردوينو LCD" بعض الرموز الجيدة في:

www.dfrobot.com/wiki/index.php/Arduino_LCD_KeyPad_Shield_(SKU:_DFR0009)#Sample_Code

أضف هذا الرمز قبل الإعداد ():

// تحديد بعض القيم المستخدمة من قبل اللوحة والأزرار

int lcd_key = 0 ؛ int adc_key_in = 0 ؛ #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // قراءة الأزرار int read_LCD_buttons () {adc_key_in = analogRead (0) ؛ // اقرأ القيمة من المستشعر // تتمركز الأزرار الخاصة بي عند القراءة في هذه القيم: 0 ، 144 ، 329 ، 504 ، 741 // نضيف 50 تقريبًا إلى هذه القيم ونتحقق لمعرفة ما إذا كنا قريبين إذا (adc_key_in> 1000) إرجاع btnNONE ؛ // لقد جعلنا هذا الخيار الأول لأسباب تتعلق بالسرعة لأنه سيكون النتيجة الأكثر احتمالية إذا (adc_key_in <50) يرجع btnRIGHT؛ إذا كان (adc_key_in <250) يُرجع btnUP ؛ إذا (adc_key_in <450) ترجع btnDOWN ؛ إذا كانت (adc_key_in <650) تُرجع btnLEFT ؛ إذا (adc_key_in <850) قم بإرجاع btnSELECT ؛ عودة btnNONE ؛ // عندما يفشل الآخرون ، أعد هذا…}

عادةً ما يكون الارتفاع صفريًا عند نقطة البداية. لذلك نحن بحاجة إلى متغيرات لكل من الارتفاع والمرجع. أضف هذه قبل الإعداد () والوظيفة أعلاه:

تعويم mtr

تعويم المرجع = 0 ؛

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

يجب ضبط المرجع على قراءة الضغط الأولى حتى نبدأ من ارتفاع صفر وعند الضغط على زر SELECT. أضف ، بعد رمز المرشح ، وقبل عبارة Serial.println:

إذا (المرجع == 0) {

المرجع = مصفى / 12.0 ؛ } if (read_LCD_buttons () == btnSELECT) {ref = filtered / 12.0؛ }

بعد ذلك أضف حساب الارتفاع:

mtr = المرجع - تمت تصفيته / 12.0 ؛

أخيرًا ، قم بتغيير جملة Serial.println لإرسال "mtr" بدلاً من "تصفية" ، وإضافة رمز لإرسال "mtr" إلى شاشة LCD:

Serial.println (mtr) ؛ // إرسال الضغط عبر المسلسل (UART)

lcd.setCursor (0 ، 1) ؛ // السطر 2 lcd.print (mtr) ؛

تم تضمين كافة التغييرات هنا في المثال MS5611data2lcd. قم بتحميل هذا كما في الخطوة 2.

هناك تعديل أخير مفيد. يصعب قراءة الشاشة عند تحديثها 60 مرة في الثانية. يعمل الفلتر الخاص بنا على تنعيم البيانات بثابت زمني يبلغ حوالي 0.8 ثانية. لذا يبدو أن تحديث الشاشة كل 0.3 ثانية كافٍ.

لذا أضف عدادًا بعد كل تعريفات المتغيرات الأخرى في بداية الرسم التخطيطي (على سبيل المثال ، بعد تعويم المرجع = 0 ؛):

كثافة العمليات أنا = 0 ؛

ثم أضف رمزًا إلى الزيادة "i" وعبارة "if" ليتم تشغيلها عندما تصل إلى 20 ، ثم أعدها إلى الصفر وحرك أوامر Serial و lcd داخل جملة "if" بحيث يتم تنفيذ كل قراءة 20 فقط:

أنا + = 1 ؛

إذا (i> = 20) {Serial.println (mtr) ؛ // إرسال الضغط عبر المسلسل (UART) lcd.setCursor (0 ، 1) ؛ // السطر 2 lcd.print (mtr) ؛ أنا = 0 ؛ }

لم أقم بتضمين مثال مع هذا التعديل الأخير من أجل تشجيع إدخال الكود يدويًا والذي يساعد في التعلم.

يجب أن يعطي هذا المشروع نقطة انطلاق جيدة على سبيل المثال لمقياس رقمي. بالنسبة لأولئك الذين قد يرغبون في التفكير في استخدامها في نماذج RC - ابحث عن OpenXvario عن الكود الذي يمكّن مقياس الارتفاع ومقياس التباين لأنظمة Frsky و Turnigy 9x للقياس عن بُعد.

موصى به: