
Интернет-магазин «Неглупый Дом»
ACS712 непрерывно следит за током нагрузки — как только он превышает безопасный порог (короткое замыкание, перегрузка), Arduino мгновенно обесточивает линию через реле, защищая проводку и подключённое оборудование.
ACS712 — датчик тока на эффекте Холла: нагрузка физически пропускается через внутреннюю токовую шину датчика, и магнитное поле, создаваемое протекающим через эту шину током, преобразуется в пропорциональное аналоговое напряжение на выходе OUT. В состоянии нулевого тока датчик выдаёт примерно половину напряжения питания (около 2.5В при питании 5В), а при протекании тока это напряжение отклоняется в одну или другую сторону в зависимости от направления тока.
Чтобы получить силу тока в амперах, нужно вычесть из измеренного напряжения эту «нулевую точку» (2.5В) и разделить результат на коэффициент чувствительности датчика, который указан на самой плате и зависит от варианта исполнения: у плат на 5А он обычно около 0.185 В/А, на 20А — около 0.100 В/А, на 30А — около 0.066 В/А (у разных производителей и партий могут быть небольшие отклонения от этих паспортных значений — для точной защиты рекомендуется откалибровать по образцовому амперметру).
Ключевая особенность этого проекта — защита «с памятью»: в отличие от обычного автоматического предохранителя, который включается обратно сам, здесь после срабатывания реле остаётся разомкнутым до перезагрузки платы. Это сделано намеренно: превышение тока почти всегда говорит о реальной проблеме (короткое замыкание, перегрузка, повреждённая изоляция), и автоматическое повторное включение могло бы просто раз за разом включать неисправную цепь, что опаснее, чем оставить её выключенной до проверки человеком.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
const int sensorPin = A0;
const int relayPin = 7;
const float maxCurrent = 5.0; // ампер, безопасный порог — подберите под вашу нагрузку
// 0.066 В/А — чувствительность варианта ACS712-30A; у плат на 20А это 0.100,
// у плат на 5А — около 0.185 (точное значение смотрите на маркировке своей платы)
const float sensitivity = 0.066;
bool tripped = false;
void setup() {
Serial.begin(9600);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH); // нагрузка включена
}
void loop() {
if (tripped) return; // после срабатывания требуется перезагрузка платы для сброса
int raw = analogRead(sensorPin);
float voltage = (raw / 1023.0) * 5.0;
float current = abs(voltage - 2.5) / sensitivity;
if (current > maxCurrent) {
Serial.println("Перегрузка! Нагрузка отключена.");
digitalWrite(relayPin, LOW);
tripped = true;
}
delay(10); // быстрый опрос важен для своевременной защиты
}
После срабатывания защиты состояние `tripped` не сбрасывается автоматически — это осознанное решение: перегрузка обычно означает реальную неисправность, которую стоит устранить перед повторным включением, а не просто попробовать снова.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 214 ₽ 193 ₽ (экономия 21 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.