آموزش آردوینوپروژه های آردوینو

آموزش اندازه گیری ارتفاع از سطح دریا با آردوینو و سنسور BMP388

BMP388 یک سنسور فشار از سطح دریا است. به دلیل دقت آن، اغلب برای تخمین ارتفاع در پهپاد ها استفاده می شود. همچنین می‌ توان از آن در ناوبری، برنامه‌های GPS و موارد دیگر استفاده کرد. در این آموزش، نحوه استفاده از سنسور ارتفاع و فشار سنج BMP388 با برد آردوینو را یاد خواهید گرفت.

 سنسور ارتفاع، فشار و دما BMP388

BMP388 یک سنسور فشار دقیق، کم مصرف و کم نویز است که فشار و دمای مطلق را اندازه گیری می کند. از آنجایی که فشار با ارتفاع تغییر می کند، می توانیم ارتفاع را نیز با دقت زیادی تخمین بزنیم. به همین دلیل، این سنسور برای کاربردهای پهپاد و ناوبری مفید است. همچنین می توانید از آن برای پروژه های دیگر استفاده کنید:

  • محاسبه سرعت عمودی؛
  • اینترنت اشیا؛
  • پیش بینی آب و هوا و ایستگاه های هواشناسی؛
  • برنامه های کاربردی مراقبت های بهداشتی؛
  • برنامه های تناسب اندام؛

همانطور که در شکل زیر نشان داده شده است، ما از سنسور BMP388 به عنوان یک ماژول استفاده می کنیم.

 سنسور ارتفاع، فشار و دما BMP388

اطلاعات فنی BMP388

جدول زیر ویژگی های کلیدی سنسور BMP388 را نشان می دهد.

محدوده عملکرد 300 تا 1250 hPa (فشار)
-40 تا +85ºC (دما)
پروتکل ارتباطی I2C و SPI
جریان مصرفی 3.4 µA @ 1Hz
دقت مطلق فشار (typ.)
P=900 …1100 hPa (T=25 … 40°C)
±0.5 hPa
دقت نسبی فشار (typ.)
P=900…1100 hPa (T=25 … 40°C)
±0.08 hPa
نویز در فشار 0.03 پاسکال
حداکثر نرخ نمونه برداری 200 هرتز

پین های ماژول BMP388

در اینجا پین اوت ماژول BMP388 است که ما از آن استفاده می کنیم.

VIN سنسور را تغذیه می کند (5 ولت)
3V3 سنسور را تغذیه می کند (3V3)
GND GND مشترک
SCK پین SCL برای ارتباط I2C
پین SCK برای ارتباط SPI
SDO پین SDO (MISO) برای ارتباط SPI
SDI پین SDA برای ارتباط I2C
پین SDI (MOSI) برای ارتباط SPI
CS پین انتخاب تراشه CS برای ارتباط SPI
INT پین وقفه

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

همانطور که قبلا ذکر شد، سنسور BMP388 از پروتکل های I2C و SPI پشتیبانی می کند.

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

برای استفاده از پروتکل ارتباطی I2C، از پین های زیر استفاده کنید (برای Arduino Uno است، اگر از مدل دیگری استفاده می کنید، پین های I2C آن را بررسی کنید):

BMP388 Arduino
SDI (SDA) A4
SCK (SCL) A5

برای استفاده از پروتکل ارتباطی SPI، از پین های زیر استفاده کنید (برای Arduino Uno است، اگر از مدل دیگری استفاده می کنید، پین های SPI آن را بررسی کنید):

BMP388 Arduino
SCK Pin 13
SDI (MOSI) Pin 11
SDO (MISO) Pin 12
CS (Chip Select) Pin 10

قطعات مورد نیاز

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

  • ماژول سنسور BMP388
  • برد آردوینو
  • برد بورد
  • سیم های جامپر
مطلب پیشنهادی:  دستور isUpperCase در آردوینو (بررسی حروف بزرگ)

BMP388 می تواند با استفاده از پروتکل های ارتباطی I2C یا SPI ارتباط برقرار کند. تصویر زیر ارتباط با پروتکل I2C را نشان میدهد:

