استفاده از حساس(حس کننده) جریان Allegro ACS712 (DC/AC) همراه با شِفر (کود) آردوینو
در این آموزش، یاد میگیریم چگونه از حساس(حس کننده) جریان Allegro ACS712 برای اندازهگیری جریانهای AC و DC با آردوینو استفاده کنیم. حساس(حس کننده) ACS712 ولتاژی متناسب با جریانی که از آن عبور میکند تولید میکند، که به ما اجازه میدهد بهراحتی مقادیر جریان را روی نمایشگر مسلسل آردوینو بخوانیم و نمایش دهیم. این پروژه برای کسانی که میخواهند جریان را در کاربردهای مختلف، مانند منابع تغذیه یا سیستمهای باتری، پایش کنند ایدهآل است.

ما یک مدار ساده میسازیم که حساس(حس کننده) ACS712 را به آردوینو متصل میکند و سپس برنامهای مینویسیم تا خروجی حساس(حس کننده) را بخواند. نتیجهٔ مورد انتظار نمایش خوانشهای جریان بهصورت بلادرنگ روی نمایشگر مسلسل است. برای روشنتر شدن نحوهٔ پیادهسازی، حتماً ویدیو را بررسی کنید (در ویدیو در 02:00).
سختافزار به زبان ساده
حساس(حس کننده) جریان Allegro ACS712 یک ماجیول جمعوجور است که میتواند جریانهایی تا 30A را اندازهگیری کند، بسته به نسخهای که انتخاب میکنید. این ماجیول سه پایه دارد: VCC برای تغذیه، GND برای زمین، و یک پایه خروجی که ولتاژی متناظر با جریان اندازهگیریشده را فراهم میکند. حساس(حس کننده) از اصل اثر هال استفاده میکند، بدین معنا که جریان عبوری از یک هادی میدان مغناطیسی تولید میکند؛ این میدان شناسایی شده و به ولتاژ تبدیل میشود که سپس به آردوینو ارسال میگردد.
ماجیول در درجهبندیهای جریان 5A، 20A و 30A موجود است و بهترتیب ولتاژهای خروجی 185 mV/A، 100 mV/A و 66 mV/A را تولید میکند. این یعنی برای هر آمپر جریان عبوری از حساس(حس کننده)، ولتاژ متناظری دریافت میکنید که قابل خواندن و پردازش است. این ویژگی آن را برای کاربردهای مختلف مناسب میسازد.
جزئیات مشخصات فنی
| تولیدکننده | الگرو میکروسیستمز |
|---|---|
| شماره قطعه | ACS712ELCTR-30A-T |
| ولتاژ منطقی/ورودی-خروجی | 4.5-5.5 ولت |
| ولتاژ تغذیه | 5 ولت |
| جریان خروجی (برای هر کانال) | حداکثر 30 A |
| راهنمای فرکانس PWM | قابل اعمال نیست |
| آستانههای منطقی ورودی | قابلاعمال نیست |
| افت ولتاژ / RDS(روشن) / اشباع | 1.2 میلیاهم |
| محدودیتهای حرارتی | حداکثر 150 °C |
| بسته | TO-220 |
| یادداشتها / واریانتها | موجود در 5A، 20A و 30A |
- برای جلوگیری از اتصال کوتاه، سیمکشی را بهدرستی انجام دهید.
- برای ظرفیت جریان از سیمی با گیج مناسب استفاده کنید (12 AWG برای 30A).
- دمای ماجیول را در حین کار پایش کنید.
- برای کاربردهایی با جریان بالاتر، افزودن یک هیتسینک را مدنظر قرار دهید.
- خروجی حساس(حس کننده) را بر اساس کاربرد خاص خود کالیبره کنید.
دستورالعملهای سیمکشی

برای سیمکشی حساس(حس کننده) Allegro ACS712 به آردوینو خود، با وصل کردن پایه VCC حساس(حس کننده) به پایه 5V روی آردوینو شروع کنید. سپس پایه GND حساس(حس کننده) را به یکی از پایههای GND آردوینو متصل کنید. پایه خروجی ACS712 باید به پایه ورودی آنالوگ A0 آردوینو متصل شود.
برای اندازهگیری جریان، بار را بهصورت سری با حساس(حس کننده) متصل کنید. این بدین معناست که سیم مثبت منبع تغذیه شما باید وارد یکی از پایههای ورودی حساس(حس کننده) جریان شود، در حالی که پایه دیگر به بار متصل میشود. سمت دیگر بار باید به منبع تغذیه بازگردد تا مدار تکمیل شود. مطمئن شوید از سطح مقطع مناسب سیم متناسب با جریانی که اندازهگیری میکنید استفاده کنید تا از گرمشدن بیش از حد جلوگیری شود.
نمونههای شِفر (کود) و راهنمای گامبهگام
قطعه شِفر (کود) زیر پایه آنالوگ را مقداردهی اولیه کرده و نمایشگر مسلسل را راهاندازی میکند:
#define VIN A0 // define the Arduino pin A0 as voltage input (V in)
const float VCC = 5.0; // supply voltage is from 4.5 to 5.5V. Normally 5V.
در اینجا، ما تعریف میکنیمVINبهعنوان پایهٔ ورودی آنالوگ که خروجی حساس(حس کننده) به آن متصل است. همچنین ولتاژ تغذیه را تنظیم میکنیم.VCCبه 5V.

