مطالب آموزشیمطالب علمیمعرفی و مقایسه

آموزش گام به گام آردوینو بخش سوم: کار با ورودی و خروجی‌های آنالوگ

در بخش‌های قبلی، با مفاهیم پایه الکترونیک، ساختار برنامه‌نویسی آردوینو و کار با ورودی/خروجی‌های دیجیتال آشنا شدیم. دیجیتال فقط دو حالت دارد: صفر یا یک، خاموش یا روشن. اما دنیای واقعی پر از مقادیر پیوسته است: نور محیط می‌تواند کمرنگ یا پررنگ باشد، دما می‌تواند ۲۳/۵ درجه باشد، و صدا می‌تواند آرام یا بلند باشد. در این بخش، یاد می‌گیریم چگونه این مقادیر پیوسته (آنالوگ) را با آردوینو بخوانیم و تولید کنیم.


فهرست محتوای بخش سوم


فصل ۱: مفهوم سیگنال آنالوگ و تفاوت آن با دیجیتال

۱.۱ سیگنال دیجیتال در مقابل سیگنال آنالوگ

برای درک بهتر، یک لامپ را تصور کنید:

  • کنترل دیجیتال: لامپ یا کاملاً روشن است یا کاملاً خاموش. حالت بینابین وجود ندارد .
  • کنترل آنالوگ: لامپ می‌تواند با شدت‌های مختلف روشن شود؛ مثل دیمرهای منزل که نور را تنظیم می‌کنند.

در الکترونیک:

  • سیگنال دیجیتال: فقط دو سطح ولتاژ دارد (معمولاً ۰ ولت و ۵ ولت). در آردوینو، این سیگنال‌ها را با digitalRead و digitalWrite مدیریت می‌کنیم .
  • سیگنال آنالوگ: ولتاژ آن در یک بازه پیوسته تغییر می‌کند (مثلاً از ۰ تا ۵ ولت). سنسور دما، پتانسیومتر (ولوم)، و سنسور نور نمونه‌هایی از منابع سیگنال آنالوگ هستند .

۱.۲ میکروکنترلر و دنیای دیجیتال

میکروکنترلرهای آردوینو در هسته خود دیجیتال هستند و فقط صفر و یک را می‌فهمند. پس چطور می‌توانند مقادیر آنالوگ را بخوانند؟

پاسخ: مبدل آنالوگ به دیجیتال (ADC – Analog to Digital Converter). این قطعه داخلی، ولتاژ آنالوگ ورودی را به یک عدد دیجیتال تبدیل می‌کند .

ویژگی‌های ADC در آردوینو Uno:

  • تفکیک‌پذیری (Resolution): ۱۰ بیت. یعنی مقادیر بین ۰ تا ۱۰۲۳ (۲^۱۰ حالت مختلف).
  • ولتاژ مرجع: معمولاً ۵ ولت. یعنی ولتاژ ۰ ولت → عدد ۰، ولتاژ ۵ ولت → عدد ۱۰۲۳، ولتاژ ۲/۵ ولت → عدد تقریباً ۵۱۲.
  • پین‌های آنالوگ: روی برد Uno، پین‌های A0 تا A5 برای ورودی آنالوگ اختصاص داده شده‌اند .

رابطه ریاضی:


فصل ۲: ورودی آنالوگ – آشنایی با پتانسیومتر

۲.۱ پتانسیومتر چیست؟

پتانسیومتر در واقع همان “ولوم” یا مقاومت متغیر است. با چرخاندن دستگیره آن، مقاومت تغییر می‌کند و در نتیجه ولتاژ نقطه میانی آن تغییر می‌کند .

ساختار: پتانسیومتر سه پایه دارد:

  • پایه‌های کناری: به ولتاژ (۵ ولت) و زمین (GND) وصل می‌شوند.
  • پایه میانی (ویپر): به پین آنالوگ آردوینو وصل می‌شود. ولتاژ این پایه بین ۰ تا ۵ ولت تغییر می‌کند.

۲.۲ تابع analogRead

برای خواندن مقادیر آنالوگ از تابع analogRead(pin) استفاده می‌کنیم .

مثال ساده: خواندن مقدار پتانسیومتر و نمایش در Serial Monitor.

پروژه عملی ۱: نمایش ولتاژ
کد بالا را اجرا کنید. پتانسیومتر را بچرخانید و اعداد نمایش داده شده در Serial Monitor را مشاهده کنید. حالا با فرمول زیر ولتاژ را محاسبه کنید:


فصل ۳: کار با سنسورهای آنالوگ (مثال LDR)

