آردوینو آموزش آردوینو

نحوه استفاده و عملکرد مبدل آنالوگ به دیجیتال ADC در آردوینو Arduino

نوشته شده توسط معین صابری

بردهای آردویینو یکی از بردهای پرمصرف و کاربردی در پروژه های مختلف به شمار می رود. این بردها که از میکروکنترلرهایی با هسته AVR و یا آرم بهره می برند، دارای امکانات جانبی زیادی هستند. وجود تایمرهای داخلی، ایجاد فرکانس PWM در خروجی، پروتکل های ارتباطی نظیر I2C، SPI USART از قابلیت های مهم این بردها، به شمار می رود. در این آموزش، به بررسی یکی از مهم ترین امکانات بردهای آردوینو، مبدل آنالوگ به دیجتال و یا ADC، می پردازیم. به کمک این قابلیت می توانیم سیگنال های پیوسته یا آنالوگ را به سیگنال های دیجیتال و یا گسسته که برای پردازنده قابل فهم است، تبدیل کنیم. راه اندازی و استفاده از این قابلیت دارای الزامات و نکاتی است که در این آموزش به شرح کامل آن، می پردازیم. در ادامه با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید.

 


معرفی مبدل آنالوگ به دیجیتال ADC


مبدل آنالوگ به دیجیتال (ADC) یک قطعه الکترونیکی یا سیستم است که وظیفه تبدیل سیگنال‌های آنالوگ به سیگنال‌های دیجیتال را دارد. ADC برای ضبط و تجزیه و تحلیل سیگنال‌های آنالوگ در دستگاه‌ها و سیستم‌های دیجیتالی استفاده می‌شود.عملکرد ADC به این صورت است که ورودی آن، که می‌تواند یک سیگنال آنالوگ پیوسته باشد، توسط مبدل به سطوح دیجیتال تقسیم می‌شود. سطوح دیجیتال نمایانگر نمونه‌های گسسته از سیگنال آنالوگ هستند. سپس، این سطوح دیجیتال توسط ADC به شکل بیت‌ها، در قالب کد باینری (۰ و ۱)، تولید می‌شوند.در اصطلاحات ADC، دو مفهوم کلیدی به کار می‌روند: نرخ نمونه‌برداری (Sampling Rate) و عمق بیت (Bit Depth). نرخ نمونه‌برداری به تعداد نمونه‌هایی اشاره دارد که ADC در هر ثانیه می‌تواند بگیرد، و عمق بیت نمایانگر تعداد بیت‌های استفاده شده برای نمایش هر نمونه است که تعیین کننده دقت و رزولوشن ADC است.ADC ها در بسیاری از کاربردها مورد استفاده قرار می‌گیرند، مانند سنسورها، سیستم‌های صوتی، تلفن همراه، دستگاه‌های پزشکی، سیستم‌های کنترل صنعتی و بسیاری دیگر.به طور کلی، فرآیند تبدیل سیگنال آنالوگ به دیجیتال توسط ADC در چند مرحله انجام می‌شود. در ادامه، به برخی از مراحل اصلی در عملکرد یک ADC اشاره خواهم کرد:

نمونه‌برداری (Sampling): در این مرحله، سیگنال آنالوگ پیوسته به صورت دوره‌ای نمونه‌برداری می‌شود. این بدان معناست که سیگنال ورودی به بازه‌های زمانی کوتاه تقسیم می‌شود و در هر بازه زمانی، یک نمونه از سیگنال برداشت می‌شود. نرخ نمونه‌برداری مشخص کننده تعداد نمونه‌های گرفته شده در یک ثانیه است.

فیلتریابی (Filtering): پس از نمونه‌برداری، ممکن است نویزها و اختلالات موجود در سیگنال وارد شوند. در این مرحله، از فیلترها برای حذف نویزها و اختلالات غیرضروری استفاده می‌شود. فیلترها می‌توانند با فرآیندهای مختلفی مانند فیلترینگ میانگین متحرک یا فیلترینگ کالمن برای اصلاح سیگنال استفاده شوند.

