
اندازهگیری جریان با ACS712 و آردوینو: از صفر تا صد
آیا تا به حال به این فکر کردهاید که وسایل الکتریکی اطرافتان چقدر جریان مصرف میکنند؟ یا چگونه میتوان از موتورهای DC در برابر جریان بیش از حد محافظت کرد؟ پاسخ در استفاده از یک سنسور جریان نهفته است. در این پست وبلاگی، به دنیای جذاب سنسور جریان ACS712 سفر میکنیم و یاد میگیریم که چگونه با استفاده از آن و آردوینو، جریان را اندازهگیری و در کنترل موتورهای DC از آن بهره ببریم.
سنسور جریان ACS712 چیست؟
ACS712 یک سنسور جریان دقیق و مقرونبهصرفه است که برای اندازهگیری جریان متناوب (AC) و مستقیم (DC) به کار میرود . این سنسور در یک بستهبندی کوچک 8 پین SOIC ارائه میشود و به دلیل دقت بالا و ایزولاسیون الکتریکی قوی، در کاربردهای صنعتی، تجاری و آموزشی بسیار محبوب است .

این سنسور در سه مدل مختلف با محدودههای جریان 5±، 20± و 30± آمپر عرضه میشود که هر کدام حساسیت خروجی متفاوتی دارند .
| مدل سنسور | محدوده جریان | حساسیت (mV/A) |
|---|---|---|
| ACS712-05B | 5± آمپر | 185 |
| ACS712-20A | 20± آمپر | 100 |
| ACS712-30A | 30± آمپر | 66 |
نحوه عملکرد سنسور ACS712
قلب تپنده سنسور ACS712، اثر هال (Hall Effect) است . اما این اثر چگونه کار میکند؟ داخل سنسور یک مسیر رسانا از جنس مس وجود دارد که جریان مورد اندازهگیری از آن عبور میکند . طبق اصول فیزیک، هر جریان الکتریکی یک میدان مغناطیسی در اطراف خود ایجاد میکند. شدت این میدان متناسب با مقدار جریان است.
در نزدیکی این مسیر رسانا، یک عنصر هال قرار دارد. این عنصر، میدان مغناطیسی ایجاد شده را حس کرده و آن را به یک ولتاژ بسیار کوچک و متناسب تبدیل میکند. این ولتاژ سپس توسط مدارهای داخلی سنسور تقویت شده و به صورت یک ولتاژ آنالوگ در پایه خروجی (VIOUT) ظاهر میشود .
به این ترتیب، با اندازهگیری ولتاژ خروجی سنسور میتوان به مقدار جریان عبوری پی برد. یکی از مزایای بزرگ این روش، ایزولاسیون الکتریکی بین مدار قدرت (جریان بالا) و مدار کنترل (آردوینو) است که ایمنی را به شدت افزایش میدهد .
کاربرد سنسور ACS712 در کنترل موتور DC
در پروژههای رباتیک و الکترونیک قدرت، کنترل موتورهای DC یک نیاز اساسی است. سنسور جریان ACS712 نقش حیاتی در این زمینه ایفا میکند:
- تشخیص جریان بیش از حد (Overcurrent Protection): اگر موتور به هر دلیلی (مثلاً قفل شدن شفت) جریان بیشتری از حد مجاز بکشد، سنسور این افزایش را تشخیص داده و آردوینو میتواند بلافاصله موتور را خاموش کند. این کار از سوختن موتور و مدار درایور آن جلوگیری میکند .
- کنترل سرعت در حلقه بسته: در کنترلرهای پیشرفته موتور (مانند درایوهای سروو)، برای حفظ سرعت ثابت تحت بارهای مختلف، نیاز به بازخورد جریان است. با اندازهگیری جریان، میتوان گشتاور موتور را تخمین زد و توان رسیده به آن را تنظیم کرد .
- تشخیص بار مکانیکی: با مانیتورینگ جریان کشیده شده توسط موتور میتوان به بار مکانیکی وارد بر آن پی برد. برای مثال، در بازوی رباتیک، اگر ربات به جسمی برخورد کند، جریان موتور ناگهان افزایش مییابد که میتوان از آن به عنوان سیگنالی برای توقف حرکت استفاده کرد.
راهاندازی سنسور ACS712 با آردوینو
حالا نوبت به بخش عملی ماجرا میرسد. در اینجا یک راهنمای گامبهگام برای اتصال و برنامهنویسی ACS712 با آردوینو ارائه میدهیم.

