سنسور های فاصله سنج شارپ ، انتخاب بسیار مناسبی برای پروژه هایی است که نیاز به اندازه گیری دقیق فاصله دارند.سنسورهای فاصله سنج شارپ عمل کرد بسیار بالاتری نسبت به سایر سنسورهای IR دارند و همچنین این گونه سنسورها نسبت به ماژولهای آلتراسونیک از قیمت بسیار پایینتری برخوردار میباشند. در ادامه با مرجع تخصصی آردوینو به زبان فارسی دیجی اسپارک همراه باشید.
ماژول فاصله سنج IR Sharp GP2Y0A21F Module
ماژول فاصلهسنج IR مادون قرمز Sharp GP2Y0A21F یک سنسور اندازهگیری فاصله است که از تکنولوژی ارسال و دریافت اشعه مادون قرمز (IR) برای اندازهگیری فاصله بین سنسور و یک مانع استفاده میکند. این ماژول برای کاربردهای مختلفی از جمله رباتیک، سیستمهای ملاحی، اتوماسیون صنعتی و دیگر پروژههای الکترونیکی به کار میرود. عملکرد این ماژول بر اساس اصول انعکاس مادون قرمز است. زمانی که اشعه مادون قرمز از سنسور به موجودیتی در مسیر خود برخورد میکند، برخی از این اشعهها بازتاب میشوند و به سنسور بازمیگردند. بر اساس زمان پاسخگویی این بازتابها، ماژول فاصلهسنج قادر به تخمین فاصله بین خود و مانع است. مهمترین نکته در استفاده از این ماژول، حفاظت مناسب در برابر نور محیط است. از آنجایی که سنسور از اشعههای مادون قرمز برای اندازهگیری استفاده میکند، نور محیط میتواند به طور مستقیم تأثیر منفی بر روی دقت اندازهگیری داشته باشد. بنابراین، باید از محافظ مخصوص و یا مکانگذاری مناسب برای سنسور استفاده کنید تا نور محیط بر عملکرد آن تأثیر نگذارد.
مشخصات فنی ماژول GP2Y0A21
- فاصله اندازهگیری: ۱۰ تا ۸۰ سانتیمتر (تقریبی)
- ولتاژ کاری: ۴٫۵ تا ۵٫۵ ولت DC
- خروجی: آنالوگ (ولتاژ مستقیم متناسب با فاصله)
- جریان مصرفی: کمتر از ۳۰ میلیآمپر
- ابعاد: تقریباً ۲۹٫۵ × ۱۳ × ۲۱٫۶ میلیمتر
بررسی پایه های ماژول Sharp GP2Y0A21F
ماژول فاصلهسنج IR مادون قرمز Sharp GP2Y0A21F به طور معمول دارای سه پین است.
- Vcc (تغذیه): این پین برای تامین برق به ماژول استفاده میشود. نیاز به ولتاژ ۴٫۵ ولت تا ۵٫۵ ولت DC دارد. این پین را به منبع تغذیه مورد نظر متصل کنید.
- GND (زمین): این پین به عنوان مرجع زمین برای ماژول عمل میکند. آن را به زمین (۰ ولت) منبع تغذیهتان متصل کنید.
- Vo (خروجی): این پین خروجی ماژول است. ولتاژ آنالوگی را ارائه میدهد که به فاصلهای که توسط حسگر IR اندازهگیری شده، تناسب دارد. این ولتاژ بر اساس فاصله بین حسگر و شیء تغییر میکند. میتوانید این پین را به پین ورودی آنالوگ میکروکنترلر یا یک مبدل آنالوگ به دیجیتال (ADC) وصل کنید تا مقدار فاصله را بخوانید و پردازش کنید.
وسایل مورد نیاز
خازن ۱۰۰nF که توصیه میشود به تغذیه سنسور برای جلوگیری از نویز متصل شود
اتصالات مدار GP2Y0A21
- سیم زرد رنگ به پایه ی A0 برد آردوینو
- VCC سنسور به ۵ ولت مثبت
- GND سنسور به GND مدار
سنسور فاصله سنج 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 است لطفا راهنمایی بفرمایید
سلام
واقعا خسته نباشید
پروژه هاتون بسیار عالی و حرفه ای هستند
دقت اندازه گیری این سنسور برای فواصل بیشتر از ۲۴ سانتیمتر چقدره؟
اگه میشه از نحوه عملکرد این پروژه هم فیلم بذارید
ممنون
با سلام و تشکر از شما
برای فاصله مد نظر شما پیشنهاد نمیشود. در خصوص این پروژه فعلا ویدیویی آماده نشده است. ولی برای پروژههای جدید اقدام میکنیم.