مشروع قياس التيار الكهربائي المار في محرك DC باستخدام ACS712


مشروع قياس التيار الكهربائي المار في محرك DC باستخدام ACS712

مقدمة

سنقوم في هذه التجربة بتصميم جهاز يقيس التيار في الدائرة الكهربائية باستخدام حساس التيار الكهربائي (ACS712) والأردوينو.

الأدوات المستخدمة

الأداة العددملاحظات
اردوينو اونو1
حساس التيار الكهربائي (ACS712)1
محرك DC1
بطارية 9V1
اسلاك توصيلحسب الحاجة

الجزء النظري

يقوم مبدأ العمل في حساس التيار على مبدأ تأثير هول (Hall effect)

تأثير هول: عند وجود موصل يحمل تيار كهربائي في مجال مغناطيسي فإن حركة الإلكترونات تتأثر مما يؤدي إلى نشوء فرق في الجهد يسمى (جهد هول). يتناسب مقدار هذا الجهد طرديًا مع مقدار التيار المار في الموصل.

يتكون حساس التيار من موصل نحاسي يمر فيه التيار الكهربائي ويتكون لدينا فرق جهد يتناسب مقداره طرديًا مع مقدار التيار المار في هذا الموصل النحاسي. بعد ذلك يتم قياس هذا الجهد وترشيحه تمهيدًا لإدخاله إلى الاردوينو.

خطوات التوصيل

اتبع الصورة التالية لتتمكن من توصيل الدائرة

كما هو ملاحظ في صورة التوصيل، فإن حساس التيار متصل مع الحمل او Load. و OUT متصل بمنفذ الاردوينو A0 لقياس التيار.

الكود البرمجي

  • الكود البرمجي لقياس التيار المستمر DC

void setup() {

 Serial.begin(9600);
}

void loop() {

 float average = 0;
 for(int i = 0; i < 1000; i++) {
   average = average + (.0264 * analogRead(A0) -13.51) / 1000;
 
 //5A mode, if 20A or 30A mode, need to modify this formula to
   //(.19 * analogRead(A0) -25) for 20A mode and
   //(.044 * analogRead(A0) -3.78) for 30A mode
 
   delay(1);
 }
 Serial.println(average);  
}

  • الكود البرمجي لقياس التيار المتردد AC

#define CURRENT_SENSOR A0  // Define Analog input pin that sensor is attached

float amplitude_current;      // Float amplitude current
float effective_value;       // Float effective current

void setup()
{
   Serial.begin(9600);
   pins_init();
}
void loop()
{
   int sensor_max;
   sensor_max = getMaxValue();
   Serial.print(“sensor_max = “);
   Serial.println(sensor_max);
   
   //the VCC on the Arduino interface of the sensor is 5v
   
   amplitude_current=(float)(sensor_max-512)/1024*5/185*1000000; // for 5A mode,you need to modify this with 20 A and 30A mode;
   effective_value=amplitude_current/1.414;
   
   //for minimum current=1/1024*5/185*1000000/1.414=18.7(mA)
   //Only sinusoidal alternating current
   
   Serial.println(“The amplitude of the current is(in mA)”);
   Serial.println(amplitude_current,1);
   
   //Only one number after the decimal point
   
   Serial.println(“The effective value of the current is(in mA)”);
   Serial.println(effective_value,1);
}
void pins_init()
{
   pinMode(CURRENT_SENSOR, INPUT);
}
/*Function: Sample for 1000ms and get the maximum value from the S pin*/

int getMaxValue()
{
   int sensorValue;    //value read from the sensor
   int sensorMax = 0;
   uint32_t start_time = millis();
   while((millis()-start_time) < 1000) //sample for 1000ms
   {
       sensorValue = analogRead(CURRENT_SENSOR);
       if (sensorValue > sensorMax)
       {
           /*record the maximum sensor value*/
           
           sensorMax = sensorValue;
       }
   }
   return sensorMax;
}

المصدر

[1]http://henrysbench.capnfatz.com/henrys-bench/arduino-current-measurements/the-acs712-current-sensor-with-an-arduino/

[2]http://www.theorycircuit.com/hall-effect-current-sensor-circuit/

[3]http://tutorial45.com/arduino-current-sensor-project/

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *