利用MPPT制作基于物聯(lián)網(wǎng)的太陽能監(jiān)測(cè)系統(tǒng)_第1頁
利用MPPT制作基于物聯(lián)網(wǎng)的太陽能監(jiān)測(cè)系統(tǒng)_第2頁
利用MPPT制作基于物聯(lián)網(wǎng)的太陽能監(jiān)測(cè)系統(tǒng)_第3頁
利用MPPT制作基于物聯(lián)網(wǎng)的太陽能監(jiān)測(cè)系統(tǒng)_第4頁
利用MPPT制作基于物聯(lián)網(wǎng)的太陽能監(jiān)測(cè)系統(tǒng)_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

利用MPPT制作基于物聯(lián)網(wǎng)的太陽能監(jiān)測(cè)系統(tǒng)在可再生能源領(lǐng)域,太陽能處于最前沿,因?yàn)槔锰柲馨l(fā)電是可再生能源最簡(jiǎn)單、商業(yè)上可行的方式。說到太陽能電池板,需要監(jiān)控太陽能電池板輸出的輸出功率,以便從電池板獲得最佳功率輸出。這就是為什么需要實(shí)時(shí)監(jiān)控系統(tǒng)的原因。在大型太陽能發(fā)電廠中,它還可用于監(jiān)控每個(gè)面板的功率輸出,這有助于識(shí)別灰塵堆積。它還可以防止運(yùn)行期間出現(xiàn)任何故障情況。在這個(gè)項(xiàng)目中,我們將通過結(jié)合基于MPPT(最大功率點(diǎn)跟蹤器)的電池充電技術(shù)來制作基于物聯(lián)網(wǎng)的太陽能監(jiān)測(cè)系統(tǒng),這將有助于減少充電時(shí)間并提高效率。此外,我們將測(cè)量面板溫度、輸出電壓和電流,以提高電路的安全性。最后,最重要的是,我們將使用ThingSpeak云服務(wù)來監(jiān)控來自世界各地的輸出數(shù)據(jù)。為支持物聯(lián)網(wǎng)的太陽能監(jiān)視器選擇合適的組件使用太陽能監(jiān)視器,監(jiān)視和檢測(cè)任何太陽能系統(tǒng)中的故障變得非常容易。這就是為什么在設(shè)計(jì)這樣的系統(tǒng)時(shí)組件選擇成為一個(gè)非常重要的部分。下面給出了我們使用的部件列表。ESP32開發(fā)板MPPT電路(可以是任何太陽能電路)分流電阻器(例如1Ohm1watt-適用于高達(dá)1A的電流)鋰電池(首選7.4v)。有效的Wi-Fi連接太陽能電池板的溫度傳感器分壓器電路(見說明)Esp32開發(fā)板:對(duì)于支持物聯(lián)網(wǎng)的應(yīng)用程序,必須選擇正確類型的開發(fā)板,該開發(fā)板能夠處理來自其模擬引腳的數(shù)據(jù)并通過任何類型的連接協(xié)議(如Wi-Fi或云)發(fā)送數(shù)據(jù)服務(wù)器。我們特別選擇了ESP32,因?yàn)樗且豢罹哂写罅抗δ艿牡统杀疚⒖刂破鳌4送?,它有一個(gè)內(nèi)置的Wi-Fi收音機(jī),我們可以通過它非常輕松地連接到互聯(lián)網(wǎng)。太陽能電路:太陽能充電電路是從太陽能電池板獲得更高電壓并將其轉(zhuǎn)換為充電電壓的電路,以便它可以有效地為電池充電。對(duì)于這個(gè)項(xiàng)目,我們將使用基于LT3562的MPPT充電控制器電路板,我們已經(jīng)在之前的一個(gè)項(xiàng)目中制作了該電路板。但是如果你想嵌入這個(gè)物聯(lián)網(wǎng)啟用監(jiān)控,你可以使用任何類型的太陽能電路。我們選擇此板是因?yàn)樵撾娐放鋫淞俗畲蠊β庶c(diǎn)跟蹤(MPPT),這對(duì)低功率太陽能電池板項(xiàng)目非常有利。這是從太陽能電池板為小型鋰電池充電的有效方法。分流電阻:任何電阻器都遵循歐姆定律,這意味著如果一定量的電流流過電阻器,就會(huì)出現(xiàn)一定量的電壓降。分流電阻器也不例外,它專門用于測(cè)量電流。但是,根據(jù)流過太陽能電池板的標(biāo)稱電流,選擇一個(gè)分流電阻器,該電阻器將產(chǎn)生足夠的電壓,該電壓可由微控制器單元測(cè)量。但是,與此同時(shí),電阻的瓦數(shù)也很重要。分流電阻功率的選擇也很重要??梢允褂孟旅娼o出的公式計(jì)算電壓降。這被稱為歐姆定律——V=IxRV是在“I”期間將產(chǎn)生的電壓,即流過電阻“R”的電流量。例如,1歐姆的電阻在1A的電流流過時(shí)會(huì)產(chǎn)生1V的壓降。對(duì)于電阻器的瓦數(shù),可以使用下面給出的公式-P=I2R其中I是最大電流,R是電阻值。對(duì)于具有1歐姆電阻的1A電流,1瓦的功率耗散就足夠了。然而,這對(duì)小型太陽能電池板項(xiàng)目很有用,但根本不適合與太陽能電網(wǎng)相關(guān)的應(yīng)用。在這種情況下,實(shí)際上需要使用非侵入式電流測(cè)量技術(shù)。在這種情況下,可以精確測(cè)量電流,其中可以測(cè)量非常低的電流量以及非常高的電流量。鋰電池:鋰電池的選擇是任何涉及太陽能電池板的項(xiàng)目的重要組成部分。因?yàn)槭冀K保持開啟并不斷檢查和提交數(shù)據(jù)的微控制器單元需要至少一百毫安的電流才能穩(wěn)定運(yùn)行。當(dāng)由于季風(fēng)而沒有陽光照射時(shí),電池容量應(yīng)該可以為微控制器供電至少4-5天。從電池的角度來看,充電電流必須大于負(fù)載電流也很重要。如果有人將100mA的負(fù)載與電池連接并提供小于該值的充電電流,這是很不尋常的。為了安全起見,我們的充電電流至少應(yīng)該是負(fù)載電流的5倍。另一方面,電池電壓需要高于微控制器所需的任何常用穩(wěn)壓器輸入電壓。例如,一個(gè)7.4V鋰電池可以連接在3.3V和5.0V線性穩(wěn)壓器上(因?yàn)榫€性穩(wěn)壓器需要比LDO和開關(guān)更高的壓差電壓。)在我們的項(xiàng)目中,我們使用了額定電壓為7.4V的4000mAH電池。我們使用了一個(gè)5.0V穩(wěn)壓器,可為ESP32提供足夠的電流和電壓輸出。分壓器:分壓器是太陽能電池板電壓測(cè)量的重要組成部分。應(yīng)該選擇一個(gè)分壓器,根據(jù)微控制器I/O電壓輸入來分壓。選擇上述電阻,使分壓器輸出電壓不應(yīng)超過微控制器最大I/O電壓(ESP32為3.3V)。但是,建議使用電位器,因?yàn)樗梢造`活地選擇任何更高或更低額定電壓的太陽能電池板,并且可以使用萬用表輕松設(shè)置電壓。在我們的例子中,我們?cè)贛PPT板電路中有一個(gè)電位計(jì),用作分壓器。我們?cè)O(shè)置分壓器的分壓系數(shù)為6V。我們接了兩只萬用表,一只在鍋的輸入端,一只在鍋的輸出端,并設(shè)置當(dāng)輸入電壓為18V時(shí)輸出為3V,因?yàn)樘柲茈姵匕宓臉?biāo)稱輸出電壓為18V。太陽能電池板的溫度傳感器:太陽能電池板的功率輸出與太陽能電池板的溫度直接相關(guān)。為什么?因?yàn)殡S著太陽能電池板的溫度開始增加,太陽能電池板的輸出電流呈指數(shù)增長(zhǎng),而電壓輸出開始呈線性下降。根據(jù)功率公式,瓦數(shù)等于電壓乘以電流(W=VxA),即使電流增加,降低輸出電壓也會(huì)降低太陽能電池板的輸出功率?,F(xiàn)在,我們想到的下一個(gè)問題是,如何測(cè)量太陽溫度?好吧,這很有趣,因?yàn)樘柲茈姵匕逋ǔ1┞对跓岘h(huán)境中,因?yàn)樗┞对陉柟庵鄙湎?,原因很明顯。測(cè)量太陽能電池板溫度的最佳方法是使用平面溫度傳感器。還建議使用直接放置在太陽能電池板中的K型熱電偶。對(duì)于我們的應(yīng)用,我們使用了基于熱敏電阻的溫度傳感器模塊,如下所示。基于物聯(lián)網(wǎng)的太陽能監(jiān)測(cè)電路圖啟用IoT的太陽能監(jiān)視器的完整電路圖如下所示。原理圖很簡(jiǎn)單。紅色點(diǎn)劃線板是我們?cè)谶@個(gè)項(xiàng)目中使用的MPPT板。設(shè)置ThingSpeak使用ThingSpeak創(chuàng)建一個(gè)帳戶并轉(zhuǎn)到“我的頻道”選項(xiàng),然后單擊新頻道。使用字段名稱創(chuàng)建一個(gè)新通道。現(xiàn)在設(shè)置字段后,轉(zhuǎn)到可以使用WriteAPIKey的APIKeys字段。需要在代碼中提供此密鑰以及通道ID。ThingSpeak地址可在同一頁面上找到。通過上述步驟,您可以非常輕松地設(shè)置ThingSpeak。如果您想了解有關(guān)ThingSpeak及其設(shè)置過程的更多信息,您可以查看我們之前關(guān)于該主題的文章。使用ESP32進(jìn)行太陽能監(jiān)測(cè)的Arduino代碼完整的ESP32太陽能監(jiān)控代碼可以在本頁底部找到。代碼首先定義您的SSID、密碼和一些其他常量參數(shù),如下所示。

//為上行鏈路定義WiFiSSID和PWD。#defineWLAN_SSID"xxxx"#defineWLAN_PASS"xxxxxxxxxx"

在此字段中,需要設(shè)置SSID和密碼。

//25攝氏度時(shí)的電阻#defineTHERMISTORNOMINAL10000//溫度。對(duì)于標(biāo)稱電阻(幾乎總是25C)#defineTEMPERATURENOMINAL25//熱敏電阻的beta系數(shù)(通常為3000-4000)#defineBCOEFFICIENT3950//“其他”電阻的值#defineSERIESRESISTOR10000

熱敏電阻標(biāo)稱歐姆是在標(biāo)稱溫度下提供的。根據(jù)熱敏電阻的數(shù)據(jù)表設(shè)置此值。放熱敏電阻的Beta系數(shù)和串聯(lián)電阻值。

//為電流和電壓定義模擬constintcurr_an_pin=35;常量intvolt_an_pin=34;常量intntc_temp_an_pin=33;

PIN在這里定義。

#definethingSpeakAddress"xxxxxxxx"#definechannelIDxxxxx#definewriteFeedAPIKey"xxxxxxx"#definereadFeedAPIKey"xxxxxxx"#definereadFieldAPIKey"xxxxxxxx"#definereadStatusAPIKey"xxxxxxx"

放入thingSpeakAddress、channelID、WriteFeedAPIKey。其余的東西不是必需的,但如果需要從Web接收數(shù)據(jù),它們?nèi)匀挥杏谩?/p>

voidsetup(){//將您的設(shè)置代碼放在這里,運(yùn)行一次://將串口設(shè)置為115200Serial.begin(115200);//初始化串行延遲(1000);WiFi.mode(WIFI_STA);ThingSpeak.begin(客戶端);//初始化ThingSpeak//todo:創(chuàng)建一個(gè)任務(wù)來讀取引腳以獲取電流和電壓并計(jì)算太陽能電池板的瓦特和溫度xTaskCreate(wifi_task,/*任務(wù)函數(shù)。*/"wifi_task",/*名稱為的字符串task.*/1024*2,/*堆棧大小(以字節(jié)為單位)。*/NULL,/*作為任務(wù)輸入傳遞的參數(shù)*/5,/*任務(wù)的優(yōu)先級(jí)。*/空);/*任務(wù)句柄。*/Serial.print("數(shù)據(jù)讀取。");}

在上面的代碼中,初始化了ThingSpeak服務(wù)器并創(chuàng)建了一個(gè)任務(wù),該任務(wù)將獲取與太陽能電池板相關(guān)的數(shù)據(jù)。在主回路中,太陽能電流和電壓通過模擬引腳進(jìn)行檢測(cè),并進(jìn)行平均。

浮動(dòng)太陽能curr_adc_val=0;浮動(dòng)太陽能伏特adc_val=0;for(i=0;i<NUMSAMPLES;i++){curr_samples[i]=analogRead(curr_an_pin);volt_samples[i]=模擬讀?。╲olt_an_pin);temp_samples[i]=模擬讀取(ntc_temp_an_pin);延遲(10);}//平均所有樣本floatcurr_avg=0;浮動(dòng)volt_avg=0;浮動(dòng)temp_avg=0;for(i=0;i<NUMSAMPLES;i++){curr_avg+=curr_samples[i];volt_avg+=volt_samples[i];temp_avg+=temp_samples[i];}curr_avg/=NUM??SAMPLES;volt_avg/=NUM??SAMPLES;temp_avg/=NUM??SAMPLES;//Serial.print("ADC值=");//Serial.println(ADC_VALUE);//將adc值轉(zhuǎn)換為電壓以獲得實(shí)際電流和電壓。floatsolar_curr=(curr_avg*3.3)/(4095);浮動(dòng)太陽能伏特=(伏特平均*3.3)/(4095);//通過使用分壓器,我們降低了實(shí)際電壓。//因此,我們將6乘以平均電壓,得到太陽能電池板的實(shí)際電壓。太陽能電壓*=6;

太陽能電壓通過乘以6得到,因?yàn)槲覀儎?chuàng)建了將輸入電壓除以6倍的分壓器。使用對(duì)數(shù)形式從熱敏電阻產(chǎn)生溫度。

//將該值轉(zhuǎn)換為電阻temp_avg=4095/temp_avg-1;temp_avg=SERIESRESISTOR/temp_avg;//Serial.print("熱敏電阻");//Serial.println(temp_avg);浮動(dòng)斯坦哈特;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/To)steinhart=1.0/steinhart;//反轉(zhuǎn)steinhart-=273.15;//將絕對(duì)溫度轉(zhuǎn)換為C

每15秒讀取一次數(shù)據(jù)。

延遲(1000);計(jì)數(shù)++;Serial.print(".");如果(計(jì)數(shù)>=15){計(jì)數(shù)=0;Serial.println("===========================================================================");Serial.print("太陽能電壓=");Serial.println(solar_volt);Serial.print("太陽能電流=");Serial.println(solar_curr);浮動(dòng)太陽能瓦特=太陽能伏特*太陽能電流;Serial.print("太陽能瓦特=");Serial.println(solar_watt);Serial.print("太陽溫度=");Serial.println(steinhart);Serial.println("===========================================================================");

使用函數(shù)Thing.Speak.setField()傳輸各個(gè)字段的數(shù)據(jù);連接WiFi時(shí)。

if(WiFi.status()==WL_CONNECTED){ThingSpeak.setField(1,solar_volt);ThingSpeak.setField(2,solar_curr);ThingSpeak.setField(3,solar_watt);ThingSpeak.setField(4,steinhart);//寫入ThingSpeak通道intx=ThingSpeak.writeFields(channelID,writeFeedAPIKey);if(x==200){Serial.println("頻道更新成功。");}else{Serial.println("更新頻道有問題。HTTP錯(cuò)誤碼"+String(x));}}其他{Serial.println("\r\n############################################################");Serial.println("更新數(shù)據(jù)到thingSpeak服務(wù)器失敗。");Serial.println("WiFi未連接...");Serial.println("###########################################################\r\n");}Serial.print("數(shù)據(jù)讀取。");}}

在以下代碼片段中創(chuàng)建的Wi-Fi任務(wù)-

voidwifi_task(void*parameter){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網(wǎng)絡(luò)。如果使用開放或WEP網(wǎng)絡(luò),請(qǐng)更改此行Serial.print(".");延遲(5000);}Serial.println("\n已連接。");序列號(hào).println();Serial.println("WiFi連接");Serial.println("IP地址:");Serial.println(WiFi.localIP());}vTaskDelay(1000/portTICK_PERIOD_MS);}vTaskDelete(NULL);}

測(cè)試和監(jiān)控?cái)?shù)據(jù)將太陽能電池板與電路連接并放置在陽光下進(jìn)行測(cè)試,如下圖所示。下面的視頻演示了完整的工作。我們的電路能夠從面板讀取輸出電壓、電流和功率,并在thingspeak頻道上實(shí)時(shí)更新,如下所示。如我們所見,上圖中顯示了15分鐘的數(shù)據(jù)。由于這是一個(gè)戶外操作項(xiàng)目,因此需要使用適當(dāng)?shù)腜CB以及一個(gè)封閉的盒子。外殼的制造方式需要使電路在雨中保持防水。#include

#include"ThingSpeak.h"

#include

#include

#include

//為上行鏈路定義WiFiSSID和PWD。#defineWLAN_SSID"xxxx"

#defineWLAN_PASS"xxxxxxxxxx"

#defineNUMSAMPLES5

intcurr_samples[NUMSAMPLES];

intvolt_samples[NUMSAMPLES];

inttemp_samples[NUMSAMPLES];

WiFiClient客戶端;//25攝氏度時(shí)的電阻#defineTHERMISTORNOMINAL10000

//溫度。#defineSERIESRESISTOR10000

//為電流和電壓定義模擬constintcurr_an_pin=35;

常量intvolt_an_pin=34;

常量intntc_temp_an_pin=33;

整數(shù)計(jì)數(shù)=0;//thingSpeakDetails

#definethingSpeakAddress"xxxxxxxx"

#definechannelIDxxxxx

#definewriteFeedAPIKey"xxxxxxx"

#definereadFeedAPIKey"xxxxxxx"

#definereadFieldAPIKey"xxxxxxxx"

#definereadStatusAPIKey"xxxxxxx"

voidsetup(){

//把你的設(shè)置代碼放在這里,運(yùn)行一次:

//將串口設(shè)置為115200

Serial.begin(115200);

WiFi.mode(WIFI_STA);

ThingSpeak.begin(客戶端);//初始化ThingSpeak

//todo:創(chuàng)建一個(gè)任務(wù)來讀取引腳以獲取電流和電壓并計(jì)算太陽能電池板的瓦特和溫度

xTaskCreate(

wifi_task,/*任務(wù)函數(shù)。*/

"wifi_task",/*名稱為的字符串task.*/

1024*2,/*以字節(jié)為單位的堆棧大小。*/

NULL,/*作為任務(wù)輸入傳遞的參數(shù)*/

5,/*任務(wù)的優(yōu)先級(jí)。*/

NULL);/*任務(wù)句柄。*/

Serial.print("數(shù)據(jù)讀取。");

}無效循環(huán)(){

//把你的主要代碼放在這里,重復(fù)運(yùn)行:

inti=0;

浮動(dòng)太陽能curr_adc_val=0;

浮動(dòng)太陽能伏特adc_val=0;

for(i=0;i<NUMSAMPLES;i++){

curr_samples[i]=analogRead(curr_an_pin);

volt_samples[i]=模擬讀取(volt_an_pin);

temp_samples[i]=模擬讀取(ntc_temp_an_pin);

延遲(10);

}

//平均所有樣本

floatcurr_avg=0;

浮動(dòng)volt_avg=0;

浮動(dòng)temp_avg=0;

for(i=0;i<NUMSAMPLES;i++){

curr_avg+=curr_samples[i];

volt_avg+=volt_samples[i];

temp_avg+=temp_samples[i];

}

curr_avg/=NUM??SAMPLES;

volt_avg/=NUM??SAMPLES;

temp_avg/=NUM??SAMPLES;

//Serial.print("ADC值=");

//Serial.println(ADC_VALUE);

//將adc值轉(zhuǎn)換為電壓以獲得實(shí)際電流和電壓。

floatsolar_curr=(curr_avg*3.3)/(4095);

浮動(dòng)太陽能伏特=(伏特平均*3.3)/(4095);

//通過使用分壓器,我們降低了實(shí)際電壓。

//因此,我們將6乘以平均電壓,得到太陽能電池板的實(shí)際電壓。

太陽能電壓*=6;

//將該值轉(zhuǎn)換為電阻

temp_avg=4095/temp_avg-1;

temp_avg=SERIESRESISTOR/temp_avg;

//Serial.print("熱敏電阻");

//Serial.println(temp_avg);

浮動(dòng)斯坦哈特;

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/To)

steinhart=1.0/steinhart;//反轉(zhuǎn)

steinhart-=273.15;//將絕對(duì)溫度轉(zhuǎn)換為C

延遲(1000);

計(jì)數(shù)++;

Serial.print(".");

如果(計(jì)數(shù)>=15){

計(jì)數(shù)=0;

Serial.println("===========================================================================");

Serial.print("太陽能電壓=");

Serial.println(solar_volt);

Serial.print("太陽能電流=");

Serial.println(solar_curr);

浮動(dòng)太陽能瓦特=太陽能伏特*太陽能電流;

Serial.print("太陽能瓦特=");

Serial.println(solar_watt);

Serial.print("太陽溫度=");

Serial.println(steinhart);

Serial.println("===========================================================================");

if(WiFi.status()==WL_CONNECTED){

ThingSpeak.setField(1,solar_volt);

物語。

ThingSpeak.setField(3,solar_watt);

ThingSpeak.setField(4,steinhart);

//寫入ThingSpeak通道

intx=Thing

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論