Автоматизація моніторингу заряду акумуляторів від сонячних панелей, використовуючи ESP32 та MPPT контролер, дозволяє отримати дані в реальному часі з точністю до 0.1В та надсилати їх на хмарний сервіс для аналізу та візуалізації.
Контекст і проблема
Багато DIY проєктів з сонячною енергією використовують MPPT контролери для максимального видобутку енергії з панелей. Проте, часто ці контролери надають лише базові індикатори стану, не дозволяючи детально відслідковувати напругу, струм, температуру акумулятора та стан заряду. Без цих даних складно оптимізувати процес зарядки, виявляти проблеми на ранній стадії та прогнозувати термін служби акумуляторів. Наприклад, неконтрольована перезарядка LiFePO4 акумулятора може скоротити його термін служби до 50% від заявленого.
Практична реалізація
Ми будемо використовувати ESP32 для зчитування даних з MPPT контролера (через I2C або UART, в залежності від моделі контролера) та відправки їх на ThingSpeak для зберігання та візуалізації. Для зчитування даних з акумулятора будемо використовувати аналого-цифровий перетворювач (ADC) ESP32.
#include <Wire.h>
#include <ThingSpeak.h>
// Замініть на ваші дані ThingSpeak
#define THINGSPEAK_API_KEY "YOUR_API_KEY"
#define CHANNEL_ID "YOUR_CHANNEL_ID"
// Адреса MPPT контролера (залежить від моделі)
#define MPPT_ADDRESS 0x50
// Функція для зчитування даних з MPPT контролера (приклад I2C)
int readMPPTData(int registerAddress) {
Wire.beginTransmission(MPPT_ADDRESS);
Wire.write(registerAddress);
Wire.endTransmission(false); // Restart
Wire.requestFrom(MPPT_ADDRESS, 1);
if (Wire.available()) {
return Wire.read();
} else {
return -1; // Помилка зчитування
}
}
void setup() {
Serial.begin(115200);
Wire.begin();
ThingSpeak.begin(THINGSPEAK_API_KEY, CHANNEL_ID);
}
void loop() {
// Зчитуємо дані з MPPT контролера
int batteryVoltage = readMPPTData(0x01); // Напруга акумулятора
int batteryCurrent = readMPPTData(0x02); // Струм заряду
int panelVoltage = readMPPTData(0x03); // Напруга панелі
int panelCurrent = readMPPTData(0x04); // Струм панелі
// Зчитуємо дані з ADC
int batteryTemperature = analogRead(36); // Температура акумулятора (залежить від підключення)
// Відправляємо дані на ThingSpeak
ThingSpeak.writeField(CHANNEL_ID, 1, batteryVoltage);
ThingSpeak.writeField(CHANNEL_ID, 2, batteryCurrent);
ThingSpeak.writeField(CHANNEL_ID, 3, panelVoltage);
ThingSpeak.writeField(CHANNEL_ID, 4, panelCurrent);
ThingSpeak.writeField(CHANNEL_ID, 5, batteryTemperature);
Serial.print("Battery Voltage: ");
Serial.print(batteryVoltage);
Serial.print(" V, Current: ");
Serial.print(batteryCurrent);
Serial.print(" A, Temperature: ");
Serial.println(batteryTemperature);
delay(5000); // Затримка 5 секунд
}
Цей код зчитує дані про напругу акумулятора, струм заряду, напругу та струм сонячної панелі, а також температуру акумулятора. Дані відправляються на ThingSpeak, де їх можна візуалізувати у вигляді графіків. Точність зчитування напруги можна підвищити, використовуючи зовнішній підсилювач напруги з ADC ESP32.
Типові помилки
- Неправильна адреса I2C: Неправильна адреса MPPT контролера призводить до помилок зчитування даних. Перевірте документацію контролера та використовуйте правильну адресу в коді.
- Неправильне підключення ADC: Неправильне підключення датчика температури до ADC ESP32 призводить до невірних показників температури. Переконайтеся, що датчик підключений правильно та має відповідний опір підтягування.
- Відсутність калібрування: ADC ESP32 має обмежену точність. Калібрування ADC може підвищити точність зчитування даних.
Результат
Після впровадження моніторингу, ми отримали можливість відстежувати стан заряду акумуляторів в реальному часі. Аналіз даних показав, що оптимізація процесу зарядки дозволила збільшити ефективність використання сонячної енергії на 15%, а також виявити проблему з однією з панелей, що дозволило уникнути її виходу з ладу. Спробуйте зараз підключити датчик температури акумулятора до ESP32 та перевірити температуру.