- Wybór odpowiednich komponentów do monitora energii słonecznej z obsługą IoT
- Schemat obwodu do monitorowania energii słonecznej opartego na IoT
- Konfiguracja ThingSpeak
- Kod Arduino do monitorowania energii słonecznej za pomocą ESP32
- Testowanie i monitorowanie danych
W dziedzinie energii odnawialnej przoduje energia słoneczna, ponieważ wytwarzanie energii przy użyciu energii słonecznej jest najłatwiejszym i komercyjnie opłacalnym sposobem wykorzystania energii odnawialnej. Mówiąc o panelach słonecznych, moc wyjściowa paneli słonecznych musi być monitorowana, aby uzyskać optymalną moc wyjściową z paneli. Dlatego niezbędny staje się system monitorowania w czasie rzeczywistym. W dużej elektrowni słonecznej może być również używany do monitorowania mocy wyjściowej z każdego panelu, co pomaga zidentyfikować nagromadzenie kurzu. Zapobiega również stanom awaryjnym podczas pracy. W niektórych z naszych poprzednich artykułów stworzyliśmy kilka projektów związanych z energią słoneczną, takich jak ładowarka do telefonu komórkowego zasilana energią słoneczną i obwód falownika słonecznego itp. Możesz je sprawdzić, jeśli szukasz więcej projektów dotyczących energii słonecznej.
W ramach tego projektu stworzymy system monitorowania energii słonecznej oparty na IoT poprzez włączenie techniki ładowania baterii opartej na MPPT (Maximum Power Point Tracker), co pomoże skrócić czas ładowania i poprawić wydajność. Ponadto zmierzymy temperaturę panelu, napięcie wyjściowe i prąd, aby poprawić aspekt bezpieczeństwa obwodu. Na koniec wykorzystamy usługi w chmurze ThingSpeak do monitorowania danych wyjściowych z dowolnego miejsca na świecie. Zwróć uwagę, że ten projekt jest kontynuacją projektu kontrolera ładowania słonecznego MPPT, który zbudowaliśmy wcześniej. Tutaj będziemy monitorować napięcie wyjściowe, prąd i moc panelu za pomocą płytki rozwojowej ESP32 IoT.
Wybór odpowiednich komponentów do monitora energii słonecznej z obsługą IoT
Dzięki monitorowi słonecznemu monitorowanie i wykrywanie usterek w dowolnym układzie słonecznym staje się bardzo łatwe. Dlatego dobór komponentów staje się bardzo ważnym elementem podczas projektowania takiego systemu. Poniżej znajduje się lista części, z których korzystaliśmy.
- Płyta deweloperska ESP32
- Obwód MPPT (może to być dowolny obwód słoneczny)
- Rezystor bocznikowy (na przykład 1 om 1 wat - odpowiedni dla prądu do 1 A)
- Bateria litowa (preferowana 7,4 V).
- Aktywne połączenie Wi-Fi
- Czujnik temperatury do panelu słonecznego
- Obwód dzielnika napięcia (patrz opis)
Płyta deweloperska Esp32:
W przypadku aplikacji obsługującej IoT istotne jest, aby wybrać odpowiedni rodzaj płytki rozwojowej, która będzie w stanie przetwarzać dane ze swoich pinów analogowych i wysyłać dane za pośrednictwem dowolnego rodzaju protokołu połączenia, takiego jak Wi-Fi lub do chmury serwer. Specjalnie wybraliśmy ESP32, ponieważ jest to niedrogi mikrokontroler z mnóstwem funkcji. Posiada również wbudowane radio Wi-Fi, dzięki któremu możemy bardzo łatwo połączyć się z Internetem.
Obwód słoneczny:
Obwód ładowania słonecznego to obwód, który pobiera wyższe napięcie z panelu słonecznego i przekształca je w napięcie ładowania, dzięki czemu może wydajnie ładować akumulator. W tym projekcie będziemy używać płytki drukowanej kontrolera ładowania MPPT opartej na LT3562, którą wykonaliśmy już w jednym z naszych poprzednich projektów. Ale jeśli chcesz osadzić ten IoT umożliwiający monitorowanie, możesz użyć dowolnego rodzaju obwodu słonecznego. Wybraliśmy tę płytkę, ponieważ obwód jest wyposażony w śledzenie punktu maksymalnej mocy (MPPT), co jest korzystne dla projektów paneli słonecznych o małej mocy. Jest to wydajny sposób ładowania małej baterii litowej z panelu słonecznego.
Rezystor bocznikowy:
Każdy rezystor działa zgodnie z prawem Ohma, co oznacza, że jeśli przez rezystor przepłynie pewna ilość prądu, pojawi się pewien spadek napięcia. Rezystory bocznikowe nie są wyjątkiem i są specjalnie używane do pomiaru przepływu prądu. Jednak w zależności od znamionowego przepływu prądu przez panel słoneczny, należy dobrać rezystor bocznikowy, który będzie wytwarzał odpowiednią ilość napięcia, które może być zmierzone przez mikrokontroler. Ale jednocześnie ważna jest również moc rezystora. Ważny jest również dobór mocy rezystora bocznikowego.
Spadek napięcia można obliczyć na podstawie poniższego wzoru. Jest to znane jako prawo Ohma-
V = I x R
V to napięcie, które będzie wytwarzane podczas „I”, tj. Wielkość przepływu prądu przez rezystor „R”. Na przykład rezystor 1-omowy spowoduje spadek napięcia o 1 V, gdy przepłynie przez niego 1 A prądu.
Dla mocy rezystora można zastosować wzór podany poniżej:
P = I 2 R.
Gdzie I to maksymalny przepływ prądu, a R to wartość rezystora. Dla prądu 1A z rezystorem 1 Ohm, 1 wat jest wystarczający do rozpraszania mocy. Jest to jednak przydatne w przypadku małych projektów paneli słonecznych, ale w ogóle nie nadaje się do zastosowań związanych z siecią słoneczną. W takim przypadku nieinwazyjna technika pomiaru prądu jest właściwie tym, co należy zastosować. W takim przypadku przepływ prądu można dokładnie zmierzyć, gdzie można zmierzyć bardzo małą ilość prądu, jak również bardzo dużą ilość prądu.
Bateria litowa:
Wybór baterii litowej jest istotną częścią każdego projektu obejmującego panele słoneczne. Ponieważ mikrokontroler, który zawsze pozostaje włączony i stale sprawdza i przesyła dane, wymaga co najmniej stu miliamperów prądu do stabilnej pracy.
Pojemność baterii powinna być taka, aby mogła zasilać mikrokontroler przez co najmniej 4-5 dni, kiedy słońce nie świeci z powodu monsunu. Ważne jest również, aby prąd ładowania był większy niż prąd obciążenia z perspektywy akumulatora. To dość nietypowe, jeśli ktoś podłączy 100mA obciążenia do akumulatora i podaje prąd ładowania, który jest mniejszy. Aby być bezpieczniejszym, powinniśmy mieć co najmniej 5 razy większy prąd ładowania niż prąd obciążenia.
Z drugiej strony, napięcie akumulatora musi być wyższe niż jakiekolwiek zwykłe napięcie wejściowe regulatora napięcia wymagane dla mikrokontrolera. Na przykład bateria litowa 7,4 V może być podłączona do liniowego regulatora napięcia 3,3 V i 5,0 V (ponieważ regulator liniowy wymaga wyższego napięcia zaniku napięcia bardziej niż LDO i przełączanie).
W naszym projekcie zastosowaliśmy akumulator 4000 mAH o napięciu 7,4 V. Użyliśmy regulatora 5,0 V, który zapewnia wystarczający prąd i napięcie wyjściowe dla ESP32.
Dzielnik napięcia:
Dzielnik napięcia jest istotną częścią pomiaru napięcia w panelu słonecznym. Należy wybrać dzielnik napięcia, który podzieli napięcie zgodnie z napięciem wejściowym I / O mikrokontrolera.
Powyższe rezystory należy dobrać w taki sposób, aby napięcie wyjściowe dzielnika napięcia nie przekraczało maksymalnego napięcia I / O mikrokontrolera (3,3 V dla ESP32). Jednak zaleca się użycie potencjometru, ponieważ zapewni on elastyczność w wyborze dowolnego panelu słonecznego o wyższym lub niższym napięciu znamionowym i może łatwo ustawić napięcie za pomocą multimetru.
W naszym przypadku mamy potencjometr w obwodzie płytki MPPT, który działa jako dzielnik napięcia. Dzielnik napięcia ustawiamy ze współczynnikiem podziału 6V. Połączyliśmy dwa multimetry, jeden na wejściu, a drugi na wyjściu kotła, i ustawiliśmy wartość, że przy napięciu wejściowym 18 V wyjście będzie wynosić 3 V, ponieważ nominalne napięcie wyjściowe panelu słonecznego wynosi 18 V.
Czujnik temperatury do panelu słonecznego:
Moc wyjściowa z panelu słonecznego ma bezpośrednie połączenie z temperaturą panelu słonecznego. Czemu? Ponieważ gdy temperatura panelu słonecznego zaczyna rosnąć, prąd wyjściowy z panelu słonecznego rośnie wykładniczo, podczas gdy napięcie wyjściowe zaczyna się liniowo zmniejszać.
Zgodnie ze wzorem na moc, moc jest równa napięciu razy prąd (W = V x A), zmniejszenie napięcia wyjściowego zmniejsza również moc wyjściową panelu słonecznego nawet po wzroście przepływu prądu. Teraz następne pytanie, które przychodzi nam do głowy, brzmi: jak zmierzyć temperaturę słoneczną? Cóż, jest to dość interesujące, ponieważ panele słoneczne są generalnie narażone na działanie ciepła, ponieważ są narażone na bezpośrednie działanie promieni słonecznych iz oczywistych powodów. Najlepszym sposobem pomiaru temperatury paneli słonecznych jest użycie czujnika temperatury powierzchni płaskiej. Sugeruje się również użycie termopary typu K umieszczonej bezpośrednio w panelu słonecznym.
W naszej aplikacji wykorzystaliśmy moduł czujnika temperatury oparty na termistorze, który pokazano poniżej.
Schemat obwodu do monitorowania energii słonecznej opartego na IoT
Pełny schemat obwodu monitora energii słonecznej z obsługą IoT przedstawiono poniżej. Schemat jest prosty. Czerwona tablica kreskowa to tablica MPPT, której użyliśmy w tym projekcie.
Konfiguracja ThingSpeak
Utwórz konto w ThingSpeak i przejdź do opcji „Mój kanał”, a następnie kliknij Nowy kanał.
Utwórz nowy kanał z nazwami pól.
Teraz po ustawieniu pola przejdź do pola API Keys, w którym dostępny jest Write API Key. Ten klucz należy podać w kodzie, a także w identyfikatorze kanału.
Adres ThingSpeak można znaleźć na tej samej stronie.
Dzięki powyższym krokom możesz bardzo łatwo skonfigurować ThingSpeak. Jeśli chcesz dowiedzieć się więcej o ThingSpeak i procesie jego konfiguracji, możesz zapoznać się z naszymi poprzednimi artykułami na ten temat.
Kod Arduino do monitorowania energii słonecznej za pomocą ESP32
Pełny kod monitorowania energii słonecznej ESP32 można znaleźć na dole tej strony. Kod zaczyna się od zdefiniowania identyfikatora SSID, hasła i kilku innych stałych parametrów, jak pokazano poniżej.
// zdefiniuj SSID WiFi i PWD dla uplink. #define WLAN_SSID "xxxx" #define WLAN_PASS "xxxxxxxxxx"
// opór w 25 stopniach C # zdefiniować TERMISTORNOMINAL 10000 // temp. dla rezystancji nominalnej (prawie zawsze 25 C) # zdefiniować TEMPERATURENOMINAL 25 // Współczynnik beta termistora (zwykle 3000-4000) # zdefiniować BCOEFFICIENT 3950 // wartość 'innego' rezystora # zdefiniować SERIESRESISTOR 10000
Nominalna wartość rezystancji termistora jest podana w temperaturze nominalnej. Ustaw tę wartość w zależności od arkusza danych termistora. Wpisz współczynnik Beta i wartość rezystora szeregowego termistora.
// zdefiniuj Analog dla prądu i napięcia const int curr_an_pin = 35; const int volt_an_pin = 34; const int ntc_temp_an_pin = 33;
W tym miejscu zdefiniowano kody PIN.
#define thingSpeakAddress "xxxxxxxxx" #define channelID xxxxx #define writeFeedAPIKey "xxxxxxx" #define readFeedAPIKey "xxxxxxx" #define readFieldAPIKey "xxxxxxxx" #define readStatusAPIKey "xxxxxxx"
Umieść thingSpeakAddress, channelID, Write Feed API Key. Reszta rzeczy nie jest wymagana, ale nadal jest przydatna, jeśli konieczne jest pobranie danych z sieci.
void setup () { // wpisz tutaj swój kod instalacyjny, aby uruchomić go raz: // ustaw port szeregowy na 115200 Serial.begin (115200); // Zainicjuj opóźnienie szeregowe (1000); WiFi.mode (WIFI_STA); ThingSpeak.begin (klient); // Zainicjuj ThingSpeak // todo: utwórz zadanie, aby odczytać pin w celu uzyskania prądu i napięcia oraz obliczyć wat i temperaturę panelu słonecznego xTaskCreate ( wifi_task, / * Funkcja zadania. * / "Wifi_task", / * Ciąg znaków o nazwie task. * / 1024 * 2, / * Wielkość stosu w bajtach. * / NULL, / * Parametr przekazywany jako dane wejściowe zadania * / 5, / * Priorytet zadania. * / NULL); / * Uchwyt zadania. * / Serial.print ("Odczyt danych."); }
W powyższym kodzie inicjalizowany jest serwer ThingSpeak i tworzone jest zadanie, które pobierze dane związane z panelem słonecznym.
W głównej pętli prąd i napięcie słoneczne są wykrywane za pomocą pinu analogowego i obliczana jest średnia.
float solar_curr_adc_val = 0; float 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); opóźnienie (10); } // uśrednij wszystkie próbki na zewnątrz float 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); // przekonwertuj wartość adc na napięcia, aby uzyskać rzeczywisty prąd i napięcie. float solar_curr = (curr_avg * 3,3) / (4095); float solar_volt = (volt_avg * 3,3) / (4095); // używając dzielnika napięcia obniżamy rzeczywiste napięcie. // z tego powodu mnożymy 6 przez średnie napięcie, aby uzyskać rzeczywiste napięcie panelu słonecznego. napięcie_solarne * = 6;
Napięcie słoneczne jest podawane przez pomnożenie przez 6, ponieważ utworzyliśmy dzielnik napięcia, który podzieli napięcie wejściowe przez 6 razy.
Temperatura jest generowana z termistora przy użyciu formacji logarytmicznej.
// zamień wartość na odporność temp_avg = 4095 / temp_avg - 1; temp_avg = SERIESRESISTOR / temp_avg; //Serial.print("Rezystancja termistora "); //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 / (TEMPERATURENOMINAL + 273,15); // + (1 / Do) steinhart = 1.0 / steinhart; // Odwróć steinhart - = 273.15; // przekonwertuj bezwzględną temperaturę na C
Dane są odczytywane co 15 sekund.
opóźnienie (1000); liczyć ++; Serial.print („.”); if (count> = 15) { count = 0; Serial.println ("============================================= ============================ "); Serial.print ("Napięcie słoneczne ="); Serial.println (solar_volt); Serial.print ("Prąd słoneczny ="); Serial.println (solar_curr); float solar_watt = solar_volt * solar_curr; Serial.print ("Moc słoneczna ="); Serial.println (solar_watt); Serial.print ("Temperatura słoneczna ="); Serial.println (steinhart); Serial.println ("============================================= ============================ ");
Dane z odpowiednich pól są przesyłane za pomocą funkcji Thing.Speak.setField (); kiedy WiFi jest podłączone.
if (WiFi.status () == WL_CONNECTED) { ThingSpeak.setField (1, solar_volt); ThingSpeak.setField (2, solar_curr); ThingSpeak.setField (3, solar_watt); ThingSpeak.setField (4, steinhart); // zapis do kanału ThingSpeak int x = ThingSpeak.writeFields (channelID, writeFeedAPIKey); if (x == 200) { Serial.println ("Aktualizacja kanałów powiodła się."); } else { Serial.println ("Problem z aktualizacją kanału. Kod błędu HTTP" + String (x)); } } else { Serial.println ("\ r \ n ##################################### ####################### ”); Serial.println ("Nie udało się zaktualizować danych na serwerze thingSpeak."); Serial.println („Brak połączenia Wi-Fi…”); Serial.println („############################################# ############### \ r \ n "); } Serial.print ("Odczyt danych."); } }
Zadanie Wi-Fi utworzone w poniższym fragmencie kodu -
void wifi_task (void * parametr) { while (1) { if (WiFi.status ()! = WL_CONNECTED) { Serial.print ("Próbuję połączyć się z SSID:"); Serial.println (WLAN_SSID); while (WiFi.status ()! = WL_CONNECTED) { WiFi.begin (WLAN_SSID, WLAN_PASS); // Połącz się z siecią WPA / WPA2. Zmień tę linię, jeśli używasz otwartej sieci lub sieci WEP Serial.print („.”); opóźnienie (5000); } Serial.println ("\ nConnected."); Serial.println (); Serial.println („Połączono z siecią Wi-Fi”); Serial.println ("adres IP:"); Serial.println (WiFi.localIP ()); } vTaskDelay (1000 / portTICK_PERIOD_MS); } vTaskDelete (NULL); }
Testowanie i monitorowanie danych
Panel słoneczny jest połączony z obwodem i wystawiony na działanie promieni słonecznych w celu przetestowania, jak pokazano poniżej.
Cała praca jest pokazana na poniższym filmie. Nasz obwód był w stanie odczytać napięcie wyjściowe, prąd i moc z panelu i zaktualizować je na żywo w kanale rzeczy, jak pokazano poniżej.
Jak widać, na powyższym wykresie pokazane są dane z 15 minut. Ponieważ jest to projekt dotyczący eksploatacji na zewnątrz, należy użyć odpowiedniej płytki drukowanej wraz z dołączonym pudełkiem. Obudowę należy wykonać w taki sposób, aby obwód pozostał wodoodporny w czasie deszczu. Aby zmodyfikować ten obwód lub przedyskutować dalsze aspekty tego projektu, skorzystaj z aktywnego forum Circuit Digest. Mam nadzieję, że spodobał Ci się samouczek i nauczyłeś się czegoś przydatnego.