Создание надежного монитора энергии и логгера данных на Arduino — пошаговое руководство
Компоненты и материалы
- Arduino UNO — 1 шт.
- Плата Dr. Wattson (MCP39F521) — 1 шт. (измерение напряжения, тока, мощности, коэф. мощности, частоты)
- Акриловый корпус для Dr. Wattson — 1 шт. (безопасность: изоляция от сети)
- MicroSD-карта + адаптер (Adafruit MicroSD breakout) — 1 шт.
- Тактильная кнопка — 1 шт.
- Светодиод + резистор 220 Ом — индикатор логирования
- Провода, макетная плата
Dr. Wattson основан на чипе Microchip MCP39F521. Измеряет току до 4А (динамический диапазон 4000:1 — до 1 мА), изолирован через токо- и направочные трансформаторы. Доступен на Tindie.
О проекте
Устройство собирает данные о потреблении энергии подключенной нагрузки (ток, активная/реактивная/полная мощность, коэф. мощности, напряжение, частота) и пишет их в CSV-файлы на SD-карту. Кнопка включает/выключает логирование, светодиод показывает статус. Файлы ротируются: DATA00.CSV … DATA99.CSV — удобно для разделения замеров разных приборов.
Сборка и безопасность
Плата Dr. Wattson помещается в акриловый корпус с IEC-розеткой на входе и вилкой на выходе. Все силовой части изолированы. Цифровой выход (I2C) полностью гальванически разделен от сети — безопасно для Arduino.
Максимальный ток нагрузки — 12 А, калибровка — до 4 А (для точного измерения малых токов в режиме ожидания).
Схема подключения
| Dr. Wattson | Arduino UNO |
|---|---|
| SCL | A5 |
| SDA | A4 |
| ZCD (Zero Cross Detect) | Не используется |
| Event | Не используется |
| GND | GND |
| VIN | 5V |
| 3.3V | 3.3V |
| GND (второй) | GND (любой) |
MicroSD (SPI): CLK→D13, MISO→D12, MOSI→D11, CS→D10 (по умолчанию).
Кнопка: один вывод → D4, второй → GND. Используется внутренний pull-up, инверсная логика (нажатие = LOW). Библиотека Button (Jack Christensen) обеспечивает антидребезг.
Светодиод: анод → D9 через 220 Ом, катод → GND.
Скетч: ключевые моменты
Библиотеки: Wire.h, UpbeatLabs_MCP39F521.h (GitHub: upbeatlabs/drwattson), SD.h, Button.h.
Инициализация (setup):
pinMode(LED, OUTPUT);
pinMode(CHIP_SELECT, OUTPUT);
if (!SD.begin(CHIP_SELECT)) { /* ошибка */ }
wattson.begin(); // I2C адрес по умолчанию 0x74
// Поиск свободного имени файла DATAxx.CSV
char filename[] = "DATA00.CSV";
for (uint8_t i = 0; i < 100; i++) {
filename[4] = i/10 + '0';
filename[5] = i%10 + '0';
if (!SD.exists(filename)) break;
}
Основной цикл (loop):
myBtn.read();
if (myBtn.wasReleased()) {
readData = !readData;
digitalWrite(LED, readData);
}
if (readData) {
UpbeatLabs_MCP39F521_Data data;
UpbeatLabs_MCP39F521_FormattedData fData;
if (wattson.read(&data, NULL) == SUCCESS) {
wattson.convertRawData(&data, &fData);
unsigned long ms = millis();
// Запись в CSV
File dataFile = SD.open(filename, FILE_WRITE);
if (dataFile) {
dataFile.print(ms); dataFile.print(",");
dataFile.print(fData.currentRMS); dataFile.print(",");
dataFile.print(fData.activePower); dataFile.print(",");
dataFile.print(fData.reactivePower); dataFile.print(",");
dataFile.println(fData.apparentPower);
dataFile.close();
}
// Вывод в терминал (с очисткой экрана ANSI)
Serial.write("\x1B""c"); // работает в `screen`, не в Serial Monitor
wattson.printMCP39F521Data(&fData);
}
}
Для удобного просмотра в реальном времени используйте терминал screen (Linux/macOS): screen /dev/ttyUSB0 9600.
Анализ данных в Excel
CSV-файлы легко открываются в Excel / LibreOffice Calc. Добавьте заголовки:
timestamp, currentRMS, activePower, reactivePower, apparentPower
Пример графика для лампы CFL 14W (холодный/горячий пуск): ток пик 0.21А → стабилизация 0.18А; активная мощность 17Вт → 14.2Вт. После разогрева пуск происходит быстрее.
Заключение и перспективы
Dr. Wattson дает качественные энергоданные «из коробки» (калиброван), но открывает продвинутые функции:
- Процедуры перекалибровки
- Zero Crossing Detector (ZCD)
- События: переток, перегрузка, провал напряжения
- Изменение диапазона (бортовые резисторы, ТТ) и рекалибровка
- Несколько Dr. Wattson на одной шине I2C (настраиваемые адреса 0x74–0x77)
Идеален для проектов умного дома, аудита энергопотребления, научных экспериментов. Библиотека и примеры на GitHub: upbeatlabs/drwattson.
Полный скетч
Приведен в разделе «Code» проекта (несколько сниппетов и полный файл).
Производственный процесс
- Облачная революция: как облачные вычисления трансформируют IT, безопасность и карьеры
- Мастерство превентивного обслуживания: Построение и оптимизация фиксированных и плавающих расписаний
- Построение вариационного автоэнкодера с TensorFlow: практическое руководство
- Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield
- Монитор температуры и реальные часы на Arduino Due с TFT-дисплеем 3.2"
- Чтение температуры и влажности DHT11 через Blynk — пошаговый урок для Arduino
- Продвинутая система домашнего мониторинга на Arduino Mega с IoT-датчиками
- Построение надежного умного монитора энергии на Arduino UNO – Пошаговое руководство
- Продвинутый GPS-логгер данных: отслеживание полёта в реальном времени, пиковая высота и скорость
- Цифровой компас в реальном времени на Arduino и Processing