کوانتایز (Quantization): در این مرحله، سطوح دیجیتال که معادل نمونه‌های آنالوگ هستند، تولید می‌شوند. این سطوح دیجیتال به شکل بیت‌ها (۰ و ۱) بیان می‌شوند. برای این کار، ADC از یک پایه مشخصی استفاده می‌کند که تعداد سطوح ممکن را تعیین می‌کند. به عنوان مثال، یک ADC 8 بیتی، ۲۵۶ سطح دیجیتال (۲ به توان ۸) دارد.

رمزگذاری (Encoding): در این مرحله، مقادیر سطوح دیجیتال کوانتیزه شده به شکل باینری یا کد دیگری که مشخص کننده مقدار آن است، تبدیل می‌شوند. به طور معمول، از کد باینری استفاده می‌شود، که هر سطح دیجیتال با یک الگوی باینری مشخص متناظر است.

سیگنال خروجی (Output Signal): در این مرحله، سیگنال خروجی دیجیتال، که توسط رمزگذاری تولید شده است، به صورت یک دنباله بیتی خروجی می‌شود. این دنباله بیتی ممکن است به صورت موازی یا سری از خروجی ADC عرضه شود، به تناسب با نوع ADC و نیاز کاربر.

مهمترین ویژگی‌های ADC عبارتند از:

  • نرخ نمونه‌برداری: تعداد نمونه‌های گرفته شده در هر ثانیه، که تعیین کننده حداکثر فرکانسی است که ADC می‌تواند به درستی تبدیل کند.
  • عمق بیت: تعداد بیت‌های استفاده شده برای نمایش هر نمونه، که تعیین کننده دقت تبدیل ADC است.
  • خطای کوانتیزه: خطا ایجاد شده در نتیجه تقریب‌زنی سیگنال آنالوگ توسط ADC.

بسته به نیاز و کاربردهای مختلف، ADC‌ها با ویژگی‌ها و وضوح‌های مختلفی عرضه می‌شوند. انتخاب مناسب‌ترین ADC برای یک کاربرد خاص، به توجه به نرخ نمونه‌برداری، عمق بیت، دقت، خطای کوانتیزه و سایر عوامل مرتبط، ضروری است.در علوم برق و کامپیوتر، سیگنال ها به طور کلی، به دو دسته آنالوگ و دیجیتال تقسیم می شوند. سیگنال های آنالوگ، به سیگنال های پیوسته ای گفته می شود که کلیه مقادیر صحیح و اعشاری را در بر می گیرند. مثال بارز سیگنال آنالوگ را می توان در شکل موج سینوسی دید.

How to use and operate the Arduino analog to digital converter

 

مطابق شکل فوق، یک موج سینوسی کلیه مقادیر صحیح و اعشاری در بازه های مختلف را در بر میگیرد. اما در مورد سیستم های دیجیتال نظیر بردهای آردویینو، دو مقدار ۰ و ۱ تنها مقادیر معتبر برای آن ها محسوب می شود. به عبارت دیگر، سیستم های دیجیتال ولتاژ ۰ را به عنوان ۰ منطقی و ولتاژ ۵ را به عنوان یک منطقی پذیرفته و هر ولتاژی بین این دو، نامعتبر محسوب می شود. به عبارت دیگر، سیگنال های آنالوگ قابل شناسایی و خواندن توسط یسیتم های دیجیتال نبوده و این سیگنال ها برای تراشه های دیجیتالف نامعتبر محسوب می شوند. البته در رابطه با سطح ولتاژ در سیستم های مختلف، در این آموزش به طورکامل صحبت شده که می توانید آن را مطالعه نمایید. همانطور که بیان شد، تراشه های دیجیتال نظیر میکروکنترلرهای بردهای آردویینو، تنها قادر به تحلیل و پردازش سیگنال های دیجیتال با شکل موج مربعی هستند. به همین منظور، جهت خوانش سیگنال های آنالوگ و یا پیوسته، از یک واحد به نام مبدل آنالوگ به دیجیتال(Analogue to Digital Converter) بهره برده می شود. این واحد، با تدبیل سیگنال آنالوگ به دیجتال، معادل دیجیتال یک سیگنال آنالوگ را تولید می نماید.

