در قسمت 38 از آموزش آردوینو به بررسی تشخیص چرخش با استفاده از ژیروسکوپ، تشخیص جهت و خواندن شتاب پرداختیم. در این قسمت قصد داریم درباره خروجی تصویری صحبت کنیم.
خروجیهای تصویری به آردوینو این امکان را میدهند که اطلاعات را به کاربران نمایش دهد. در همین راستا، آردوینو از طیف گستردهای از دستگاههای LED پشتیبانی میکند. در این قسمت ابتدا دربارهی خروجیهای دیجیتال و آنالوگ در آردوینو صحبت میکنیم و توضیح میدهیم که آردوینو چگونه با دیودهای نورافشان (LED) کار میکند. این مقدمه اگر هنوز با نحوهی استفاده از خروجیهای دیجیتال و آنالوگ (دستورات digitalWrite و analogWrite) یا با نحوهی استفاده از LED در مدار آشنا نیستید، نقطهی شروع خوبی است.
تمام پینهایی که میتوان از آنها برای ورودی دیجیتال استفاده کرد، میتوانند برای خروجی دیجیتال نیز مورداستفاده قرار گیرند. خروجی دیجیتال باعث میشود که ولتاژ روی یک پین یا در حالت بالا (HIGH) — برابر با ۵ یا ۳.۳ ولت بسته به نوع برد — باشد، یا در حالت پایین (LOW) — یعنی ۰ ولت. برای روشن یا خاموشکردن یک وسیله از تابع digitalWrite(outputPin, value) استفاده میشود. این تابع دو پارامتر دارد: outputPin پینی است که میخواهید کنترل کنید و value مقداری است که یا HIGH ۵ یا ۳.۳ ولت است یا LOW ۰ ولت.
برای اینکه ولتاژ پین نسبت به این فرمان واکنش نشان دهد، پین باید ابتدا در حالت خروجی (OUTPUT) تنظیم شده باشد. این کار با استفاده از دستور pinMode(outputPin, OUTPUT) انجام میشود.
اصطلاح «آنالوگ» به سطوحی اشاره دارد که میتوانند بهصورت تدریجی تا حداکثر مقدار خود تغییر کنند (برای مثال، مثل دیمر چراغ یا کنترل صدا). در آردوینو، تابعی به نام analogWrite وجود دارد که میتوان از آن برای کنترل مواردی مانند شدت روشنایی یک LED متصل به آردوینو استفاده کرد. تابع analogWrite در واقع به طور واقعی «آنالوگ» نیست، اما میتواند مانند یک سیگنال آنالوگ رفتار کند، همانطور که در ادامه خواهید دید.
این تابع از تکنیکی به نام مدولاسیون عرض پالس یا PWM (Pulse Width Modulation) استفاده میکند که با بهرهگیری از پالسهای دیجیتال، یک سیگنال شبیه به آنالوگ را شبیهسازی میکند. PWM (مدولاسیون عرض پالس) با تغییر نسبت زمان روشن بودن پالسها به زمان خاموش بودن آنها کار میکند، همانطور که در شکل ۱ نشاندادهشده است. برای شبیهسازی خروجی در سطح پایین، پالسهایی تولید میشود که فقط برای مدت کوتاهی روشن هستند.
برای شبیهسازی خروجی در سطح بالاتر، پالسها بیشتر روشن میمانند و زمان خاموش بودنشان کمتر است. وقتی این پالسها به اندازهی کافی سریع تکرار شوند (در بردهای آردوینو حدود ۵۰۰ بار در ثانیه یا بیشتر)، چشم انسان دیگر نمیتواند این چشمکزدنها را تشخیص دهد. در نتیجه، خروجی وسایلی مانند LED به نظر میرسد که بهصورت یکنواخت و نرم تغییر میکند، درحالیکه در واقع فقط نسبت زمان روشن و خاموش پالسها در حال تغییر است.

