فهرست مطالب:

اندازه گیری نوار اتمسفر آردوینو/ MS5611 GY63 GY86 تظاهرات: 4 مرحله (همراه با تصاویر)
اندازه گیری نوار اتمسفر آردوینو/ MS5611 GY63 GY86 تظاهرات: 4 مرحله (همراه با تصاویر)

تصویری: اندازه گیری نوار اتمسفر آردوینو/ MS5611 GY63 GY86 تظاهرات: 4 مرحله (همراه با تصاویر)

تصویری: اندازه گیری نوار اتمسفر آردوینو/ MS5611 GY63 GY86 تظاهرات: 4 مرحله (همراه با تصاویر)
تصویری: CS50 2015 - Week 4 2024, جولای
Anonim
اندازه گیری نوار اتمسفر آردوینو/ MS5611 GY63 GY86 تظاهرات
اندازه گیری نوار اتمسفر آردوینو/ MS5611 GY63 GY86 تظاهرات

این واقعاً یک فشارسنج/ارتفاع سنج است ، اما با مشاهده فیلم ، دلیل عنوان را خواهید دید.

سنسور فشار MS5611 که بر روی بردهای آردوینو GY63 و GY86 یافت می شود ، عملکرد شگفت انگیزی را ارائه می دهد. در یک روز آرام ، قد شما را تا 0.2 متر اندازه می گیرد. این به طور م theثر فاصله سر شما تا فضای بیرونی را اندازه گیری می کند و آن را از فاصله پاها تا فضای بیرونی کم می کند (با اندازه گیری فشار - یعنی وزن هوای بالا). این دستگاه دیدنی دارای محدوده ای است که به راحتی ارتفاع اورست را اندازه گیری می کند - و همچنین می تواند تا چند اینچ نیز کاهش یابد.

این پروژه به این صورت بود: یک پروژه مدارس ، نمونه ای از اصلاح کد آردوینو و یک مکان خوب برای کاوش با استفاده از سنسور MS5611. بسیاری از سوالات انجمن از کسانی که با این سنسور مشکل دارند ، وجود دارد. رویکرد در اینجا استفاده از آن را بسیار ساده می کند. پس از انجام این پروژه شما به خوبی مجهز خواهید شد تا سایر برنامه های مرتبط با فشار را توسعه دهید.

هر سنسور دارای ثبات کالیبراسیون مخصوص به خود است که باید خوانده شده و برای تصحیح داده ها مورد استفاده قرار گیرد. کتابخانه ای وجود دارد که به رانندگی این موارد کمک می کند. کدی که در اینجا نشان داده می شود از کتابخانه برای خوانش استفاده می کند و سپس آنها را به ارتفاع تبدیل می کند و آنها را روی LCD Shield نمایش می دهد.

ابتدا داده ها را برای آزمایشات اولیه به مانیتور سریال روی رایانه/لپ تاپ ارسال می کنیم. اینها نویز خاصی را نشان می دهند و بنابراین ما فیلتری برای صاف شدن آنها اضافه می کنیم. سپس ما یک صفحه نمایش LCD اضافه می کنیم تا دستگاه بتواند به طور مستقل کار کند و شما می توانید قد خود را اندازه گیری کنید - یا هر چیز دیگری.

توجه داشته باشید که برد GY63 فقط دارای سنسور فشار MS5611 است. GY86 یک تخته 10 درجه آزادی نامیده می شود و همچنین شامل یک شتاب سنج 3 محوری ، ژیروسکوپ 3 محوری و یک مغناطیس سنج 3 محوری برای چند دلار بیشتر است.

شما نیاز خواهید داشت:

1. Arduino UNO (یا سایر موارد با استاندارد pinout) و کابل USB آن

2. برد شکستن GY63 یا GY86

3. 4 Dupont نر - زن - یا سیم اتصال

4. سپر صفحه کلید LCD آردوینو

5. باتری 9 ولت و سرب

6. نوار سوکت 2.54 میلی متری (اختیاری اما توصیه می شود)