How to use and operate the Arduino analog to digital converter

 

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

 

در بردهای آردویینو، جهت تبدیل سیگنال آنالوگ به دیجیتال، از یک ولتاژ مرجع، جهت مقایسه استفاده می شود. برای روشن تر شدن موضوع، فرض کنید که ولتاژ مرجع ۵ ولت بوده و دقت ADC، ده بیت باشد. بدین ترتیب، در صورت اندازه گیری ۵ ولت، عدد ۱۰۲۳ و با اندازه گیری صفر ولت، عدد ۰ تولید خواهد شد. باقی اعداد اندازه گیری شده در این بازه، مقداری بین صفر الی ۱۰۲۳ بسته به ولتاژ، خواهند داشت.

How to use and operate the Arduino analog to digital converter

 

بنابراین، برای تبدیل سیگنال های آنالوگ به دیجیتال، ولتاژ سیگنال ورودی با ولتاژ مرجع مقایسه شده و با توجه به اختلاف آن، یک عدد بین ۰ الی ۱۰۲۳ به آن تخصیص داده خواهد شد. تبدیل سیگنال های آنالوگ به دیجیتال، یکی از کاربردی ترین تبدیلات در زمینه الکترونیک به شمار می رود. از آنجاییکه بسیاری از سنسور ها نظیر سنسور دما LM35 دارای خروجی آنالوگ هستند، بنابراین برای خواندن اطلاعات این نوع از سنسورها، نیاز به تبدیل آنالوگ به دیجیتال امری ضروری به شمار می رود. در قسمت های بعدی به نحوه استفاده از مبدل آنالوگ به دیجیتال در آردویینو و تعیین ولتاژ مرجع، می پردازیم.

 


کاربرد ADC در آردوینو


کاربرد ADC (مبدل آنالوگ به دیجیتال) در آردوینو بسیار گسترده است. این قابلیت به شما اجازه می‌دهد تا سیگنال‌های آنالوگ را از سنسورها و دیگر منابع ورودی دریافت کنید و آن‌ها را به صورت دیجیتال برای استفاده در برنامه‌های آردوینو تبدیل کنید. از طریق پایه‌های ورودی آنالوگ در آردوینو، می‌توانید سنسورهایی مانند سنسور دما، سنسور رطوبت، سنسور نور، سنسور فشار و غیره را به برد آردوینو متصل کنید. ADC به شما امکان می‌دهد تا خروجی آنالوگ این سنسورها را تبدیل و خواند.می‌توانید از ADC برای خواندن و کنترل ورودی‌های آنالوگ دستگاه‌های خارجی مانند پتانسیومترها، سیگنال‌های آنالوگ از دستگاه‌های صوتی و تصویری، سیگنال‌های ورودی از سنسورهای فشار و وزن و غیره استفاده کنید. ADC همچنین برای تولید سیگنال‌های آنالوگ برای کنترل خروجی‌های آنالوگی مانند موتورها، LEDها، صداگذارها و سایر دستگاه‌هایی که نیاز به سیگنال آنالوگ دارند، قابل استفاده است. با استفاده از کدی مناسب، می‌توانید ولتاژ و شدت سیگنال آنالوگ خروجی را تنظیم کنید. ADC در آردوینو به شما اجازه می‌دهد تا سیگنال‌های صوتی آنالوگ را از میکروفون‌ها یا سایر منابع صدا دریافت کنید و آنها را به صورت دیجیتال تبدیل کنید. این کاربرد می‌تواند در پروژه‌هایی مانند ساخت سنتی‌زن، اکولایزر، شبیه‌سازی صدا و غیره مفید باشد. با استفاده از ADC در آردوینو، می‌توانید سیگنال‌های آنالوگ ورودی را بررسی کنید و بر اساس آن‌ها تصمیم‌گیری و کنترل خودکار را انجام دهید. به عنوان مثال، با خواندن سیگنال‌های آنالوگ مربوط به سطح نور محیط، می‌توانید سیستم روشنایی خودکار را پیاده‌سازی کنید. ADC به شما امکان می‌دهد تا سیگنال‌های آنالوگ را مانیتور کرده و مقایسه کنید. می‌توانید با خواندن سیگنال‌های آنالوگ مربوط به ولتاژ، جریان، فشار و سایر متغیرهای فیزیکی، مقادیر را مقایسه و بررسی کنید و به صورت دیجیتال تصمیم‌گیری کنید.در کل، ADC در آردوینو یک قابلیت کاربردی است که به شما امکان می‌دهد تا سیگنال‌های آنالوگ را به دیجیتال تبدیل کنید و با آنها در برنامه‌های آردوینو کار کنید. بسیاری از سنسورها، مانند سنسورهای دما، رطوبت، نور، فشار و غیره، سیگنال‌های آنالوگ را خروجی می‌دهند. با استفاده از ADC در آردوینو، می‌توانید این سیگنال‌های آنالوگ را به سیگنال‌های دیجیتال تبدیل کنید و آنها را در برنامه‌های آردوینو استفاده کنید. با استفاده از ADC در آردوینو، می‌توانید دقت بیشتری در خواندن سیگنال‌های آنالوگ داشته باشید. ADC با استفاده از روش‌های تبدیل آنالوگ به دیجیتال، مقادیر را با دقت بالا تبدیل می‌کند و این دقت به شما امکان می‌دهد تا مقادیر دقیق‌تری را برای پردازش استفاده کنید. ADC در آردوینو به شکلی ساده و آسان قابل استفاده است. آردوینو دارای توابع کتابخانه‌ای است که امکان استفاده آسان از ADC را فراهم می‌کند. با استفاده از این توابع، می‌توانید به سادگی مقادیر سیگنال‌های آنالوگ را خوانده و در برنامه‌های آردوینو استفاده کنید. با استفاده از ADC در آردوینو، می‌توانید با انواع و اقسام سنسورها و دستگاه‌های دیگری که سیگنال‌های آنالوگ تولید می‌کنند، کار کنید. این امکان به شما اجازه می‌دهد تا پروژه‌های متنوعی را با آردوینو انجام دهید.

 


