مقدمه
شاید در انجام پروژههایتان با مبحثی بهنام اندازهگیری فشار برخوردکردهباشید که در نوع خودش واقعا چالشبرانگیز است البته این چالش مطمنا قبلاز خواندن این مقاله بودهاست. حال فرضکنید به شما برای انجام یک پروژه گفتهشدهاست که فشار نقطه X را بدست آورید. مطمنا یکیاز بزرگترین سوالاتی که به ذهن میرسد این است که چطور باید این پارامتر را اندازهگیری کنیم؟ و یا انواع سوالات دیگر ازجمله اینکه چطور باید برنامه بنویسیم و… در این مقاله قصد داریم که شما را با یکیاز روشهای اندازهگیری فشار که استفادهاز سنسور BMP180 است آشنا کنیم و درنهایت توسط سختافزار آردوینو برنامهنویسی و راهاندازی کنیم. قبلاز اینکه وارد مبحث عملی شویم اجازهدهید که ابتدا با چند تعریف آشناشویم.
فشار بارومتریک چیست؟
این فشار ناشی از نیروی واردشده توسط وزن هوای اطراف زمین به یک نقطه معین می باشد که معمولا بهصورت میلیبار(mbar)، اینچ جیوه(inHg)، و یا میلیمتر جیوه(mmHg) بیان میشود. فشار عادی اتمسفر در سطح دریا ۱۰۱۳.۳ میلیبارد یا ۲۹.۹۲ اینچ جیوه است. نوسان این فشار معمولا نشانهای از شرایط آبوهوایی است. افزایش فشار معمولا بهمعنی بهبود آبوهوا است درحالیکه فشارکم میتواند شرایط آبوهوایی غیرمنتظره را بازتابدهد.{منبع}
سنسور BMP180 چیست؟
BMP180 يك سنسور فشار بارومتريك با دقت بالا و جريان مصرفي پايين است. اين سنسور ميتواند فشار بين ۳۰۰تا ۱۱۰۰هكتوپاسكال را با دقت مطلق ۰.۰۳ هكتوپاسكال اندازهگيري نمايد. هر هكتوپاسكال معادل ۱۰۰پاسكال است. سنسور BMP180 براساس تكنولوژي مقاومت پيزوالكتريك يا Piezo-resistive طراحي و توليدشده. استفادهاز اين تكنولوژي دقتبالا، خطيبودن و پايداري طولاني مدت را براي اين سنسور فراهمنمودهاست.{منبع}
مشخصات سنسور BMP180
ولتاژ تغذيه سنسور بين ۱.۸تا ۳.۶ولت است. خروجي سنسور بصورت ديجيتال و با رابط I2C است و براي ارتباط مستقيم با ميكروكنترلر طراحيشدهاست.
رنج گسترده در اندازهگيري فشار بارو متريك خروجي ديجيتال با اينترفيس I2C رنج گسترده ولتاژ تغذيه قابلقبول نويز پايين در اندازهگيري كاملا كاليبرهشده قابليت اندازهگيري دما توليدشده در قالب LLC بسيار باريك ۵×۵ ميليمتر با ارتفاع ۱.۲ميليمتر
کاربردهای سنسور BMP180
دستگاههای هواشناسی تجهیزات پزشکی تجهیزات جهتیابGPS تجهیزات آزمایشگاهی و علمی تشخیص ارتفاع خب پساز اینکه یک آشنایی نسبی نسبت به سنسور پیداکردیم حال نوبت به راهاندازی سنسور BMP180 رسیدهاست.
شماتیک راهاندازی سنسور BMP180 با آردوینو
برنامهنویسی سنسور BMP180
#include <SFE_BMP180.h> #include <Wire.h> // You will need to create an SFE_BMP180 object, here called "pressure": SFE_BMP180 pressure; #define ALTITUDE 1655.0 // Altitude of SparkFun's HQ in Boulder, CO. in meters void setup() { Serial.begin(9600); Serial.println("REBOOT"); // Initialize the sensor (it is important to get calibration values stored on the device). if (pressure.begin()) Serial.println("BMP180 init success"); else { // Oops, something went wrong, this is usually a connection problem, // see the comments at the top of this sketch for the proper connections. Serial.println("BMP180 init fail\n\n"); while(1); // Pause forever. } } void loop() { char status; double T,P,p0,a; // Loop here getting pressure readings every 10 seconds. // If you want sea-level-compensated pressure, as used in weather reports, // you will need to know the altitude at which your measurements are taken. // We're using a constant called ALTITUDE in this sketch: Serial.println(); Serial.print("provided altitude: "); Serial.print(ALTITUDE,0); Serial.print(" meters, "); Serial.print(ALTITUDE*3.28084,0); Serial.println(" feet"); // If you want to measure altitude, and not pressure, you will instead need // to provide a known baseline pressure. This is shown at the end of the sketch. // You must first get a temperature measurement to perform a pressure reading. // Start a temperature measurement: // If request is successful, the number of ms to wait is returned. // If request is unsuccessful, 0 is returned. status = pressure.startTemperature(); if (status != 0) { // Wait for the measurement to complete: delay(status); // Retrieve the completed temperature measurement: // Note that the measurement is stored in the variable T. // Function returns 1 if successful, 0 if failure. status = pressure.getTemperature(T); if (status != 0) { // Print out the measurement: Serial.print("temperature: "); Serial.print(T,2); Serial.print(" deg C, "); Serial.print((9.0/5.0)*T+32.0,2); Serial.println(" deg F"); // Start a pressure measurement: // The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait). // If request is successful, the number of ms to wait is returned. // If request is unsuccessful, 0 is returned. status = pressure.startPressure(3); if (status != 0) { // Wait for the measurement to complete: delay(status); // Retrieve the completed pressure measurement: // Note that the measurement is stored in the variable P. // Note also that the function requires the previous temperature measurement (T). // (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.) // Function returns 1 if successful, 0 if failure. status = pressure.getPressure(P,T); if (status != 0) { // Print out the measurement: Serial.print("absolute pressure: "); Serial.print(P,2); Serial.print(" mb, "); Serial.print(P*0.0295333727,2); Serial.println(" inHg"); // The pressure sensor returns abolute pressure, which varies with altitude. // To remove the effects of altitude, use the sealevel function and your current altitude. // This number is commonly used in weather reports. // Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m. // Result: p0 = sea-level compensated pressure in mb p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO) Serial.print("relative (sea-level) pressure: "); Serial.print(p0,2); Serial.print(" mb, "); Serial.print(p0*0.0295333727,2); Serial.println(" inHg"); // On the other hand, if you want to determine your altitude from the pressure reading, // use the altitude function along with a baseline pressure (sea-level or other). // Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb. // Result: a = altitude in m. a = pressure.altitude(P,p0); Serial.print("computed altitude: "); Serial.print(a,0); Serial.print(" meters, "); Serial.print(a*3.28084,0); Serial.println(" feet"); } else Serial.println("error retrieving pressure measurement\n"); } else Serial.println("error starting pressure measurement\n"); } else Serial.println("error retrieving temperature measurement\n"); } else Serial.println("error starting temperature measurement\n"); delay(5000); // Pause for 5 seconds. }
برای دریافت کتابخانه و سورس کد اینجا کلیک کنید. امیدوارم که این آموزس هم برای شما مخاطبین عزیز مفید واقعشدهباشد.
منبع: سیسوگ