
راه اندازی ADC و خواندن ولتاژ آنالوگ با آردوینو، دنیای سیگنالهای آنالوگ
خواندن ولتاژ آنالوگ با آردوینو، دنیای سیگنالهای آنالوگ
آردوینو با راه اندازی ADC این قابلیت را به ما میدهد که این سیگنالهای آنالوگ را اندازهگیری کرده و در پروژههای خود از آنها استفاده کنیم. در دنیای دیجیتال امروز، هنوز بسیاری از پدیدههای فیزیکی اطراف ما ماهیت آنالوگ دارند. از دمای هوا و شدت نور گرفته تا موقعیت یک شتابسنج، همگی به صورت پیوسته تغییر میکنند. در این پست، به طور کامل با روش خواندن ولتاژ آنالوگ با آردوینو آشنا خواهیم شد.
آنالوگ در مقابل دیجیتال: یک تفاوت کلیدی
قبل از شروع، بیایید تفاوت اصلی سیگنالهای آنالوگ و دیجیتال را مرور کنیم:
- سیگنال دیجیتال: تنها دو حالت دارد (۰ یا ۱، روشن یا خاموش)
- سیگنال آنالوگ: میتواند هر مقداری در یک بازه پیوسته داشته باشد
آردوینو برای خواندن سیگنالهای آنالوگ از پینهای مخصوصی (معمولاً با پیشوند A مانند A0, A1, …) استفاده میکند.
سختافزار مورد نیاز
۱. برد آردوینو
هر برد آردوینو که پینهای آنالوگ داشته باشد مناسب است:
- Arduino Uno (دارای ۶ پین آنالوگ)
- Arduino Nano
- Arduino Mega
- و سایر مدلها
۲. پتانسیومتر ۱۰ کیلو اهم
پتانسیومتر یک مقاومت متغیر است که مانند یک “شیر آب” برای ولتاژ عمل میکند. با چرخاندن دسته آن، میتوانیم ولتاژ خروجی را از ۰ تا ۵ ولت تغییر دهیم.
۳. مدار ساده خواندن ولتاژ

نکته ایمنی: هیچ منبع ولتاژ خارجی به پینهای آنالوگ آردوینو متصل نکنید! پینهای آنالوگ آردوینو فقط میتوانند ولتاژ بین ۰ تا ۵ ولت (یا ۰ تا ۳.۳ ولت در بردهای ۳٫۳ ولتی) را تحمل کنند.
چگونه آردوینو ولتاژ آنالوگ را میخواند؟
مبدل آنالوگ به دیجیتال (ADC)
ADC یا مبدل آنالوگ به دیجیتال یک بخش کلیدی در بسیاری از مدارهای الکترونیکی و میکروکنترلرهاست. این قطعه وظیفه دارد ولتاژ پیوستهی آنالوگ را از سنسورها یا ورودیهای محیطی دریافت کند و آن را به دادهای قابل فهم برای پردازنده تبدیل کند. چون میکروکنترلر فقط میتواند اعداد دیجیتال را پردازش کند، ADC پل ارتباطی بین دنیای واقعی (سیگنالهای آنالوگ) و دنیای دیجیتال محسوب میشود.

فرایند کار ADC به این صورت است که ولتاژ ورودی را نمونهبرداری کرده و بسته به دقت یا رزولوشن آن، آن را به یک مقدار عددی تبدیل میکند. در بیشتر بردهای رایج مانند آردوینو Uno، دقت ADC برابر ۱۰ بیت است؛ یعنی مقدار خروجی بین ۰ تا ۱۰۲۳ خواهد بود. مقدار ۰ نشاندهنده صفر ولت (یا نزدیک به آن) و مقدار ۱۰۲۳ نشاندهنده حداکثر ولتاژ قابل اندازهگیری ADC (مثلاً ۵ ولت) است. این تبدیل امکان میدهد ولتاژ واقعی را به شکل یک عدد دیجیتال در برنامه بخوانید و پردازش کنید.
تشبیه جالب: ADC مانند یک خطکش دیجیتال است که ولتاژ را اندازه میگیرد. اگر خطکش ما ۱۰۲۴ درجهبندی داشته باشد (از ۰ تا ۱۰۲۳)، هر درجه نشاندهنده ۰٫۰۰۴۸۸ ولت است (۵ ولت تقسیم بر ۱۰۲۴).
کدنویسی: از خواندن تا نمایش
کد کامل با توضیحات فارسی:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// تعریف ثابتها #define PIN_ANALOG A0 // پین آنالوگ ورودی #define BAUDRATE 9600 // نرخ انتقال سریال #define REF_VOLTAGE 5.0 // ولتاژ مرجع (برای بردهای 5 ولتی) void setup() { // آغاز ارتباط سریال با کامپیوتر Serial.begin(BAUDRATE); // نمایش پیغام شروع در سریال مانیتور Serial.println("=== سیستم خواندن ولتاژ آنالوگ ==="); Serial.println("منتظر دریافت دادهها..."); Serial.println(); // یک خط فاصله } void loop() { // مرحله ۱: خواندن مقدار خام از پین آنالوگ int rawValue = analogRead(PIN_ANALOG); // مرحله ۲: تبدیل به ولتاژ float voltage = rawValue * (REF_VOLTAGE / 1023.0); // مرحله ۳: نمایش نتایج در سریال مانیتور Serial.print("مقدار خام: "); Serial.print(rawValue); Serial.print(" | ولتاژ: "); Serial.print(voltage, 2); // نمایش با ۲ رقم اعشار Serial.println(" V"); // مرحله ۴: کمی تاخیر برای خوانایی بهتر delay(500); } |
|
1 2 |
Serial.begin(BAUDRATE); |
در حلقه اصلی برنامه، اولین قدم این است که مقدار ورودی آنالوگ را از پین A0 بخوانید. این مقدار یک عدد خام بین 0 تا 1023 است و در یک متغیر از نوع int ذخیره میشود:
|
1 2 |
int rawValue = analogRead(PIN_ANALOG); |
برای اینکه این عدد تبدیل به یک مقدار قابل درک برحسب ولت شود، باید یک متغیر float تعریف کنید و از یک رابطه ساده استفاده کنید. در این فرمول، ولتاژ مرجع (معمولاً 5 ولت در بردهای ۵ ولتی) تقسیم بر 1023 شده و سپس در مقدار خام ADC ضرب میشود:
|
1 2 |
float voltage = rawValue * (REF_VOLTAGE / 1023.0); |
اگر ولتاژ مرجع برد شما ۳.۳ ولت باشد، باید مقدار REF_VOLTAGE را تغییر دهید. همینطور اگر رزولوشن ADC بردی که استفاده میکنید ۱۰ بیت نباشد، مقدار ۱۰۲۳ باید متناسب با تعداد سطوح واقعی ADC اصلاح شود.
در نهایت، مقدار خام ADC و ولتاژ محاسبهشده با دستورهای Serial.print و Serial.println روی Serial Monitor چاپ میشوند:
|
1 2 |
Serial.print(voltage, 2); |
وقتی سریال مانیتور IDE را باز کنید، هر نیمثانیه یکبار خروجی جدید دریافت خواهید کرد—مقداری که بسته به ورودی آنالوگ تغییر میکند و دقیقاً نشان میدهد در پین A0 چه ولتاژی وجود دارد.
نسخه پیشرفتهتر با قابلیتهای بیشتر:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
/* پروژه پیشرفته خواندن ولتاژ آنالوگ با قابلیتهای اضافی */ const int ANALOG_PIN = A0; const float V_REF = 5.0; const int ADC_RESOLUTION = 1023; const int SAMPLE_COUNT = 10; // تعداد نمونهها برای میانگینگیری void setup() { Serial.begin(9600); Serial.println("سیستم پیشرفته مانیتورینگ ولتاژ"); Serial.println("------------------------------"); } float readAverageVoltage() { // میانگینگیری برای کاهش نویز long sum = 0; for(int i = 0; i < SAMPLE_COUNT; i++) { sum += analogRead(ANALOG_PIN); delay(10); // تاخیر کوتاه بین نمونهها } int averageRaw = sum / SAMPLE_COUNT; return averageRaw * (V_REF / ADC_RESOLUTION); } void loop() { float currentVoltage = readAverageVoltage(); // نمایش با فرمت زیبا Serial.print("زمان: "); Serial.print(millis() / 1000.0, 1); Serial.print("s | ولتاژ: "); Serial.print(currentVoltage, 3); Serial.print("V"); // نمایش وضعیت Serial.print(" | وضعیت: "); if(currentVoltage < 1.0) { Serial.println("خیلی کم"); } else if(currentVoltage < 2.0) { Serial.println("کم"); } else if(currentVoltage < 3.0) { Serial.println("متوسط"); } else if(currentVoltage < 4.0) { Serial.println("زیاد"); } else { Serial.println("خیلی زیاد"); } delay(1000); // یک ثانیه تاخیر } |
تنظیمات سریال مانیتور
برای مشاهده نتایج:
۱. آردوینو IDE را باز کنید
۲. به مسیر Tools → Serial Monitor بروید
۳. مطمئن شوید نرخ انتقال (Baud Rate) روی ۹۶۰۰ تنظیم شده است
۴. اکنون باید اعداد را به صورت زنده مشاهده کنید
نکته: میتوانید از Serial Plotter هم استفاده کنید (Tools → Serial Plotter). این ابزار نمودار زیبایی از تغییرات ولتاژ به شما نشان میدهد!
نکات مهم و عیبیابی
۱. انتخاب برد مناسب
- بردهای ۵ ولتی: از
5.0در فرمول استفاده کنید - بردهای ۳٫۳ ولتی: از
3.3در فرمول استفاده کنید
۲. دقت اندازهگیری
- نویز برق میتواند روی دقت تاثیر بگذارد
- برای افزایش دقت، از میانگین چندین نمونه استفاده کنید
- از منبع تغذیه با کیفیت استفاده نمایید
۳. مشکلات رایج و راهحلها
| مشکل | راهحل |
|---|---|
| نمایش مقادیر نامنظم | اتصالات را بررسی کنید |
| فقط مقادیر ۰ یا ۱۰۲۳ | پتانسیومتر ممکن است خراب باشد |
| تغییرات ناگهانی | از خازن ۰٫۱µF بین پایه وسط و GND استفاده کنید |
پروژههای عملی پیشنهادی
۱. ساخت ولتسنج دیجیتال
با اضافه کردن یک نمایشگر LCD، میتوانید یک ولتسنج قابل حمل بسازید.
۲. کنترل نور LED با پتانسیومتر
با استفاده از مقادیر خوانده شده، میتوانید روشنایی یک LED را کنترل کنید (PWM).
۳. سیستم هشدار دمایی
با اتصال یک سنسور دمای آنالوگ (مانند LM35)، میتوانید سیستم نظارت بر دما ایجاد کنید.
جمعبندی
خواندن ولتاژ آنالوگ یکی از پایهایترین و مهمترین مهارتها در کار با آردوینو است. با درک صحیح از نحوه کار ADC و تبدیل مقادیر خام به ولتاژ واقعی، میتوانید انواع سنسورهای آنالوگ را به پروژههای خود اضافه کنید.
تمرین پیشنهادی: پتانسیومتر را با یک سنسور نور (LDR) جایگزین کنید و تغییرات نور محیط را اندازهگیری نمایید.
آیا تا به حال از قابلیت خواندن ولتاژ آنالوگ در پروژههای خود استفاده کردهاید؟ تجربیات خود را در بخش نظرات با ما به اشتراک بگذارید!