نحوه خواندن اطلاعات آنالوگ در آردوینو


همانطور که گفته شد، برد های آردویینو نظیر برد آردویینو UNO و MEGA، دارای مبدل آنالوگ به دیجیتال داخلی با دقت ۱۰ بیت هستند. برای برد آردویینو UNO، پایه های A0 الی A6 ورودی های آنالوگ محسوب می شوند. برای خواندن مقدار تبدیل شده آنالوگ به دیجیتال، از تابع زیر استفاده می کنیم.

analogRead()

در ورودی این تابع، می باست شماره خانه(کانال) ADC که قصد خواندن اطلاعات آن را داریم، می بایست وارد کنیم. به عنوان مثال برای خواندن اطلاعات از پایه صفر(A0)، به صورت زیر عمل می کنیم.

analogRead(0)

به عنوان یک مثال کامل، به کمک برنامه زیر، مقدار ورودی آنالوگ از پایه A0 را خوانده و در خروجی چاپ می کنیم.

void setup() {
  Serial.begin(9600);

}

void loop() {
 Serial.print("digital value: ");
 Serial.flush();
 Serial.println(analogRead(0));
 Serial.flush();
 delay(1000);
 Serial.print("ANALOG VALUE: ");
 Serial.flush();
 Serial.print((float)analogRead(0)*5/1023);   //تبدیل مقدار دیجیتال خوانده شده به آنالوگ، برای اینکار، با توجه به ولتاژ مرجع ۵، مقدار خوانده شده در ۵ ضرب می شود
                                              //سپس با توجه به دقت ADC، که ۱۰ بیت است(دو به توان ۱۰ منهای یک برابر با ۱۰۲۳ است) بر عدد ۱۰۲۳ تقسیم می شود
 Serial.flush();
 delay(1000);
}

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

 


ولتاژهای رفرنس آردوینو


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

