آموزش آردینو (قسمت ۳)

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

همان طور که میدانید آردینو مبدل دیجیتال به آنالوگ ندارد ولی می توان این حالت را با PWM شبیه سازی کرد.

برای شروع مداری مانند شکل زیر ایجاد کنید که شامل یک عدد LED یک عدد مقاومت ۳۳۰ اهم یا ۴۷۰ اهم و یک عدد ولوم یا پنانسیومتر که مقدار ولوم مهم نیست و هر ولوم در دسترس می توان استفاده کرد من از یک ولوم ۱۰ کیلو استفاده کرده ام

توابعی که در این برنامه استفاده خواهیم کرد analogRead و analogWrite هستند که به ترتیب به توضیح آنها خواهیم پرداخت.

۱-analogRead

این تابع مقدار ولتاژ پایه مورد نظر را خوانده و عددی بین صفر تا ۱۰۲۳ را بر میگرداند که صفر به ازای صفر ولت و ۱۰۲۳ به ازای ۵ ولت

در آردینو UNO  شش پایه برای خواندن مقدار آنالوگ وجود دارد با نام های A0 تا A5

بجای pinName نام پایه مورد نظر را می نویسیم تابع بالا پس از خواندن مقدار آنالوگ نتیجه را در Value ذخیره میکند.

چون Value عددی بین ۰ تا ۱۰۲۳ است برای تبدیل آن به ولتاژ می توان با یک تناسب ساده ولتاژ را بدست آورد

یک مثال:

کد زیر را در آردینو نوشته و بر روی برد خود آپلود کنید و با کم و زیاد کردن ولوم نتیجه را مشاهده کنید.

مثال بالا مقدار پایه A0 را خوانده و سپس با توجه به مقدار آن led را روشن خاموش می کند که در نتیجه با کم و زیاد کردن ولوم سرعت چشمک زدن LED نیز کم و زیاد میشود.

همان طور که مشاهده می کنید یک متغیر با نام sensorValue تعریف کرده ایم و همچنین پایه ۹ را بصورت خروجی تعریف کرده ایم سپس با دستور analogRead مقدار پایه A0 را خوانده و در متغیر sensorValue ذخیره کرده ایم و سپس در خط ۱۲  led را روشن کرده و در خط ۱۳ به مقدار sensorValue تاخیر ایجاد کرده ایم در خط ۱۴ LED خاموش شده و در خط ۱۵ تاخیری به میزان sensorValue ایجاد شده.و همیمن روند مدام تکرار میشود.

فیلم نتیجه کار:

 

۲-analogWrite

همان طور که میدانید اکثر برد های آردینو یا همان میکرو کنترلر های Avr خروجی آنالوگ ندارد یعنی نمیتوان در پایه های آن ولتاژ دلخواه مانند ۱٫۵ ولت را ایجاد کرد و فقط پایه های آن یا یک و یا صفر هست که منظور از یک همان ۵ ولت (۵ ولت در میکرو های ۵ ولتی و ۳٫۳ ولت در میکرو های ۳٫۳ ولتی) و منظور از صفر همان صفر ولت است. حال برای شبیه سازی این حالت از تکنیکی بنام PWM یا مدلاسیون پهنای باند استفاده میشود. بهترین معنی که به نظرم میشه برای این تکنیک بیان کرداین هست : روشی برای گرفتن نتیجه ی آنالوگ در حالت دیجیتال

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

analogwrite

همان طور که میبینید با صفر و یک کردن پایه مورد نظر سیگنالی تولید خواهد شد مانند شکل بالا چیزی که در تولید این موج مهم هست زمان روشن و خاموش بودن پایه هست در مثال LED که الان کار خواهیم کرد هرچه زمان یک بودن سیگنال نسبت به صفر بودن آن زیاد باشد یا به عبارت دیگر دیوتی سایکل زیاد باشد نور LED بیشتر خواهد بود و بر عکس

دوره کاری یا duty Cycle : به زمان یک بودن یک سیگنال در یک دوره را دیوتی سایکل (duty Cycle)میگویند و بصورت درصد می باشد

حال به نحوه استفاده از دستور analogWrite نگاه کنید:

که بجای pinname شماره پایه مورد نظر نوشته بشه. همچنین باید پایه ای باشد که این حالت رو پشتیبانی کنه در آردینو UNO پایه های ۳-۵-۶-۹-۱۰-۱۱ دارای PWM هستند.

و بجای Value باید عددی بین ۰ تا ۲۵۵ نوشته بشه که در اصل این عدد بیانگر دیوتی سایکل هست و عدد صفر به معنای ۰ درصد و ۲۵۵ به معنای ۱۰۰ درصد هست.

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

مثال کم و زیاد کردن نور LED با ولوم :

در مثال بالا مقدار ولوم خوانده شده و  موج pwm با دیوتی سایکل متناسب با آن در پایه ۹ ایجاد شده چون مقدار آنالوگ به دیجیتال بین ۰ تا ۱۰۲۳ هست و pwm مقدار بین ۰ تا ۲۵۵ را قبول میکند با یک تناسب ساده مقدار را خوانده شده را به عددی بین ۰ تا ۲۵۵ تبدیل کردیم در خط ۱۲ (۲۵۵/۱۰۲۳)

6 دیدگاه در “آموزش آردینو (قسمت ۳)

    1. سلام
      ممنون لطف دارین خیلی دوست دارم ادامه بدم
      ولی وقت کم میارم
      احتمال میدم بعد تابستون وقتم زیادتر بشه ولی یه چند تا آموزش دارم اماده میکنم چند روز اینده منتشر میشه

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

    1. سلام ممنون.
      متاسفانه بعضی مسایل باعث میشه که نتونم آموزش ها رو ادامه بدم احتمالا پاییز و زمستان روند آموزش ها ادامه پیدا کنه

  2. سلام مرسی که هستین…
    من تمام کلاسهای AVR رو گذروندم و در حال حاضر چند پروژه برنانه نویسی کردم و همچنان مشغولم.
    میخوام بگم اگه با شما ۹ سال پیش اشنا میشدم هم خرجم کمتر بود هم یادگیری بیشتر.
    خیلی خوب اموزش میدی شما!!! آفرین.بازم ممنون

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

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