راهاندازی ماژول Gp2y0A02YK
برای بدست آوردن مقدار فاصله ابتدا باید مدار ولتاژ خروجی ماژول شارپ را توسط تابع analogRead بخوانیم و سپس آن را در فرمولی که در ادامه گفته میشود ، قرار دهید.همانطور که در دیتاشیت ماژول ذکر شده و در نمودار زیر مشاهده میکنید ، مقدار خروجی ولتاژ نسبت به تغییرات تقریبا برابر ۰ الی ۲٫۷ ولت میباشد .
پس از خواندن مقدار ولتاژ خروجی ماژول توسط ADC و تبدیل کردن به مقدار دیجیتال نمودار زیر حاصل میشود.
مقدار تقریبی فاصله بدست آمده برای ماژول GP2Y0A02YK از رابطهی زیر بدست میآید.
Distance=2583.711122992086−۲۰٫۱۹۷۸۹۷۸۵۵۴۷۱٫ADC+0.071746539329.ADC^2−۰٫۰۰۰۱۱۵۸۵۴۱۸۲٫ADC^3+0.000000068590.ADC^4
(ADC مقداری خامیست که توسط تابع analogRead بدست میآید.)
کد نویسی آردوینو
با داشتن فرمول فوق به راحتی میتوان شروع به کد نویسی کرد. در ابتدای برای نظم بخشیدن به برنامه فرمول فوق را در قالب یک تابع با تام get_Sharp_GP2Y0A02YK_Distance به صورت زیر مینویسم که ورودی تابع شماره پین ADC میباشد که به ماژول متصل است.
float get_Sharp_GP2Y0A02YK_Distance(int PinID) { // Read analog to digital converter value float ADCValue = (float)analogRead(PinID); // Convert in millimeters and return distance return( 2583.711122992086 - ۲۰٫۱۹۷۸۹۷۸۵۵۴۷۱*ADCValue + ۰٫۰۷۱۷۴۶۵۳۹۳۲۹ *pow(ADCValue,2) - ۰٫۰۰۰۱۱۵۸۵۴۱۸۲ *pow(ADCValue,3) + ۰٫۰۰۰۰۰۰۰۶۸۵۹۰ *pow(ADCValue,4) ); }
تابع فوق مقدار ADC را خوانده و در فرمول قرار میدهد و مقدار فاصله را بر حسب میلیمتر برمیگرداند. در مرحلهی آخر تابع فوق را درون برنامه استفاده میکنیم و نتایج را بر روی سریال مانیتور نرم افزار مشاهده میکنیم.
int analogPin=A0; void setup() { Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: float distance=get_Sharp_GP2Y0A02YK_Distance(analogPin); Serial.println(distance); delay(500); } float get_Sharp_GP2Y0A02YK_Distance(int PinID) { // Read analog to digital converter value float ADCValue = (float)analogRead(PinID); // Convert in millimeters and return distance return( 2583.711122992086 - ۲۰٫۱۹۷۸۹۷۸۵۵۴۷۱*ADCValue + ۰٫۰۷۱۷۴۶۵۳۹۳۲۹ *pow(ADCValue,2) - ۰٫۰۰۰۱۱۵۸۵۴۱۸۲ *pow(ADCValue,3) + ۰٫۰۰۰۰۰۰۰۶۸۵۹۰ *pow(ADCValue,4) ); }
سخت افزار مورد نیاز
آردوینو Uno
ماژول فاصله سنچ شارپ Gp2y0A02YK
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد.
سلام.
ممکنه کد رو چک کنید ببینید همه چی درسته یا نه؟؟
داده های من کلا اشتباهه…
سلام. با تمام احترام. آیا این روش رو خودتون امتحان کردین یا ترجمه اس؟؟؟؟
جواب تابع یه سری عدد بین ۴۰۰ تا ۶۰۰ هستش. که اصلا ربطی به فاصله نداره.
درود
آموزش توسط خود بنده نوشته شده است و کاملا تست شده اند.
سلام خسته نباشید
برای راه اندازی ماژول GP2Y0A21 تو کد نویسی از میانگین ۱۰۰ داده استفاده کردین(برای دقت بیشتر) و همچنین از خازن نیز در مدار برای نویز گیری استفاده کردین. آیا برای ماژول GP2Y0A02YK این قسمت ها لازم نیست؟
ممنون
با سلام
ضمن تشکر از توجه شما، سوال بسیار مناسبی را مطرح کردید، دقت کنید که بنده این آموزش را ننوشتم، ولی میتوانید از این موارد استفاده کنید که البته بسته به نوع کدها و کتابخانه مورد استفاده دارد.