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

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

ماژول-فاصله-سنج-gp2y0a21
نوشته شده توسط علیرضا قربانی

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

 


ماژول فاصله سنج IR Sharp GP2Y0A21F Module


ماژول فاصله‌سنج IR مادون قرمز Sharp GP2Y0A21F یک سنسور اندازه‌گیری فاصله است که از تکنولوژی ارسال و دریافت اشعه مادون قرمز (IR) برای اندازه‌گیری فاصله بین سنسور و یک مانع استفاده می‌کند. این ماژول برای کاربردهای مختلفی از جمله رباتیک، سیستم‌های ملاحی، اتوماسیون صنعتی و دیگر پروژه‌های الکترونیکی به کار می‌رود. عملکرد این ماژول بر اساس اصول انعکاس مادون قرمز است. زمانی که اشعه مادون قرمز از سنسور به موجودیتی در مسیر خود برخورد می‌کند، برخی از این اشعه‌ها بازتاب می‌شوند و به سنسور بازمی‌گردند. بر اساس زمان پاسخگویی این بازتاب‌ها، ماژول فاصله‌سنج قادر به تخمین فاصله بین خود و مانع است. مهمترین نکته در استفاده از این ماژول، حفاظت مناسب در برابر نور محیط است. از آنجایی که سنسور از اشعه‌های مادون قرمز برای اندازه‌گیری استفاده می‌کند، نور محیط می‌تواند به طور مستقیم تأثیر منفی بر روی دقت اندازه‌گیری داشته باشد. بنابراین، باید از محافظ مخصوص و یا مکان‌گذاری مناسب برای سنسور استفاده کنید تا نور محیط بر عملکرد آن تأثیر نگذارد.

 


مشخصات فنی ماژول GP2Y0A21


  • فاصله اندازه‌گیری: ۱۰ تا ۸۰ سانتی‌متر (تقریبی)
  • ولتاژ کاری: ۴٫۵ تا ۵٫۵ ولت DC
  • خروجی: آنالوگ (ولتاژ مستقیم متناسب با فاصله)
  • جریان مصرفی: کمتر از ۳۰ میلی‌آمپر
  • ابعاد: تقریباً ۲۹٫۵ × ۱۳ × ۲۱٫۶ میلی‌متر

 


بررسی پایه های ماژول Sharp GP2Y0A21F


ماژول فاصله‌سنج IR مادون قرمز Sharp GP2Y0A21F به طور معمول دارای سه پین است.

 

  • Vcc (تغذیه): این پین برای تامین برق به ماژول استفاده می‌شود. نیاز به ولتاژ ۴٫۵ ولت تا ۵٫۵ ولت DC دارد. این پین را به منبع تغذیه مورد نظر متصل کنید.

 

  • GND (زمین): این پین به عنوان مرجع زمین برای ماژول عمل می‌کند. آن را به زمین (۰ ولت) منبع تغذیه‌تان متصل کنید.

 

  • Vo (خروجی): این پین خروجی ماژول است. ولتاژ آنالوگی را ارائه می‌دهد که به فاصله‌ای که توسط حسگر IR اندازه‌گیری شده، تناسب دارد. این ولتاژ بر اساس فاصله بین حسگر و شیء تغییر می‌کند. می‌توانید این پین را به پین ورودی آنالوگ میکروکنترلر یا یک مبدل آنالوگ به دیجیتال (ADC) وصل کنید تا مقدار فاصله را بخوانید و پردازش کنید.

 


وسایل مورد نیاز


سنسور فاصله سنج GP2Y0A21

آردوینو Uno

خازن ۱۰۰nF که توصیه میشود به تغذیه سنسور برای جلوگیری از نویز متصل شود

 

 


اتصالات مدار GP2Y0A21


  • سیم زرد رنگ به پایه ی A0 برد آردوینو
  • VCC سنسور به ۵ ولت مثبت
  • GND سنسور به GND مدار

 

 

سنسور فاصله سنج GP2Y0A21 در فواصل ۱۰ تا ۲۴ سانتی متر ممکن است دارای ۳+/- سانتی متر خطا داشته باشد ولی در فاصله ۲۴ تا ۸۰ سانتی متر تقریبا فاقد خطا می باشد.

آموزش راه اندازی سنسور فاصله سنج gp2y0a21

 

در نمودار زیر مقدار فاصله‌ی اندازه‌گیری شده متناسب با ولتاژ خروجی را مشاهده می‌کنید. همانگونه که در نمودار مشاهده می‌کنید مقدار فاصله‌ی اندازه‌گیری شده متناسب با ولتاژ خروجی از یک تابع خیر خطی پیروی میکند.

آموزش راه اندازی سنسور فاصله سنج gp2y0a21

نمودار تغییرات مسافت نسبت به ولتاژ خروجی

 

 


برنامه آردوینو GP2Y0A21


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

آموزش راه اندازی سنسور فاصله سنج gp2y0a21

 

کدهای پروژه فاصله سنج GP2Y0A21 با آردوینو

 

#include <LiquidCrystal.h>



LiquidCrystal  lcd (6, 7, 8, 9, 10, 11, 12);
void setup ()
  {
  lcd.begin (16, 2);
  lcd.print ("    GP2Y0A21    ");

  delay (2000);

  }