۳.۱ سنسور نور (LDR – Light Dependent Resistor)

LDR مقاومتی است که مقدار آن با شدت نور محیط تغییر می‌کند. هرچه نور بیشتر باشد، مقاومت کمتر می‌شود .

برای استفاده از LDR با آردوینو، باید یک مدار تقسیم ولتاژ بسازیم:

![مدار تقسیم ولتاژ با LDR: LDR بین ۵ ولت و پین A1 وصل می‌شود و یک مقاومت ثابت (مثلاً ۱۰ کیلواهم) بین پین A1 و GND قرار می‌گیرد.]

  • اگر نور زیاد شود: مقاومت LDR کم می‌شود ← ولتاژ پین A1 کاهش می‌یابد.
  • اگر نور کم شود: مقاومت LDR زیاد می‌شود ← ولتاژ پین A1 افزایش می‌یابد.

۳.۲ کد خواندن سنسور نور

۳.۳ تابع map برای تغییر محدوده

گاهی می‌خواهیم محدوده ۰ تا ۱۰۲۳ را به محدوده دیگری مثلاً ۰ تا ۲۵۵ تبدیل کنیم. تابع map این کار را انجام می‌دهد .

مثال عملی: با افزایش نور محیط، LED کمرنگ‌تر شود (عکس‌العمل معکوس):

۳.۳ تابع constrain برای محدود کردن

گاهی مقدار خروجی ممکن است از محدوده خارج شود. constrain مقدار را در بازه مشخصی نگه می‌دارد .


فصل ۴: خروجی آنالوگ – مفهوم PWM

۴.۱ مشکل خروجی آنالوگ واقعی

آردوینو Uno خروجی آنالوگ واقعی (یعنی تولید ولتاژ قابل تنظیم مثل ۲/۳ ولت) ندارد. پس چطور می‌توانیم شدت نور LED را تنظیم کنیم یا سرعت موتور را کنترل نماییم؟

پاسخ: مدولاسیون عرض پالس (PWM – Pulse Width Modulation) .

۴.۲ PWM چگونه کار می‌کند؟

PWM یک موج مربعی با فرکانس ثابت تولید می‌کند که در آن، زمان روشن بودن (HIGH) و خاموش بودن (LOW) تغییر می‌کند.

  • Duty Cycle (نسبت روشنی): درصد زمانی که سیگنال در حالت HIGH است .
    • Duty cycle 0%: همیشه خاموش (۰ ولت)
    • Duty cycle 100%: همیشه روشن (۵ ولت)
    • Duty cycle 50%: نیمی از زمان روشن، نیمی خاموش (میانگین ۲/۵ ولت)

![نمودار PWM: سه موج با duty cycle 25%، 50% و 75% نشان داده شده است. در 25%، پالس‌ها باریک و در 75%، پالس‌ها پهن هستند.]

چشم انسان و بسیاری از قطعات الکترومکانیکی، این روشن و خاموش شدن سریع را به صورت یک مقدار میانگین (مثلاً نور کم‌تر) درک می‌کنند .

پیشنهاد ویژه

خرید قطعات الکترونیکی با ارسال سریع

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

مشاهده محصولات

۴.۳ تابع analogWrite و پین‌های PWM

برای تولید سیگنال PWM از تابع analogWrite(pin, value) استفاده می‌کنیم .

  • پارامتر اول: شماره پین (باید از پین‌های PWM پشتیبانی کند)
  • پارامتر دوم: مقدار ۰ تا ۲۵۵ (۰ = 0% duty cycle، ۲۵۵ = 100% duty cycle)

پین‌های PWM در آردوینو Uno: پین‌های ۳، ۵، ۶، ۹، ۱۰، و ۱۱ (معمولاً با علامت ~ در کنار شماره پین مشخص می‌شوند) .

۴.۴ مثال: محو شدن تدریجی LED (Fading)

۴.۵ نکات مهم درباره PWM

  • فرکانس PWM: در آردوینو Uno، فرکانس پیش‌فرض برای پین‌های ۵ و ۶ حدود ۹۸۰ هرتز و برای سایر پین‌های PWM حدود ۴۹۰ هرتز است.
  • تفکیک‌پذیری: ۸ بیت (۰ تا ۲۵۵). در برخی بردها می‌توان با analogWriteResolution این مقدار را تغییر داد.
  • کاربردها: کنترل روشنایی LED، کنترل سرعت موتور DC، تولید صداهای ساده با اسپیکر .

پروژه عملی پایان بخش سوم: دیمر هوشمند با کنترل دستی و نوری

