مازول فشارسنج BMP180 قابلیت سنجش فشارهای بارومتریک با دقت مناسب حدود ۰٫۰۳ هکتوپاسگال در بازهی ۰٫۳ تا ۱۰۰ کیلوپاسکال را دارا میباشد.این ماژول به صورت کالیبره شده عرضه می گردد و نکته ای که حائز اهمیت است این است که سنجش این سنسور به صورت خطی و پایدار انجام می پذیرد.این ماژول علاوه بر اندازه گیری فشار ، قابلیت اندازه گیری دما را دارا میباشد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ماژول فشارسنج دیجیتال BMP180 pressure sensor
ماژول فشار سنج با کد تجاری BMP180، یک ماژول بسیار مناسب جهت سنجش فشار با دقت ۰٫۰۳ هکتوپاسکال است. این ماژول بسیار کوچک و سبک، انتخاب مناسب در پرژوه ها با محدودیت فضا و وزن است. خروجی این ماژول به صورت دیجیتال و از نوع I2C بوده و این مورد سبب افزایش دقت و کارایی نیز خواهد شد. ماژول فشار سنج BMP180 به سادگی با بردهای آردوینو،ESP و سایر میکروکنترلرهای دارای پورت I2C راه اندازی می شود. از دیگر قابلیت های این سنسور می توان به توانایی آن در اندازه گیری دما، اشاره کرد. این سنسور به صورت کالیبره شده عرضه گردیده و سنجش آن به صورت خطی و پایدار انجام می پذیرد. برای راه اندازی و کار با این سنسور، کتابخانه تحت آردوینو توسعه یافته است. ماژول فشارسنج دیجیتال BMP180 یک سنسور فشار بارومتریک دیجیتال است که توسط شرکت Bosch تولید شده است. این سنسور از اصلی ترین اجزای یک بارومتر سوئیچ می کند و با استفاده از تغییرات فشار جوی، فشار هوا را اندازه گیری می کند.این ماژول دارای خروجی دیجیتال است و از رابط I2C برای ارتباط با میکروکنترلر استفاده می کند. با استفاده از این ماژول، می توان فشار هوا را با دقت بالا اندازه گیری کرد و از آن برای کاربردهای مختلفی مانند اندازه گیری ارتفاع، پیش بینی آب و هوا، کنترل تهویه استفاده کرد.
مشخصات فنی ماژول فشارسنج BMP180 pressure
- ولتاژ کاری ۳٫۵ ولت
- ابعاد کوچک، وزن بسیار سبک
- دقت اندازه گیری ۰٫۰۳ هکتوپاسکال
- سازگاری کامل با بردهای آردوینو و ESP
- بازه اندازه گیری ۳۰۰ الی ۱۱۰۰ هکتو پاسکال
- خروجی دیجیتال و کالیبره شده تحت پروتکل I2C
- قابلیت اندازه گیری دما بین ۰ الی ۶۵ درجه سانتی گراد
بررسی پایه های فشارسنج BMP180 pressure
ماژول BMP180 دارای ۳ پایه است که عبارتند از:
- VCC: پایه تغذیه ماژول که با ولتاژ ۳.۳ ولت تغذیه میشود.
- GND: پایه زمین ماژول.
- SDA: پایه ارتباط داده سریال داده I2C که برای انتقال داده ها استفاده میشود.
- SCL: پایه ساعت سریال داده I2C که برای هماهنگ سازی ارتباط از طریق SDA استفاده میشود.
وسابل مورد نیاز
برد آردوینو( در این پروژه از آردوینو MEGA2560 استفاده کرده ایم)
LCD 2*16 ( الزام به استفاده از ال سی دی نمیباشد و برای نمایش اطلاعات میتوانید از سریال مانیتور استفاده کنید)
اتصال BMP180 به Arduino
- VCC به تغذیه ۱٫۸ الی ۳٫۶ ولت DC متصل شده است.
- GND به زمین مدار آردوینو Arduino متصل شده است.
- SDA ماژول به پین مرتبط پروتکل I2C متصل شده است.
- SCL ماژول به پین مرتبط پروتککل I2C متصل شده است.
برای برنامه نویسی از کتابخانه Adafruit-BMP085-Library کمپانی Adafruit استفاده میکنیم. کتابخانه را دانلود و به برنامه اضافه میکنیم.قابل ذکر است که از کتابخانهی BMP085 ، هم برای ماژول BMP085 و هم BMP180 میتوان استفاده نمود.
کد آردوینو راه اندازی سنسور BMP180
این کد برای خواندن اطلاعات از سنسور BMP085 (یک سنسور فشار و دما) و نمایش آنها بر روی یک نمایشگر کار میکند. این کد به زبان C++ نوشته شده است و میتوانید از آن برای خواندن دما، فشار و ارتفاع از سطح دریا استفاده کنید.
#include <Adafruit_BMP085.h> #include <Wire.h> #include <LiquidCrystal.h> LiquidCrystal lcd (2, 3, 4, 5, 6, 7, 8); /* میسازیمbmpیک شی به نام Adafruit_BMP085از کلاس */ Adafruit_BMP085 bmp; double temp, pressure, altitude, realAltitude; void setup () { lcd.begin(16, 2); Serial.begin (9600); //چک میکنیم که اگر سنسور شروع به کار نکرد ،اروری در سریال مانیتور نمایش داده شود و برنامه موقف میشود if ( !bmp.begin () ) { Serial.println ("Could not find a valid BMP085 sensor, check wiring!"); while ( 1 ) { } } } void loop () { temp = bmp.readTemperature (); //اندازه گیری دما pressure = bmp.readPressure (); //اندازه گیری فشار altitude = bmp.readAltitude (); //اندازه گیری ارتفاع از سطح دریا realAltitude = bmp.readAltitude (101700);//اندازه گیری فشار از سطح دریا بعد از کالیبره شدن با شرایط جوی در آن منطقه /* altitude = bmp.readAltitude(); با استفاده از این تابع میتوانید مقدار ارتفاع از سطح دریا را محاسبه کنید ،ولی این تابع اگر دارای پارامتر ورودی نباشد ممکن است مقدار اشتباهی را برگرداند.با ذکر مثالی به تشریح اینن موضوع میپردازیم فرض کنید توسط این ماژول مقادیر زیر را دریافت کرده ایم Dama = 25'c Pheshar =101592 tertefa az sath e darya= -23 خودمان میدانیم در زیر سطح دریا قرار نداریم ، پس عدد -۲۳ از کجا به وجود آمده؟!!!! آیا سنسور ما ایراد دارد؟ خیر!! مشکل اینجاست که فشار در سطحح دریا با تغییرات جوی ، تغییر میکند.بنا بر این ما باید سنسور را کالیبره کنیم و به صورت طبیعی تنظیمش کنیم. میشویم و مکانی که در آن مستقر هستیم را پیدا میکنیم و مقدار فشار آم مان را بر حسب بار به آرگمان ورودی تابع میدهیم http://www.worldweatheronline.com/برای این منظور وارد سایت */ lcd.home(); lcd.print("T:"); lcd.print(temp); lcd.print("P:"); lcd.print(pressure); lcd.setCursor(0, 1); lcd.print(altitude); lcd.print(" "); lcd.print(realAltitude); delay (500); }
تحلیل کد آردوینو
این کد برای خواندن اطلاعات از سنسور BMP085 (یک سنسور فشار و دما) و نمایش آنها بر روی یک نمایشگر کار میکند. این کد به زبان C++ نوشته شده است و میتوانید از آن برای خواندن دما، فشار و ارتفاع از سطح دریا استفاده کنید.
#include <Adafruit_BMP085.h> و #include <Wire.h>: این دو دستور پیشنیازهای کتابخانههای مورد نیاز برای کار با سنسور BMP085 و کار با واسط I2C (Wire) را اعلام میکند.
#include <LiquidCrystal.h>: این دستور نیز پیشنیاز کتابخانهی LiquidCrystal برای کار با نمایشگر کاراکتری LCD را اعلام میکند.
LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8);: ایجاد یک شی به نام “lcd” از کلاس LiquidCrystal برای کنترل نمایشگر LCD که به پایههای ۲ تا ۸ متصل شده است.
تعریف متغیرها:
Adafruit_BMP085 bmp;: ایجاد یک شی به نام “bmp” از کلاس Adafruit_BMP085 برای کنترل سنسور BMP085.
double temp, pressure, altitude, realAltitude;: تعریف چهار متغیر اعشاری برای نگهداری دما، فشار، ارتفاع از سطح دریا و ارتفاع واقعی (کالیبره شده) از سطح دریا.
void setup(): این تابع تنها یک بار در ابتدای اجرای برنامه اجرا میشود و تنظیمات اولیه را انجام میدهد.
lcd.begin(16, 2);: شروع کار با نمایشگر LCD با تنظیم دو سطر و ۱۶ کاراکتر در هر سطر.
Serial.begin(9600);: شروع کار با سریال برای ارسال اطلاعات به سریال مانیتور (کاربر اصلی).
if (!bmp.begin()) { … }: چک میکند که آیا سنسور BMP085 در دسترس است یا خیر. اگر سنسور در دسترس نباشد، پیام “Could not find a valid BMP085 sensor, check wiring!” در سریال مانیتور نمایش داده میشود و برنامه متوقف میشود.
void loop(): این تابع مکرراً اجرا میشود و بخش اصلی برنامه است.
temp = bmp.readTemperature();: اندازهگیری دما و ذخیره آن در متغیر temp.
pressure = bmp.readPressure();: اندازهگیری فشار و ذخیره آن در متغیر pressure.
altitude = bmp.readAltitude();: اندازهگیری ارتفاع از سطح دریا و ذخیره آن در متغیر altitude.
realAltitude = bmp.readAltitude(101700);: اندازهگیری فشار از سطح دریا بعد از کالیبره شدن با شرایط جوی در آن منطقه و ذخیره آن در متغیر realAltitude.
نمایش اطلاعات بر روی نمایشگر LCD و سریال مانیتور با استفاده از دستورات lcd.print() و Serial.println().
delay(500);: تاخیر ۵۰۰ میلیثانیه قبل از تکرار مجدد حلقه loop.
جمع بندی
سنسور BMP180 یک سنسور دیجیتالی دما و فشار هوا است که توسط شرکت Bosch تولید شده است. این سنسور به طور دقیق دما و فشار هوا را اندازهگیری میکند و میتواند بر روی میکروکنترلرها و بردهای الکترونیکی مختلف مانند آردوینو و رزبری پای استفاده شود.با استفاده از سنسور BMP180، میتوان دما را با دقت بالا اندازهگیری کرده و از آن در برنامهها و پروژهها که نیاز به دقت دما دارند، استفاده کرد. این کاربرد در کنترل دمای محیط، کنترل دمای یخچالها و سیستمهای خنککننده و همچنین در کاربردهای متنوع روباتیک و اتوماسیون خانگی مفید است.سنسور BMP180 قادر است فشار هوا را از سطح دریا یا از ارتفاع مشخص شده اندازهگیری کند. این ویژگی از اهمیت بالایی برخوردار است و در کاربردهای هواشناسی، رصدی، کنترل ارتفاع دستگاهها، کاربردهای هواپیما و هلیکوپتر و همچنین کنترل فشار در سیستمهای خاص مانند اسپریها یا سیستمهای فشار آب مورد استفاده قرار میگیرد.سنسور BMP180 به دلیل دقت و قابلیت کالیبره شدن خود، در سیستمهای هواپیما و رباتیک که به دقت و کنترل ارتفاع و فشار نیاز دارند، مورد استفاده قرار میگیرد. این کاربردها شامل برنامههای هواپیماهای کوچک، کوادکوپترها، درونرباتها و زمینههای بسیاری از رباتیک میشود.به طور کلی، سنسور BMP180 به عنوان یک سنسور دقیق و قابل اعتماد برای اندازهگیری دما و فشار هوا در برنامهها و پروژههای مختلف الکترونیکی و رباتیک بسیار مفید و منعطف است. با استفاده از این سنسور، میتوانید به راحتی اطلاعات مرتبط با دما و فشار را در پروژههای خود به دست آورید و کنترلهای متناسب با آنها انجام دهید.
سلام جناب قربانی
ضمن تشکر از زحمات جنابعالی، سوالی داشتم، آیا می توان از این ماژول برای استفاده در ارتفاعات کوهستان جهت هدایت کوهنوردان استفاده کرد؟
خیلی ممنونم
سلام خواهش میکنم
بله میشه استفاده کرد
سلام آقای قربانی میتونید این سنسور رو درست کنید و برام ارسال کنید
با سلام
کاربر گرامی پروژه اجرا نمیکنیم.
با سلام و تشکر از مطلب جالبی که زحمتش رو کشیدی
من دوست دارم یک ارتفاع سنج برای خودم بسازم و برای این هدف برد اردوینو نانو و LCD 1.8 TFT-160*128خریدم و سنسور BMP 180.مشکلی که دارم نمیدونم چطور پارامتر ها رو روی ال سی دی نمایش بده .چطور تو برنامه این موضوع رو وارد کنم .ممنون میشم اگه راهنمایی کنی
با سلام
ضمن تشکر از توجه برای این منظور از توابع نمایشگر استفاده کنید. مانند این کد:
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available()) {
String str = Serial.readString();
Serial.println(str);
}
}
سلام درمورد اتصال پین های scl و sda بیشتر توضیح میدهید؟ نفهمیدم به چی باید وصل کنم.تشکر
سلام و تشکر از توجه شما
این دو پین مربوطه با ارتباط I2C میباشند. لطفا نوع برد مورد استفادهتان را اعلام کنید تا دقیقتر راهنمایی کنم.
تشکر از شما بابت \اسخ گویی سریع مشکل حل شد از یکی از اموزشای شما کمک گرفتم
سلامت باشید.
سلام مجدد در مورد کالیبره کردن ارتفاع بیشتر توضیح میدهید
منظور شما از {مقدار فشار آم مان را بر حسب بار به آرگمان ورودی تابع میدهیم} چیست و مقدار فشار را دقیقا در کجا باید وارد کنیم؟تشکر
ارتفاع برای من -۷۸ نشان میدهد که مطمینا اشتباست
با سلام
لطفا به سطر ۳۵ توجه کنید. پس از دریافت مقدار فشار منطقه مورد نظرتان، عدد را بر حسب بار این سطر وارد میکنید. لطفا پس از انجام موارد، از همین طریق اطلاع رسانی کنید.
سلام وقت بخیر
سوالی داشتم، اینکه از این ماژول فشارسنج BMP180 در رسبری استفاده کردم و تمام پارامترها مقدار ثابت نشون میده با اختلاف خیلی جزیی.
در طبقات مختلف ساختمون همکف طبقه ۴ حتی در محیط بیرون و داخل ساختمان هم امتحان کردم.
خروجی برنامه:
temperature:2221.60 c
pressure: 112750.00 pa
altitude: -909.66 m
sealevel_pressure: 112746.00 pa
بعد از کالیبره کردن(ورودی تابع altitude مقدار ۱۰۱۴۰۰) مقدار خروجی تغییری نمیکند
ممنون از راهنمایتون
برای راندازی ماژول از لینک زیر استفاده کرده ام.
با سلام
در هر بردی و با هر زبان برنامه نویسی که از این ماژول استفاده بفرمایید، نیاز به کالیبره در محیط مورد استفاده خواهد داشت.
ممنون از راهنماییتون
با توجه به توضیحات شما کالیبره انجام شده است مقدار فشار به عنوان پارامتر ورودی به تابع readAltitude داده شده است اما همچنان خروجی صحیح نمی باشد
روش دیگری برای کایبره وجود دارد؟
سلامت باشید، از لحاظ فشار هوا در خروجی تغییراتی مشاهده میکنید؟ منظورم خارج از بحث ارتفاع میباشد.
دما اصلا تغییری نمیکنه
فشار هم در حد ۱۱۲۷۴۴ تا ۱۱۲۷۴۶ در تغییر می کند با تغییرات جزیی
سلام مجدد
منظور بنده این بود که به صورت مصنوعی فشار ایجاد کنید.
با سلام و وقت بخیر
سوالی که داشتم اینه از ماژول BMP180 در رسبری استفاده کردم
مراحل کالیبره هم استفاده کردم ولی خروجی صحیح دریافت نمیکنم
ممنون میشم راهنمایم کنین
سلام مجدد
این موضوع خیلی خام است وبنده نمیتوانم راهنمایی کنم. توضیحات کاملتری ارایه بدهید.
باسلام و خسته نباشید
ممنون از وقتی که میزارید
سوالی که داشتم اینه که واحد خروجی هر کدام از توابع چیست؟ توابع زیر
.readTemperature
.readPressure
.readAltitude
با سلام
readtemperature مقادیر دما، Readpressure مقادیر فشار و Read Altitude مقادیر ارتفاع را میخواند.
ممنون بابت وقتی که میزارید
واحد هر کدام از خروجی ها رو میخواستم بدونم؟
فشار pa هست یا mpa ؟
دما؟
ارتفاع؟ واحد خروجی چیست؟
سلام مجدد
واحد دما همان سانتی گراد C و واحد فشار برابر با hpa و واحد ارتفاع برابر با m متر میباشد.
سلام عرض ادب
واقعا عالی
من دارم یه ارتفاع سنج درست میکنم برای ماشینهای آفرود میخوام بدونم چجوری این سنسور فعال کنم LCD گرد اندازه یه سکه میخوام باشه اینجوری امکانش هست
با سلام
جهت راه اندازی سنسور به میکروکنترلر نیاز دارید که در همین آموزش به آن اشاره شده است.
سلام وقت بخیر
برای خواندن فشار از سنسور فشار حتما باید از مدار آردوینو استفاده کنیم؟
و آردوینو همه مدل های سنسور فشار رو پشتیبانی میکنه؟
با سلام
بسته به پروتکل ارتباطی سنسور دارد که آردوینو از آن پشتیبانی میکند.