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

آموزش 0 تا 100 آردوینو؛ قسمت هفتم

ورودی و خروجی آنالوگ در آردوینو؛ آموزش 0 تا 100 آردوینو

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

حال تصور کنید که می‌خواهیم به جای ولتاژ 5 ولت، بر روی خروجی پایه‌های آردوینو ورودی 3.5 ولت را داشته باشیم و یا به جای تشخیص آنکه ورودی 5 ولت و یا 0 ولت منطقی باشد، انواع ولتاژهای ورودی را تشخیص دهیم.

برای این کار استفاده از همه پایه‌های میکروکنترلر امکان پذیر نیست و باید از پایه‌های خاصی استفاده کرد. این پایه‌ها همان ورودی‌ها و خروجی‌های آنالوگ در آردوینو هستند که در ادامه مورد آنها توضیح خواهیم داد؛ با بهنام رباتیک همراه باشید.

ورودی و خروجی آنالوگ در آردوینو؛ توابع ورودی آنالوگ

خروجی آنالوگ در آردوینو
خروجی آنالوگ در آردوینو

ورودی و خروجی آنالوگ در آردوینو؛ ()analogReference

این دستور مرجع ولتاژ مورد استفاده برای ورودی آنالوگ است که معمولاً حداکثر مقدار ورودی برای آن انتخاب می‌شود.

ورودی و خروجی آنالوگ در آردوینو؛ analogReference(type)

پارامتر type به عنوان یکی از موارد ورودی و خروجی آنالوگ در آردوینو، یکی از گزینه‌های زیر است:

  • Default: در این حالت ولتاژ مرجع در حالت پیش‌فرض که 5 یا 3.3 ولت (بر اساس نوع برد) است تنظیم می‌شود.
  • Internal: این مورد ولتاژ مرجع در آردوینوهای بر پایه Atmega328 را 1.1 ولت در نظر می‌گیرد و در دیگر بردها این دستور کاربردی ندارد.
  • Internal1V1: این مورد مخصوص بورد آردوینو مگا می‌باشد و ولتاژ مرجع را 1.1 ولت در نظر می‌گیرد.
  • Internal2V56: این مورد مخصوص بورد آردوینو مگا می‌باشد و ولتاژ مرجع را 2.56 ولت در نظر می‌گیرد.
  • External: این حالت در تمامی بردها کاربرد دارد و باید ولتاژی بین 0 تا 5 ولت را به پایه AREF اعمال کنید (در بردهای 3.3 ولتی حداکثر 3.3 ولت)

هشدار: هرگز ولتاژ کمتر از 0 و بیشتر از 5 یا 3.3 به AREF  اعمال نکنید. در صورتی که اعمال کردید، حتماً پارامتر External را در کد وارد کنید. در غیر این صورت، ولتاژ ورودی با ولتاژ داخلی پایه AREF اتصال کوتاه می‌شود و چیپ را می‌سوزاند!

ورودی و خروجی آنالوگ در آردوینو؛ ()analogRead

مقدار ولتاژ آنالوگ را از پین مشخص شده می‌خواند.

ورودی و خروجی آنالوگ در آردوینو؛ analogRead(pin)

پارامتر pin شماره پایه آنالوگ را مشخص می‌کند (A0، A1 و . . .). پایه‌های آنالوگ ورودی در آردوینو، 10 بیتی هستند به این معنی که ولتاژ از 0 تا حداکثر 5 یا 3.3 ولت را تبدیل به 0 تا 1023 می‌کنند که دقت این تبدیل برابر با 4.9 میلی ولت در هر واحد بین 0 تا 1023 می‌باشد. حداکثر ولتاژ ورودی برای پایه‌های آنالوگ ورودی توسط دستور analogReference() مشخص می‌گردد.

سرعت نمونه برداری آنالوگ حدود 100 میکرو ثانیه می‌باشد؛ به این معنی که در هر ثانیه حدوداً 10000 مرتبه مقدار ورودی خوانده می‌شود.

مدار زیر را ببندید و کد ارایه شده را روی آردوینو بریزید. با چرخاندن پتانسیومتر می‌توانید مقادیر ولتاژ خوانده شده را از 0 تا 1023 در سریال مانیتور مشاهده کنید:

int val = 0;

void setup()

{

  Serial.begin(9600);

}

void loop()

{

  val = analogRead(A0);    //

خواندن مقدار و ذخیره در متغیر

  Serial.println(val);     //

نمایش مقدار آنالوگ

  delay(100);

}

ورودی و خروجی آنالوگ در آردوینو؛ توابع خروجی آنالوگ

ورودی آنالوگ در آردوینو
ورودی آنالوگ در آردوینو

ورودی و خروجی آنالوگ در آردوینو؛ ()analogWrite

این دستور برای ساختن ولتاژ آنالوگ در پین مشخص شده به کار می‌رود. این ولتاژ آنالوگ توسط موج‌های مربعی PWM ساخته می‌شوند و می‌توانید از مقدار 0 تا 255 را به آن اختصاص دهید.

فرکانس پین‌های PWM معمولاً حدود 490 هرتز در برد آردوینو Uno است اما مدل‌های مشابه پین‌های شماره 5 و 6 فرکانس 980 هرتز دارند.

در بردهای آردوینو معمولاً پین‌هایی که علامت ~ در کنارشان باشد، قابلیت PWM دارند.

در برد آردوینو Due پین‌های DAC1 و DAC2 نیز قابلیت آنالوگ دارند با این تفاوت که در این پین‌ها ولتاژ آنالوگ واقعی تولید می‌شود.

برای فراخوانی analogWrite() نیازی به استفاده از دستور pinMode()  نیست.

در مدار شکل قبل یک LED به پایه 9 وصل کنید و برنامه زیر را روی آردوینو بریزید:

int ledPin = 9;

  int val = 0;

  void setup()

  {

   Serial.begin(9600);

  }

  void loop()

  {

    val = analogRead(A0);   //

ریختن مقدار ورودی در متغیر

    analogWrite(ledPin, val / 4);  //

چون ورودی ما بر حسب 0 تا 1023 است، برای آن که خروجی عددی بین 0 تا 255 باشد، آن را بر 4 تقسیم می‌کنیم.

    Serial.println(val/4);

    delay(100);

  }

دستور analogRead() مقدار عددی را بین 0 تا 1023 باز می‌گرداند و دستور analogWrite مقادیر بین 0 تا 255 را قبول می‌کند به همین دلیل یک تقسیم بر 4 به کار رفته است.

با چرخاندن پتانسیومتر، ورودی و خروجی آنالوگ در سریال مانیتور نمایش داده خواهد شد و نور LED نیز کم و زیاد می‌شود.

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

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