آماده سازی

Arduino IDE (محیط توسعه یکپارچه) را از آدرس https://www.arduino.cc/fa/Main/Software بارگیری کنید

برخی از قطعات فنی برای علاقه

MS5611 با میانگین تعداد زیادی اندازه گیری ، عملکرد عالی خود را ارائه می دهد. این دستگاه می تواند 4096 3 بایت (24 بیت) اندازه گیری آنالوگ را تنها در 8 میلی ثانیه انجام دهد و مقدار متوسط را نشان دهد. باید فشار و دما را اندازه گیری کند تا داده های فشار برای دمای داخلی اصلاح شود. از این رو می تواند در حدود 60 جفت فشار و دما را در ثانیه اندازه گیری کند.

برگه اطلاعات در دسترس است:

ارتباطات از طریق I2C انجام می شود. بنابراین سایر سنسورهای I2C می توانند گذرگاه را به اشتراک بگذارند (همانطور که در برد GY86 10DOF که همه تراشه ها بر روی I2C هستند) وجود دارد.

مرحله 1: یک کتابخانه MS5611 دریافت کنید

بسیاری از سنسورهای آردوینو یا از یک کتابخانه استاندارد استفاده می کنند که همراه با آردوینو IDE موجود است و یا یک فایل فشرده با کتابخانه ای که به راحتی قابل نصب است ، ارائه می دهند. این امر در مورد سنسورهای MS5611 صادق نیست. با این حال ، جستجویی پیدا شد: https://github.com/gronat/MS5611 که دارای کتابخانه ای برای MS5611 است ، از جمله انجام اصلاح دما.

انتخاب 1

به وب سایت بالا بروید ، روی "Clone or Download" کلیک کنید و "Download ZIP" را انتخاب کنید. این باید MS5611-master.zip را به دایرکتوری بارگیری شما تحویل دهد. در صورت تمایل ، آن را به پوشه ای منتقل کنید که در آینده می توانید آن را پیدا کنید. من از پوشه ای به نام "data" استفاده می کنم که به پوشه های Arduino من اضافه شده است.

متأسفانه فایل.zip بارگیری شده شامل هیچ گونه طرح نمونه نیست و خوب است کتابخانه و نمونه هایی را به Arduino IDE اضافه کنید. حداقل یک مثال در فایل README.md وجود دارد که می توان آن را کپی و در یک طرح چسبانده و ذخیره کرد. این یکی از راه های شروع کار است.

گزینه 2

برای سهولت در اجرای کد در این دستورالعمل ، حداقل مثال بالا و نمونه هایی که در اینجا نشان داده شده است را به کتابخانه اضافه کرده و یک فایل.zip را در زیر ضمیمه کرده ام که در Arduino IDE نصب می شود.

فایل زیپ زیر را بارگیری کنید. در صورت تمایل این مورد را به پوشه بهتری منتقل کنید.

Arduino IDE را راه اندازی کنید. روی Sketch> Include Library> Add zip file کلیک کرده و فایل را انتخاب کنید. IDE را راه اندازی مجدد کنید. IDE اکنون هر دو کتابخانه را به همراه تمام مثالهای نشان داده شده در اینجا نصب می کند. با کلیک روی فایل> نمونه ها> MS5611-master این مورد را بررسی کنید. سه طرح باید ذکر شود.

مرحله 2: سنسور را به آردوینو متصل کرده و تست کنید

سنسور را به آردوینو متصل کرده و تست کنید
سنسور را به آردوینو متصل کرده و تست کنید
سنسور را به آردوینو متصل کرده و تست کنید
سنسور را به آردوینو متصل کرده و تست کنید