در تابع loop، ولتاژ را از حساس(حس کننده) ACS712 میخوانیم و جریان را محاسبه میکنیم:
float voltage_raw = (5.0 / 1023.0) * analogRead(VIN); // Read the voltage from sensor
float current = voltage / sensitivity[model]; // Calculate current based on sensitivity
در اینجا ولتاژ خام را از حساس(حس کننده) میخوانیم و با استفاده از آرایهٔ حساسیت که بر اساس مدل حساس(حس کننده) مورد استفاده است، آن را به جریان واقعی تبدیل میکنیم.
در نهایت، خوانشهای جریان را در نمایشگر مسلسل چاپ میکنیم:
if (abs(current) > cutOffLimit) {
Serial.print("V: ");
Serial.print(voltage, 3); // print voltage with 3 decimal places
Serial.print("V, I: ");
Serial.print(current, 2); // print the current with 2 decimal places
Serial.println("A");
} else {
Serial.println("No Current");
}
این بخش بررسی میکند که آیا جریان از حد قطع تعریفشده فراتر رفته است و مقادیر ولتاژ و جریان را در نمایشگر مسلسل چاپ میکند. اگر جریان کمتر از آستانه باشد، عبارت No Current را چاپ میکند.
برای مشاهدهٔ شِفر (کود) کامل، لطفاً به کدی که زیرِ مقاله بارگذاری شده مراجعه کنید.
نمایش / چه انتظاری داشته باشید
وقتی شِفر (کود) را اجرا کرده و به مدار برق میدهید، باید خوانشهای جریان را روی نمایشگر مسلسل ببینید. با تنظیم بار، خوانشها باید متناسباً تغییر کنند به شرط اینکه جریان بالاتر از حد قطع باشد. مراقب دمای حساس(حس کننده) باشید، بهویژه هنگام کار در نزدیکی محدودهٔ حداکثر مجاز آن.
/*
*
* Arduino Sketch for Allegro ACS712 Current Sensor
* This sensor can measure current at a range of up to 30A.
* It operates with 5V.
* Please watch the video instruction and explanation for this code.
*
* Written by Ahmad Shamshiri on Sunday, June 17, 2018 at 22:06 in Ajax, Ontario, Canada
* for Robojax.com
* View the video instruction at https://youtu.be/DVp9k3xu9IQ
* This code has been downloaded from Robojax.com
*/
#define VIN A0 // define the Arduino pin A0 as voltage input (V in)
const float VCC = 5.0;// supply voltage is from 4.5 to 5.5V. Normally 5V.
const int model = 2; // enter the model number (see below)
float cutOffLimit = 1.01;// set the current which, below that value, doesn't matter. Or set 0.5
/*
"ACS712ELCTR-05B-T",// for model use 0
"ACS712ELCTR-20A-T",// for model use 1
"ACS712ELCTR-30A-T"// for model use 2
The sensitivity array is holding the sensitivity of the ACS712
current sensors. Do not change. All values are from page 5 of the data sheet
*/
float sensitivity[] ={
0.185,// for ACS712ELCTR-05B-T
0.100,// for ACS712ELCTR-20A-T
0.066// for ACS712ELCTR-30A-T
};
const float QOV = 0.5 * VCC;// set quiescent Output voltage of 0.5V
float voltage;// internal variable for voltage
void setup() {
//Robojax.com ACS712 Current Sensor
Serial.begin(9600);// initialize serial monitor
Serial.println("Robojax Tutorial");
Serial.println("ACS712 Current Sensor");
}
void loop() {
//Robojax.com ACS712 Current Sensor
float voltage_raw = (5.0 / 1023.0)* analogRead(VIN);// Read the voltage from sensor
voltage = voltage_raw - QOV + 0.012 ;// 0.000 is a value to make voltage zero when there is no current
float current = voltage / sensitivity[model];
if(abs(current) > cutOffLimit ){
Serial.print("V: ");
Serial.print(voltage,3);// print voltage with 3 decimal places
Serial.print("V, I: ");
Serial.print(current,2); // print the current with 2 decimal places
Serial.println("A");
}else{
Serial.println("No Current");
}
delay(500);
}
منابع و مراجع
هنوز هیچ منبعی موجود نیست.
فایلها📁
برگه مشخصات (pdf)
-
دیتاشیت حساس(حس کننده) جریان AC/DC 4A، 20A، 30A آلساندرو ACS712
robojax-allegro_ACS712_current_sensor.pdf0.65 MB
فایل فریزینگ
-
حساس(حس کننده) جریان آلگر ACS712
Allegreo ACS712 Current Sensor.fzpz0.03 MB