- Избор на правилните компоненти за монитор за слънчева енергия с активиран IoT
- Електрическа схема за наблюдение на слънчева енергия, базирано на IoT
- Настройване на ThingSpeak
- Код на Arduino за наблюдение на слънчевата енергия с помощта на ESP32
- Данни за тестване и мониторинг
В областта на възобновяемата енергия слънчевата енергия е на преден план, тъй като производството на енергия чрез използване на слънчевата сила е най-лесният и търговски жизнеспособен начин за възобновяема енергия. Говорейки за слънчеви панели, изходната мощност на изхода на слънчеви панели трябва да се следи, за да се получи оптимална изходна мощност от панелите. Ето защо е необходима система за наблюдение в реално време. В голяма слънчева електроцентрала тя може да се използва и за наблюдение на изходната мощност от всеки панел, което помага да се идентифицира натрупването на прах. Освен това предотвратява всякакви повреди по време на работа. В някои от предишните ни статии сме изградили няколко проекта, свързани със слънчевата енергия, като зарядно за мобилен телефон със слънчева енергия, слънчева инверторна верига и др. Можете да ги проверите, ако търсите повече проекти за слънчева енергия.
В този проект ще направим базирана на IoT система за наблюдение на слънчевата енергия чрез включване на MPPT (Maximum Power Point Tracker) базирана техника за зареждане на батерията, която ще помогне за намаляване на времето за зареждане и подобряване на ефективността. Също така ще измерим температурата на панела, изходното напрежение и тока, за да подобрим аспекта на безопасност на веригата. И накрая, на всичкото отгоре ще използваме облачните услуги ThingSpeak, за да наблюдаваме изходните данни от всяка точка на света. Имайте предвид, че този проект е продължение на проекта за MPPT Solar Charge Controller Project, който изградихме по-рано. Тук ще наблюдаваме изходното напрежение, тока и мощността на панела с помощта на платката за развитие на ESP32 IoT.
Избор на правилните компоненти за монитор за слънчева енергия с активиран IoT
Със слънчевия монитор става много лесно да се наблюдават и откриват повреди във всяка слънчева система. Ето защо изборът на компоненти става много важна част при проектирането на такава система. Даден по-долу е списъкът на частите, които използвахме.
- Платка за разработчици ESP32
- MPPT верига (може да бъде всяка слънчева верига)
- Шунтов резистор (например 1 Ohm 1 ват - подходящ за до 1A ток)
- Литиева батерия (за предпочитане 7.4v).
- Активна Wi-Fi връзка
- Температурен сензор за слънчевия панел
- Верига на делителя на напрежението (вижте описанието)
Esp32 Dev Board:
За приложение с възможност за IoT е от съществено значение да изберете правилния тип платка за разработка, която ще може да обработва данните от своите аналогови щифтове и да изпраща данните чрез всякакъв вид протокол за връзка, като Wi-Fi или в облака сървър. Ние специално избрахме ESP32, тъй като е евтин микроконтролер с множество функции. Освен това има вградено Wi-Fi радио, чрез което можем да се свържем много лесно с интернет.
Слънчева верига:
Слънчевата верига за зареждане е верига, която получава по-високо напрежение от слънчевия панел и го преобразува до напрежение за зареждане, така че да може ефективно да зарежда батерията. За този проект ще използваме базирана на LT3562 платка MPPT Charge Controller, която вече сме направили в един от предишните си проекти. Но ако искате да вградите този IoT мониторинг, можете да използвате всякакъв вид слънчева верига. Избрахме тази платка, тъй като веригата е оборудвана с проследяване на максимална мощност (MPPT), което е от полза за проекти със слънчеви панели с ниска мощност. Това е ефективен начин за зареждане на малка литиева батерия от слънчев панел.
Шунтов резистор:
Всеки резистор следва закона на ома, което означава, че ако определено количество ток протича през резистора, ще се появи известно количество спад на напрежението. Шунтовите резистори не са изключение от това и той се използва специално за измерване на текущия поток. Въпреки това, в зависимост от номиналния токов поток през слънчевия панел, изберете шунтиращ резистор, който ще генерира достатъчно количество напрежение, което може да бъде измерено от микроконтролера. Но в същото време мощността на резистора също е важно нещо. Изборът на мощността на шунтиращия резистор също е важен.
Спадът на напрежението може да бъде изчислен по формулата, дадена по-долу. Това е известно като закона на Ом-
V = I x R
V е напрежението, което ще се генерира по време на „I“, т.е. количеството на текущия поток през количеството резистор „R“ Например, 1-омов резистор ще генерира 1V спад на напрежението, когато през него протича 1А ток.
За мощността на резистора може да се използва формулата, дадена по-долу -
P = I 2 R
Където I е максималният токов поток, а R е стойността на резистора. За 1A ток с резистор от 1 ома 1 ват е достатъчен за разсейване на мощността. Това обаче е полезно за малки проекти на слънчеви панели, но изобщо не е подходящо за приложения, свързани със слънчева мрежа. В такъв случай неинвазивната техника за измерване на ток всъщност е това, което трябва да се използва. В такъв случай текущият поток може да бъде точно измерен, където може да се измери много ниско количество ток, както и много голямо количество ток.
Литиева батерия:
Изборът на литиева батерия е съществена част от всеки проект, който включва слънчеви панели. Тъй като микроконтролерът, който винаги остава включен и постоянно проверява и подава данните, изисква поне сто милиампера ток за стабилна работа.
Капацитетът на батерията трябва да е нещо, което може да захранва микроконтролера за поне 4-5 дни, когато слънцето не грее заради мусона. Също така е важно токът на заряд да бъде по-голям от тока на натоварване от гледна точка на батерията. Доста необичайно е, ако някой свърже 100mA товар с батерия и осигури заряден ток, който е по-малък от този. За да бъдем по-сигурни, трябва да имаме поне 5 пъти повече ток на зареждане от тока на товара.
От друга страна, напрежението на батерията трябва да бъде по-високо от всяко обичайно входно напрежение на регулатора на напрежението, което се изисква за микроконтролера. Например, литиева батерия 7.4V може да бъде свързана както към линейния регулатор на напрежение 3.3V, така и към 5.0V (тъй като линейният регулатор изисква по-високо напрежение на отпадане повече от LDO и комутацията.)
В нашия проект използвахме 4000mAH батерия с 7.4V рейтинг. Използвахме 5.0V регулатор, който осигурява достатъчен ток и напрежение за ESP32.
Разделител на напрежение:
Разделителят на напрежение е съществена част от измерването на напрежението на слънчевите панели. Човек трябва да избере делител на напрежението, който ще раздели напрежението според входно / изходното напрежение на микроконтролера.
Изберете горните резистори по такъв начин, че изходното напрежение на делителя на напрежението да не надвишава максималното входно / изходно напрежение на микроконтролера (3.3V за ESP32). Препоръчва се обаче да се използва потенциометър, тъй като той ще осигури гъвкавост при избора на всеки соларен панел с по-високо или по-ниско напрежение и лесно може да настрои напрежението с помощта на мултицет.
В нашия случай имаме потенциометър във веригата на платката MPPT, който действа като делител на напрежението. Зададохме делителя на напрежението с коефициент на разделяне 6V. Свързахме два мултиметра, един във входа и друг в изхода на гърнето, и зададохме стойността, че когато входното напрежение е 18V, изходът ще бъде 3V, тъй като номиналното изходно напрежение на слънчевия панел е 18V.
Температурен сензор за слънчевия панел:
Изходната мощност на слънчевия панел има пряка връзка с температурата на слънчевия панел. Защо? Тъй като температурата на слънчевия панел започва да увеличава изходния ток от слънчевия панел се увеличава експоненциално, докато изходното напрежение започва да намалява линейно.
Според формулата за мощност, мощността е равна на напрежението, умножено по ток (W = V x A), намаляващото изходно напрежение също намалява изходната мощност на слънчевия панел дори след увеличаването на текущия поток. Следващият въпрос, който ни идва наум, е как да измерим слънчевата температура? Е, това е доста интересно, тъй като слънчевите панели обикновено са изложени на топлинна среда, тъй като тя е изложена на пряка слънчева светлина и по очевидни причини. Най-добрият начин за измерване на температурата на слънчевия панел е използването на сензор за температура на плоска повърхност. Също така се препоръчва да се използва термодвойка тип К, поставена директно в слънчевия панел.
За нашето приложение използвахме терморезисторен модул за температурен сензор, който е показан по-долу.
Електрическа схема за наблюдение на слънчева енергия, базирано на IoT
Пълната електрическа схема за IoT Enabled Solar Power Monitor е показана по-долу. Схемата е проста. Червената табела е MPPT дъската, която използвахме за този проект.
Настройване на ThingSpeak
Създайте акаунт с ThingSpeak и отидете на опцията „моят канал“, след което кликнете върху Новия канал.
Създайте нов канал с имената на полетата.
След като зададете полето, отидете в полето API Keys, където е наличен API API Key. Този ключ трябва да бъде предоставен в кода, както и идентификатора на канала.
Адресът на ThingSpeak може да бъде намерен на същата страница.
С горните стъпки можете да настроите ThingSpeak много лесно. Ако искате да научите повече за ThingSpeak и неговия процес на настройка, можете да разгледате предишните ни статии по темата.
Код на Arduino за наблюдение на слънчевата енергия с помощта на ESP32
Пълният код за наблюдение на слънчевата енергия ESP32 може да бъде намерен в долната част на тази страница. Кодът започва с дефиниране на вашия SSID, парола и няколко други постоянни параметъра, както е показано по-долу.
// дефинираме WiFi SSID и PWD за връзка нагоре. #define WLAN_SSID "xxxx" #define WLAN_PASS "xxxxxxxxxx"
// съпротивление при 25 градуса C # дефинирайте ТЕРМИСТОРНОМИНАЛЕН 10000 // темп. за номинално съпротивление (почти винаги 25 C) #define TEMPERATURENOMINAL 25 // Бета коефициентът на термистора (обикновено 3000-4000) #define BCOEFFICIENT 3950 // стойността на 'другия' резистор #define SERIESRESISTOR 10000
Номиналните оми на термистора се предоставят при номиналната температура. Задайте тази стойност в зависимост от листа с данни на термистора. Поставете бета коефициента и стойността на серийния резистор на термистора.
// дефинираме Analog за ток и напрежение const int curr_an_pin = 35; const int volt_an_pin = 34; const int ntc_temp_an_pin = 33;
ПИН кодовете са дефинирани тук.
#define thingSpeakAddress "XXXXXXXXX" #define channelID ххххх #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 // todo: създайте задача за четене на щифт за получаване на ток и напрежение и изчисляване на вата и температурата на слънчевия панел xTaskCreate ( wifi_task, / * функция на задачата. * / "Wifi_task", / * низ с име на задача. * / 1024 * 2, / * Размер на стека в байтове. * / NULL, / * Параметърът е предаден като вход на задачата * / 5, / * Приоритет на задачата. * / NULL); / * Дръжка на задачата. * / Serial.print („Четене на данни.“); }
В горния код сървърът ThingSpeak се инициализира и се създава задача, която ще получи данните, свързани със слънчевия панел.
В основния контур слънчевият ток и напрежение се усещат чрез аналогов щифт и се прави средното.
поплавък solar_curr_adc_val = 0; плаващ solar_volt_adc_val = 0; за (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; плувка volt_avg = 0; float temp_avg = 0; за (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); float solar_watt = solar_volt * solar_curr; Serial.print ("Solar Watt ="); Serial.println (solar_watt); 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, solar_watt); ThingSpeak.setField (4, steinhart); // запис в канала 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 ("\ nСвързан."); Serial.println (); Serial.println („WiFi свързан“); Serial.println ("IP адрес:"); Serial.println (WiFi.localIP ()); } vTaskDelay (1000 / портTICK_PERIOD_MS); } vTaskDelete (NULL); }
Данни за тестване и мониторинг
Слънчевият панел е свързан с веригата и поставен на слънчева светлина за тестване, както е показано по-долу.
Цялостната работа е демонстрирана във видеото по-долу. Нашата верига успя да отчете изходното напрежение, ток и мощност от панела и да го актуализира на живо по канала за връзки, както е показано по-долу.
Както виждаме, 15-минутни данни са показани в горната графика. Тъй като това е проект за експлоатация на открито, трябва да се използва подходяща PCB заедно със затворена кутия. Заграждението трябва да бъде направено по такъв начин, че веригата да остане водоустойчива при дъжд. За да модифицирате тази схема или да обсъдите допълнителни аспекти на този проект, моля, използвайте активния форум на Circuit Digest. Надявам се, че ви е харесал урока и сте научили нещо полезно.