شاید در انجام پروژه هایتان با مبحثی به نام اندازهگیری فشار برخورد کرده باشید که در نوع خودش واقعا چالش برانگیز است البته این چالش مطمنا قبل از خواندن این مقاله بوده است. حال فرض کنید به شما برای انجام یک پروژه گفته شده است که فشار نقطه X را بدست آورید. مطمنا یکی از بزرگترین سوالاتی که به ذهن میرسد این است که چطور باید این پارامتر را اندازهگیری کنیم؟ و یا انواع سوالات دیگر از جمله اینکه چطور باید برنامه بنویسیم و …
در این مقاله قصد داریم یکی دیگر از پروژه های آردوینو که شما را با یکی از روش های اندازه گیری فشار که استفاده از سنسور BMP180 است آشنا کنیم و در نهایت توسط سختافزار آردوینو برنامهنویسی و راه اندازی کنیم.
قبل از اینکه وارد مبحث عملی شویم اجازه دهید که ابتدا با چند تعریف آشنا شویم.
فشار بارومتریک چیست؟
این فشار ناشی از نیروی وارد شده توسط وزن هوای اطراف زمین به یک نقطه معین می باشد که معمولا به صورت میلی بار (mbar)، اینچ جیوه (inHg)، و یا میلی متر جیوه (mmHg) بیان می شود. فشار عادی اتمسفر در سطح دریا 1013.3 میلی بارد یا 29.92 اینچ جیوه است. نوسان این فشار معمولا نشانه ای از شرایط آب و هوایی است. افزایش فشار معمولا به معنی بهبود آب و هوا است در حالیکه فشار کم می تواند شرایط آب و هوایی غیرمنتظره را بازتاب دهد.{منبع}
سنسور BMP180 چیست؟
BMP180 يك سنسور فشار بارومتريك با دقت بالا و جريان مصرفي پايين است. اين سنسور ميتواند فشار بين 300 تا 1100 هكتوپاسكال را با دقت مطلق 0.03 هكتوپاسكال اندازه گيري نمايد. هر هكتوپاسكال معادل 100 پاسكال است. سنسور BMP180 بر اساس تكنولوژي مقاومت پيزوالكتريك يا Piezo-resistive طراحي و توليد شده. استفاده از اين تكنولوژي دقت بالا، خطي بودن و پايداري طولاني مدت را براي اين سنسور فراهم نموده است.{منبع}
مشخصات سنسور BMP180
رنج گسترده در اندازه گيري فشار بارو متريك
خروجي ديجيتال با اينترفيس I2C
رنج گسترده ولتاژ تغذيه قابل قبول
نويز پايين در اندازه گيري
كاملا كاليبره شده
قابليت اندازه گيري دما
توليد شده در قالب LLC بسيار باريك
5 × 5 ميليمتر با ارتفاع 1.2 ميليمتر
کاربرد های سنسور BMP180
دستگاه های هواشناسی
تجهیزات پزشکی
تجهیزات جهت یاب GPS
تجهیزات آزمایشگاهی و علمی
تشخیص ارتفاع
خب پس از اینکه یک آشنایی نسبی نسبت به سنسور پیدا کردیم حال نوبت به راهاندازی سنسور BMP180 رسیده است.
شماتیک راهاندازی سنسور BMP180 با آردوینو
برنامهنویسی سنسور BMP180
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | #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. } |
برای دریافت کتابخانه و سورس کد اینجا کلیک کنید.
امیدوارم که این آموزس هم برای شما مخاطبین عزیز مفید واقع شده باشد.