- Выбор правильных компонентов для монитора солнечной энергии с поддержкой Интернета вещей
- Принципиальная схема для мониторинга солнечной энергии на основе Интернета вещей
- Настройка ThingSpeak
- Код Arduino для мониторинга солнечной энергии с использованием ESP32
- Данные тестирования и мониторинга
В области возобновляемых источников энергии солнечная энергия находится на переднем крае, потому что производство энергии с использованием энергии солнца является самым простым и коммерчески жизнеспособным способом возобновляемой энергии. Говоря о солнечных панелях, необходимо контролировать выходную мощность солнечной панели, чтобы получить оптимальную выходную мощность от панелей. Вот почему становится необходимой система мониторинга в реальном времени. На большой солнечной электростанции его также можно использовать для контроля выходной мощности каждой панели, что помогает идентифицировать скопление пыли. Он также предотвращает любые неисправности во время работы. В некоторых из наших предыдущих статей мы реализовали несколько проектов, связанных с солнечной энергией, таких как зарядное устройство для сотового телефона на солнечной энергии, схема солнечного инвертора и т. Д. Вы можете проверить их, если ищете другие проекты по солнечной энергии.
В этом проекте мы создадим систему мониторинга солнечной энергии на основе Интернета вещей путем включения технологии зарядки аккумуляторов на основе MPPT (Maximum Power Point Tracker), которая поможет сократить время зарядки и повысить эффективность. Кроме того, мы будем измерять температуру панели, выходное напряжение и ток, чтобы повысить безопасность схемы. Наконец, в довершение ко всему, мы собираемся использовать облачные сервисы ThingSpeak для мониторинга выходных данных из любой точки мира. Обратите внимание, что этот проект является продолжением проекта MPPT Solar Charge Controller, который мы создали ранее. Здесь мы будем контролировать выходное напряжение, ток и мощность панели с помощью платы разработки ESP32 IoT.
Выбор правильных компонентов для монитора солнечной энергии с поддержкой Интернета вещей
С солнечным монитором становится очень легко отслеживать и обнаруживать неисправности в любой солнечной системе. Вот почему выбор компонентов становится очень важной частью при разработке такой системы. Ниже приводится список деталей, которые мы использовали.
- Плата разработчика ESP32
- Контур MPPT (может быть любой солнечный контур)
- Шунтирующий резистор (например, 1 Ом 1 Вт - подходит для тока до 1 А)
- Литиевая батарея (предпочтительно 7,4 В).
- Активное соединение Wi-Fi
- Датчик температуры для солнечной панели
- Схема делителя напряжения (см. Описание)
Совет разработчиков Esp32:
Для приложения с поддержкой IoT важно выбрать правильный тип платы разработки, которая сможет обрабатывать данные со своих аналоговых контактов и отправлять данные через любой протокол подключения, такой как Wi-Fi или в облако. сервер. Мы специально выбрали ESP32, поскольку это недорогой микроконтроллер с множеством функций. Кроме того, он имеет встроенное радио Wi-Fi, через которое мы можем очень легко подключиться к Интернету.
Солнечный контур:
Схема зарядки солнечной батареи - это схема, которая получает более высокое напряжение от солнечной панели и преобразует его в напряжение зарядки, чтобы она могла эффективно заряжать аккумулятор. В этом проекте мы будем использовать плату контроллера заряда MPPT на базе LT3562, которую мы уже сделали в одном из наших предыдущих проектов. Но если вы хотите встроить этот мониторинг Интернета вещей, вы можете использовать любой вид солнечной цепи. Мы выбрали эту плату, потому что схема оснащена функцией отслеживания точки максимальной мощности (MPPT), которая полезна для проектов солнечных панелей с низким энергопотреблением. Это эффективный способ зарядки небольшой литиевой батареи от солнечной панели.
Шунтирующий резистор:
Любой резистор подчиняется закону Ома, что означает, что если через резистор протекает определенное количество тока, появится определенное падение напряжения. Шунтирующие резисторы не являются исключением, и они специально используются для измерения тока. Однако, в зависимости от номинального тока, протекающего через солнечную панель, выберите шунтирующий резистор, который будет производить достаточное напряжение, которое может быть измерено блоком микроконтроллера. Но, в то же время, важна и мощность резистора. Выбор мощности шунтирующего резистора также важен.
Падение напряжения можно рассчитать по формуле, приведенной ниже. Это известно как закон Ома -
V = I x R
V - это напряжение, которое будет создаваться во время «I», то есть количество тока, протекающего через резистор «R». Например, резистор сопротивлением 1 Ом будет создавать падение напряжения 1 В, когда через него протекает ток 1 А.
Для мощности резистора можно использовать приведенную ниже формулу:
P = I 2 R
Где I - максимальный ток, а R - номинал резистора. Для тока 1 А с резистором 1 Ом 1 Вт достаточно для рассеиваемой мощности. Однако это полезно для небольших проектов солнечных панелей, но совсем не подходит для приложений, связанных с солнечной сетью. В таком случае действительно необходимо использовать неинвазивный метод измерения тока. В таком случае ток может быть точно измерен там, где может быть измерена как очень низкая величина тока, так и очень высокая величина тока.
Литиевая батарейка:
Выбор литиевой батареи является важной частью любого проекта, в котором используются солнечные батареи. Потому что микроконтроллер, который всегда остается включенным, постоянно проверяет и отправляет данные, для стабильной работы требует не менее ста миллиампер тока.
Емкость батареи должна быть такой, чтобы микроконтроллер мог работать не менее 4-5 дней, когда солнце не светит из-за дождя. Также важно, чтобы зарядный ток был больше, чем ток нагрузки с точки зрения батареи. Это довольно необычно, если кто-то соединяет 100 мА нагрузки с аккумулятором и обеспечивает ток заряда, который меньше этого значения. Чтобы быть в большей безопасности, у нас должен быть как минимум в 5 раз больше зарядного тока, чем ток нагрузки.
С другой стороны, напряжение батареи должно быть выше, чем любое обычное входное напряжение регулятора напряжения, которое требуется для микроконтроллера. Например, литиевая батарея 7,4 В может быть подключена к линейному регулятору напряжения 3,3 В и 5,0 В (поскольку линейный стабилизатор требует более высокого напряжения падения больше, чем LDO и переключение).
В нашем проекте мы использовали аккумулятор емкостью 4000 мАч с номиналом 7,4 В. Мы использовали стабилизатор 5,0 В, который обеспечивает достаточный выходной ток и напряжение для ESP32.
Делитель напряжения:
Делитель напряжения является важной частью измерения напряжения солнечной панели. Следует выбрать делитель напряжения, который будет делить напряжение в соответствии с входом напряжения ввода / вывода микроконтроллера.
Выбирайте указанные выше резисторы таким образом, чтобы выходное напряжение делителя напряжения не превышало максимальное напряжение ввода / вывода микроконтроллера (3,3 В для ESP32). Тем не менее, рекомендуется использовать потенциометр, потому что он обеспечит гибкость при выборе любой солнечной панели с более высоким или низким номинальным напряжением и может легко установить напряжение с помощью мультиметра.
В нашем случае у нас есть потенциометр в цепи платы MPPT, который действует как делитель напряжения. Ставим делитель напряжения с коэффициентом деления 6В. Мы подключили два мультиметра, один на входе, а другой на выходе горшка, и установили значение, при котором при входном напряжении 18 В на выходе будет 3 В, поскольку номинальное выходное напряжение солнечной панели составляет 18 В.
Датчик температуры для солнечной панели:
Выходная мощность солнечной панели напрямую связана с температурой солнечной панели. Почему? Потому что, когда температура солнечной панели начинает расти, выходной ток солнечной панели увеличивается экспоненциально, а выходное напряжение начинает линейно уменьшаться.
Согласно формуле мощности, мощность равна напряжению, умноженному на ток (W = V x A), уменьшение выходного напряжения также снижает выходную мощность солнечной панели даже после увеличения тока. Теперь у нас возникает следующий вопрос: как измерить солнечную температуру? Что ж, это довольно интересно, поскольку солнечные панели обычно подвергаются воздействию тепла окружающей среды, поскольку они подвергаются воздействию прямых солнечных лучей и по понятным причинам. Лучший способ измерить температуру солнечной панели - использовать датчик температуры с плоской поверхностью. Также предлагается использовать термопару типа К, размещаемую непосредственно в солнечной панели.
Для нашего приложения мы использовали модуль датчика температуры на основе термистора, который показан ниже.
Принципиальная схема для мониторинга солнечной энергии на основе Интернета вещей
Полная принципиальная схема монитора солнечной энергии с поддержкой Интернета вещей показана ниже. Схема проста. Красная панель с пунктиром - это плата MPPT, которую мы использовали для этого проекта.
Настройка ThingSpeak
Создайте учетную запись в ThingSpeak и перейдите к опции «Мой канал», затем нажмите « Новый канал».
Создайте новый канал с именами полей.
Теперь, после настройки поля, перейдите в поле API Keys, где доступен Write API Key. Этот ключ должен быть указан в коде, а также в идентификаторе канала.
Адрес ThingSpeak можно найти на той же странице.
С помощью описанных выше шагов вы можете очень легко настроить ThingSpeak. Если вы хотите узнать больше о ThingSpeak и процессе его настройки, вы можете ознакомиться с нашими предыдущими статьями по этой теме.
Код Arduino для мониторинга солнечной энергии с использованием ESP32
Полный код мониторинга солнечной энергии ESP32 можно найти внизу этой страницы. Код начинается с определения вашего SSID, пароля и нескольких других постоянных параметров, как показано ниже.
// определяем WiFi SSID и PWD для восходящего канала. #define WLAN_SSID "xxxx" #define WLAN_PASS "xxxxxxxxxx"
// сопротивление при 25 градусах C #define THERMISTORNOMINAL 10000 // темп. для номинального сопротивления (почти всегда 25 C) #define TEMPERATURENOMINAL 25 // Бета-коэффициент термистора (обычно 3000-4000) #define BCOEFFICIENT 3950 // значение «другого» резистора #define SERIESRESISTOR 10000
Номинальное сопротивление термистора обеспечивается при номинальной температуре. Установите это значение в зависимости от спецификации термистора. Введите коэффициент бета и номинал последовательного резистора термистора.
// определяем аналог для тока и напряжения const int curr_an_pin = 35; const int volt_an_pin = 34; const int ntc_temp_an_pin = 33;
ПИН-коды определены здесь.
#define thingSpeakAddress "xxxxxxxxx" #define channelID xxxxx #define writeFeedAPIKey "xxxxxxx" #define readFeedAPIKey "xxxxxxx" #define readFieldAPIKey "xxxxxxxx" #define readStatusAPIKey "xxxxxxx"
Поместите thingSpeakAddress, channelID, Write Feed API Key. Остальное не требуется, но все же полезно, если данные необходимо получать из Интернета.
void setup () { // поместите сюда ваш установочный код, для однократного запуска: // установите последовательный порт на 115200 Serial.begin (115200); // Инициализируем последовательную задержку (1000); WiFi.mode (WIFI_STA); ThingSpeak.begin (клиент); // Инициализировать ThingSpeak // задача: создать задачу для чтения пина для получения тока и напряжения и расчета ватт и температуры солнечной панели xTaskCreate ( wifi_task, / * Task function. * / "Wifi_task", / * Строка с именем задача. * / 1024 * 2, / * Размер стека в байтах. * / NULL, / * Параметр передан как вход задачи * / 5, / * Приоритет задачи. * / NULL); / * Дескриптор задачи. * / Serial.print ("Чтение данных."); }
В приведенном выше коде инициализируется сервер ThingSpeak и создается задача, которая получит данные, относящиеся к солнечной панели.
В основном контуре солнечный ток и напряжение измеряются через аналоговый вывод, и выполняется усреднение.
float solar_curr_adc_val = 0; float solar_volt_adc_val = 0; для (я = 0; я <NUMSAMPLES; я ++) { curr_samples = analogRead (curr_an_pin); volt_samples = аналоговое чтение (volt_an_pin); temp_samples = analogRead (ntc_temp_an_pin); задержка (10); } // усреднение всех выборок float curr_avg = 0; float volt_avg = 0; float temp_avg = 0; для (я = 0; я <NUMSAMPLES; я ++) { curr_avg + = curr_samples; volt_avg + = volt_samples; temp_avg + = temp_samples; } curr_avg / = NUMSAMPLES; volt_avg / = NUMSAMPLES; temp_avg / = NUMSAMPLES; //Serial.print("ADC VALUE = "); //Serial.println(ADC_VALUE); // конвертируем значение АЦП в напряжение для получения фактического тока и напряжения. float solar_curr = (curr_avg * 3.3) / (4095); float solar_volt = (volt_avg * 3.3) / (4095); // используя делитель напряжения, мы понижаем фактическое напряжение. // по этой причине мы умножаем 6 на среднее напряжение, чтобы получить фактическое напряжение солнечной панели. solar_volt * = 6;
Солнечное напряжение подается путем умножения на 6, поскольку мы создали делитель напряжения, который делит входное напряжение в 6 раз.
Температура генерируется термистором по логарифмической схеме.
// преобразовываем значение в сопротивление temp_avg = 4095 / temp_avg - 1; temp_avg = СЕРИЙНЫЙ РЕЗИСТОР / temp_avg; //Serial.print("Термистор сопротивление "); //Serial.println(temp_avg); float steinhart; steinhart = temp_avg / THERMISTORNOMINAL; // (R / Ro) steinhart = log (steinhart); // ln (R / Ro) steinhart / = BCOEFFICIENT; // 1 / B * ln (R / Ro) steinhart + = 1.0 / (ТЕМПЕРАТУРНОМИНАЛЬНЫЙ + 273.15); // + (1 / To) steinhart = 1.0 / steinhart; // Инвертировать steinhart - = 273.15; // преобразовываем абсолютную температуру в C
Данные считываются каждые 15 секунд.
задержка (1000); count ++; Serial.print ("."); если (количество> = 15) { количество = 0; Serial.println ("=============================================== ============================ "); Serial.print ("Солнечное напряжение ="); Serial.println (solar_volt); Serial.print ("Солнечный ток ="); Serial.println (solar_curr); float solar_watt = solar_volt * solar_curr; поплавок Serial.print ("Solar Watt ="); Serial.println (солнечная_ватт); Serial.print ("Солнечная температура ="); Serial.println (Steinhart); Serial.println ("=============================================== ============================ ");
Данные для соответствующих полей передаются с помощью функции Thing.Speak.setField (); когда подключен WiFi.
если (WiFi.status () == WL_CONNECTED) { ThingSpeak.setField (1, solar_volt); ThingSpeak.setField (2, solar_curr); ThingSpeak.setField (3, солнечная_ватт); ThingSpeak.setField (4, штейнхарт); // запись в канал ThingSpeak int x = ThingSpeak.writeFields (channelID, writeFeedAPIKey); if (x == 200) { Serial.println ("Каналы обновлены успешно."); } else { Serial.println ("Проблема с обновлением канала. Код ошибки HTTP" + String (x)); } } else { Serial.println ("\ r \ n ################################## ###################### "); Serial.println («Не удалось обновить данные на сервере thingSpeak.»); Serial.println («WiFi не подключен…»); Serial.println ("########################################## ############### \ r \ n "); } Serial.print ("Чтение данных."); } }
Задача Wi-Fi, созданная в приведенном ниже фрагменте кода:
void wifi_task (void * параметр) { while (1) { if (WiFi.status ()! = WL_CONNECTED) { Serial.print («Попытка подключиться к SSID:»); Serial.println (WLAN_SSID); пока (WiFi.status ()! = WL_CONNECTED) { WiFi.begin (WLAN_SSID, WLAN_PASS); // Подключаемся к сети WPA / WPA2. Измените эту строку, если используете открытую сеть или сеть WEP Serial.print ("."); задержка (5000); } Serial.println ("\ nConnected."); Serial.println (); Serial.println («WiFi подключен»); Serial.println ("IP-адрес:"); Serial.println (WiFi.localIP ()); } vTaskDelay (1000 / portTICK_PERIOD_MS); } vTaskDelete (NULL); }
Данные тестирования и мониторинга
Солнечная панель подключается к цепи и помещается на солнечный свет для тестирования, как показано ниже.
Полная работа показана на видео ниже. Наша схема смогла считывать выходное напряжение, ток и мощность с панели и обновлять их в реальном времени по каналу Thingspeak, как показано ниже.
Как мы видим, 15-минутные данные показаны на графике выше. Поскольку это проект для работы на открытом воздухе, необходимо использовать соответствующую печатную плату вместе с закрытой коробкой. Корпус должен быть изготовлен таким образом, чтобы цепь оставалась водонепроницаемой во время дождя. Чтобы изменить эту схему или обсудить дальнейшие аспекты этого проекта, любезно используйте активный форум Circuit Digest. Надеюсь, вам понравился урок и вы узнали что-то полезное.