تخته های GY63/GY86 معمولاً دارای هدر هستند اما لحیم نمی شوند. بنابراین این انتخاب شماست که سرصفحه ها را در جای خود بچسبانید و از سرنشینان زن دوپونت زن یا مرد استفاده کنید ، یا (همانطور که تصمیم گرفتم) هدها را مستقیماً به تخته بچسبانید و برای اتصال به آردوینو پین هایی به سر اضافه کنید. گزینه دوم بهتر است اگر فکر می کنید ممکن است بخواهید تخته را بعداً به یک پروژه لحیم کنید. اگر می خواهید از تخته برای آزمایش استفاده کنید ، حالت اول بهتر است. سرنخ های بدون لحیم کاری بسیار ساده تر از سرصفحه پین است.

اتصالات مورد نیاز عبارتند از:

GY63/GY86 آردوینو

VCC - 5v Power GND - GND Ground SCL - A5 I2C clock> SDA - A4 I2C data

مطابق تصویر بالا برد سنسور را به آردوینو وصل کرده و آردوینو را از طریق سیم USB آن به رایانه/لپ تاپ وصل کنید. همچنین سنسور را با مقداری مواد مات/مشکی بپوشانید. حسگر به نور حساس است (همانطور که در مورد اکثر این نوع سنسورها چنین است).

Arduino IDE را راه اندازی کنید. کلیک:

فایل> نمونه ها >> MS5611-master> MS5611data2serial.

نمونه جدیدی از IDE با طرح نشان داده می شود. روی دکمه بارگذاری (پیکان راست) کلیک کنید.

بعد پلاتر سریال را شروع کنید - روی Tools> Serial Plotter کلیک کنید و در صورت لزوم baud را روی 9600 قرار دهید. داده های ارسال شده فشار در پاسکال است. بعد از یک ثانیه دوباره مقیاس می شود و سنسور بالا و پایین آمدن با 0.3m باید به عنوان کاهش و افزایش ردیاب نشان داده شود (ارتفاع کمتر فشار بیشتر است).

داده ها کمی نویز دارند. اولین طرح را در بالا ببینید. این را می توان با استفاده از فیلتر دیجیتال (یک ابزار واقعاً مفید) صاف کرد.

معادله فیلتر به شرح زیر است:

ارزش = ارزش + K (new-value)

جایی که "مقدار" داده های فیلتر شده است و "جدید" آخرین اندازه گیری شده است. اگر K = 1 فیلترینگ وجود نداشته باشد. برای مقادیر کمتر K ، داده ها با ثابت زمان T/K صاف می شوند که T بین زمان نمونه ها است. در اینجا T حدود 17 میلی ثانیه است ، بنابراین مقدار 0.1 ثابت زمان 170 میلی ثانیه یا حدود 1/6 ثانیه را نشان می دهد.

فیلتر را می توان با موارد زیر اضافه کرد:

قبل از راه اندازی () یک متغیر برای داده های فیلتر شده اضافه کنید:

شناور فیلتر = 0 ؛

سپس معادله فیلتر را بعد از فشار =… اضافه کنید. خط

فیلتر = فیلتر + 0.1*(فشار فیلتر شده) ؛

ایده خوبی است که مقدار فیلتر شده را برای اولین قرائت مقداردهی کنید. بنابراین یک عبارت "if" در اطراف خط بالا اضافه کنید که این کار را انجام می دهد تا به نظر برسد:

