ACS712T 30А модуль датчика тока как подключить к Arduino
- Информация о материале
 - Обновлено: 02.04.2024, 09:14
 - Опубликовано: 02.04.2024, 08:58
 - Автор: DeniS
 
ACS712T 30А амперметр Datasheet, модуль датчика тока на эффекте Холла для Arduino
ACS712T 30А модуль датчика тока как подключить к Arduino
Вывод датчика ACS712
VCC  Питание, 5 В -> (Arduino +5В)
GND  Земля -> (Arduino GND)
OUT  Аналоговый выход датчика, напряжение на котором линейно зависит от протекающего через датчик тока -> (Arduino A0)
IP+  Вывод 1 для подачи измеряемого тока -> (в разрыв нагрузки)
IP-  Вывод 2 для подачи измеряемого тока -> (в разрыв нагрузки)

ACS712 и АЦП Ардуино - рассчет коэффициента
АЦП у разных плат Arduino имеет различную разрядность, обычно 10 или 12 бит. С аналогового порта могут приходить значения от 0 до 210 = 1024 для 10-разрядного АЦП.
Условие: диапазон измерений тока от -5 А до +5 А, а чувствительность 185 мВ/А.
Если на 1 А приходится 185 мВ, это соответствует примерно 38 единицам измерения АЦП:
185 * 1024 / 5000 = 37.89
где 5000 – это максимальное значение напряжения, которое способен измерить АЦП Arduino, в милливольтах.
На выходе OUT датчика ACS712, при отсутствии измеряемого тока, должна быть половина напряжения питания, т.е. 2.5 В.
Так как вся шкала АЦП лежит в диапазоне от 0 до 1024, то при отсутствии измеряемого тока с аналогового порта Arduino считывается число 512. Это начало шкалы отсчёта.
Обозначим его value_zero. Отклонение тока value_adc от нулевого уровня в большую или меньшую сторону и будет показывать силу тока.
Следовательно, чтобы посчитать в амперах значение тока с датчика ACS712, необходимо разницу нулевого уровня и измеренного значения с аналогового порта A0 поделить на 38.
Чтобы получить ток в миллиамперах, следует умножить это значение на 1000:
I(mA) = (value_zero − value_adc) / 38 * 1000
На практике значение на аналоговом выводе A0 не будет равняться точно 512. Поэтому, чтобы определить начало отсчёта, в скетч добавлена примитивная калибровку. Калибровка будет заключаться в том, что некоторое количество раз считывается значение с аналогового порта A0 при отсутствии тока на датчике ACS712, и усредняется. Нагрузка на время калибровки должна быть выключена, чтобы ток не протекал через датчик.
Скетч для измерения постоянного тока датчиком ACS712
const int acs712_pin = A0;
int zero; // уровень нуля, относительно которого измеряется ток, обычно VCC/2
void setup() {
 Serial.begin(9600);
 calibrate();
}
// определим нуль шкалы (до включения нагрузки)
void calibrate(){
 zero = 0;
 int repeats = 10;
 for (int i=0; i<repeats; i++){
 zero += analogRead(acs712_pin);
 delay(100);
 }
 zero /= repeats; // берём среднее арифметическое
 Serial.print("Zero=");
 Serial.println(zero);
}
void loop() {
 int sensorValue = analogRead(acs712_pin); // читаем значение с АЦП и выводим в монитор
 Serial.print(sensorValue); 
 Serial.print(" = ");
 int c = getCurrent(sensorValue); // преобразуем в значение тока и выводим в монитор
 Serial.print(c); 
 Serial.println(" mA");
 delay(100);
}
// рассчитывает ток в мА по значению с АЦП
int getCurrent(int adc) {
 int delta = zero - adc; // отклонение от нуля шкалы
 float scale = 37.888; // сколько единиц АЦП приходится на 1 ампер, по формуле (1)
 int current = (int)delta*1000/scale; // считаем ток в мА и округляем до целых, по формуле (2)
 return current;
}