به نام خدا. در این مطلب آموزشی قصد به آموزش راه اندازی ماژول فاصله سنج GP2Y0A21 با استفاده از آردوینو را داریم. با دیجی اسپارک همراه باشید.
سنسور های فاصله سنج شارپ ، انتخاب بسیار مناسبی برای پروژه هایی است که نیاز به اندازه گیری دقیق فاصله دارند.سنسورهای فاصله سنج شارپ عمل کرد بسیار بالاتری نسبت به سایر سنسورهای IR دارند و همچنین این گونه سنسورها نسبت به ماژولهای آلتراسونیک از قیمت بسیار پایینتری برخوردار میباشند.
سخت افزار مورد نیاز
خازن ۱۰۰nF که توصیه میشود به تغذیه سنسور برای جلوگیری از نویز متصل شود
ویژگی ها
اندازه گیری در محدوده ۱۰ تا ۸۰ سانتی متر
ولتاژ کاری ۴٫۵ تا ۵ ولت DC
اندازه گیری فاصله در زاویه ۴۰ درجه
خروجی آنالوگ
زمان پاسخ ۴۰ میلی ثانیه
اتصالات
سیم زرد رنگ به پایه ی A0 برد آردوینو
VCC سنسور به ۵ ولت مثبت
GND سنسور به GND مدار
توضیحات
سنسور فاصله سنج GP2Y0A21 در فواصل ۱۰ تا ۲۴ سانتی متر ممکن است دارای ۳+/- سانتی متر خطا داشته باشد ولی در فاصله ۲۴ تا ۸۰ سانتی متر تقریبا فاقد خطا می باشد.
در نمودار زیر مقدار فاصلهی اندازهگیری شده متناسب با ولتاژ خروجی را مشاهده میکنید. همانگونه که در نمودار مشاهده میکنید مقدار فاصلهی اندازهگیری شده متناسب با ولتاژ خروجی از یک تابع خیر خطی پیروی میکند.
برنامه آردوینو
به علت وجود نویز ، برای خواندن مقادیر این سنسور از میانگین مقادیر استفاده میکنیم به طوری که به طور مثال در یک لحظه به تعداد ۱۰۰ بار مقادیر سنسور را اندازه گیری کرده و سپس میانگین این مقادیر را محاسبه میکنیم.با استفاده از این شیوه به مقدار بسیار دقیق تری خواهیم رسید.سپس با استفاده از تابع زیر مقدار فاصله را تعیین میکنیم ( در آموزش های بعدی به نحوه ی بدست آوردن این تابع و همچنین پردازش مقادیر آنالوگ غیر خطی میپردازیم).
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 |
#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; //تبدیل کردن سانتی متر به متر /* به تعداد 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 است لطفا راهنمایی بفرمایید