آموزش راه اندازی سنسور فتوسل با آردوینو

سنسور فتوسل-آموزش جامع آردوینو

مقدمه

با سلام خدمت همه شما دوستان. در این جلسه قصد داریم در مورد نحوه راه اندازی فتوسل با آردوینو رو یاد بگیریم. پیش از هر چیز پیشنهاد میکنم ابتدا جلسه مربوط به این که “فتوسل چیست” را از لینک زیر مطالعه بفرمایید:

سخت افزار

راحترین راه برای اندازه گیری مقاومت سنسور فتوسل(photocell) اینه که یک پين آن به ولتاژ 5 ولت وصل بشه و پين دیگرش هم به یک مقاومت پایین کش وصل بشه. پس از آن پایه وسط بین سنسور فتوسل و مقاومت پایین کش را به یکی از پایه های ورودی آنالوگ آردوینو وصل می کنیم. شکل زیر را مشاهده کنید:

شماتیک مداری اتصال فتوسل به آردوینو

شماتیک نصب سنسور فتوسل(photocell) روی بردبرد هم در شکل زیر ملاحظه می کنید.

نحوه اتصال سنسور فتوسل به آردوینو

نرم افزار

ولتاژی که به ورودی آنالوگ آردوینو (پایه A0)وارد میشود نسبت عکس با مقاومت فتوسل دارد. طبق مداری که بسته شده و قانون تقسیم ولتاژها داریم:

((Vo = Vcc ( R / (R + Photocell

در فرمول بالا منظور از R همون مقاومت 10 کیلو اهم است و Vcc هم ولتاژ 5 ولت است و V0 هم ولتاژی است که روی پایه A0 آردوینو میفته. براحتی میتونید با داشتن سه پارامتر مقاومت فتوسل را اندازه گیری کنید. اين كارها رو خود آردوينو براي ما انجام ميده و ميتونيم عدد مربوط به اون رو از پنجره سريال مانيتور بخونيم.

ابتدا كد مربوطه رو بروي آردوينو بريزيد:

توضیح کد:

در ابتداي كد كه توضيحات مربوط به هرخط نوشته شده است. در قسمت void loop تعيين مي كنيم كه چنانچه مقدار خوانده شده از ورودي آنالوگ كمتر از 10 باشد كلمه Dark را چاپ كند و در صورتي كه كمتر از 200 باشد كلمه Dim راچاپ كند و در صورتي كه كمتر از 500 باشد كلمه Light را چاپ كند و در صورتي كه كمتر از 800 باشد كلمه Bright را چاپ كند در غير اينصورت كلمه Very bright را چاپ كند.

در اخر هم يك تاخير 1 ثانيه اي داريم كه باعث مي شود ورودي ها را بخوبي مشاهده كنيم.

پس از ارسال كد بروي آردوينو و اجراي آن پنجره سريال مانيتور را باز مي كنيم.

سنسور فتوسل - نتیجه خروجی

همانگونه كه مشاهده مي كنيد با استفاده از گذاشتن دست روي سنسور نور آن را كم و زياد مي كنيم.

برای دریافت آخرین مطالب سایت  و همچنین مطالب منحصر به فرد دیگر که در سایت منتشر نمی شوند میتوانید در کانال تلگرام ما عضو شوید و یا در اینستاگرام ما را فالوو کنید:

10 نظر

  • علی عاقبتی

    سلام مهندس قاسمی

    من از دو فتوسل استفاده کرده و از پورتهای A0,A1استفاده نمودم

    هر فتوسل را به یک مقاومت 10 کیلو اهم اتصال داده واز اتصال وسطشان مانند مقسم ولتاز خروجی برای هر پورت آنالوگ گرفتم

    برای تغذیه فتوسلها از یک منبع تغذیه جداکانه 5ولتی استفاده کردم و زمین منبع و اردینو را به هم وصل کردم

    واز کنسول برای مشاهده مقدار خروجی سنسورها استفاده کردم

    متاسفانه مقدار فتوسل دوم را صفر نشان می دهد و من نمی دانم علت چیست

    ممنون می شوم اگرراهنمایی فرمایید

    سپاس از شما

    • حامد قاسمی

      با سلام خدمت شما جناب آقای عاقبتی.
      نکته اول این که حتما مطمین بشید که سنسور شما سالم هست. این کار رو با تعویض سنسور ها انجام بدید و ببینید باز همان سنسور مشکل دارد یا خیر. اگر از سالم بودن سنسور خود مطمین شدید لطفا کد خود و یک تصویر از مدار خود بگیرید و برای ما ارسال کنید تا این موضوع دقیقتر بررسی شود.
      منتظر پاسخ جنابعالی هستم.
      موفق باشید

      • علی عاقبتی

        سلام مهندس

        فرمایش شما صحیح بود با تعویض سنسور اصلاح شد

        ممنون

        • حامد قاسمی

          خواهش میکنم.
          موفق باشید.

  • حسام الدین حبیبی

    با سلام و عرض ادب
    از مطالب اموزشی شما خیلی ممنونم
    تازه کار با این برد رو شروع کردم(در واقع برای اولین بار هستش ) رشتم مهندسی مکانیک هستش ولی درس کنترل داریم این ترم و کار با این نوع برد برای من اجباری هست ….بازم ممنونم

    • حامد قاسمی

      با سلام خدمت شما دوست گرامی.
      اگه سوالی باشه ما در خدمتتون هستیم.
      موفق باشید.

  • مهرزاد علایی

    سلام
    آیاکدی هست که بشه باهاش فهمید انجام دستورات برنامه چقدر طول میکشه ؟
    مثلا بتوان فهمید از ابتا تا انتهای حلقه void loop چقدر زمان میبره تا میکرو دستورات مختلف را اجرا کنه و دوباره بره اول کدها.
    با تشکر

    • حامد قاسمی

      با سلام. دوست عزیز
      اولین نکته ای که این وسط وجود داره که یک دستوری که نوشته میشه تبدیل به به زبان ماشین میشه و در واقع برای هر خط کد ممکنه تعداد صفر و یک های ایجاد شده متفاوت باشند و به همین علت زمان اجرای هر خط هم طبیعتا متفاوت از بقیه هست. ولی اگه بخواید در یک حدودی زمان اجرای برنامه تون رو بفهمید میتونید از نمونه کد زیر استفاده کنید:

      unsigned int time = 0;
      time = micros();

      byte test = 10;
      if(test < 20) test = 20; time = micros() - time; Serial.println(time, DEC); delay(1000);

      در این کد همونطور هم که مشخص ابتدا متغیر time تعریف شده و مقدارش برابر micros قرار گرفته شده سپس یه نمونه کد قرار داده شده و دوباره مقدار micros رو خونده و از مقدار اولیه کم کرده. طبیعتا این عدد زمان اجرای برنامه هست.
      اگه باز نکته نامفهومی وجود دارد بفرمایید تا جواب داده شود.
      موفق باشید.

      • مهرزاد علایی

        کاملا واضح وعالی ممنون از راهنماییتون.

        • حامد قاسمی

          خواهش میکنم.
          موفق باشید.

  • نوشتن نظر

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

    Optionally add an image (JPEG only)