شکل 1: خروجی PWM برای مقادیر مختلف تابع analogWrite
آردوینو تنها تعداد محدودی پین دارد که میتوان از آنها برای خروجی PWM استفاده کرد. در بردهای مختلف، این پینها متفاوت هستند. در Arduino Uno و بردهای مشابهی که بر پایهی تراشهی ATmega328 ساخته شدهاند، پینهای زیر برای PWM قابل استفادهاند:
3، 5، 6، 9، 10 و 11.
در Arduino Mega میتوان از پینهای 2 تا 13 و همچنین 44 تا 46 برای خروجی PWM استفاده کرد. در Arduino Nano تنها پنج خروجی PWM وجود دارد. در بردهای جدیدتر مانند Arduino Zero ،SparkFun RedBoard Turbo و Adafruit Metro Express M0، تقریباً تمام پینهای دیجیتال از PWM پشتیبانی میکنند، به جز پینهای 2 و 7. بسیاری از پروژههایی که در ادامه معرفی میشوند از پینهایی استفاده میکنند که هم برای خروجی دیجیتال و هم PWM مناسباند، تا در صورت تغییر مدار یا آزمایش پروژههای مختلف، نیاز به سیمکشی مجدد نباشد.
اگر میخواهید از پینهای دیگری برای خروجی PWM استفاده کنید، به یاد داشته باشید که باید یکی از پینهایی را انتخاب کنید که از تابع analogWrite پشتیبانی کند، زیرا سایر پینها هیچ خروجیای تولید نخواهند کرد. بردهای Zero ،RedBoard Turbo و Metro Express M0 همچنین دارای یک پین ویژه به نام DAC مبدل دیجیتال به آنالوگ هستند که معمولاً همان پین A0 است. این پین برخلاف PWM، سیگنال آنالوگ واقعی تولید میکند. البته این خروجی برای کنترل مواردی مانند شدت روشنایی LED یا سرعت موتور مناسب نیست، زیرا در این موارد PWM عملکرد بهتری دارد، اما برای تولید سیگنالهای صوتی بسیار مفید است.
کنترل نور با استفاده از خروجی دیجیتال یا آنالوگ روشی چندمنظوره، کارآمد و بسیار رایج برای ایجاد تعامل با کاربر است. در ادامه، روشهای گوناگون کنترل چراغهای LED تکی، آرایههای LED و نمایشگرهای عددی به طور کامل بررسی شدهاند. اما نمایشگرهای متنی و گرافیکی LCD به روشهای متفاوتی نیاز دارند که در قسمتهای بعدی به آنها پرداخته خواهد شد.
LED یا دیود نوری، یک قطعهی نیمههادی است که از دو پایه تشکیل شده است: آند و کاتد. زمانی که ولتاژ پایهی آند از ولتاژ پایهی کاتد بیشتر باشد (به اندازهی مقداری که آن را ولتاژ مستقیم مینامند)، LED روشن شده و نور ساطع میکند. به طور معمول، پایهی بلندتر LED نشاندهندهی آند است و روی بدنهی آن معمولاً یک قسمت صاف یا بریدگی کوچک وجود دارد که محل کاتد را مشخص میکند. رنگ نور LED و مقدار دقیق ولتاژ لازم برای روشنشدن آن، به جنس و ساختار داخلی دیود بستگی دارد.
یک LED قرمز معمولی دارای ولتاژ مستقیم (Forward Voltage) حدود ۱٫۸ ولت است. اگر ولتاژ پایهی آند حداقل ۱٫۸ ولت بیشتر از ولتاژ پایهی کاتد نباشد، هیچ جریانی از LED عبور نمیکند و در نتیجه نوری تولید نخواهد شد. زمانی که ولتاژ آند حدود ۱٫۸ ولت بیشتر از کاتد شود، LED روشن میشود (هدایت میکند) و در عمل مانند یک اتصال کوتاه عمل میکند. به همین دلیل، برای جلوگیری از عبور جریان بیش از حد، باید حتماً از یک مقاومت محدودکنندهی جریان در مدار استفاده کنید؛ در غیر این صورت، LED در مدت کوتاه یا بلندمدت خواهد سوخت.
ممکن است نیاز باشد به دیتاشیت LED مراجعه کنید تا LED مناسب برای کاربرد خود را انتخاب کنید، بهویژه برای تعیین ولتاژ مستقیم (Forward Voltage) و حداکثر جریان مجاز.
جدولهای 1 و 2 مهمترین مشخصاتی را که باید در دیتاشیت LED بررسی کنید، نشان میدهند.

جدول 1: مشخصات کلیدی دیتاشیت: حداکثر مقادیر مطلق (Absolute Maximum Ratings)

