- Как измерить фазовый угол между напряжением и током в сети с помощью Arduino
- Почему это важно?
- Что тебе понадобится
- Как измерить фазовый угол: пошагово
- Сравнение датчиков: токовый трансформатор vs шунт
- Что выбрать в зависимости от ситуации
- Частые ошибки — и как их избежать
- Как лучше сделать: практические рекомендации
- Пример кода (основа)
- Что делать дальше
Как измерить фазовый угол между напряжением и током в сети с помощью Arduino
Если ты хочешь понять, насколько эффективно работает твой электроприбор — например, нагреватель, двигатель или инвертор — тебе нужно знать не только, сколько тока и напряжения проходит через цепь, но и в каком соотношении они находятся друг к другу по фазе. Это и есть фазовый угол. Он показывает, насколько нагрузка индуктивная или ёмкостная. В бытовой сети 220 В 50 Гц это может быть от 0° (чисто резистивная нагрузка) до 90° (чисто индуктивная или ёмкостная). А если угол — 45°, значит, у тебя смешанная нагрузка, и коэффициент мощности уже не 1, а около 0.7. Это значит, что часть энергии просто «гуляет» туда-сюда, не выполняя полезной работы. И если ты хочешь это измерить — не тратя деньги на дорогой ваттметр или анализатор качества электроэнергии — Arduino тебе в помощь.
Почему это важно?
Представь, что у тебя есть стиральная машина с асинхронным двигателем. Она потребляет 1 кВт активной мощности, но если фазовый угол — 60°, то полная мощность — уже 2 кВА. Твой счётчик покажет 1 кВт·ч, но провода, автомат и трансформатор на подъезде греются от 2 кВА. Если ты не знаешь фазовый угол — ты не знаешь, насколько эффективно работает твоя система. А если ты делаешь энергоаудит, оптимизируешь ПЛК, или просто хочешь понять, почему у тебя «сгорает» конденсатор в фильтре — без измерения фазы ты слеп.
С коммерческими приборами всё просто: берёшь Fluke 435, подключаешь, читаешь. Но если ты хочешь сделать датчик для мониторинга в реальном времени, встроить его в самодельный инвертер, или просто понять, как это работает — Arduino + два датчика и пара строк кода — твой лучший выбор.
Что тебе понадобится
- Arduino Uno или Nano (любой с аналоговыми входами и частотой дискретизации хотя бы 10 кГц)
- Датчик напряжения: резистивный делитель (например, 470 кОм + 10 кОм) для снижения 220 В до 5 В
- Датчик тока: токовый трансформатор (например, SCT-013-030, 30 А/1 В) или шунт (0.1 Ом, 5 Вт) — выбор зависит от тока
- Операционный усилитель (опционально): для смещения сигнала тока на 2.5 В, если используешь шунт
- Конденсаторы и резисторы для фильтрации (100 нФ, 10 кОм)
- Паяльник, мультиметр, breadboard или печатная плата
Важно: Никогда не подключай Arduino напрямую к сети 220 В! Всё, что связано с высоким напряжением, должно быть гальванически развязано. Делитель — это не развязка. Это только снижение. Для безопасности используй оптопару или трансформатор напряжения, если работаешь с постоянным мониторингом. Но для разового замера — делитель с изоляцией от корпуса и заземлённым экраном — допустим, если ты понимаешь риски.
Как измерить фазовый угол: пошагово
- Подключи датчик напряжения. Сделай делитель: 470 кОм от фазы к Arduino, 10 кОм от Arduino к нулю. На выходе делителя — напряжение 5 В (пик) при 310 В пикового входного. Добавь конденсатор 100 нФ параллельно 10 кОм — это фильтр, чтобы убрать высокочастотные помехи.
- Подключи датчик тока. Если используешь SCT-013 — подключи его на вторичную обмотку, а выход иди на вход Arduino через резистор 10 кОм и конденсатор 100 нФ. SCT-013 выдаёт переменный сигнал 0–1 В при 30 А. Но Arduino не может измерять отрицательные напряжения — значит, нужно сдвинуть сигнал на 2.5 В. Для этого подключи резисторы 10 кОм от 5 В к входу и от входа к земле — получится делитель 2.5 В. Это и есть «смещение».
- Если используешь шунт (0.1 Ом, 5 Вт), то на нём падение напряжения — 0.1 В на 1 А. Усилитель с коэффициентом 25 (например, LM358) поднимет это до 2.5 В. Затем добавь смещение на 2.5 В — и получишь сигнал 0–5 В, соответствующий 0–25 А. Это точнее, чем токовый трансформатор, но требует гальванической развязки (оптопара или изолирующий усилитель).
- Запусти Arduino. Считывай напряжение и ток одновременно с частотой не ниже 5 кГц. Лучше — 10–20 кГц. Это нужно, чтобы за один период 50 Гц (20 мс) захватить минимум 100–200 точек. Чем больше точек — тем точнее угол.
- Найди нули и пики. Определи моменты, когда напряжение пересекает ноль (с ростом). Затем найди момент, когда ток пересекает ноль (с ростом). Разница во времени между этими моментами — это и есть сдвиг фазы. Переведи его в градусы:
угол = (Δt / T) * 360°, где T = 20 мс (период 50 Гц). - Уточни с помощью корреляции. Лучший способ — взять 10 периодов, построить выборку напряжения и тока, и найти сдвиг, при котором их корреляция максимальна. Это даст точность до 0.5°, даже при шумах.
Сравнение датчиков: токовый трансформатор vs шунт
| Критерий | Токовый трансформатор (SCT-013) | Шунт (0.1 Ом) |
|---|---|---|
| Гальваническая развязка | Да | Нет |
| Погрешность | 1–3% | 0.5–1% |
| Частотный диапазон | До 1 кГц | До 100 кГц |
| Нагрев | Нет | Да (при токе >10 А) |
| Сложность подключения | Просто | Сложнее (нужен усилитель) |
| Стоимость | 5–10 $ | 1–2 $ + усилитель |
| Подходит для | Бытовая техника, до 30 А | Инверторы, высокочастотные системы, точные измерения |
Если ты измеряешь стиральную машину — берём SCT-013. Если ты тестируешь светодиодный драйвер с частотой переключения 100 кГц — берём шунт. Для большинства бытовых задач трансформатор — идеально. Он безопаснее и проще.
Что выбрать в зависимости от ситуации
- Если ты просто хочешь понять, почему у тебя «плохой» коэффициент мощности — используй SCT-013 + делитель напряжения. Просто, безопасно, работает. Точность ±2° — достаточно для бытового анализа.
- Если ты делаешь энергоаудит дома или в офисе — добавь Wi-Fi (ESP8266) и отправляй данные в Google Sheets. Запускай измерение раз в минуту — и ты увидишь, когда включается кондиционер и как он «тянет» фазу.
- Если ты тестируешь инвертер или ПИД-регулятор двигателя — нужен шунт + усилитель + быстрая выборка (20 кГц). Иначе ты не увидишь искажений на фронтах.
- Если ты хочешь сделать автоматическое отключение при плохом коэффициенте мощности — добавь реле и алгоритм: если угол > 45° (коэффициент < 0.7) — включи конденсаторную батарею.
Частые ошибки — и как их избежать
- Ошибка 1: Подключаешь датчик напряжения без фильтра. Помехи от ламп ДРЛ, светодиодов, зарядок — искажают ноль. Результат — сдвиг фазы на 10–20°. Решение: всегда ставь LC-фильтр (конденсатор 100 нФ + резистор 10 кОм) на входе.
- Ошибка 2: Считаешь фазу по пику, а не по нулю. Пик тока может быть сдвинут из-за нелинейности нагрузки (например, диодный мост). А ноль — всегда чистый. Используй только пересечение нуля с положительным склоном.
- Ошибка 3: Используешь Arduino с частотой 1 кГц. За 20 мс ты получишь всего 20 точек. Нет точности. Минимум — 5 кГц, лучше 10 кГц. На Uno можно добиться 10–15 кГц с помощью прямого доступа к регистрам (без
analogRead()). - Ошибка 4: Не учитываем задержку в датчике. SCT-013 имеет задержку до 1 мс. Это 18° на 50 Гц! В спецификациях указано — но многие пропускают. Используй компенсацию: сдвинь сигнал тока на 1 мс вперёд в коде.
- Ошибка 5: Забыл про смещение. Если не поднять сигнал тока на 2.5 В — Arduino будет считывать только положительные полуволны. Ты не увидишь фазу вообще. Обязательно делай смещение.
Как лучше сделать: практические рекомендации
- Используй библиотеку
TimerOne— она позволяет точно управлять частотой сэмплинга. Без неёanalogRead()работает неравномерно. - Собери всё на печатной плате — даже простой феномен «шум от проводов» может дать погрешность 3–5°. Токовые провода должны быть короткими, а земля — общей точкой.
- Калибруй на известной нагрузке. Возьми лампу накаливания — это чисто резистивная нагрузка. Фазовый угол должен быть 0°. Если у тебя — 2° — значит, есть систематическая ошибка. Исправляй смещением в коде.
- Проверяй на 3 нагрузках: лампа (0°), дрель (40–50°), конденсатор (–80–90°). Если твой код правильно показывает эти значения — он рабочий.
- Считай коэффициент мощности — это не просто угол. Он равен
cos(φ). Если угол 30° — коэффициент 0.87. Если 60° — 0.5. Это то, что реально влияет на счётчик.
Пример кода (основа)
Вот минимальный рабочий фрагмент:
#include <TimerOne.h>
volatile int voltageSample = 0;
volatile int currentSample = 0;
volatile unsigned long timeVoltageZero = 0;
volatile unsigned long timeCurrentZero = 0;
volatile bool voltageCrossed = false;
volatile bool currentCrossed = false;
const int VOLTAGE_PIN = A0;
const int CURRENT_PIN = A1;
const float SAMPLE_RATE = 10000; // 10 кГц
const float PERIOD = 0.02; // 20 мс = 50 Гц
void setup() {
Serial.begin(115200);
Timer1.initialize(1000000 / SAMPLE_RATE); // 100 мкс = 10 кГц
Timer1.attachInterrupt(sampleSignals);
pinMode(VOLTAGE_PIN, INPUT);
pinMode(CURRENT_PIN, INPUT);
}
void sampleSignals() {
voltageSample = analogRead(VOLTAGE_PIN);
currentSample = analogRead(CURRENT_PIN);
// Порог для нуля: ~512 (2.5 В) ± 50
if (voltageSample > 562 && voltageSample < 462 && !voltageCrossed) {
timeVoltageZero = micros();
voltageCrossed = true;
}
if (currentSample > 562 && currentSample < 462 && !currentCrossed) {
timeCurrentZero = micros();
currentCrossed = true;
}
}
void loop() {
if (voltageCrossed && currentCrossed) {
long deltaT = timeCurrentZero - timeVoltageZero;
float phaseAngle = (deltaT / (PERIOD * 1000000.0)) * 360.0;
float powerFactor = cos(phaseAngle * 3.14159 / 180.0);
Serial.print("Фаза: ");
Serial.print(phaseAngle, 1);
Serial.print("°, КМ: ");
Serial.println(powerFactor, 3);
voltageCrossed = false;
currentCrossed = false;
}
delay(100); // Обновление раз в 100 мс
}
Этот код — база. Он не учитывает задержку датчика, не фильтрует шум, не усредняет по нескольким циклам. Но он работает. Добавь усреднение по 10 периодам — и точность поднимется до ±1°.
Что делать дальше
Ты измерил фазовый угол. Что дальше?
- Если угол > 45° — подумай о компенсации. Добавь конденсатор параллельно нагрузке. Для 1 кВт при 60° нужен конденсатор ~30 мкФ на 220 В.
- Если угол меняется — значит, нагрузка нестабильна. Возможно, включается двигатель или инвертор. Следи за пиками.
- Если угол — отрицательный (ток впереди напряжения) — у тебя ёмкостная нагрузка. Это редко в быту, но бывает в светодиодных драйверах.
- Если угол — 0°, но мощность низкая — значит, нагрузка неактивна. Проверь, включён ли вообще прибор.
Самое главное — ты теперь можешь видеть, что происходит в цепи. Не по косвенным признакам, не по показаниям счётчика, а напрямую. Ты не просто измеряешь — ты понимаешь.
Сделай один замер — и ты уже не будешь смотреть на свою стиралку, как на «чёрный ящик». Ты увидишь, как она работает. И это — первая ступень к настоящему пониманию электрики.
Информация в статье носит ознакомительный характер. Работа с сетевым напряжением требует знаний по электробезопасности. При выполнении измерений используй изолированные инструменты, соблюдай правила работы с высоким напряжением и проконсультируйся с квалифицированным электриком, если сомневаешься в своих действиях.