void loop ()
  {
  float distance = average_value (100);
  float distance_m=distance/(float)100;
//تبدیل  کردن سانتی متر به متر

  /*
به تعداد ۱۰۰ بار مقدار ستسور آنالوگ را میخواینم و سپس میانگین این مقادیر را برمیگردانیم
*/


  if ( distance> 80 )
    {
    lcd.clear ();
    lcd.print ("   Out of range ");
    }
  else
    {
    lcd.home ();
    lcd.print ("distnce:");
    lcd.print (distance_m);
    lcd.print ("m");
    lcd.print ("     ");

    }
  delay (500);
  }
int average_value (int average_count)
  {
  float sum = 0;
  for ( int i = 0; i< average_count; i++ ) {
    float sensor_value = analogRead (A0); //خواندن نقدار آنالوگ سنسور
    float distance_cm = pow (3027.4 /(float) sensor_value, 1.2134);
    /*
    //با استفاه از این این عملیات مقدار آنالوک را به فاصله بر حسب سانتی متر تبدیل میکنیم
    */
    sum = sum + distance_cm;
    }
  return(sum /(float) average_count);
  }

 


تحلیل کد آردوینو


این کد یک برنامه برای اندازه‌گیری فاصله با استفاده از سنسور GP2Y0A21 (از خانواده سنسورهای اینفرارد فاصله) است و از یک صفحه نمایش مایع (LCD) برای نمایش نتایج استفاده می‌کند. بیایید به صورت مرحله به مرحله کد را تحلیل کنیم:

کتابخانه LiquidCrystal اضافه می‌شود. این کتابخانه از صفحه نمایش مایع (LCD) برای نمایش متن استفاده می‌کند.

#include <LiquidCrystal.h>

یک شیء از کلاس LiquidCrystal با نام lcd ایجاد می‌شود:

LiquidCrystal lcd(6, 7, 8, 9, 10, 11, 12);

در اینجا، پین‌های مرتبط با اتصالات کنترل LCD به آردوینو تعیین می‌شوند. در تابع setup()، LCD مقداردهی اولیه می‌شود و پیام “GP2Y0A21” نمایش داده می‌شود:

void setup() {
  lcd.begin(16, 2);
  lcd.print(”    GP2Y0A21    “);
  delay(2000);
}

تابع loop() بی‌نهایت اجرا می‌شود و اندازه‌گیری فاصله و نمایش نتایج انجام می‌شود. ابتدا تابع average_value() فراخوانی می‌شود و فاصله به سانتی‌متر اندازه‌گیری می‌شود:

void loop() {
  float distance = average_value(100);
  float distance_m = distance / (float)100;
  //تبدیل کردن سانتی متر به متر

تابع average_value() میانگین ۱۰۰ بار اندازه‌گیری فاصله را محاسبه می‌کند. ابتدا فاصله به واحد سانتی‌متر تبدیل می‌شود و سپس مقادیر اندازه‌گیری شده میانگین‌گیری می‌شوند و نتیجه برگردانده می‌شود:

int average_value(int average_count) {
  float sum = 0;
  for (int i = 0; i < average_count; i++) {
    float sensor_value = analogRead(A0); //خواندن مقدار آنالوگ سنسور
    float distance_cm = pow(3027.4 / (float)sensor_value, 1.2134);
    /*
    //با استفاه از این عملیات مقدار آنالوگ را به فاصله بر حسب سانتی‌متر تبدیل می‌کنیم
    */
    sum = sum + distance_cm;
  }
  return (sum / (float)average_count);
}

در نهایت، بر اساس فاصله اندازه‌گیری شده، متن مربوطه روی صفحه نمایش نمایش داده می‌شود. اگر فاصله بیشتر از ۸۰ سانتی‌متر باشد، پیام “Out of range” نمایش داده می‌شود، در غیر این صورت فاصله به متر تبدیل و نمایش داده می‌شود:

if (distance > 80) {
  lcd.clear();
  lcd.print(”   Out of range “);
} else {
  lcd.home();
  lcd.print(“distnce:”);
  lcd.print(distance_m);
  lcd.print(“m”);
  lcd.print(”     “);
}

کل کد به این صورت عمل می‌کند که ۱۰۰ بار اندازه‌گیری می‌شود و میانگین آن‌ها به عنوان فاصله نمایش داده می‌شود. اگر فاصله از ۸۰ سانتی‌متر بیشتر باشد، صفحه نمایش پیام “Out of range” نمایش داده می‌شود. در غیر این صورت، فاصله به متر تبدیل و نمایش داده می‌شود. این اندازه‌گیری‌ها به‌صورت مداوم با تأخیر ۵۰۰ میلی‌ثانیه تکرار می‌شوند.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

علیرضا قربانی

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

تبادل نظر و رفع عیب با ثبت دیدگاه

۹ دیدگاه

  • سلام اینو میشه گذاشت تو ربات امدادگر

    اگه میشه میشه توضیح بدید چه جوریش کنم که خودکار کار کنه

    واگه نمیشه گذاشت میشه بگید چه سنسور فاصله سنجی رو میشه گذاشت.

  • سلام میخوام یک کار کنترل فاصله انجام بهم یعنی اگه فاصله بیشتر ار ۶۰ سانتیمتر شد فرمان به یک رله داده بشه تا یک موتور راه اندازی بشه.میخوام از این سنسور استفاده کنمو سخت افزارم میکرو AVR ATMEGA16 است لطفا راهنمایی بفرمایید

  • سلام
    واقعا خسته نباشید
    پروژه هاتون بسیار عالی و حرفه ای هستند
    دقت اندازه گیری این سنسور برای فواصل بیشتر از ۲۴ سانتیمتر چقدره؟
    اگه میشه از نحوه عملکرد این پروژه هم فیلم بذارید
    ممنون