ADC در آردوینو

مقدمه

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

مقاله مفید: تفاوت مدار آنالوگ و دیجیتال (تفاوت سیگنال، داده‌ها و خروجی‌ های آنالوگ و دیجیتال)

آردوینو Uno دارای شش کانال ADC داخلی است که از آنها برای خواندن سیگنال آنالوگ در محدوده‌ی ۵-۰ ولت استفاده می‌شود.

آردوینو دارای ADC ده بیتی است، یعنی مقدار دیجیتالی در محدوده‌ی ۱۰۲۳-۰ (۲۱۰) تحویل می‌دهد. این مقدار وضوح (رزولوشن)  خوانده می‌شود و بیانگر مقادیر گسسته‌ای است که در محدوده‌ی مقادیر آنالوگ تولید می‌کند.

محاسبه مقدار خروجی دیجیتال

  • وضوح Vref / ((2^n) – 1) = ADC  
  • خروجی دیجیتال = Vin / Resolution

که در این روابط:

Vref: ولتاژ مرجع است که همان بیشینه‌ مقداری است که ADC می‌تواند تبدیل کند.

برای ساده نگه داشتن موضوع، ولتاژ مرجع را ۵ ولت درنظر می‌گیریم.

برای ولتاژ Vin صفر، خروجی دیجیتال برابر با صفر است.

برای ولتاژ Vin ۵، خروجی دیجیتال برابر با ۱۰۲۳ (10-bit) است.

برای ولتاژ Vin ۲.۵، خروجی دیجیتال برابر با ۵۱۲ (10-bit) است.

مطلب پیشنهادی:  تولید اعداد تصادفی در آردوینو

پین‌های ADC در آردوینو Uno

ADC در آردوینو

توابع مورد استفاده در ADC آردوینو

(analogRead (pin: این تابع برای خواندن مقدار آنالوگ از پین آنالوگ مشخص شده به کار می‌رود.

Pin: شماره پین آنالوگی که قصد خواندنش را داریم.

مقدار دیجیتال ۱۰۲۳-۰ را برمی‌گرداند.

مثال:

 analogRead(A0) //read analog value at A0 channel

(analogReference (type:  این تابع برای پیکربندی ولتاژ مرجع برای ورودی آنالوگ استفاده می‌شود.

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

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

دیاگرام اتصالات

ADC در آردوینو

اسکچ خواندن مقادیر آنالوگ

int sensorPin = A0;  // input pin for the potentiometer
int digitalValue = 0;// variable to store the value coming from the sensor
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  digitalValue = analogRead(sensorPin);// read the value from the analog channel
  Serial.print("digital value = ");
  Serial.println(digitalValue);        //print digital value on serial monitor
  delay(1000);
}

خروجی روی مانیتور سریال

ADC در آردوینو

نکته: اگر چیزی به کانال ورودی آنالوگ متصل نباشد، تابع ()analogRead مقادیر نوسانی نویز را برمی‌گرداند.

خواندن ولتاژ آنالوگ با استفاده از آردوینو Uno

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

Aout = digital value * (Vref/2^n – 1)

مثال: مقدار دیجیتال ۵۱۲ است و ADC ما ۱۰ بیتی با ولتاژ مرجع ۵ ولت می‌باشد. می‌خواهیم بدانیم که چه ولتاژ آنالوگی این مقدار دیجیتال را نتیجه داده است. بنابراین،

مطلب پیشنهادی:  آموزش مولتی ‌تسکینگ در آردوینو - چگونه از دستور ()millis در کدهای آردوینو استفاده کنیم؟

Aout = 512 * (5 V / 1023)

        = 2.5 V

اسکچ خواندن ولتاژ آنالوگ با استفاده از آردوینو

int sensorPin = A0;   // select the input pin for the potentiometer
int digitalValue = 0;  // variable to store the value coming from the sensor
float analogVoltage = 0.00;
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  digitalValue = analogRead(sensorPin);// read the value from the analog channel
  Serial.print("digital value = ");
  Serial.print(digitalValue);        //print digital value on serial monitor
  //convert digital value to analog voltage
  analogVoltage = (digitalValue * 5.00)/1023.00;
  Serial.print("  analog voltage = ");
  Serial.println(analogVoltage);
  delay(1000);
}

خروجی روی پنجره سریال

ADC در آردوینو

امیدوارم آموزش ADC در آردوینو براتون مفید واقع شده باشه. کامنت یادتون نره.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

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

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

یک دیدگاه

  1. سلام بسیار مفید بود ادامه دهید