اگر راه اندازی سنسور ولتاژ برای تنظیم میزان ولتاژ ورودی میکروکنترلری چون آردوینو به چالش جدیدی برای شما تبدیل شده است یا در مراحل کدنویسی و ایجاد بازه ولتاژ ورود به مشکل برخورد نموده اید٬ پیشنهاد می کنیم پس از مطالعه و یادگیری این آموزش بار دیگر شانس خود را امتحان نمایید و این ماژول را راه اندازی کنید.
مهم است بدانید که آردوینو Uno مانند بسیاری از میکروکنترلرها دارای یک مبدل آنالوگ به دیجیتال (ADC) داخلی است که میتواند ولتاژ آنالوگِ روی یک پایه را به عدد دیجیتال تبدیل کند. با این حال، حداکثر ولتاژ پایه ورودی آنالوگ به 5 ولت محدود شده است. اگر پروژه شما به اندازهگیری ولتاژهای بزرگتر از 5 ولت نیاز داشته باشد، ممکن است این محدودیت برای شما ناخوشایند باشد. در چنین مواردی میتوانید با استفاده از دو یا چند مقاومت، یک مقسم ولتاژ ایجاد کنید.
اما راه سادهتری برای اندازهگیری ولتاژ به خصوص ولتاژ کمتر از 25 ولت وجود دارد: از ماژول سنسور ولتاژ استفاده کنید. سنسور ولتاژ یک مدار مقسم ولتاژ از پیش ساخته شده است که از مقاومتهای با دقت بالا برای خواندن دقیق مقادیر آنالوگ استفاده میکند.
برای اندازهگیری آسانتر و بهینهتر ولتاژ، نحوه استفاده از سنسور ولتاژ با آردوینو را به شما آموزش خواهیم داد. پس بیایید شروع کنیم!
ما برای آماده سازی این پروژه از سنسور اندازه گیری و تقسیم کننده ولتاژ برای میکروکنترلر و Arduino استفاده کردیم. شما نیز می توانید این ماژول را تهیه و همراه با ما این آموزش را کامل نمایید.
بررسی کلی سختافزار ماژول سنسور ولتاژ
سنسور ولتاژ، در اصل یک مدار مقسم ولتاژ ساده است که از دو مقاومت تشکیل شده است. به همین سادگی!
شماتیک ماژول سنسور ولتاژ در تصویر زیر نشان داده شده است.
در این مدار دو مقاومت وجود دارد. مقاومت متصل به ولتاژ ورودی یعنی R1، دارای مقدار 30 کیلواهم و مقاومت نزدیکتر به زمین یعنی R2، دارای مقدار 7.5 کیلواهم است. ولتاژ دو سر R2، ولتاژ تقسیم شده مدنظر ما است. این ولتاژ به پین هدری با اسم S متصل است.
این مدار ساده، ولتاژ ورودی را به 5 تقسیم میکند. به همین دلیل است که این سنسور ولتاژ میتواند به شما کمک کند تا ولتاژهای کمتر از 25 ولت را با آردوینو اندازهگیری کنید.
نحوه عملکرد سنسور ولتاژ برپایه معادله تقسیم ولتاژ
بررسی عملکرد سنسور ولتاژ یا هر مقسم ولتاژ دیگری، بسیار آسان است. برای این منظور میتوان از معادله تقسیم ولتاژ استفاده کرد.
معادله تقسیم ولتاژ فرض میکند که شما سه مقدار مدار فوق را میدانید: ولتاژ ورودی (Vin) و هر دو مقدار مقاومت (R2 و R1). با داشتن این مقادیر و با استفاده از معادله زیر میتوان ولتاژ خروجی (Vout) را به دست آورد:
با این حال، در مورد مد نظر ما، ولتاژ خروجی (Vout) را از مدار مقسم ولتاژ با استفاده از ADC آردوینو اندازهگیری میکنیم. بنابراین، مقدار مجهول ما Vin است.
بنابراین معادله بالا را برای به دست آوردن ولتاژ ورودی (Vin) بازنویسی میکنیم.
این معادله بیان میکند که ولتاژ ورودی (Vin) مساوی است با ولتاژ خروجی (Vout) ضربدر مقاومت کل مدار (R1+R2)، تقسیم بر مقدار مقاومت دوم (R2).
نحوه اتصال پایههای سنسور ولتاژ
برای شروع راه اندازی سنسور ولتاژ و انجام اتصالات در هر پروژه نیاز است تا با پین های ورودی و خروجی این ماژول نگاهی بیندازید.
ترمینال ورودی
VCC به ترمینال مثبت منبع ولتاژی که میخواهید اندازهگیری کنید متصل است. محدوده ولتاژ مجاز برای این پایه 0 تا 25 ولت است.
GND به ترمینال منفی منبع ولتاژ ورودی متصل است.
هدر خروجی
S پایه خروجی سیگنال ماژول سنسور ولتاژ است که ولتاژ آنالوگی متناسب با سطح ولتاژ ورودی ایجاد میکند. معمولاً به یکی از پایههای ورودی آنالوگ آردوینو متصل میشود.
+ به جایی متصل نمیشود.
– پایه زمین مشترک است.
نحوه سیم کشی ماژول سنسور ولتاژ و آردوینو
اتصال سنسور ولتاژ به آردوینو بسیار آسان است.
برای شروع، منبع ولتاژی را که میخواهید اندازهگیری کنید به پیچ ترمینال ورودی متصل کنید. سپس، پایه ‘S’ روی سنسور ولتاژ را به پایه آنالوگ ‘A0’ آردوینو و پایه ‘-‘ را به زمین وصل کنید.
تصویر زیر نحوه اتصال همه پایهها را نشان میدهد.
مثالی از کد آردوینو برای راه اندازی سنسور ولتاژ
این مثال، ولتاژ آنالوگ اعمال شده به پایه آنالوگ A0 را میخواند، ولتاژ ورودی را با استفاده از معادله مقسم ولتاژ محاسبه و نتایج را در سریال مانیتور چاپ میکند.
// Define analog input
#define ANALOG_IN_PIN A0
// Floats for ADC voltage & Input voltage
float adc_voltage = 0.0;
float in_voltage = 0.0;
// Floats for resistor values in divider (in ohms)
float R1 = 30000.0;
float R2 = 7500.0;
// Float for Reference Voltage
float ref_voltage = 5.0;
// Integer for ADC value
int adc_value = 0;
void setup(){
// Setup Serial Monitor
Serial.begin(9600);
}
void loop(){
// Read the Analog Input
adc_value = analogRead(ANALOG_IN_PIN);
// Determine voltage at ADC input
adc_voltage = (adc_value * ref_voltage) / 1024.0;
// Calculate voltage at divider input
in_voltage = adc_voltage*(R1+R2)/R2;
// Print results to Serial Monitor to 2 decimal places
Serial.print("Input Voltage = ");
Serial.println(in_voltage, 2);
// Short delay
delay(500);
}
مثال فوق را در آردوینو خود آپلود و نتایج را مشاهده کنید.
برای تأیید صحت اندازهگیری، ولتاژ موردنظر را با استفاده از مولتیمتر دیجیتال نیز اندازهگیری کنید. مقدار نمایش داده شده روی مولتی متر باید با مقدار نمایش داده شده در سریال مانیتور مطابقت داشته باشد.
نتایج زیر با اعمال 5 ولت به سنسور ولتاژ به دست آمده است:
و با اعمال 12 ولت این نتایج به دست آمد:
توضیح عملکرد برنامه:
این یک مثال نسبتاً ساده است، بنابراین برای فهم آن مشکلی نخواهید داشت. مثال با تعریف چند متغیر سراسری (Global) که در سرتاسر برنامه استفاده خواهند شد آغاز میشود.
خط اول پایه ورودی آنالوگ آردوینو را مشخص میکند که از آن برای خواندن ولتاژ از مدار مقسم ولتاژ استفاده میشود. در این مورد از پایه A0 استفاده شده است.
#define ANALOG_IN_PIN A0
در مرحله بعد، دو متغیر float به نامهای 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، ارتباط سریال با baud rate 9600 تنظیم شده است.
void setup(){
Serial.begin(9600);
}
در تابع ()loop، تابع ()analogRead برای خواندن ولتاژ روی پایه A0 استفاده میشود. مقدار برگشتی در متغیر adc_value ذخیره میشود.
adc_value = analogRead(ANALOG_IN_PIN);
سپس این مقدار با ضرب در ولتاژ مرجع و تقسیم بر 1024 به یک ولتاژ (adc_voltage
) تبدیل میشود (زیرا آردوینو دارای ADC 10 بیتی است، بنابراین ولتاژ خوانده شده، عددی بین ۱ تا 1024=2^10 میگیرد).
adc_voltage = (adc_value * ref_voltage) / 1024.0;
سپس تبدیل ولتاژ ورودی به مقسم ولتاژ با استفاده از فرمول مقسم ولتاژ محاسبه میشود:
in_voltage = adc_voltage*(R1+R2)/R2;
در نهایت، ولتاژ ورودی محاسبه شده تا 2 رقم اعشار در سریال مانیتور چاپ میشود. سپس، آردوینو برای 500 میلیثانیه منتظر میماند تا loop را تکرار کند.
Serial.print("Input Voltage = ");
Serial.println(in_voltage, 2);
delay(500);
سخن پایانی
امیدواریم با آماده سازی و ارائه این مطلب توانسته باشیم گامی مؤثر در جهت یادگیری و به کارگیری صحیح این قطعه در پروژه های شما داشته باشیم. البته کاربرد این سنسور منتهی به مثال اضافه شده در این مقاله نمی باشد و می توان در پروژه های متنوعی از این قطعه کوچک بهره برد. اگر تاکنون تجربه ای در رابطه با این کاربرد ها بدست آورده اید می توانید در بخش دیدگاه همین صفحه آن را با ما و دیگر دانش پژوهان آکادمی به اشتراک بگذارید و از دیگر نکات قابل توجه در هنگام استفاده این سنسور ما را آگاه نمایید.
همچنین در صورتی که سوالی در حین یادگیری و اجرای برنامه بالا ذهن شما را درگیر خود نموده است٬ پیشنهاد می کنیم هرچه سریعتر پرسش خود را در بخش دیدگاه بیان نموده تا کارشناسان فنی این مجموعه پس از بررسی سوالاتتان٬ بهترین راهنمایی ممکن را به شما دوستان ارائه دهند.