- Вибір правильних компонентів для монітора сонячної енергії з підтримкою IoT
- Схема для моніторингу сонячної енергії на основі IoT
- Налаштування ThingSpeak
- Код Arduino для моніторингу сонячної енергії за допомогою ESP32
- Дані тестування та моніторингу
У галузі відновлюваних джерел енергії сонячна енергія є на першому плані, оскільки виробництво енергії за допомогою сонячної енергії є найпростішим та комерційно вигідним способом відновлюваної енергії. Говорячи про сонячні панелі, вихідну потужність сонячної панелі потрібно контролювати, щоб отримати оптимальну вихідну потужність від панелей. Ось чому система моніторингу в режимі реального часу стає необхідною. На великій сонячній електростанції його також можна використовувати для контролю вихідної потужності кожної панелі, що допомагає виявити скупчення пилу. Це також запобігає виникненню будь-яких несправностей під час роботи. У деяких з наших попередніх статей ми створили кілька проектів, пов'язаних із сонячною енергією, таких як зарядний пристрій для мобільних телефонів на сонячній батареї, ланцюг сонячних інверторів тощо. Ви можете перевірити їх, якщо шукаєте більше проектів із сонячної енергетики.
У цьому проекті ми створимо систему моніторингу сонячної енергії на основі IoT, включивши методику зарядки акумулятора на основі MPPT (Maximum Power Point Tracker), яка допоможе скоротити час зарядки та підвищити ефективність. Крім того, ми виміряємо температуру на панелі, вихідну напругу та струм для покращення аспекту безпеки схеми. Нарешті, до всього, ми збираємося використовувати хмарні сервіси ThingSpeak для моніторингу вихідних даних з будь-якої точки світу. Зверніть увагу, що цей проект є продовженням проекту MPPT Solar Charge Controller, який ми побудували раніше. Тут ми будемо контролювати вихідну напругу, струм і потужність панелі за допомогою плати розвитку ESP32 IoT.
Вибір правильних компонентів для монітора сонячної енергії з підтримкою IoT
За допомогою сонячного монітора стає дуже легко контролювати та виявляти несправності в будь-якій сонячній системі. Ось чому вибір компонентів стає дуже важливою частиною при проектуванні такої системи. Нижче наведено перелік частин, які ми використовували.
- Плата розробників ESP32
- Схема MPPT (може бути будь-якою сонячною ланцюгом)
- Шунтуючий резистор (наприклад, 1 Ом, 1 Вт - підходить для струму до 1 А)
- Літієва батарея (переважно 7,4 В).
- Активне з’єднання Wi-Fi
- Датчик температури для сонячної панелі
- Схема дільника напруги (див. Опис)
Дошка розробників Esp32:
Для програми з підтримкою IoT важливо вибрати правильний тип плати розробки, яка зможе обробляти дані з аналогових контактів і відправляти дані за допомогою будь-якого протоколу підключення, наприклад Wi-Fi або до хмари. сервер. Ми спеціально вибрали ESP32, оскільки це недорогий мікроконтролер з безліччю функцій. Крім того, він має вбудований Wi-Fi радіо, за допомогою якого ми можемо дуже легко підключитися до Інтернету.
Сонячна схема:
Схема сонячної зарядки - це схема, яка отримує вищу напругу від сонячної панелі і перетворює її на зарядну напругу, щоб вона могла ефективно заряджати акумулятор. Для цього проекту ми будемо використовувати друковану плату контролера заряду MPPT на базі LT3562, яку ми вже створили в одному з наших попередніх проектів. Але якщо ви хочете вбудувати цей моніторинг IoT, ви можете використовувати будь-який сонячний контур. Ми вибрали цю плату, оскільки схема оснащена системою відстеження точок максимальної потужності (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 В.
У нашому проекті ми використовували акумулятор на 4000 мАГн з номіналом 7,4 В. Ми використовували регулятор 5,0 В, який забезпечує достатню потужність струму та напруги для ESP32.
Дільник напруги:
Дільник напруги є важливою частиною вимірювання напруги на сонячній панелі. Слід вибрати дільник напруги, який буде ділити напругу відповідно до вхідної напруги вводу-виводу мікроконтролера.
Виберіть вищезазначені резистори таким чином, щоб вихідна напруга дільника напруги не перевищувала максимальну напругу вводу-виводу мікроконтролера (3,3 В для ESP32). Однак рекомендується використовувати потенціометр, оскільки він забезпечить гнучкість вибору будь-якої сонячної батареї вищої або нижчої номінальної напруги і може легко встановити напругу за допомогою мультиметра.
У нашому випадку ми маємо потенціометр у схемі плати MPPT, який діє як дільник напруги. Встановлюємо дільник напруги з коефіцієнтом поділу 6В. Ми підключили два мультиметри, один на вході, а інший на виході бака, і встановили значення, що коли вхідна напруга 18 В, вихід буде 3 В, оскільки номінальна вихідна напруга сонячної панелі 18 В.
Датчик температури для сонячної панелі:
Вихідна потужність сонячної панелі має прямий зв’язок з температурою сонячної панелі. Чому? Тому що, коли температура сонячної панелі починає збільшувати вихідний струм сонячної панелі, збільшується експоненціально, тоді як вихідна напруга починає зменшуватися лінійно.
Відповідно до формули потужності, потужність дорівнює напрузі, помноженій на струм (W = V x A), зменшення вихідної напруги також зменшує вихідну потужність сонячної панелі навіть після збільшення поточного струму. Тепер наступне питання, яке спадає нам на думку, - як виміряти сонячну температуру? Ну, це досить цікаво, оскільки сонячні батареї, як правило, піддаються дії тепла, оскільки вони потрапляють під прямі сонячні промені і зі зрозумілих причин. Найкращий спосіб вимірювання температури сонячної панелі - це використання датчика температури на рівній поверхні. Також пропонується використовувати термопару типу К, розміщену безпосередньо в сонячній панелі.
Для нашого застосування ми використали терморезисторний модуль датчика температури, який показано нижче.
Схема для моніторингу сонячної енергії на основі IoT
Повна електрична схема монітора сонячної енергії з підтримкою IoT наведена нижче. Схема проста. Червона пунктирна дошка - це дошка MPPT, яку ми використовували для цього проекту.
Налаштування ThingSpeak
Створіть обліковий запис за допомогою ThingSpeak і перейдіть до опції «мій канал», а потім натисніть « Новий канал».
Створіть новий канал із назвами полів.
Тепер після встановлення поля перейдіть до поля API Keys, де доступний Write API Key. Цей ключ потрібно вказати в коді, а також ідентифікатор каналу.
Адресу ThingSpeak можна знайти на тій же сторінці.
За допомогою вищевказаних кроків ви можете дуже легко налаштувати ThingSpeak. Якщо ви хочете дізнатись більше про ThingSpeak та процес його налаштування, ви можете ознайомитись із попередніми статтями на цю тему.
Код Arduino для моніторингу сонячної енергії за допомогою ESP32
Повний код моніторингу сонячної енергії ESP32 можна знайти внизу цієї сторінки. Код починається з визначення вашого SSID, пароля та кількох інших постійних параметрів, як показано нижче.
// визначаємо SSID і PWD WiFi для висхідної лінії зв'язку. #define WLAN_SSID "xxxx" #define WLAN_PASS "xxxxxxxxxx"
// опір при 25 градусах С # визначити ТЕРМІСТОРНОМІНАЛЬ 10000 // темп. для номінального опору (майже завжди 25 С) #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;
PIN-коди визначено тут.
#define thingSpeakAddress "XXXXXXXXX" #define channelID ххххх #define writeFeedAPIKey "XXXXXXX" #define readFeedAPIKey "XXXXXXX" #define readFieldAPIKey "XXXXXXXX" #define readStatusAPIKey "ХХХХХХХ"
Помістіть thingSpeakAddress, channelID, Write Feed API Key. Решта речей не є обов’язковими, але все ще корисні, якщо дані потрібно отримувати з Інтернету.
void setup () { // помістіть свій код налаштування сюди, щоб запуститися один раз: // встановіть послідовний порт на 115200 Serial.begin (115200); // Ініціалізуємо послідовну затримку (1000); Режим Wi-Fi. (WIFI_STA); ThingSpeak.begin (клієнт); // Ініціалізуємо ThingSpeak // todo: створюємо завдання для зчитування виводу для отримання струму та напруги та обчислення вати та температури сонячної панелі xTaskCreate ( wifi_task, / * Функція завдання. * / "Wifi_task", / * Рядок із назвою завдання. * / 1024 * 2, / * Розмір стека в байтах. * / NULL, / * Параметр переданий як вхід до завдання * / 5, / * Пріоритет завдання. * / NULL); / * Дескриптор завдання. * / Serial.print ("Зчитування даних."); }
У наведеному вище коді сервер ThingSpeak ініціалізується і створюється завдання, яке отримає дані, пов’язані з сонячною панеллю.
У головному контурі сонячний струм і напруга визначаються за допомогою аналогового штифта і визначається середнє.
плавати solar_curr_adc_val = 0; плавати solar_volt_adc_val = 0; for (i = 0; i <NUMSAMPLES; i ++) { curr_samples = analogRead (curr_an_pin); volt_samples = analogRead (volt_an_pin); temp_samples = analogRead (ntc_temp_an_pin); затримка (10); } // // усе середнє значення вибірки випливає з курсором curr_avg = 0; float volt_avg = 0; float temp_avg = 0; for (i = 0; i <NUMSAMPLES; i ++) { 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); // перетворюємо значення adc у напруги для отримання фактичного струму та напруги. float solar_curr = (curr_avg * 3.3) / (4095); float solar_volt = (volt_avg * 3.3) / (4095); // за допомогою дільника напруги ми знижуємо фактичну напругу. // з цієї причини ми множимо 6 на середню напругу, щоб отримати фактичну напругу сонячної панелі. сонячна_вольта * = 6;
Сонячна напруга подається множенням на 6, оскільки ми створили дільник напруги, який розділить вхідну напругу в 6 разів.
Температура генерується від термістора за допомогою логарифмічного утворення.
// перетворимо значення на опір temp_avg = 4095 / temp_avg - 1; temp_avg = SERIESRESISTOR / temp_avg; //Serial.print("Термісторний опір "); //Serial.println(temp_avg); поплавковий штайнхарт; steinhart = temp_avg / ТЕРМІСТОРНОМІНАЛ; // (R / Ro) steinhart = log (steinhart); // ln (R / Ro) steinhart / = BCOEFFICIENT; // 1 / B * ln (R / Ro) steinhart + = 1,0 / (TEMPERATURENOMINAL + 273,15); // + (1 / До) steinhart = 1,0 / steinhart; // Інвертувати Штайнхарта - = 273,15; // перетворюємо абсолютну температуру в C
Дані зчитуються кожні 15 секунд.
затримка (1000); рахувати ++; Serial.print ("."); if (count> = 15) { count = 0; Serial.println ("================================================= ============================== "); Serial.print ("Сонячна напруга ="); Serial.println (solar_volt); Serial.print ("Сонячний струм ="); Serial.println (solar_curr); плавати solar_watt = solar_volt * solar_curr; Serial.print ("Сонячна вата ="); Serial.println (solar_watt); Serial.print ("Сонячна температура ="); Serial.println (steinhart); Serial.println ("================================================= ============================== ");
Дані для відповідних полів передаються за допомогою функції Thing.Speak.setField (); коли підключений Wi-Fi.
if (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" + Рядок (x)); } } ще { 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 ("\ nПідключено."); Serial.println (); Serial.println ("Wi-Fi підключений"); Serial.println ("IP-адреса:"); Serial.println (WiFi.localIP ()); } vTaskDelay (1000 / портTICK_PERIOD_MS); } vTaskDelete (NULL); }
Дані тестування та моніторингу
Панель сонячних батарей з'єднана з ланцюгом і поміщена на сонячне світло для тестування, як показано нижче.
Повна робота продемонстрована у відео нижче. Наша схема змогла зчитувати вихідну напругу, струм та потужність з панелі та оновлювати її в реальному часі на каналі thingspeak, як показано нижче.
Як бачимо, 15-хвилинні дані показані на наведеному графіку. Оскільки це проект роботи на відкритому повітрі, потрібно використовувати належну друковану плату разом із закритою коробкою. Корпус потрібно зробити таким чином, щоб контур залишався водонепроникним під час дощу. Щоб змінити цю схему або обговорити подальші аспекти цього проекту, будь ласка, використовуйте активний форум Circuit Digest. Сподіваюся, вам сподобався підручник і ви дізналися щось корисне.