#بسم_رب_ایستادگی
تبدیل ورودی آنالوگ به متغیر دیجیتال و نمایش آن در محیط سریال آردوینو
جلسه دوم:تبدیل آنالوگ به دیجیتال
یکی از ویژگی های بردها آردوینو امکان تبدیل آنالوگ به دیجیتال یا همان ADC در میکروکنترلرهای AVR است. به این ترتیب که می تواند روی یکی از هر یک از پایه های ADC آردوینو یک ولتاژ بین 0 الی حداکثر 5 ولت اعمال کرده و مقدار آن را به صورت دیجیتال در قالب اعداد دریافت نمود. در این مبحث از آموزش آردوینو ما با استفاده از یک پتانسیومتر یک ولتاژ بین صفر الی 5 ولت روی یکی از پایه های ADC آردوینو اعمال می کنیم و در نهایت مقدار دیجیتال آن را به واسطه ارتباط سریال بین آردوینو و کامپیوتر در محیط ترمینال نرم افزار Arduino (IDE) چاپ می کنیم.
قطعات مورد نیاز پروزه
:: برد آردوینو
:: یک عدد ولوم (پتانسیومتر) با مقدار 10 کیلو اهم
:: برد بورد
:: سیم جامپر برد بوردی
نقشه شماتیک پروژه
سخت افزار پروژه
مطابق دو تصویر بالا و نقشه شماتیک یک پتانسیومتر شامل سه پایه است که هر سه آن ها را به وسیله سه تکه سیم همانند تصویر به این صورت که پایه اول را به منفی منبع تغذیه یا پین GND بر روی برد آردوینو متصل و می کنیم و پایه دوم را به مثبت منبع تغذیه با ولتاژ حداکثر 5 ولت با پین 5V بر روی آردوینو متصل می کنیم و در نهایت پایه میانی پتانسیومتر را به پین آنالوگ A0 بر روی برد آردوینو متصل می کنیم.
با چرخاندن شفت پتانسیومتر مقدار مقاومت بین پایه شماره دو که می توان آنرا پایه مشترک نیز نامگذرای نمود با پایه شماره یک تغییر می کند و همچنین همزمان این تغییر مقدار مقاومت برای پایه دو و پایه سه پتانسیومتر نیز اتفاق می افتد. به این ترتیب حالت تقسیم مقاومت در مدار به وجود می آید.
حال هر چقدر شفت پتانسیومتر را در جهت پایه شماره یک پتانسیومتر که به منفی تغذیه متصل شده است بچرخانیم ولتاژ اعمال شده بر روی پایه ADC آردوینو کمتر شده و به صمت صفر میل می کند. و بلعکس زمانیکه شفت پتانسیومتر را در جهت پایه شماره سه پتانسیومتر که به ولتاژ مثبت 5 ولت متصل شده است بچرخانیم، ولتاژ اعمال شده بر روی پایه ADC آردوینو بیشتر شده و به سمت 5 ولت میل می کند. در نتیجه طبق توضیحات داده شده ما می توانیم با چرخاندن پتانسیومتر یک ولتاژ بین صفر الی 5 ولت به پایه ADC آردوینو اعمال کنیم که این ولتاژ همان ولتاژ آنالوگ است.
شرح عملکرد واحد ADC آردوینو
حال برد Arduino توسط مبدل آنالوگ به دیجیتال داخلی خود یا همان ADC، ولتاژ اعمال شده به پایه آنالوگ A0 آردوینو را به مقدار دیجیتال در بازه 0 الی 1023 تبدیل می کند. زمانیکه ولتاژ اعمال شده به پایه ADC آردوینو توسط پتانسیومتر به سمت 0 میل می کند، مقدار دیجیتال آن نیز به سمت صفر میل می کند به طوریکه اگر ولتاژ صفر ولت بر روی پایه آنالوگ A0 آردوینو اعمال شود مقدار عدد دیجیتال آن نیز صفر می شود و بلعکس اگر ولتاژ اعمال شده به پایه ADC آردوینو توسط پتانسیومتر به سمت مثبت 5 ولت میل کند، مقدار دیجیتال آن نیز به سمت عدد 1023 میل می کند به طوریکه اگر ولتاژ مثبت 5 ولت بر روی پایه آنالوگ A0 آردوینو اعمال شود مقدار عدد دیجیتال آن نیز برابر با 1023 می شود.
برقراری ارتباط سریال در آردوینو
تنها کاری که برای برقراری ارتباط سریال لازم است انجام دهید، استفاده از دستور زیر است. توسط دستور زیر می توانید ارتباط سریال را پیکر بندی کنید. برای ارتباط سریال نیاز است تا یک باود ریت (پهنای باند) برای پردازشگر آردوینو تعریف نمائید. لازم به ذکر است این مقدار باید در هر دو دستگاه که در اینجا برد آردوینو و کامپیوتر است باید یکسان باشد.
Serial.begin(9600); |
خواندن مقدار آنالوگ و تبدیل آن به دیجیتال در آردوینو
در ادامه برنامه نویسی در حلقه اصلی برنامه احتیاج داریم تا یک متغیر برای ذخیره مقدار اندازه گیری شده مبدل آنالوگ به دیجیتال یا همان ADC نیاز داریم. لازم به ذکر است در اینجا ما به متغیری نیاز داریم که بتواند عدد 0 الی 1023 را در خود جای دهد که در اینجا متغییر نوع Int انتخاب مناسبی است. حال با دستور زیر این متغیر را ایجاد می کنیم. و در ادامه آن توسط دستور analogRead() مقدار آنالوگ را به دیجیتال تبدیل نموده و در متغیر می ریزیم. لطفا توجه داشته باشید چون در این مثال ما از پایه آنالوگ A0 آردوینو برای عملیات ADC استفاده کرده ایم باید درون پردانتز موجود در دستور analogRead() عبارت A0 را درج کنیم.
int sensorValue = analogRead(A0); |
چاپ مقدار متغیر در محیط سریال توسط آردوینو
کار تمام است، تا به اینجا کار ما ارتباط سریال را پیکربندی کردیم و در ادامه مقدار آنالوگ را به دیجیتال تبدیل و در یک متغیر به نام sensorValue از جنس Int ریختیم. حالا فقط یک قدم به پایان کار مانده است و آن هم چاپ مقدار متغیر sensorValue در محیط سریال است. که این کار به راحتی توسط دستور Serial.println() قابل انجام است. برای اینکه این دستور کامل شود تنها لازم است در داخل پرانتز نام متغیری که می خواهیم چاپ کنیم را همانند دستور زیر درج نمائیم.
Serial.println(sensorValue);
یا همان analogRead(A0)را پرینت کنیم
Serial.println(analogRead(A0)); |
ایجاد تاخیر در برنامه آردوینو
در انتهای برنامه برای اینکه تاخیر کوچکی در بین چاپ مقادیر ایجاد کنیم از دستور delay(); استفاده می کنیم. برای استفاده از این دستور کافی است مدت زمانی که می خواهیم تاخیر ایجاد شود را در واحد میلی ثانیه در داخل پرانتز وارد نمائید.
delay(1); |
سورس کد برنامه در نرم افزار آردوینو
void setup() { Serial.begin(9600); }
void loop() { int sensorValue = analogRead(A0); Serial.println(sensorValue); delay(1); } |
دیدن آن در برنامه ی آردوینو
با گرفتن Shift+ctrl+M به صورت عدرد نمایش داده می شود و با گرفتن Shift+ctrl+L به صورت نمودار نمایش داده می شود