سنسور BMP388 با برد آردوینو ارتباط I2C

از طرف دیگر، اگر می‌خواهید از پروتکل ارتباطی SPI استفاده کنید، شماتیک بعدی را دنبال کنید تا با استفاده از پین‌ های SPI، سنسور BMP388 را به آردوینو Uno متصل کنید.

آردوینو با سنسور BMP388 مدار SPI

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

کد آردوینو اندازه گیری فشار از سطح دریا

کتابخانه های مختلفی وجود دارد که با حسگر BMP388 و آردوینو سازگار هستند. در این آموزش، از کتابخانه Adafruit BMP3XX استفاده می کنیم.

مراحل بعدی را برای نصب کتابخانه در Arduino IDE خود دنبال کنید:

Arduino IDE خود را باز کنید و به Sketch > Include Library > Manage Libraries بروید.

“adafruit bmp3xx” را در کادر جستجو جستجو کنید و کتابخانه را نصب کنید.

برای استفاده از کتابخانه BMP3XX، باید کتابخانه Adafruit_Sensor را نیز نصب کنید. مراحل بعدی را برای نصب کتابخانه در Arduino IDE خود دنبال کنید:

به Sketch > Include Library > Manage Libraries بروید و «Adafruit Unified Sensor» را در کادر جستجو تایپ کنید. برای یافتن کتابخانه و نصب آن تا انتها به پایین بروید.

پس از نصب کتابخانه ها، آردوینو IDE خود را مجددا راه اندازی کنید.

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

کد با گنجاندن کتابخانه های مورد نیاز شروع می شود: کتابخانه Wire برای استفاده از I2C، کتابخانه SPI (اگر می خواهید از SPI به جای I2C استفاده کنید) و کتابخانه های Adafruit_Sensor و Adafruit_BMP3XX برای ارتباط با حسگر BMP388 استفاده میشوند.

#include <Wire.h> 
#include <SPI.h> 
#include <Adafruit_Sensor.h> 
#include "Adafruit_BMP3XX.h"

ما ترجیح می دهیم از پروتکل ارتباطی I2C با سنسور استفاده کنیم. با این حال، اگر می خواهید از SPI استفاده کنید، خطوط کد زیر پین های SPI را مشخص می کند.

#define BMP_SCK 13 
#define BMP_MISO 12 
#define BMP_MOSI 11 
#define BMP_CS 10

متغیری به نام SEALEVELPRESSURE_HPA ایجاد می شود.

#define SEALEVELPRESSURE_HPA (1013.25)

این متغیر فشار را در سطح دریا بر حسب هکتوپاسکال (معادل میلی بار) ذخیره می کند. این متغیر برای تخمین ارتفاع برای فشار معین با مقایسه آن با فشار سطح دریا استفاده می شود. این مثال از مقدار پیش فرض استفاده می کند، اما برای نتایج دقیق، مقدار را با فشار فعلی سطح دریا در محل خود جایگزین کنید.

در setup() یک ارتباط سریالی را شروع کنید.

Serial.begin(115200);

این کد به طور پیش فرض از پروتکل ارتباطی I2C استفاده می کند. خط زیر یک آبجکت Adafruit_BMP3XX به نام bmp را روی پین های I2C شروع می کند: A5 (SCL)، A4 (SDA).

if (!bmp.begin_I2C()) {

برای استفاده از SPI، باید این خط قبلی را کامنت کنید و یکی از خطوط زیر را برای SPI سخت افزاری (از پین های پیش فرض SPI استفاده کنید و پین CS را انتخاب کنید) یا SPI نرم افزاری (از هر پین) حذف کنید.

//if (! bmp.begin_SPI(BMP_CS)) { // hardware SPI mode  
//if (! bmp.begin_SPI(BMP_CS, BMP_SCK, BMP_MISO, BMP_MOSI)) { // software SPI mode

پارامترهای زیر (نمونه برداری بیش از حد و فیلتر) را برای سنسور تنظیم کنید.

bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X); 
bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X); 
bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3); 
bmp.setOutputDataRate(BMP3_ODR_50_HZ);