حالا همه مفاهیم این بخش را در یک پروژه جامع ترکیب می‌کنیم. هدف: سیستمی که بتواند روشنایی یک LED را به دو صورت کنترل کند:

  1. با پتانسیومتر (کنترل دستی)
  2. با سنسور نور (کنترل خودکار بر اساس نور محیط)

قطعات مورد نیاز:

  • برد آردوینو Uno
  • ۱ عدد LED
  • ۱ عدد مقاومت ۲۲۰ اهم
  • ۱ عدد پتانسیومتر ۱۰ کیلواهم
  • ۱ عدد LDR (سنسور نور)
  • ۱ عدد مقاومت ۱۰ کیلواهم (برای مدار تقسیم ولتاژ با LDR)
  • برد بورد و سیم جامپر

نحوه بستن مدار:

![شماتیک کامل مدار: LED به پین ۹ (PWM) از طریق مقاومت ۲۲۰ اهم وصل شده است. پتانسیومتر: پایه چپ به ۵ ولت، پایه راست به GND، پایه وسط به A0. LDR: یک سر به ۵ ولت، سر دیگر به A1 و یک مقاومت ۱۰k به GND.]

قطعه اتصال
LED (آند – پایه بلند) مقاومت ۲۲۰Ω ← پین ۹
LED (کاتد – پایه کوتاه) GND
پتانسیومتر (پایه چپ) ۵ ولت
پتانسیومتر (پایه راست) GND
پتانسیومتر (پایه وسط) A0
LDR (یک سر) ۵ ولت
LDR (سر دیگر) A1
مقاومت ۱۰ کیلو اهم بین A1 و GND

کد پروژه:

توضیح کد:

  1. تعریف پین‌ها و متغیرها: همه پین‌ها و متغیرهای مورد نیاز در ابتدا تعریف شده‌اند .
  2. حالت‌های مختلف: یک متغیر mode مشخص می‌کند که سیستم در حالت دستی (پتانسیومتر) است یا خودکار (سنسور نور).
  3. تعویض حالت: با ارسال کاراکتر ‘m’ از طریق Serial Monitor می‌توان بین دو حالت جابجا شد.
  4. تبدیل مقادیر: در حالت خودکار، از map با پارامترهای معکوس استفاده شده تا با تاریک شدن هوا، LED روشن‌تر شود .
  5. اطلاع‌رسانی: Serial Monitor مقادیر خوانده شده و روشنایی نهایی را نمایش می‌دهد .

توسعه پروژه (تمرین بیشتر):

  1. اضافه کردن دکمه فیزیکی: به جای Serial Monitor، با یک دکمه فیزیکی حالت را تغییر دهید.
  2. حافظه حالت: با استفاده از حافظه EEPROM، آخرین حالت ذخیره شود تا پس از قطع برق، همان حالت بازیابی گردد.
  3. منحنی‌های غیرخطی: به جای map خطی، از توابع غیرخطی برای تنظیم روشنایی استفاده کنید (مثلاً با pow).
  4. کنترل چند LED: سه LED با رنگ‌های مختلف را همزمان کنترل کنید .

خلاصه بخش سوم

در این بخش یاد گرفتیم:

  • تفاوت سیگنال دیجیتال و آنالوگ را درک کنیم و بدانیم چرا به هر دو نیاز داریم .
  • با مبدل آنالوگ به دیجیتال (ADC) و نحوه عملکرد آن آشنا شویم .
  • از تابع analogRead برای خواندن مقادیر سنسورهای آنالوگ مثل پتانسیومتر و LDR استفاده کنیم .
  • از توابع map و constrain برای تبدیل و محدود کردن محدوده مقادیر بهره ببریم .
  • با مفهوم مدولاسیون عرض پالس (PWM) و کاربرد آن در شبیه‌سازی خروجی آنالوگ آشنا شویم .
  • از تابع analogWrite برای کنترل روشنایی LED و تولید سیگنال‌های PWM استفاده کنیم.
  • پین‌های PWM را روی برد آردوینو شناسایی کنیم .
  • یک پروژه جامع “دیمر هوشمند” را پیاده‌سازی کنیم که بین کنترل دستی و خودکار جابجا می‌شود.

در بخش چهارم، به سراغ پروژه‌های ترکیبی و نمایشگرها می‌رویم و با نمایشگرهای ۷ سگمنت و LCD کار خواهیم کرد تا بتوانیم اطلاعات را به صورت بصری به کاربر نمایش دهیم.

نوشته های مشابه

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

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

دکمه بازگشت به بالا