как сделать вольтметр DC до 30v на ардуино с модулем датчик тока ACS712TELC-30A

Oleg
Offline
Зарегистрирован: 20.02.2014

как сделать вольтметр DC до 30v на ардуино с модулем датчик тока ACS712TELC-30A с выводом на комп?

maksim
Offline
Зарегистрирован: 12.02.2012

Берете дуину, датчик и делаете вольтметр с выводом на комп. Но судя по предыдущим темам не потяните, ищите готовое.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Как вы вообще собираетесь мерить напряжение датчиком тока ?! Тем более такого гигантского номинала ...

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

напряжение берется с аналогового входа, через делитель.

вот огрызок из моего кода (далеко не оптимальный), на 20 Вольт и датчик ACS712ELC-20А:

#define PIN_VOLTAGE_BATTERY A13       // пин для измерения напряжения на АКБ
#define PIN_CURRENT_SENSOR A15        // пин для чтения показаний амперметра
long intervalScreenUpdate = 1000;     // интервал вывода показаний в миллисекундах
long previousMillis = 0;              // время последнего изменения состояния
float voltageBatteryValue = 0;        // вольтметр - напряжение АКБ
float criticalVoltageBattery = 11.0;  // предельно допустимый уровень напряжения на АКБ
float currentValue = 0;               // амперметр - потребляемый ток

void loop() 
{ 
 if (millis() - previousMillis > intervalScreenUpdate) 
 {
   previousMillis = millis();       // Запоминаем текущее время
   readVoltage();                   // Измерение напряжения
   readCurrentSensor();             // Измерение потребляемого тока
 }
}

void readVoltage()
{
// считываем значение напряжения с аналогового входа
  voltageBatteryValue = analogRead(PIN_VOLTAGE_BATTERY) * 20.15 / 1023.0; // 20,15 - значение V2 делителя напряжения, оно же максимально допустимое напряжение измерения

  Serial.print("voltageBatteryValue: ");
  Serial.println(voltageBatteryValue);

  if (voltageBatteryValue < criticalVoltageBattery) // если напряжение меньше допустимого
  {
    //systemWarning = true;                           // выставляем флаг
    //playBlaBla(1);                                  // бибикаем
    //showMessage(LOW_BATTERY);                       // и ругаемся :)
  }

}  

void readCurrentSensor()
{
  //  для датчика тока ACS712ELC-20А чувствительность составляет 100 мВ/А
  // описание: inet-deal.mpa.ru/articles/arduino-002.html
  byte currentAverageTimes = 10;      // число итераций для сглаживания
  float currentZeroLevel = 410.0;    // точка нуля
  float currentFactor = 0.0506;      // коэффициент коррекции
  float sensorValue = 0;
  // чтение сенсора и сглаживание прыгающих показаний
  for (byte count = 0; count < currentAverageTimes; count++) 
  {
    // read the value from the sensor:
    sensorValue = analogRead(PIN_CURRENT_SENSOR);
    delay(30);
    // make average value
    currentValue= (sensorValue + currentValue)/2;
  }
  currentValue = (currentFactor * (sensorValue - currentZeroLevel));
/*  if (currentValue< 0)     // Коррекция отрицательных показаний амперметра - отбрасываем минус, если он появляется
  { currentValue = (0 - currentValue); }
*/
  Serial.print("currentValue: ");
  Serial.println(currentValue);
}

И еще - эти датчики тока очень чувствительны к внешним магнитным полям и металлическим предметам, а также "скачут" при малых величинах тока, в общем никудышные :(

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Ну так напряжение то вы измеряете не этим датчиком. Показания датчика тока при малых величинах и будут неточны. Не даром они бывают на 30, 20, 5 ампер, да еще полярные и неполярные. Вам нужно подобрать правильный, в зависимости от того какой ожидается ток, и уже под датчик скоректировать точку нуля и коэфициенты. Кстати судя по всему вы измеряете постоянный ток датчиком для переменного. Это допустимо, но нужно учитывать, что датчик работает только на половину своей точности. С переменным током еще и нужно учитывать частоту напряжения и исходя из нее между усредняющими измерениями делать соответствующие задержки (как один из способов).

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

а откуда такая информация? В даташите на него никаких ограничений при измерении в цепи постоянного/переменного напряжения нету.

То, что номинал (30, 20, 5 Ампер) надо подбирать соответственно планируемой нагрузке, и так ясно.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

А какая нужна информация еще ? Сравните даташиты с 712 до 715. Ограничений конечно нет. Потому как 712 может измерять переменный ток, он не полярный, то есть у него есть плюс с минусом, но ток на его входе может протекать и в сторону противоположную. Когда вы с его помощью измеряете постоянный ток, то диапазон измерения устройства только половина шкалы. То есть 712 на 30 ампер измеряет ток от -30А до  +30А, вот и получается, что при изменении постоянного тока на 1 ампер напряжение на выходе меняется примерно 5v/60=0.0834 вольта. А у 713 диапазон измерений от 0 до 30А, а это значит, что измерять им переменный ток нельзя, но точность измерения постоянного тока вдвое выше  5v/30=0.1667 вольта. Кстати, поэтому у 712 нулевой уровень показаний в даташите обозначен как VCC*0,5 , а у 713 - 0,1 милливольт.