ولتاژ رفرنس داخلی ۱٫۱ ولت

ولتاژ رفرنس خارجی ۰ الی ۵ ولت

ولتاژ رفرنس عادی ۵ ولت

در حالت عادی، ولتاژ رفرنس برد آردویینو ۵ ولت است. اما برای تعیین ولتاژ رفرنس به حالت خارجی و یا داخلی ۱٫۱ ولت، به صورت زیر می بایست عمل نمود.

analogReference(INTERNAL);

همچنین جهت استفاده از ولتاژ مرجع خارجی، می بایست به صورت زیر عمل کنید.

analogReference(EXTERNAL);

در رابطه با استفاده از ولتاژ مرجع خارجی، می بایست ولتاژ مورد نظر به پایه AREF متصل شود. اما پیش از اتصال، رعات نکات زیر بسیار ضروریست. در غیر اینصورت، با اتصال ولتاژ به پایه AREF و عدم رعایت نکات ایمنی زیر، برد اردویینو شما خواهد سوخت.

۱- پیش از اتصال ولتاژ به پایه AREF برای اولین بار، تابع analogReference(EXTERNAL) حتما می بایست در قسمت setup اردویینو قرار گیرد.

۲- تابع analogReference(EXTERNAL) پیش از تابع analogread می بایست فراخوانی شود.

۳- به هیچ عنوان ولتاژ کمتر از ۰ و بیشتر از ۵ به پایه AREF اعمال ننمایید.

How to use and operate the Arduino analog to digital converter

 


مزیت استفاده از ولتاژ رفرنس داخلی


همانطور که پیشتر بیان شد، برد آردویینو UNO دارای ولتاژ مرجع داخلی ۱٫۱ ولتی است. از طرفی دیگر آردویینو UNO را می توان هم از طریق کابل و هم از طریق جک آداپتور، تغذیه نمود. از آنجاییکه ولتاژ خروجی هر یک از این منابع ممکن است با یکدیگر کمی تفاوت داشته و دقیقا مقدار ۵ ولت به آردویینو نرسد، لذا این موضوع بر مبدل ADC تاثیر می گذارد. برای روشن تر شدن موضوع فوق، این مورد را در نظر بگیرید که در حالت عادی، ولتاژ مرجع ADC وابسته به ولتاژ تغذیه میکروکنترلر ATMEGA به کار رفته در برد آردویینو است. از آنجاییکه این مقدار، ممکن است در تغذیه با USB و آداپتور تفاوت داشته باشد، بنابراین مقدار اندازه گیری شده توسط ADC دو مقدار متفاوت خواهد شد. اما در صورتیکه از ولتاژ مرجع داخلی ۱٫۱ ولتی برای ADC استفاده کنید، تغییرات تغذیه هیچ تاثیری بر اندازه گیری نخواهد داشت.

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

 


وسایل مورد نیاز


انواع برد آردوینو

 


جمع بندی


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

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۸ دیدگاه

  • سلام وقت بخیر
    بنده قصد دارم از سیگنال pwm انژکتور خودرو سیگنال ۰ و ۵ ولت دریافت کنم
    و وصل به یه موتور جهت پاشش سوخت
    میخواستم زمانی که ۵ ولت رو دریافت کرد پاشش صورت بگیره و بشه میزان پاشش سوخت رو هم تعیین کرد
    ممنون میشم تو کد و سخت افزاری کمک کنید
    با تشکر فراوان

  • با عرض سلام
    چگونه میتوانم خروجی سنسور انالوگ که یک سنسور القایی است را به میلی متر در اردینو برنامه نویسی کنم؟البته با دقت دهم میلی متر
    ممنونم

    • سلام
      خروجی را به کمک آردوینو اندازه گیری کنید. اگر دقت مطلوب را به دست نیاوردید، از ماژول های ADC خارجی استفاده کنید.

  • سلام عالی بود. در مورد مدار کاهنده ولتاژ قبل از پایه ورودی انالوگ اگه میشه مطلبی بذارین . مناسبت ترین مدار برای اردوینو کدامه با تقسیم مقاومتی یا ترانس …