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;
}