آردوینو آموزش آردوینو قطعات الکترونیک مدارهای الکترونیک پروژه های آردوینو

آموزش راه اندازی ماژول فشارسنج BMP180 آردوینو Arduino

آموزش راه اندازی ماژول فشارسنج bmp180
نوشته شده توسط علیرضا قربانی

مازول فشارسنج 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 استفاده کرده ایم)

ماژول فشار سنج BMP180

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);
      }
      }

  • سلام مجدد در مورد کالیبره کردن ارتفاع بیشتر توضیح میدهید
    منظور شما از {مقدار فشار آم مان را بر حسب بار به آرگمان ورودی تابع میدهیم} چیست و مقدار فشار را دقیقا در کجا باید وارد کنیم؟تشکر
    ارتفاع برای من -۷۸ نشان میدهد که مطمینا اشتباست

    • با سلام
      لطفا به سطر ۳۵ توجه کنید. پس از دریافت مقدار فشار منطقه مورد نظرتان، عدد را بر حسب بار این سطر وارد می‌کنید. لطفا پس از انجام موارد، از همین طریق اطلاع رسانی کنید.

  • سلام وقت بخیر
    سوالی داشتم، اینکه از این ماژول فشارسنج BMP180 در رسبری استفاده کردم و تمام پارامترها مقدار ثابت نشون میده با اختلاف خیلی جزیی.
    در طبقات مختلف ساختمون همکف طبقه ۴ حتی در محیط بیرون و داخل ساختمان هم امتحان کردم.
    خروجی برنامه:
    temperature:2221.60 c
    pressure: 112750.00 pa
    altitude: -909.66 m
    sealevel_pressure: 112746.00 pa

    بعد از کالیبره کردن(ورودی تابع altitude مقدار ۱۰۱۴۰۰) مقدار خروجی تغییری نمیکند

    ممنون از راهنمایتون

    برای راندازی ماژول از لینک زیر استفاده کرده ام.

  • با سلام و وقت بخیر
    سوالی که داشتم اینه از ماژول BMP180 در رسبری استفاده کردم
    مراحل کالیبره هم استفاده کردم ولی خروجی صحیح دریافت نمیکنم
    ممنون میشم راهنمایم کنین

  • باسلام و خسته نباشید
    ممنون از وقتی که میزارید
    سوالی که داشتم اینه که واحد خروجی هر کدام از توابع چیست؟ توابع زیر
    .readTemperature
    .readPressure
    .readAltitude

    • با سلام
      readtemperature مقادیر دما، Readpressure مقادیر فشار و Read Altitude مقادیر ارتفاع را می‌خواند.

      • ممنون بابت وقتی که میزارید
        واحد هر کدام از خروجی ها رو میخواستم بدونم؟
        فشار pa هست یا mpa ؟
        دما؟
        ارتفاع؟ واحد خروجی چیست؟

        • سلام مجدد
          واحد دما همان سانتی گراد C و واحد فشار برابر با hpa و واحد ارتفاع برابر با m متر می‌باشد.

  • سلام عرض ادب
    واقعا عالی
    من دارم یه ارتفاع سنج درست میکنم برای ماشین‌های آفرود میخوام بدونم چجوری این سنسور فعال کنم LCD گرد اندازه یه سکه میخوام باشه اینجوری امکانش هست

    • با سلام
      جهت راه اندازی سنسور به میکروکنترلر نیاز دارید که در همین آموزش به آن اشاره شده است.

  • سلام وقت بخیر
    برای خواندن فشار از سنسور فشار حتما باید از مدار آردوینو استفاده کنیم؟
    و آردوینو همه مدل های سنسور فشار رو پشتیبانی میکنه؟

    • با سلام
      بسته به پروتکل ارتباطی سنسور دارد که آردوینو از آن پشتیبانی می‌کند.