بردهای آردویینو یکی از بردهای پرمصرف و کاربردی در پروژه های مختلف به شمار می رود. این بردها که از میکروکنترلرهایی با هسته AVR و یا آرم بهره می برند، دارای امکانات جانبی زیادی هستند. وجود تایمرهای داخلی، ایجاد فرکانس PWM در خروجی، پروتکل های ارتباطی نظیر I2C، SPI USART از قابلیت های مهم این بردها، به شمار می رود. در این آموزش، به بررسی یکی از مهم ترین امکانات بردهای آردوینو، مبدل آنالوگ به دیجتال و یا ADC، می پردازیم. به کمک این قابلیت می توانیم سیگنال های پیوسته یا آنالوگ را به سیگنال های دیجیتال و یا گسسته که برای پردازنده قابل فهم است، تبدیل کنیم. راه اندازی و استفاده از این قابلیت دارای الزامات و نکاتی است که در این آموزش به شرح کامل آن، می پردازیم. در ادامه با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید.
شناخت مبدل آنالوگ به دیجیتال
در علوم برق و کامپیوتر، سیگنال ها به طور کلی، به دو دسته آنالوگ و دیجیتال تقسیم می شوند. سیگنال های آنالوگ، به سیگنال های پیوسته ای گفته می شود که کلیه مقادیر صحیح و اعشاری را در بر می گیرند. مثال بارز سیگنال آنالوگ را می توان در شکل موج سینوسی دید.
مطابق شکل فوق، یک موج سینوسی کلیه مقادیر صحیح و اعشاری در بازه های مختلف را در بر میگیرد. اما در مورد سیستم های دیجیتال نظیر بردهای آردویینو، دو مقدار ۰ و ۱ تنها مقادیر معتبر برای آن ها محسوب می شود. به عبارت دیگر، سیستم های دیجیتال ولتاژ ۰ را به عنوان ۰ منطقی و ولتاژ ۵ را به عنوان یک منطقی پذیرفته و هر ولتاژی بین این دو، نامعتبر محسوب می شود. به عبارت دیگر، سیگنال های آنالوگ قابل شناسایی و خواندن توسط یسیتم های دیجیتال نبوده و این سیگنال ها برای تراشه های دیجیتالف نامعتبر محسوب می شوند. البته در رابطه با سطح ولتاژ در سیستم های مختلف، در این آموزش به طورکامل صحبت شده که می توانید آن را مطالعه نمایید. همانطور که بیان شد، تراشه های دیجیتال نظیر میکروکنترلرهای بردهای آردویینو، تنها قادر به تحلیل و پردازش سیگنال های دیجیتال با شکل موج مربعی هستند. به همین منظور، جهت خوانش سیگنال های آنالوگ و یا پیوسته، از یک واحد به نام مبدل آنالوگ به دیجیتال(Analogue to Digital Converter) بهره برده می شود. این واحد، با تدبیل سیگنال آنالوگ به دیجتال، معادل دیجیتال یک سیگنال آنالوگ را تولید می نماید.
به منظور تبدیل یک سیگنال آنالوگ به دیجیتال، روش های ریاضی مختلفی، نظیر تقریب متوالی و یا سری فوریه وجود دارد. به عنوان مثال، همانطور که از سری های فوریه به خاطر داریم، هر نوع تابع پیوسته(با شرایط خاص) را می توان به یک تابع گسسته تبدیل نمود. در حقیقت، به کمک این تبدیل، می توان سیگنال های پیوسته(آنالوگ) را به سیگنال های گسسته(دیجیتال) تبدیل نمود. سری فوریه به صورت زیر، نمایش داده می شود.
در بردهای آردویینو، جهت تبدیل سیگنال آنالوگ به دیجیتال، از یک ولتاژ مرجع، جهت مقایسه استفاده می شود. برای روشن تر شدن موضوع، فرض کنید که ولتاژ مرجع ۵ ولت بوده و دقت ADC، ده بیت باشد. بدین ترتیب، در صورت اندازه گیری ۵ ولت، عدد ۱۰۲۳ و با اندازه گیری صفر ولت، عدد ۰ تولید خواهد شد. باقی اعداد اندازه گیری شده در این بازه، مقداری بین صفر الی ۱۰۲۳ بسته به ولتاژ، خواهند داشت.
بنابراین، برای تبدیل سیگنال های آنالوگ به دیجیتال، ولتاژ سیگنال ورودی با ولتاژ مرجع مقایسه شده و با توجه به اختلاف آن، یک عدد بین ۰ الی ۱۰۲۳ به آن تخصیص داده خواهد شد. تبدیل سیگنال های آنالوگ به دیجیتال، یکی از کاربردی ترین تبدیلات در زمینه الکترونیک به شمار می رود. از آنجاییکه بسیاری از سنسور ها نظیر سنسور دما LM35 دارای خروجی آنالوگ هستند، بنابراین برای خواندن اطلاعات این نوع از سنسورها، نیاز به تبدیل آنالوگ به دیجیتال امری ضروری به شمار می رود. در قسمت های بعدی به نحوه استفاده از مبدل آنالوگ به دیجیتال در آردویینو و تعیین ولتاژ مرجع، می پردازیم.
نحوه خواندن اطلاعات آنالوگ در آردوینو
همانطور که گفته شد، برد های آردویینو نظیر برد آردویینو 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); //تبدیل مقدار دیجیتال خوانده شده به آنالوگ، برای اینکار، با توجه به ولتاژ مرجع 5، مقدار خوانده شده در 5 ضرب می شود //سپس با توجه به دقت ADC، که 10 بیت است(دو به توان 10 منهای یک برابر با 1023 است) بر عدد 1023 تقسیم می شود Serial.flush(); delay(1000); }با اجرای کد فوق، مقادیر قرار گرفته بر روی پایه A0، به صورت مقدار معادل دیجیتال و مقدار وقعی آنالوگ در سریال مانیتور به صورت زیر نمایش داده می شود.
ولتاژهای رفرنس آردوینو
همانطورکه پیشتر نیز گفته شد، مبدل های آنالوگ به دیجیتال در برد آردویینو، ورودی را با یک ولتاژ مرجع مقایسه کرده و متناسب با ولتاژ مرجع خروجی را تولید می کنند. در حقیقت، میزان اختلاف وروی با ولتاژ مرجع اندازه گیری شده و مقدار دیجیتال معادل آن در خروجی تولید می شود. برد آردویینو UNO دارای سه ولتاژ مرجع زیر است.
ولتاژ رفرنس داخلی ۱٫۱ ولت
ولتاژ رفرنس خارجی ۰ الی ۵ ولت
ولتاژ رفرنس عادی ۵ ولت
در حالت عادی، ولتاژ رفرنس برد آردویینو ۵ ولت است. اما برای تعیین ولتاژ رفرنس به حالت خارجی و یا داخلی ۱٫۱ ولت، به صورت زیر می بایست عمل نمود.
analogReference(INTERNAL);همچنین جهت استفاده از ولتاژ مرجع خارجی، می بایست به صورت زیر عمل کنید.
analogReference(EXTERNAL);در رابطه با استفاده از ولتاژ مرجع خارجی، می بایست ولتاژ مورد نظر به پایه AREF متصل شود. اما پیش از اتصال، رعات نکات زیر بسیار ضروریست. در غیر اینصورت، با اتصال ولتاژ به پایه AREF و عدم رعایت نکات ایمنی زیر، برد اردویینو شما خواهد سوخت.
۱- پیش از اتصال ولتاژ به پایه AREF برای اولین بار، تابع analogReference(EXTERNAL) حتما می بایست در قسمت setup اردویینو قرار گیرد.
۲- تابع analogReference(EXTERNAL) پیش از تابع analogread می بایست فراخوانی شود.
۳- به هیچ عنوان ولتاژ کمتر از ۰ و بیشتر از ۵ به پایه AREF اعمال ننمایید.
مزیت استفاده از ولتاژ رفرنس داخلی
همانطور که پیشتر بیان شد، برد آردویینو UNO دارای ولتاژ مرجع داخلی ۱٫۱ ولتی است. از طرفی دیگر آردویینو UNO را می توان هم از طریق کابل و هم از طریق جک آداپتور، تغذیه نمود. از آنجاییکه ولتاژ خروجی هر یک از این منابع ممکن است با یکدیگر کمی تفاوت داشته و دقیقا مقدار ۵ ولت به آردویینو نرسد، لذا این موضوع بر مبدل ADC تاثیر می گذارد. برای روشن تر شدن موضوع فوق، این مورد را در نظر بگیرید که در حالت عادی، ولتاژ مرجع ADC وابسته به ولتاژ تغذیه میکروکنترلر ATMEGA به کار رفته در برد آردویینو است. از آنجاییکه این مقدار، ممکن است در تغذیه با USB و آداپتور تفاوت داشته باشد، بنابراین مقدار اندازه گیری شده توسط ADC دو مقدار متفاوت خواهد شد. اما در صورتیکه از ولتاژ مرجع داخلی ۱٫۱ ولتی برای ADC استفاده کنید، تغییرات تغذیه هیچ تاثیری بر اندازه گیری نخواهد داشت.
در کنار مزایای استفاده از ولتاژ مرجع داخلی، کم بودن مقدار ولتاژی آن است، چراکه بسیاری از سنسورها و دستگاه های دیگر، ممکن است مقادیر بسیار بالاتری نسبت به اندازه ولتاژ مرجع داشته باشند که با این وجود، امکان اندازه گیری آن ها وجود نخواهد داشت. در این حالت، یا می بایست اندازه ولتاژ ورودی به آنالوگ را به کمک تقسیم مقاومتی کاهش دهید، یا اینکه یک ولتاژ مرجع خارجی ثابت به آردویینو متصل نمایید.
وسایل مورد نیاز
انواع برد آردوینو
جمع بندی
در این آموزش به بررسی یکی از مهم ترین ویژگی های بردهای آردویینو، تبدیل آنالوگ به دیجیتال پرداختیم. به کمک مبدل آنالوگ به دیجیتال قادر خواهیم بود تا سیگنال های پیوسته را به سیگنال های گسسته و قابل فهم برای آردویینو، تبدیل کنیم. استفاده از مبدل آنالوگ به دیجیتال دارای الزاماتی است که عدم رعایت آن ها سبب ایجاد خطا در مقادیر تبدیل شده و حتی آسیب به برد خواهد شد. در این آموزش ضمن توضیح کامل در رابطه چگونگی عملکرد مبدل آنالوگ به دیجیتال، با ارائه مثال هایی، نحوه استفاده از ADC با روش های مختلف، شرح داده شده است.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
نوشته نحوه استفاده و عملکرد مبدل آنالوگ به دیجیتال ADS در آردوینو Arduino اولین بار در دیجی اسپارک پدیدار شد.