آموزش آردوینوپروژه های آردوینو

آموزش اتصال ماژول ولتاژ متر به آردوینو (اندازه گیری 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 ولت است:

اندازه ولتاژ 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);

موارد موجود در فایل : سورس کامل

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

2 نظر

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

    1. سلام عزیز
      میتوانید از ZMPT101B استفاده کنید.

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

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