به نام خدا. در این مطلب آموزشی قصد به آموزش راه اندازی ماژول فاصله سنج GP2Y0A21 با استفاده از آردوینو را داریم. با دیجی اسپارک همراه باشید. سنسور های فاصله سنج شارپ ، انتخاب بسیار مناسبی برای پروژه هایی است که نیاز به اندازه گیری دقیق فاصله دارند.سنسورهای فاصله سنج شارپ عمل کرد بسیار بالاتری نسبت به سایر سنسورهای IR دارند و همچنین این گونه سنسورها نسبت به ماژولهای آلتراسونیک از قیمت بسیار پایینتری برخوردار میباشند.
سخت افزار مورد نیاز
خازن ۱۰۰nF که توصیه میشود به تغذیه سنسور برای جلوگیری از نویز متصل شود
ویژگی های ماژول GP2Y0A21
اندازه گیری در محدوده ۱۰ تا ۸۰ سانتی متر
ولتاژ کاری ۴٫۵ تا ۵ ولت DC
اندازه گیری فاصله در زاویه ۴۰ درجه
خروجی آنالوگ
زمان پاسخ ۴۰ میلی ثانیه
اتصالات مدار 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); }
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
ممنون و خسته نباشین
به نظر شما این سنسور برا استفاده تو مسابقات خوبه؟
سلام
چه مسابقاتی مد نظر شماست؟
سلام ممنونم از مطالب ارزشمندتان متاسفانه از برنامه خطا می گیرد
سلام
متاسفانه تداخلی در افزونههای سایت به وجود امده و قسمتی از کدها حذف شدند.
کدها را تصحیح کردم لطفا دوباره امتحان کنید
سلام اینو میشه گذاشت تو ربات امدادگر
اگه میشه میشه توضیح بدید چه جوریش کنم که خودکار کار کنه
واگه نمیشه گذاشت میشه بگید چه سنسور فاصله سنجی رو میشه گذاشت.
سلام بله میشه گذاشت
به صوت خود کار عمل میکنه دیگه :/
سلام میخوام یک کار کنترل فاصله انجام بهم یعنی اگه فاصله بیشتر ار ۶۰ سانتیمتر شد فرمان به یک رله داده بشه تا یک موتور راه اندازی بشه.میخوام از این سنسور استفاده کنمو سخت افزارم میکرو AVR ATMEGA16 است لطفا راهنمایی بفرمایید
سلام
واقعا خسته نباشید
پروژه هاتون بسیار عالی و حرفه ای هستند
دقت اندازه گیری این سنسور برای فواصل بیشتر از ۲۴ سانتیمتر چقدره؟
اگه میشه از نحوه عملکرد این پروژه هم فیلم بذارید
ممنون
با سلام و تشکر از شما
برای فاصله مد نظر شما پیشنهاد نمیشود. در خصوص این پروژه فعلا ویدیویی آماده نشده است. ولی برای پروژههای جدید اقدام میکنیم.