جدول 2: مشخصات کلیدی دیتاشیت: ویژگیهای الکترو-اپتیکی (Electro-Optical Characteristics)
پینهای آردوینو در بردهای Uno ،Leonardo و Mega میتوانند تا ۴۰ میلیآمپر جریان تأمین کنند. این مقدار برای LEDهای با شدت نور متوسط کافی است، اما برای LEDهای با روشنایی بالا یا چند LED متصل به یک پین کافی نیست. در پروژه 3 نشان داده شده است که چگونه میتوان با استفاده از ترانزیستور جریان عبوری از LED را افزایش داد. بردهایی با ولتاژ ۳٫۳ ولت ظرفیت جریان کمتری دارند؛ بنابراین لازم است دیتاشیت برد خود را بررسی کنید تا از عبور جریان بیش از حد مجاز جلوگیری شود.
LEDهای چند رنگ (Multicolor LEDs) از دو یا چند LED در یک بسته فیزیکی تشکیل شدهاند. این LEDها ممکن است بیش از دو پایه داشته باشند تا امکان کنترل جداگانه رنگهای مختلف فراهم شود. باتوجهبه تنوع بستهبندیها، بهتر است دیتاشیت LED خود را بررسی کنید تا نحوه اتصال پایهها بهدرستی مشخص شود.
در کاربردهایی که نیاز به کنترل تعداد زیادی LED دارند، میتوان از روشی به نام مالتیپلکسینگ استفاده کرد. مالتیپلکسینگ با تعویض گروهی LEDها (معمولاً بهصورت ردیفها یا ستونها) بهصورت متوالی کار میکند.
۸ پین برای کنترل بخشهای یک رقم برای تمام ارقام استفاده میشوند.
۴ پین برای انتخاب اینکه کدام رقم فعال باشد استفاده میشوند.
اگر این ارقام به اندازهی کافی سریع (حداقل ۲۵ بار در ثانیه) اسکن شوند، چشم انسان تصور میکند که LEDها همواره روشن هستند و پالسها قابلمشاهده نیستند، این پدیده به نام پایداری دید (Persistence of Vision) شناخته میشود.
چارلیپلکسینگ (Charlieplexing) نیز از مالتیپلکسینگ استفاده میکند و از خاصیت قطبیت LEDها بهره میبرد (LED تنها زمانی روشن میشود که آند مثبتتر از کاتد باشد) تا بتوان با معکوس کردن قطبیت بین دو LED جابهجا شد و آنها را کنترل کرد.
LEDها میتوانند جریانی بیشتر از آنچه که چیپ آردوینو قادر به تحمل آن است مصرف کنند. دیتاشیت چیپ ATmega328P روی برد Arduino Uno، حداکثر جریان مطلق هر پین را ۴۰ میلیآمپر مشخص کرده است.
چیپ همچنین میتواند در مجموع تا ۲۰۰ میلیآمپر جریان تأمین یا جذب کند، بنابراین باید اطمینان حاصل شود که جمع جریان کل پینها از این مقدار تجاوز نکند. بهعنوانمثال، پنج پین در حالت HIGH (سورس کردن جریان) و پنج پین در حالت LOW (سینککردن جریان) که هر پین ۴۰ میلیآمپر جریان دارد، نباید از ۲۰۰ میلیآمپر کل تجاوز کند.
برای عملکرد قابلاعتماد و ایمن بهتر است که طراحی مدارها جریان را بهخوبی در محدودهی کمتر از حداکثر مطلق نگه دارد، برای مثال حداکثر ۳۰ میلیآمپر برای هر پین، تا حاشیهای ایمنی وجود داشته باشد. در کاربردهای تفریحی و هابی که ممکن است جریان بیشتری موردنیاز باشد و کاهش میزان اطمینان قابلقبول است، میتوان جریان هر پین را تا ۴۰ میلیآمپر رساند، البته به شرط آنکه محدودیتهای ۲۰۰ میلیآمپر برای کل جریان خروجی و ۲۰۰ میلیآمپر برای کل جریان ورودی (سینک) رعایت شود.
دیتاشیت مقدار ۴۰ میلیآمپر را بهعنوان حداکثر جریان مطلق اعلام کرده است، و برخی مهندسان ممکن است تمایلی نداشته باشند که پینها را نزدیک این مقدار راهاندازی کنند. بااینحال، این مقدار ۴۰ میلیآمپر قبلاً توسط Atmel کاهشیافته و بهعنوان جریانی ایمن برای پینها در نظر گرفته شده است.
در پروژهها و مثالهایی که در ادامه آمده است، از همین مقدار ۴۰ میلیآمپر بهعنوان حداکثر جریان استفاده شده است؛ اما اگر قابلیت اطمینان مدار اهمیت دارد، کاهش مقدار به ۳۰ میلیآمپر برای هر پین توصیه میشود تا یک حاشیه بیشتر ایجاد شود.
به یاد داشته باشید که بردهای ۳٫۳ ولت و حتی برخی بردهای ۵ ولت جریان کمتری تحمل میکنند:
اگر از برد دیگری استفاده میکنید، حتماً دیتاشیت برد خود را بررسی کنید.
من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.