آردوینو پروژه های آردوینو

آموزش ماژول فاصله سنج شارپ Gp2y0A02YK با ‌آردوینو

 


راه‌اندازی ماژول Gp2y0A02YK


برای بدست آوردن مقدار فاصله ابتدا باید مدار ولتاژ خروجی ماژول شارپ را توسط تابع analogRead بخوانیم و سپس آن را در فرمولی که در ادامه گفته می‌شود ، قرار دهید.همانطور که در دیتاشیت ماژول ذکر شده  و در نمودار زیر مشاهده می‌کنید ، مقدار خروجی ولتاژ نسبت به تغییرات تقریبا برابر ۰ الی ۲٫۷ ولت می‌باشد .

Gp2y0A02YK

 

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

 

GP2Y0A02YK-آموزش-فاصله-سنج

GP2Y0A02YK-آموزش-فاصله-سنج

 

مقدار تقریبی فاصله بدست آمده  برای ماژول 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 این قسمت ها لازم نیست؟
    ممنون

    • با سلام
      ضمن تشکر از توجه شما، سوال بسیار مناسبی را مطرح کردید، دقت کنید که بنده این آموزش را ننوشتم، ولی می‌توانید از این موارد استفاده کنید که البته بسته به نوع کدها و کتابخانه مورد استفاده دارد.