آموزش آردوینوآموزش الکترونیک

آموزش کامل آنالوگ به دیجیتال در آردوینو – ADC Arduino (آموزش آردوینو #4)

سلام. آموزش کامل آنالوگ به دیجیتال در آردوینو – ADC Arduino (آموزش آردوینو #4) را آماده کردیم. در قسمت قبل به صورت کامل با نحوه برنامه نویسی یک پروژه ساده در Arduino و بارگذاری کد آن در برد آردوینو آشنا شدیم.

قسمت قبل : آموزش کامل کنترل LED RGB با برد Arduino – ال ای دی RGB چیست؟ (آموزش آردوینو #3)

در این قسمت به صورت کامل با مبحث آنالوگ به دیجیتال آشنا میشویم. مبحث ADC را قبلا برای میکروکنترلر های AVR توضیح داده ایم و در اینجا نیز مفهوم کلی کار یکی است.

بدلیل این که برد های آردوینو نیز اغلب از میکروکنترلر های AVR استفاده میکنند، ابتدا گریزی میزنیم به آن مطلب را مفهوم را بفهمیم.

سنسور ها و … کلا اجزای بیرون از کامپیوتر با سیگنال آنالوگ کار میکنند در صورتی که میکروکنترلر ها با سیگنال دیجیتال کار میکنند و ما برای تبدیل اطلاعات آنالوگ به دیجیتال از ADC میکروکنترلر استفاده میکنیم.

خب در ابتدا برای فهمیدن مفهوم ADC یک مثال میزنیم. به پخش کننده های موسیقی جدید دقت کنید. این پخش کننده ها در قسمت تنظیمات ولوم ابتدا و انتها ندارند. یعنی مثل انواع قدیمی آنها دارای پیچه برای تنظیم ولوم نیستند ! و با دکمه + و – صدا را کم و زیاد میکنند. حالا کم کم متوجه موضوع میشوید.

انواع روش های تبدیل سیگنال آنالوگ به دیجیتال

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

  1. روش موازی یا همزمان
  2. روش دو شیب
  3. روش پله ای
  4. روش تبدیل ولتاژ به فرکانس
  5. روش تبدیل ولتاژ به زمان
  6. روش تقریب متوالی

میکروکنترلر های AVR از روش تقریب متوالی برای ADC استفاده میکنند. در میکروکنترلر های AVR معمولا چند کانال آنالوگ به دیجیتال وجود دارد. اما هر میکروکنترلر تنها یک تبدیل کننده دارد و همه کانال ها به یک مبدل متصل میشود و کانال های مختلف با هم مالتی پلکس میشوند و اطلاعات مورد نظر را ارائه میدهند.

فرمول محاسبه مقدار دیجیتال از روی موج آنالوگ

فرمول محاسبه مقدار دیجیتال از روی موج آنالوگ

فرمول بالا نحوه محاسبه مقدار دیجیتال را نشان میدهد. در فرمول بالا مواردی داریم که نیاز به توضیح دارند :

اگر میخواهید آردوینو را به صورت اصولی و پروژه محور (ساخت ربات، ارتباط با اندروید، اینترنت اشیا، برنامه نویسی حرفه ای) یاد بگیرید، حتما دوره آموزش آردوینو را مشاهده کنید.
  • Vin : ولتاژ ورودی است یعنی ولتاژی که قرار است مقدار دیجیتال آن محاسبه شود.
  • Vref : ولتاژ مرجع است.
  • n : درجه دقت است که در میکروکنترلر های AVR اغلب دارای دقت 10 بیتی هستند که میشود برای آنها از دقت 8 نیز استفاده کرد.

دقت 10 بیتی چیست ؟

به طور مثال وقتی ولتاژ ورودی شما بین 0 تا 5 است، میکروکنترلر این فاصله را به 210 = (1024) واحد تقسیم میکند. تصویر زیر را ببینید :

دقت 10 بیتی در ADC چیست ؟

همانطور که در تصویر بالا مشاهده میکنید ولتاژ 0 تا 5 ولت به 1024 واحد دیجیتال تبدیل میشوند. و به طور مثال ولتاژ 2.5 میشود 512 واحد ADC. هر چه درجه دقت یک میکروکنترلر بالاتر باشد ، دقت محاسبه ADC در آن بالا تر است.

مشاهده مطلب کامل : آموزش کامل مبدل آنالوگ به دیجیتال ADC در میکروکنترلر های AVR (آموزش AVR #7)

حالا شما با مفهوم آنالوگ به دیجیتال یا همان ADC آشنا شدید. حالا با انجام مرحله به مرحله یک پروژه در آردوینو ، مطلب را به طور کامل جا میندازیم !!

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

آموزش جامع ADC در Arduino

در این آموزش مفهوم ADC (تبدیل آنالوگ به دیجیتال) را در ARDUINO UNO معرفی می کنیم. همانطور که در شکل زیر نشان داده شده است، برد آردوینو شش کانال ADC دارد. یک یا همه آنها می تواند به عنوان ورودی برای ولتاژ آنالوگ استفاده شود. آنالوگ به دیجیتال در برد Arduini Uno با دقت 10 بیتی (یعنی مقادیر عدد صحیح بین (0- (2 ^ 10) 1023)) است. به این معنی که ولتاژهای ورودی بین 0 تا 5 ولت را به مقادیر عدد صحیح بین 0 تا 1023 تبدیل میکند. بنابراین برای هر واحد 5/1024 = 4.9mV است.

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

در این آموزش ما پتانسیومتر را به کانال A0 متصل میکنیم و با تغییر آن ، نتیجه تبدیل آنالوگ به دیجیتال را روی ال سی دی کاراکتری نمایش مدهیم.

نحوه تبدیل مقدار آنالوگ به دیجیتال در برد های آردوینو

کانال های Analog Digital Converter دارای مقدار مرجع پیش فرض 5V هستند. این بدان معنی است که ما می توانیم حداکثر ولتاژ ورودی 5 ولت را برای تبدیل ADC در هر کانال ورودی قرار بدهیم. از آنجا که برخی از سنسورها ولتاژهای 0-2.5 ولت را ارائه می دهند ، با استفاده از یک ولتاژ مرجع 5 ولت دقت کمتری می گیریم، بنابراین ما یک دستورالعمل داریم که به ما امکان تغییر این مقدار مرجع را می دهد. بنابراین برای تغییر مقدار مرجع ما از دستور زیر استفاده میکنیم. ولتاژ مرجع مورد نظر را در بین پرانتز قرار دهید.

("analogReference ()")

به صورت پیش فرض ما حداکثر دقت ADC را که در برد آردوینو یونو 10 بیت است دریافت می کنیم، این دقت را می توان با استفاده از دستورالعمل زیر تغییر داد. این تغییر دقت ممکن است برای برخی موارد مفید واقع شود. در دستور زیر بین پرانتز بیت مورد نظر را وارد کنید.

(analogReadResolution(bit))

حالا اگر نمیخواهید این دو دستور که در بالا گفتیم را تغییر دهید نیاز به وارد کردن آنها در کد نیست و میتوانید از همان مقدار پیشفرض آن استفاده کنید. حالا می توانیم مقدار را از کانال آنالوگ به دیجیتال ‘0″ به صورت مستقیم  باتابع “((analogRead(pin)” بخوانیم ، در اینجا “pin” نشانگر پینی است که به آن سیگنال آنالوگ را وصل کردیم، در آموزش “A0” است. مقدار ADC را می توان به یک عدد صحیح تبدیل کرد. به دستور العمل زیر دقت کنید، با استفاده از دستور العمل زیر ما مقدار آنالوگ را در متغیر ADCVALUE ذخیره میکنیم.

int ADCVALUE = analogRead(A0);

توضیحات مدار لازم برای تبدیل آنالوگ به دیجیتال

مدار لازم برای تبدیل آنالوگ به دیجیتال

آردوینو به کاربر اجازه میدهد تا از ال سی دی کاراکتری در حالت 4 بیتی استفاده کند. این نوع ارتباط کاربر را قادر میسازد تا از پین های کمتری در برد آردوینو استفاده کند. این حالت به صورت پیشفرض در Arduino قرار داده شده است.

قطعات مورد نیاز این آموزش Arduino

  1. برد آردوینو Uno
  2. منبع تغذیه 5 ولت
  3. ال سی دی کاراکتری 16*2
  4. خازن 100uf
  5. خازن 100nf
  6. پتانسیومتر 100 کیلو اهم

توضیحات خط به خط و سورس کامل پروژه آنالوگ به دیجیتال

در ابتدای کد ما کتابخانه ال سی دی کاراکتری را فراخوانی میکنیم. در خط دوم پین های LCD کاراکتری را پیکربندی میکنیم. یعنی پین های Enable , d4 , d5 , d6 , d7. سپس مقدار دهی اولیه کاراکتر ADC را انجام میدهیم.

#include <LiquidCrystal.h> // فراخوانی کتابخانه ال سی دی کاراکتری
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // پین های ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN
char ADCSHOW[5]; //سایز کاراکتر آ.ب.د برای نمایش در ال سی دی

سپس به تابع void setup میرسیم. همانطور که در قسمت های قبل آموزش آردوینو گفتیم، در این قسمت پیکربندی پروژه را انجام میدهیم. در این پروژه و در این قسمت ما تعداد ستون ها و ردیف های LCD کاراکتری را تنظیم میکنیم.

void setup()
{
lcd.begin(16, 2); // تنظیم ستون ها و ردیف های LCD
}

سپس نوبت به تابع void loop میرسد. همانطور که قبلا گفتیم در این قسمت ما یک چرخه تکرار شونده را تنظیم میکنیم. دستورات این تابع به طور مداوم انجام میشوند.

در ابتدا ما در خط اول ال سی دی کاراکتری کلمه دلخواه خود را نشان میدهیم. این کلمه میتواند هرچیزی باشد ما از irenx.ir استفاده کرده ایم. در خط بعدی کد ما مکان متن irenx.ir را تنظیم میکنیم. و در خط سوم این کد نیز ، ردیف دوم ال سی دی کاراکتری را تنظیم میکنیم. تا بنویسد Natije ADC :

void loop()
{
lcd.print("IRENX.IR"); //نمایش نام اولیه
lcd.setCursor(0, 1); // تنظیم مکان نام
lcd.print("Natije ADC:"); //نمایش جمله نتیجه ADC

در قسمت بعدی ما در خط اول کد ، مقدار آنالوگ را از پین A0 دریافت میکنیم. در خط دوم با توجه به سایز کاراکتر که در قسمت اول کد انتخاب کردیم این مقدار آنالوگ را به دیجیتال تبدیل میکنیم. و در خط سوم مقدار ADC را در جلوی Natije ADC : نمایش میدهیم. در خط پنجم نیز مکان نمایش ADC را تنظیم میکنیم.

String ADCVALUE = String(analogRead(A0)); //دریافت مقدار اولیه آنالوگ
ADCVALUE.toCharArray(ADCSHOW, 5); //تبدیل مقدار خوانده شده به دیجیتال 
lcd.print(ADCSHOW); //نمایش مقدار ADC
lcd.print(" ");
lcd.setCursor(0, 0); // تنظیم مکان نمایش ADC
}

در باکس زیر کد کامل به همراه توضیح را میبینید.

#include <LiquidCrystal.h> // فراخوانی کتابخانه ال سی دی کاراکتری
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // پین های ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN
char ADCSHOW[5]; //سایز کاراکتر آ.ب.د برای نمایش در ال سی دی

void setup()
  {
lcd.begin(16, 2); // تنظیم ستون ها و ردیف های LCD
}
void loop()
  {
lcd.print(" IRENX.IR"); //نمایش نام اولیه
lcd.setCursor(0, 1); // تنظیم مکان نام
lcd.print("Natije ADC:"); //نمایش جمله نتیجه ADC
String ADCVALUE = String(analogRead(A0)); //دریافت مقدار اولیه آنالوگ
ADCVALUE.toCharArray(ADCSHOW, 5); //تبدیل مقدار خوانده شده به دیجیتال 
lcd.print(ADCSHOW); //نمایش مقدار ADC
lcd.print("   ");
lcd.setCursor(0, 0); // تنظیم مکان نمایش ADC
}

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

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. مالکیتی بر مطالب ارائه شده ندارم. اکثر فعالیت بنده در زمینه ترجمه است. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

6 نظر

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

    1. سلام. خسته نباشید. میخواید با آردوینو مگنومتر رو راه اندازی کنید ؟

        1. لطف کنید در تلگرام پیام بدید، شماره و آیدی تلگرام در صفحه تماس با ما در بالای صفحه موجود است.

  2. سلام
    امکانش هست که بعد از پروگرام کردن آردوینو اونو از کامپیوتر جدا کرد و بدون اتصال به کامپیوتر از اون استفاده کرد؟؟

    1. سلام جناب. بله بعد از پروگرام کردن میتونید جدا کنید و با تغذیه جداگانه پروژه تون رو اجرا کنید.

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

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