برای افزایش وضوح داده های خام حسگر، از oversampling پشتیبانی می کند.ما از پارامترهای نمونه برداری پیش فرض استفاده خواهیم کرد، اما شما می توانید آنها را تغییر دهید.

  • setTemperatureOversampling(): تنظیم oversampling دما.
  • setPressureOversampling(): تنظیم oversampling فشار.
مطلب پیشنهادی:  پروژه چراغ راهنمایی سه راهه با آردوینو

این متدها می توانند یکی از پارامترهای زیر را بپذیرند:

  • BMP3_NO_OVERSAMPLING
  • BMP3_OVERSAMPLING_2X
  • BMP3_OVERSAMPLING_4X
  • BMP3_OVERSAMPLING_8X
  • BMP3_OVERSAMPLING_16X
  • BMP3_OVERSAMPLING_32X

تابع setIIRFilterCoeff() ضریب فیلتر را (در نمونه ها) تنظیم می کند. می تواند یکی از موارد زیر باشد:

  • BMP3_IIR_FILTER_DISABLE (بدون فیلتر)
  • BMP3_IIR_FILTER_COEFF_1
  • BMP3_IIR_FILTER_COEFF_3
  • BMP3_IIR_FILTER_COEFF_7
  • BMP3_IIR_FILTER_COEFF_15
  • BMP3_IIR_FILTER_COEFF_31
  • BMP3_IIR_FILTER_COEFF_63
  • BMP3_IIR_FILTER_COEFF_127

در loo[()، اندازه گیری ها را از حسگر BMP388 دریافت خواهیم کرد.

ابتدا به سنسور بگویید که با bmp.performReading() خوانش های جدیدی دریافت کند.

if (! bmp.performReading()) { 
Serial.println("Failed to perform reading :("); 
return; }

سپس مقادیر دما، فشار و ارتفاع را به صورت زیر دریافت و چاپ کنید:

Serial.print("Temperature = "); 
Serial.print(bmp.temperature); 
Serial.println(" *C"); 
Serial.print("Pressure = "); 
Serial.print(bmp.pressure / 100.0); 
Serial.println(" hPa"); 
Serial.print("Approx. Altitude = "); 
Serial.print(bmp.readAltitude(SEALEVELPRESSURE_HPA)); 
Serial.println(" m");

شما هر اندازه گیری را به صورت زیر دریافت می کنید:

  • bmp.temperature: مقدار دما را برمی گرداند
  • bmp.pressure: مقدار فشار را برمی گرداند
  • bmp.readAltitude (SEALEVELPRESSURE_HPA): تخمین ارتفاع را برمی‌گرداند

پس از درج فشار سطح دریا با توجه به موقعیت مکانی خود، می توانید کد را در برد خود آپلود کنید. در Arduino IDE خود، به Tools > Boards بروید و برد مورد استفاده خود را انتخاب کنید. سپس در Tools > Port، پورت COM را انتخاب کنید.

پس از آپلود، مانیتور سریال را با نرخ باود 115200 باز کنید. مقدار ها در سریال مانیتور مثل زیر چاپ می شوند.

اندازه گیری ارتفاع با آردوینو

توجه داشته باشید که اگر ارتفاع سنسور را افزایش دهید، در خواندن ارتفاع منعکس خواهد شد. تخمین ارتفاع بسیار دقیق است. می تواند تغییرات کوچک در محدوده سانتی متر یا اینچ را تشخیص دهد. BMP388 یک سنسور فشار کوچک و بسیار دقیق است که به شما امکان می دهد ارتفاع را با دقت زیادی تخمین بزنید. سنسور دما را نیز اندازه گیری می کند. برای ناوبری در فضای باز/داخلی، هواپیماهای بدون سرنشین، ایستگاه های هواشناسی و سایر برنامه ها عالی است.

موارد موجود در فایل : سورس کامل

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

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

سوالات فنی را در انجمن سایت مطرح کنید تا در مسابقه شرکت کنید. ورود به انجمن

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *