آموزش اتصال ماژول ولتاژ متر به آردوینو (اندازه گیری Voltage)

آردوینو Uno مانند بسیاری از میکروکنترلرها، دارای مبدل آنالوگ به دیجیتال (ADC) داخلی است که میتواند ولتاژ آنالوگ روی یک پایه را به عدد دیجیتال تبدیل کند. با این حال، حداکثر ولتاژ ورودی مجاز پایههای آنالوگ در این برد 5 ولت است. این محدودیت ممکن است برای پروژههایی که نیاز به اندازهگیری ولتاژهای بالاتر از 5 ولت دارند، مشکلساز باشد. در چنین شرایطی معمولاً از یک تقسیمکننده ولتاژ با مقاومتهای مجزا استفاده میشود.
اما راه سادهتری هم وجود دارد. مخصوصاً زمانی که ولتاژ مورد اندازهگیری کمتر از 25 ولت باشد: استفاده از ماژول سنسور ولتاژ (Voltage Sensor). این ماژول در واقع یک تقسیمکننده ولتاژ آماده است که از مقاومتهای دقیق برای ارائه اندازهگیریهای دقیق و پایدار استفاده میکند.
در این آموزش یاد میگیریم چگونه از سنسور ولتاژ با آردوینو استفاده کنیم تا فرایند اندازهگیری ولتاژ را سادهتر و کارآمدتر کنیم.
معرفی سنسور ولتاژ
سنسور ولتاژ در اصل چیزی جز یک مدار تقسیم کننده ولتاژ متشکل از دو مقاومت نیست.

در شماتیک این سنسور، مقاومت اول (R1) که به ورودی ولتاژ متصل است، مقداری برابر با 30 کیلو اهم دارد و مقاومت دوم (R2) که نزدیک زمین (GND) قرار گرفته، 7.5 کیلو اهم است. ولتاژ خروجی سنسور همان افت ولتاژ روی R2 است که از طریق پایهای با برچسب S در دسترس قرار میگیرد.

این مدار ساده ولتاژ ورودی را به نسبت 1/5 تقسیم میکند. به همین دلیل، سنسور ولتاژ میتواند ولتاژهایی تا حداکثر حدود 25 ولت را به کمک آردوینو اندازهگیری کند.
نحوه خواندن داده از سنسور ولتاژ
خواندن داده از سنسور ولتاژ (یا هر تقسیمکننده ولتاژ دیگر) بسیار ساده است. برای این کار از فرمول تقسیم ولتاژ (Voltage Divider Equation) استفاده میشود.

در حالت کلی اگر ولتاژ ورودی (Vin) و مقادیر مقاومتها (R1 و R2) مشخص باشند، میتوان با استفاده از رابطه زیر، ولتاژ خروجی (Vout) را محاسبه کرد:

اما در پروژه آردوینو، برعکس عمل میکنیم؛ یعنی مقدار Vout را از طریق پایه آنالوگ میخوانیم و میخواهیم مقدار Vin را بهدست آوریم. با بازنویسی فرمول داریم:

این رابطه نشان میدهد ولتاژ ورودی برابر است با ولتاژ خروجی تقسیم بر نسبت مقاومت دوم (R2) به مجموع دو مقاومت مدار.
معرفی پایه های سنسور ولتاژ
در ماژول سنسور ولتاژ، دو بخش اصلی وجود دارد: ورودی ولتاژ و خروجی سیگنال.

پایههای ورودی:
- VCC: به پایه مثبت منبع ولتاژی که میخواهید اندازهگیری کنید متصل میشود. محدوده مجاز این پایه از 0 تا 25 ولت است.
- GND: به پایه منفی منبع ولتاژ ورودی متصل میشود.
پایههای خروجی:
- S: پایه سیگنال خروجی است و ولتاژ آنالوگی را ارائه میدهد که متناسب با ولتاژ ورودی است. این پایه معمولاً به یکی از پایههای آنالوگ آردوینو متصل میشود.
- + : در این ماژول به چیزی متصل نیست.
- – : پایه زمین مشترک مدار است.
پروژه اندازه گیری ولتاژ با آردوینو
اتصال سنسور ولتاژ به آردوینو بسیار ساده است.
برای شروع، منبع ولتاژی که میخواهید اندازهگیری کنید را به ترمینال ورودی سنسور متصل کنید. سپس پایه S سنسور ولتاژ را به پایه A0 آردوینو وصل کرده و پایه – را به زمین (GND) آردوینو متصل نمایید.
در تصویر زیر نحوهی سیمکشی سنسور ولتاژ به آردوینو نمایش داده شده است.
کد آردوینو اندازه گیری ولتاژ
در ادامه یک کد ساده برای خواندن ولتاژ آنالوگ از پایه A0 آورده شده است. این کد با استفاده از فرمول تقسیم ولتاژ، مقدار ولتاژ ورودی را محاسبه کرده و در Serial Monitor نمایش میدهد.
کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است.
پس از آپلود کد روی آردوینو، مقادیر را در Serial Monitor مشاهده خواهید کرد.
برای بررسی دقت اندازهگیری، میتوانید مقدار ولتاژ واقعی را با مولتیمتر دیجیتال اندازه بگیرید. عدد نمایش دادهشده در مولتیمتر باید با مقدار نشاندادهشده در سریال مانیتور تقریباً یکسان باشد.
وقتی ولتاژ ورودی 5 ولت باشد، مقدار خروجی سنسور ولتاژ تقریباً معادل مقدار واقعی خواهد بود. همچنین در صورت اعمال 12 ولت، مقدار خواندهشده متناسب با تقسیم ولتاژ تنظیم میشود.
تصویر زیر برای خروجی ماژول برای ولتاژ 5 ولت است.

تصویر زیر هم برای ولتاژ 12 ولت است:

توضیح کد (Code Explanation)
این کد بسیار ساده است و بهراحتی میتوان عملکرد آن را درک کرد.
در ابتدا تعدادی متغیر سراسری (global variables) تعریف شدهاند که در سراسر برنامه مورد استفاده قرار میگیرند.
خط اول پایهی آنالوگی که برای خواندن ولتاژ از تقسیمکننده استفاده میشود را مشخص میکند:
#define ANALOG_IN_PIN A0
دو متغیر adc_voltage و in_voltage برای ذخیره مقدار ولتاژ در ورودی ADC و ورودی مدار تقسیمکننده ولتاژ تعریف شدهاند:
float adc_voltage = 0.0; float in_voltage = 0.0;
مقاومتهای R1 و R2 مقادیر مقاومتهای استفادهشده در مدار تقسیم ولتاژ را ذخیره میکنند. در صورتی که از مقاومتهایی با مقدار متفاوت استفاده میکنید، باید این مقادیر را تغییر دهید:
float R1 = 30000.0; float R2 = 7500.0;
متغیر ref_voltage ولتاژ مرجع ADC را مشخص میکند که در آردوینو Uno معمولاً 5 ولت است:
float ref_voltage = 5.0;
متغیر adc_value برای ذخیره مقدار دیجیتالی خواندهشده از مبدل ADC استفاده میشود:
int adc_value = 0;
در تابع setup() ارتباط سریال با نرخ 9600 baud فعال میشود تا بتوان خروجیها را در Serial Monitor مشاهده کرد:
void setup(){
Serial.begin(9600);
} در تابع loop()، دستور analogRead() مقدار ولتاژ موجود در پایه A0 را میخواند و آن را در متغیر adc_value ذخیره میکند. سپس مقدار خواندهشده با استفاده از ولتاژ مرجع (5 ولت) و تقسیم بر 1024 (بهدلیل 10 بیتی بودن ADC آردوینو) به مقدار ولتاژ واقعی تبدیل میشود:
adc_voltage = (adc_value * ref_voltage) / 1024.0;
سپس ولتاژ ورودی مدار با استفاده از فرمول تقسیم ولتاژ محاسبه میشود:

in_voltage = adc_voltage*(R1+R2)/R2;
در نهایت، مقدار محاسبهشده با دو رقم اعشار در سریال مانیتور نمایش داده میشود و برنامه پس از 500 میلیثانیه تکرار میگردد:
Serial.print("Input Voltage = ");
Serial.println(in_voltage, 2);
delay(500); موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود










سلام مهندس خسته نباشی، برای ولتاژ ac چه مداری استفاده کنیم؟
سلام عزیز
میتوانید از ZMPT101B استفاده کنید.