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

مقدمه

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

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

سخت افزار

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

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

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

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

نرم افزار

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

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

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

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

int photocellPin = 0;     // اتصال فتوسل و مقاومت 10كيلواهم به ورودي آنالوگ A0
int photocellReading;     //خواندن مقدار ورودي پورت آنالوگ
 
void setup(void) {
  // نرخ تعيين باود ريت براي ارسال داده ها بصورت سريال
  Serial.begin(9600);   
}
 
void loop(void) {
  photocellReading = analogRead(photocellPin);  
 
  Serial.print("Analog reading = ");
  Serial.print(photocellReading);     // نمايش مقدار فتوسل
 
  // We'll have a few threshholds, qualitatively determined
  if (photocellReading < 10) {
    Serial.println(" - Dark");
  } else if (photocellReading < 200) {
    Serial.println(" - Dim");
  } else if (photocellReading < 500) {
    Serial.println(" - Light");
  } else if (photocellReading < 800) {
    Serial.println(" - Bright");
  } else {
    Serial.println(" - Very bright");
  }
  delay(1000);
}

توضیح کد:

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

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

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

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

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

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

اشتراک گذاری:
مطالب زیر را حتما بخوانید

12 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • با سلام و خسته نباشید
    بنده کد رو که وارد میکنم خط آخر قرمز شده و این خطا رو میده
    expected unqualified-id before ‘<' token

    • با سلام.
      لطفا کدی که مینویسید رو به صورت کامل در جایی در اینترنت آپلود کنید و برام ما لینک آن را بفرستید تا بررسی شود.
      با تشکر.

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

    من از دو فتوسل استفاده کرده و از پورتهای 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 رو خونده و از مقدار اولیه کم کرده. طبیعتا این عدد زمان اجرای برنامه هست.
      اگه باز نکته نامفهومی وجود دارد بفرمایید تا جواب داده شود.
      موفق باشید.

دیدگاهتان را بنویسید