وسایل مورد نیاز:
- برد آردوینو (مانند Arduino Uno)
- ماژول سنسور جریان ACS712 (مدل 5، 20 یا 30 آمپر)
- یک بار مصرفی مانند موتور DC یا یک لامپ
- سیمهای جامپر
- بردبورد (اختیاری)
اتصالات مدار:
اتصال سنسور به آردوینو بسیار ساده است :
| پین سنسور ACS712 | اتصال به آردوینو |
|---|---|
| VCC | پین 5V |
| GND | پین GND |
| OUT | پین آنالوگ A0 |
برای اندازهگیری جریان یک موتور DC، باید موتور را در مسیر جریان قرار دهید. برای این کار، یکی از سیمهای موتور را از منبع تغذیه جدا کرده و آن را به یک سر ترمینال بار (Load) سنسور وصل کنید. سپس سیمی که از سر دیگر ترمینال بار سنسور خارج میشود را به منبع تغذیه و سیم دیگر موتور را نیز به منبع تغذیه وصل کنید. به این ترتیب، تمام جریان موتور از داخل سنسور عبور خواهد کرد.
برنامهنویسی آردوینو:
کد زیر یک مثال ساده برای خواندن جریان DC و نمایش آن در Serial Monitor است . این کد برای سنسور 30 آمپر با حساسیت 66 میلیولت بر آمپر نوشته شده است.
|
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 |
// پین متصل به خروجی سنسور const int currentPin = A0; // حساسیت سنسور بر اساس مدل (mV/A) // برای 5A: 185, برای 20A: 100, برای 30A: 66 const int sensitivity = 66; // ولتاژ آفست (ولتاژ خروجی سنسور وقتی جریان صفر است) // این مقدار معمولاً نیمی از ولتاژ تغذیه (5 ولت) = 2500mV است float offsetVoltage = 2500; void setup() { Serial.begin(9600); Serial.println("ACS712 Current Sensor Demo"); delay(500); } void loop() { // خواندن مقدار آنالوگ از پین A0 (مقدار بین 0 تا 1023) int adcValue = analogRead(currentPin); // تبدیل مقدار خام به ولتاژ (بر حسب میلیولت) // رزولوشن آردوینو 10 بیت است: 5V / 1024 = 4.88mV per unit float voltage = (adcValue / 1024.0) * 5000; // محاسبه جریان: (ولتاژ خوانده شده - ولتاژ آفست) / حساسیت float current = (voltage - offsetVoltage) / sensitivity; // نمایش نتایج Serial.print("ADC Value: "); Serial.print(adcValue); Serial.print("\t Voltage: "); Serial.print(voltage); Serial.print(" mV"); Serial.print("\t Current: "); Serial.print(current); Serial.println(" A"); delay(1000); } |
نکته بسیار مهم: کالیبراسیون
در دنیای واقعی، ولتاژ آفست ممکن است دقیقاً 2500 میلیولت نباشد و از سنسوری تا سنسور دیگر کمی متفاوت است. برای اندازهگیری دقیق، باید سنسور را کالیبره کنید. زمانی که هیچ باری به سنسور وصل نیست (جریان صفر)، سریال مانیتور را باز کنید و ولتاژ نمایش داده شده را یادداشت کنید. سپس این مقدار را به جای 2500 در متغیر offsetVoltage در کد خود قرار دهید .
استفاده از کتابخانههای آماده
برای کار راحتتر، میتوانید از کتابخانههای آماده مانند ACS712 library توسط ElectroRush4u در GitHub استفاده کنید . این کتابخانه توابع سادهای مانند getDC() برای جریان DC و getAC() برای جریان AC (محاسبه RMS) ارائه میدهد و کار کالیبراسیون را نیز خودکار میکند.
نتیجهگیری
سنسور جریان ACS712 یک ابزار قدرتمند و در عین حال ساده برای مانیتورینگ و کنترل جریان در پروژههای الکترونیکی است. از حفاظت از موتورهای DC گرفته تا ساخت واتمترهای هوشمند، کاربردهای این سنسور بیشمار است. با اتصال ساده و کتابخانههای موجود، هر کسی میتواند در کوتاهترین زمان ممکن اندازهگیریهای دقیق جریان را به پروژههای آردوینویی خود اضافه کند.
اگر تجربهای در کار با این سنسور دارید یا سوالی دارید، خوشحال میشویم در بخش نظرات با ما به اشتراک بگذارید!






