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

تابع analogRead آردوینو جزو توابع ورودی خروجی آنالوگ آردوینو می باشد و به کمک این تابع می توان مقدار را از یک پین ورودی آنالوگ دلخواه آردوینو خواند. این مقدار می تواند عددی بین 0 تا 5 باشد. برای مثال، یک آردوینو UNO شامل یک مبدل آنالوگ به دیجیتال (ADC) چند کاناله و 10 بیتی است. این بدان معناست که ولتاژهای ورودی بین 0 و ولتاژ عملیاتی (+5 VDC) را به مقادیر صحیح بین 0 تا 1023 نگاشت می‌کند. این امر منجر به وضوح بین قرائت‌های 5 / 1024 ولت در هر واحد یا 0.0049 ولت (4.9 میلی ولت) در هر واحد می‌شود.

نکته مهم 1: محدوده ورودی ولتاژ را می‌توان با استفاده از تابع analogReference تغییر داد. مقدار پیش‌فرض تابع analogRead برای سازگاری، وضوح تصویر در بردهای آردوینو روی 10 بیت تنظیم شده است. برای تغییر آن به وضوح بالاتر، باید از تابع analogReadResolution استفاده کنید.

 

استفاده از تابع analogRead آردوینو

تابع analogRead آردوینو در برنامه نویسی آردوینو بصورت زیر استفاده می شود:

analogRead(pin)

در عبارت بالا به جای pin، شماره پین ورودی آنالوگ موردنظر که می خواهیم اطلاعات آن پین را بخوانیم را قرار می دهیم.

 

مقدار برگشتی از تابع analogRead آردوینو

این تابع مقدار آنالوگ خوانده شده روی پین را برمی‌گرداند. مقدار برگشت داده شده، به وضوح مبدل آنالوگ به دیجیتال محدود است (0-1023 برای 10 بیت، 0-4095 برای 12 بیت و غیره). نوع داده برگشت داده شده int می باشد.

 

مثال از تابع analogRead آردوینو

مثال 1: در مثال زیر، پایه وسط پتانسیومتر را به پایه ورودی آنالوگ 3 یعنی A3 متصل کردیم و پایه های کناری پتانسیومتر را به ground و VCC متصل کردیم. با چرخاندن محور پتانسیومتر، مقدار پایه وسط پتانسیومتر تغییر می کند که این مقدار را می خوانیم و در مانیتور نشان می دهیم. همانطور که قبلا هم گفتیم مقدار خوانده شده، عددی بین 0 و 1023 می باشد.

int analogPin = A3; // پایه وسط پتانسیومتر را به پایه ورودی آنالوگ 3 متصل می کنیم 
                    // و پایه های کناری پتانسیومتر را به ground و VCC متصل می کنیم
int val = 0;  // در این متغیر، مقدار خوانده شده را ذخیره می کنیم

void setup() {
  Serial.begin(9600);           //  تنظیمات سریال
}

void loop() {
  val = analogRead(analogPin);  // خواندن پین ورودی آنالوگ
  Serial.println(val);          // نمایش مقدار خوانده شده
  delay(200);
}

 

مثال2: اتصال پتانسیومتر به آردوینو را مانند مثال 1 انجام می دهیم. در این مثال اعداد خام و بی معنی 0 الی 1023 بصورت ولتاژ 0 تا 5 ولت نشان داده خواهد شد.

 

// Constants
const float V_REF = 5.0;     // ولتاژ مرجع آنالوگ (e.g., 5V or 3.3V)
const float R_BITS = 10.0;   // رزولیشن مبدل آنالوگ به دیجیتال (bits)
const float ADC_STEPS = (1 << int(R_BITS)) - 1; // Number of steps (2^R_BITS - 1)

const int potentiometerPin = A3; // پایه وسط پتاسیومتر به پین A3 متصل است

void setup() {
  Serial.begin(9600); // مقداردهی اولیه ارتباط سریال
  Serial.println(ADC_STEPS);
}

void loop() {
  int rawValue = analogRead(potentiometerPin); // خواندن ورودی ا«الوگ
  float voltage = (rawValue / ADC_STEPS) * V_REF; // تبدیل به ولتاژ

  Serial.print("Voltage: ");
  Serial.print(voltage, 3); // چاپ ولتاژ با 3 رقم اعشار
  Serial.println(" V");
  
  delay(200); // ایجاد تاخیر
}

 

نکته مهم 2: اگر پین ورودی آنالوگ به چیزی متصل نباشد، مقداری که توسط تابع analogRead خوانده می شود، بر اساس عوامل مختلفی (مثلاً مقادیر سایر ورودی‌های آنالوگ، میزان نزدیکی دست شما به برد و غیره) نوسان خواهد داشت.