اگر (فیلتر شده! = 0) {

فیلتر = فیلتر + 0.1*(فشار فیلتر شده) ؛ } else {فیلتر = فشار ؛ // اولین خواندن بنابراین فیلتر شده برای خواندن}

آزمون "! =" برابر نیست. بنابراین اگر "فیلتر" برابر 0 نباشد ، معادله فیلتر اجرا می شود ، اما اگر اینطور باشد ، آن را بر روی خوانش فشار تنظیم می کنیم.

در نهایت ما باید "فشار" را به "فیلتر" در دستور Serial.println تغییر دهیم تا مقدار فیلتر شده را ببینیم.

با انجام تغییرات بالا به صورت دستی ، بهترین یادگیری به دست می آید. اما من اینها را در مثال MS5611data2serialWfilter گنجانده ام. بنابراین در صورت وجود مشکل می توان مثال را بارگیری کرد.

اکنون کد را در آردوینو بارگذاری کنید و بهبود را مشاهده کنید. نمودار دوم را در بالا ببینید و توجه داشته باشید که مقیاس Y x2 بزرگ شده است.

مقدار کمتری را برای ثابت فیلتر امتحان کنید ، به عنوان مثال 0.02 به جای 0.1 ، و تفاوت را ببینید. داده ها روان تر اما با پاسخ کندتر است. این مصالحه ای است که هنگام استفاده از این فیلتر ساده باید جستجو کرد. این ویژگی همان فیلتر RC (مقاومت و ظرفیت) است که به طور گسترده در مدارهای الکترونیکی استفاده می شود.

مرحله 3: آن را مستقل کنید

اکنون ما یک سپر صفحه کلید LCD اضافه می کنیم ، فشار را به متر در ارتفاع تبدیل می کنیم و آن را روی صفحه نمایش نشان می دهیم. ما همچنین می توانیم با فشار دادن دکمه "Select" صفحه کلید ، مقدار را صفر کنیم.

با محافظ LCD روی آردوینو ، سنسور باید به سپر LCD متصل شود. متأسفانه سپرهای LCD معمولاً بدون سوکت های مناسب عرضه می شوند. بنابراین گزینه ها عبارتند از ایجاد اتصالات لحیم کاری یا دریافت نوار سوکت. نوار سوکت در ebay با هزینه ای بیش از هزینه پست موجود نیست. در "نوار سوکت 2.54 میلی متری" جستجو کنید و موارد مشابه با آردوینو را جستجو کنید. اینها معمولا در طول 36 یا 40 پین وجود دارند. من از پین های پیچ خورده اجتناب می کنم زیرا عمق کافی برای سرنخ های استاندارد Dupont ندارند.

نوار سوکت باید به طول بریده شود و برش باید در همان محل سنجاق انجام شود. بنابراین برای یک نوار 6 پین - سنجاق 7 را با چند انبردست بردارید ، سپس در آن محل با استفاده از اره برقی کوچک برش دهید. انتهای آن را مرتب می کنم تا مرتب شود.

هنگام لحیم کاری پل ها روی تخته ، مطمئن شوید هیچ پل لحیم کاری وجود ندارد.

با تصمیم مناسب برای اتصال سنسور ، محافظ LCD را به آردوینو وصل کنید و سنسورها را همان پین ها - اما اکنون روی سپر LCD - وصل کنید.

همچنین باتری و سرب را آماده کنید. من سرنخ خود را از قطعاتی که در سطل قراضه من قرار دارد تهیه کردم اما آنها نیز در ebay در دسترس هستند - از جمله یک گزینه خوب که شامل جعبه باتری و سوئیچ است. جستجو بر روی 'PP3 2.1mm lead'.

مصرف فعلی حدود 80 میلی متر است. بنابراین اگر می خواهید بیش از چند دقیقه کار کنید ، یک باتری 9 ولت بزرگتر از PP3 در نظر بگیرید.

مرحله 4: کد ارتفاع و LCD را اضافه کنید

Image
Image

ما باید کمی کدگذاری بیشتری انجام دهیم تا فشار را به ارتفاع تبدیل کرده و صفحه نمایش را هدایت کنیم.

در ابتدای طرح ، کتابخانه نمایش را اضافه کنید و به آن بگویید که از چه پین هایی استفاده می شود:

#عبارتند از

// مقداردهی کتابخانه با تعداد پین های رابط LiquidCrystal LCD (8 ، 9 ، 4 ، 5 ، 6 ، 7) ؛

در مرحله بعد به تعدادی متغیر و یک تابع برای خواندن دکمه های صفحه کلید نیاز داریم. همه اینها به ورودی آنالوگ A0 متصل هستند. هر دکمه ولتاژ متفاوتی به A0 می دهد. در جستجوی "arduino lcd shield buttons code" چند کد خوب پیدا کرد:

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

این کد را قبل از راه اندازی () اضافه کنید:

// برخی از مقادیر مورد استفاده توسط پنل و دکمه ها را تعریف کنید

int lcd_key = 0؛ int adc_key_in = 0؛ #تعریف btnRIGHT 0 #تعریف btnUP 1 #تعریف btn پایین 2 #تعریف btnLEFT 3 #تعریف btn SELECT 4 #تعریف btn هیچ // مقدار سنسور را بخوانید // دکمه های من هنگام خواندن در این مقادیر متمرکز هستند: 0 ، 144 ، 329 ، 504 ، 741 // تقریباً 50 را به آن مقادیر اضافه می کنیم و بررسی می کنیم که آیا نزدیک هستیم (adc_key_in> 1000) بازگشت btnNONE؛ // ما این گزینه را به دلایل سرعت اولین گزینه قرار می دهیم ، زیرا اگر (adc_key_in <50) btnRIGHT را برگرداند ، محتمل ترین نتیجه خواهد بود. if (adc_key_in <250) بازگشت btnUP ؛ if (adc_key_in <450) بازگشت btnDOWN ؛ if (adc_key_in <650) بازگشت btnLEFT ؛ if (adc_key_in <850) بازگشت btnSELECT؛ بازگشت btnNONE؛ // وقتی همه بقیه شکست خوردند ، این را برگردانید…}

ارتفاع معمولاً در نقطه شروع صفر است. بنابراین ما به متغیرهایی برای ارتفاع و مرجع نیاز داریم. این موارد را قبل از راه اندازی () و عملکرد بالا اضافه کنید:

float mtr؛

شناور ref = 0؛

تبدیل فشار در پاسکال به متر تقریباً تقسیم بر 12 در سطح دریا است. این فرمول برای اکثر اندازه گیری های زمینی مناسب است. فرمول های دقیق تری وجود دارد که برای تبدیل در ارتفاعات مناسب تر است. اگر قصد دارید از این وسیله برای ثبت ارتفاع پرواز با بالن استفاده کنید ، از این موارد استفاده کنید.

مرجع باید بر روی اولین قرائت فشار تنظیم شود ، بنابراین ما از ارتفاع صفر شروع می کنیم و وقتی دکمه SELECT را فشار می دهیم. بعد از کد فیلتر و قبل از دستور Serial.println اضافه کنید:

اگر (ref == 0) {

ref = فیلتر شده/12.0 ؛ } if (read_LCD_buttons () == btnSELECT) {ref = filtered/12.0؛ }

بعد از این محاسبه ارتفاع را اضافه کنید:

mtr = ref - فیلتر/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 ثانیه به اندازه کافی کافی به نظر می رسد.

بنابراین پس از همه تعاریف متغیر دیگر در ابتدای طرح (به عنوان مثال پس از float ref = 0؛) یک شمارنده اضافه کنید:

int i = 0 ؛

سپس کد را به افزایش "i" و یک عبارت "if" اضافه کنید تا وقتی به 20 می رسد اجرا شود و سپس آن را به صفر برگردانید و دستورات Serial و lcd را در دستور "if" حرکت دهید ، بنابراین این موارد فقط در هر 20 قرائت اجرا می شوند:

i += 1 ؛

if (i> = 20) {Serial.println (mtr)؛ // ارسال فشار از طریق سریال (UART) lcd.setCursor (0 ، 1) ؛ // خط 2 lcd.print (mtr)؛ i = 0 ؛ }

من یک مثال با این آخرین اصلاح وارد نکردم تا بتوانم کد را به صورت دستی تشویق کنم که به یادگیری کمک می کند.

این پروژه باید نقطه شروع خوبی برای مثال برای فشارسنج دیجیتال باشد. برای کسانی که ممکن است بخواهند در مدلهای RC استفاده کنند - کد OpenXvario را جستجو کنید که ارتفاع سنج و واریومتر را برای سیستم های تله متری Frsky و Turnigy 9x فعال می کند.

توصیه شده: