幾個(gè)月前,我安裝了一個(gè)小型的離網(wǎng)太陽能系統(tǒng)。我總是很好奇看到我的太陽能光伏系統(tǒng)的性能,而且好消息是我正在使用的充電控制器具有自己的本地顯示器以進(jìn)行監(jiān)控。但是,我嚴(yán)重缺少遠(yuǎn)程監(jiān)視功能。因此,我決定制作自己的監(jiān)視系統(tǒng),該系統(tǒng)必須同時(shí)具有本地和遠(yuǎn)程監(jiān)視設(shè)施。
為什么我們需要監(jiān)控?
1.它提供有關(guān)各種太陽能參數(shù),提取的能量,故障檢測(cè),太陽能發(fā)電廠的歷史分析以及相關(guān)的能量損失的清晰信息。
2.您可以輕松地衡量您的太陽能產(chǎn)量以及每月電費(fèi)的節(jié)省。
3.您可以從智能手機(jī)實(shí)時(shí)跟蹤太陽能光伏系統(tǒng)的所有重要參數(shù)。
在本文中,我將向您展示我使用ESP32開發(fā)板和ACS723電流傳感器制作了一個(gè)簡(jiǎn)單的太陽能監(jiān)控系統(tǒng)。
1.輸入電壓-0- 24V(可以擴(kuò)展到50V)
2.輸入電流:0 -15A
3.太陽能電池板額定值-250W(12V)/ 500W(24V)
視頻展示:
組件清單:
1. ESP32開發(fā)板-30針(Banggood / Aliexpress)
2. ACS723傳感器(LCSC)
4.電阻器(亞馬遜/ Banggood)
5.陶瓷電容器(亞馬遜/ Banggood)
6. XL7015降壓轉(zhuǎn)換器模塊(Amazon)
7.溫度傳感器(亞馬遜/ Banggood)
8.螺絲端子3P- 3.5mm間距(LCSC)
9.螺絲端子2P-9.52mm間距(LCSC)
10.排針(Amazon / Banggood)
11.跳線MF(Amazon)
12. PCB
13.助焊劑(Banggood)
14.錫膏(Banggood)
補(bǔ)充工具:
1.烙鐵(亞馬遜/ Banggood)
2.少年(亞馬遜/ Banggood)
3.剝線鉗(Amazon / Banggood)
4. 3D打印機(jī)(Amazon / Banggood)
步驟1:如何運(yùn)作?
太陽能電池板的電壓和電流分別由電壓和電流傳感器感測(cè)。此處,使用分壓器網(wǎng)絡(luò)測(cè)量太陽能電池板電壓,使用AC723霍爾效應(yīng)電流傳感器測(cè)量太陽能電池板電流。同樣,DS18B20溫度傳感器可感測(cè)環(huán)境溫度。
來自所有傳感器的原始傳感器數(shù)據(jù)由ESP32板處理,并執(zhí)行所有必要的數(shù)學(xué)運(yùn)算來計(jì)算功率,能量。然后將處理后的數(shù)據(jù)發(fā)送到OLED顯示器以進(jìn)行本地監(jiān)視,還發(fā)送到云以進(jìn)行遠(yuǎn)程監(jiān)視。遠(yuǎn)程監(jiān)控是通過安裝在智能手機(jī)上的Blynk應(yīng)用程序完成的。
步驟2:測(cè)量電壓
太陽能電池板電壓由分壓器網(wǎng)絡(luò)感測(cè),該分壓器網(wǎng)絡(luò)由兩個(gè)電阻R1 = 47k和R2 = 6.8k組成。R1和R2的輸出連接到ESP32模擬引腳GPIO引腳34。使用陶瓷電容器C1平滑分壓器的輸出。
電壓測(cè)量
ESP32的模擬輸入可用于測(cè)量0至3.3V之間的DC電壓。我考慮過的太陽能電池板可以產(chǎn)生24V(開路電壓)。要讀取此電壓,我們必須逐步使用可通過分壓器網(wǎng)絡(luò)完成的電壓。
用于分壓器電路
Vout = R2 /(R1 + R2)x Vin
Vin =(R1 + R2)/ R2 x Vout
AnalogRead()函數(shù)讀取電壓并將其轉(zhuǎn)換為0到4095之間的數(shù)字
校準(zhǔn) :
我們將使用Arduino的模擬輸入之一及其AnalogRead()函數(shù)讀取輸出值。該函數(shù)輸出的值在0到4095之間,每個(gè)增量為3.3 / 4095
Vin = Vout *(R1 + R2)/ R2; R1 = 47k和R2 = 6.8k
Vin = ADC計(jì)數(shù)*(3.3 / 4095)*((47 + 6.8)/ 6.8)伏
您可以通過選擇適當(dāng)?shù)碾娮杵鱎1和R2來使用更高電壓的太陽能電池板。
步驟3:測(cè)量電流
對(duì)于電流測(cè)量,我使用了霍爾效應(yīng)電流傳感器ACS 723 -20AUvariant。根據(jù)ACS723傳感器的電流檢測(cè)范圍,還有其他變體。ACS712傳感器讀取電流值并將其轉(zhuǎn)換為相關(guān)的電壓值。將這兩個(gè)測(cè)量值關(guān)聯(lián)起來的值為“靈敏度”。輸出靈敏度可以從數(shù)據(jù)表中獲得。根據(jù)數(shù)據(jù)表,靈敏度為200mV / A
校準(zhǔn):
模擬讀取值= AnalogRead(Pin);
ADCVoltage =(3.3 / 4095)*模擬讀取值
以安培計(jì)的電流=(ADCVoltage –失調(diào)電壓)/靈敏度
根據(jù)數(shù)據(jù)表,失調(diào)電壓為0.1 * Vcc(0.5V),靈敏度為200mV / A
注意: ACS723的輸出通過由R4和R5組成的分壓器網(wǎng)絡(luò)降壓。
步驟4:測(cè)量溫度
我已使用外部DS18B20探針測(cè)量環(huán)境溫度。它使用單線協(xié)議與微控制器通信。單線設(shè)備需要在其信號(hào)線上連接一個(gè)上拉電阻,以便電路板正確讀取。在這里,我使用了一個(gè)4.7K電阻(R6)作為上拉電阻。
可以通過3針螺絲端子將其鉤接到PCB上。
要與DS18B20溫度傳感器接口,您需要安裝One Wire庫(kù)和Dallas Temperature庫(kù)。您可以閱讀本文以獲取有關(guān)DS18B20傳感器的更多詳細(xì)信息。
連接如下:
紅線-》 Vcc
黃線-》數(shù)據(jù)
黑線-》 GND
以上所有內(nèi)容在PCB上都有清晰的標(biāo)簽,以免造成混淆。
步驟5:連接OLED顯示器
為了在本地顯示太陽能電池板參數(shù),我使用了0.96英寸的OLED顯示屏。它的分辨率為128 x 64,并使用I2C總線與ESP32進(jìn)行通信。使用了ESP32中的兩個(gè)引腳SCL(GPIO22),SDA(GPIO21)溝通。
我正在使用Adafruit_SSD1306庫(kù)來顯示參數(shù)。首先,您必須下載Adafruit_SSD1306。然后安裝它。
連接應(yīng)如下所示:
ESP32 --》 OLED
3.3V ---》 VCC
地線-》地線
GPIO21 ----》 SDA
GPIO22 ----》 SCL
步驟6:PCB設(shè)計(jì)
我已經(jīng)使用EasyEDA在線軟件繪制了原理圖,然后為該項(xiàng)目設(shè)計(jì)了定制PCB。PCB設(shè)計(jì)用于安裝不同的模塊,而不是使用大量的組件。我已經(jīng)從JLCPCB訂購(gòu)了我的PCB,并在7天內(nèi)收到了它。
您可點(diǎn)擊以下載以下附件的Gerber文件(點(diǎn)擊下載)。
步驟7:PCB組裝
對(duì)于焊接,您將需要一個(gè)體面的烙鐵,焊料,鉗口和萬用表。優(yōu)良作法是根據(jù)組件的高度進(jìn)行焊接。首先焊接較小高度的部件。
您可以按照以下步驟焊接組件:
1.將組件腳推入它們的孔中,然后翻轉(zhuǎn)PCB的背面。
2.將烙鐵頭的尖端固定在焊盤和組件支腳的連接處。
3.將焊料送入接頭中,使焊料在引線周圍全程流動(dòng)并覆蓋焊盤。
一旦它四處流淌,將尖端移開。
步驟8:焊接ACS723
在整個(gè)PCB中,高度較小的組件是電流傳感器ACS723,這是此項(xiàng)目中使用的唯一SMT組件。
首先,在所有8個(gè)焊盤上施加助焊劑,然后在角焊盤上施加少量焊料。使用鑷子放置并對(duì)準(zhǔn)二極管芯片。用烙鐵頭觸碰焊盤時(shí),將芯片固定在適當(dāng)?shù)奈恢茫允购噶蠈⒁_和焊盤融化在一起。
確保PCB和ACS723 IC上的點(diǎn)符號(hào)匹配在一起。點(diǎn)符號(hào)代表-1號(hào)插針。
現(xiàn)在,將焊料涂到所有的焊盤上,就可以完成了。如果在焊接過程中弄糟,則可以使用拆焊芯除去多余的焊料。
步驟9:3D打印的外殼
為了使產(chǎn)品具有良好的商業(yè)外觀,我使用Autodesk Fusion 360設(shè)計(jì)了一個(gè)用于該項(xiàng)目的外殼。所有組件的尺寸和PCB安裝孔均通過游標(biāo)卡尺測(cè)量,然后在設(shè)計(jì)時(shí)考慮相同因素。
外殼分為兩部分:1.主體2.頂蓋
主體的基本設(shè)計(jì)是保留PCB板。頂蓋將蓋住主體開口并安裝OLED顯示器。
我使用Creality CR-10打印機(jī)和1.75毫米綠色PLA燈絲打印部件。我花了大約6個(gè)小時(shí)來打印主體,大約花了2個(gè)小時(shí)來打印頂蓋。
我的設(shè)置是:
列印速度:60毫米/秒
層高:0.2mm(0.3也可以)
填充密度:20%
擠出機(jī)溫度:200攝氏度
床溫:60攝氏度
從Thingiverse下載STL文件
步驟10:組裝3D打印外殼
可以將PCB安裝在3D打印外殼的4個(gè)支架上。您可以使用4 x M3螺釘直接固定PCB,也可以安裝帶螺紋的散熱插件以提高可靠性。在這里,我在每個(gè)支架上都使用了熱插入件。
將PCB安裝到主體上之后,我們可以移動(dòng)安裝OLED顯示器。可以使用熱膠或強(qiáng)力膠帶將OLED顯示器安裝在頂蓋的背面。
將跳線從OLED顯示器連接到PCB OLED端口。PCB上的插頭引腳已明確標(biāo)記。
將溫度傳感器電纜插入機(jī)箱右側(cè)的孔中。然后將電線連接到螺絲端子。
現(xiàn)在,使用4 x M3螺釘關(guān)閉頂蓋。
為了使外殼更具吸引力,我在頂蓋上貼了一個(gè)Instructables標(biāo)簽。
步驟11:軟件和庫(kù)
要將ESP32板與Arduino庫(kù)一起使用,您必須將Arduino IDE與ESP32板一起使用。如果您還沒有這樣做,可以通過遵循Sparkfun的本教程,輕松地將ESP32開發(fā)板支持安裝到Arduino IDE 。
安裝庫(kù):
在上傳代碼之前,請(qǐng)安裝以下庫(kù):
1. ESP32
2.布林克
3. Adafruit_SSD1306
4.一根線
5.達(dá)拉斯溫度
如何安裝庫(kù)?
您可以閱讀Sparkfun的本教程來安裝Arduino庫(kù)。
第12步:與Blynk應(yīng)用交互
Blynk是最流行的物聯(lián)網(wǎng)平臺(tái),用于將任何硬件連接到云,設(shè)計(jì)用于控制它們的應(yīng)用程序以及大規(guī)模管理已部署的產(chǎn)品。借助Blynk庫(kù),您可以將400多種硬件模型(包括ESP8266,ESP32,NodeMCU和Arduino)連接到Blynk Cloud。
步驟1:
下載Blynk應(yīng)用
1.對(duì)于Android
2.對(duì)于iPhone
第2步:
獲取身份驗(yàn)證令牌為了連接Blynk應(yīng)用程序和您的硬件,您需要身份驗(yàn)證令牌。
1.在Blynk應(yīng)用程序中創(chuàng)建一個(gè)新帳戶。
2.按頂部菜單欄上的QR圖標(biāo)。通過掃描上面顯示的QR碼,為該項(xiàng)目創(chuàng)建一個(gè)副本。一旦成功檢測(cè)到,整個(gè)項(xiàng)目將立即在您的手機(jī)上。我已經(jīng)制作了Sol Weather Station應(yīng)用程序。歡迎您嘗試一下!
要開始使用它:
1.下載Blynk應(yīng)用:http ://j.mp/blynk_Android或http://j.mp/blynk_Android
2.觸摸QR碼圖標(biāo),然后將相機(jī)指向下面的代碼,請(qǐng)盡情享受我的應(yīng)用程序!
3.創(chuàng)建項(xiàng)目后,我們將通過電子郵件向您發(fā)送身份驗(yàn)證令牌。
4.檢查您的電子郵件收件箱,然后找到“身份驗(yàn)證令牌”。
步驟3:
為Wemos開發(fā)板準(zhǔn)備Arduino IDE要將Arduino代碼上傳到Wemos開發(fā)板,您必須遵循以下Instructables
步驟4:
安裝完上述庫(kù)后,粘貼下面給出的Arduino代碼。
輸入步驟1中的身份驗(yàn)證碼,ssid和路由器密碼。
然后上傳代碼。
// ================================================ ===================================== //
// //
//太陽能電池板能量監(jiān)控V1.0固件//
// //
//由Debasish Dutta開發(fā),最新更新:06.05.2021 //
// //
// ================================================ ===================================== //
#include 《Adafruit_GFX.h》
#include 《Adafruit_SSD1306.h》
#include 《DallasTemperature.h》
#include 《OneWire.h》
#include“ Wire.h”
#include 《WiFi.h》
#define BLYNK_PRINT串行
#include 《BlynkSimpleEsp32.h》
#define SCREEN_WIDTH 128 // OLED顯示寬度(以像素為單位)
#define SCREEN_HEIGHT 64 // OLED顯示高度(以像素為單位)
#define INPUT_VOLTAGE_SENSE_PIN 34
#定義INPUT_CURRENT_SENSE_PIN 35
#定義TEMP_SENSE_PIN 4
#定義VOLTAGE_SCALE 7.911 // R1 + R2 / R2 //(47K + 6.8K)/ 6.8K
#定義CURRENT_SCALE 1.5 // R4 + R5 / R5 //(1K + 2K)/ 2K
雙倍mVperAmp = 200; //傳感器的靈敏度// //對(duì)于100A模塊使用100,對(duì)于30A模塊使用66
雙ACSoffset = 514;//理想情況下應(yīng)為(0.1 x Vcc)//測(cè)量值為514mV
無符號(hào)長(zhǎng)last_time = 0;
無符號(hào)長(zhǎng)current_time = 0;
浮動(dòng)功率= 0; //瓦特功率
浮動(dòng)能量= 0; //瓦特小時(shí)的能值
浮點(diǎn)溫度tempC = 0; // Celcius的溫度
// float tempF = 0; 溫度(單位:F)
浮動(dòng)保存= 0; // 節(jié)約成本
WiFiClient客戶端;
//聲明連接到I2C的SSD1306顯示器(SDA,SCL引腳)
Adafruit_SSD1306顯示(SCREEN_WIDTH,SCREEN_HEIGHT,&Wire,-1);
// DS18B20連接到的GPIO
const int oneWireBus = 2;
//設(shè)置一個(gè)OneWire實(shí)例以與任何OneWire設(shè)備進(jìn)行通信
OneWire oneWire(TEMP_SENSE_PIN);
達(dá)拉斯溫度傳感器(&oneWire);
// =========================用于wifi服務(wù)器設(shè)置的變量=================== ===========
//您的WiFi憑據(jù)。
//將開放網(wǎng)絡(luò)的密碼設(shè)置為“”。
char ssid [] =“ XXXX”; // WiFi路由器ssid
char pass [] =“ XXXX”; // WiFi路由器密碼
//從Blynk收到的郵件中復(fù)制
char auth [] =“ XXXX”;
// =========================設(shè)置功能====================== ==========================
void setup(){
Serial.begin(115200);
Blynk.begin(auth,ssid,pass);
sensor.begin();
如果(!display.begin(SSD1306_SWITCHCAPVCC,0x3C)){
Serial.println(F(“ SSD1306分配失敗”));
為了 (;;);
}
display.clearDisplay();
display.setTextColor(WHITE);
display.display();
延遲(500);
}
// ========================循環(huán)功能===================== ==========================
無效循環(huán)()
{
//讀取電壓和電流
浮動(dòng)電壓= abs(return_voltage_value(INPUT_VOLTAGE_SENSE_PIN));
浮動(dòng)電流= abs(return_current_value(INPUT_CURRENT_SENSE_PIN));
//從DS18B20讀取溫度
sensor.requestTemperatures(); //獲取溫度
tempC = sensor.getTempCByIndex(0);
// tempF = sensor.getTempFByIndex(0);
//計(jì)算功率和能量
功率=電流*電壓; //以瓦為單位計(jì)算功率
last_time = current_time;
current_time = millis();
能量=能量+功率*(((current_time -last_time)/3600000.0); //以瓦特小時(shí)為單位計(jì)算功率// 1小時(shí)= 60分鐘x 60秒x 1000毫秒
節(jié)省= 6.5 *(能量/ 1000); // 6.5是每千瓦時(shí)的成本//僅用作示例
// ================在串行監(jiān)視器上顯示數(shù)據(jù)========================== ======================
/ * Serial.print(“ Voltage:”);
Serial.println(電壓);
Serial.print(“ Current:”);
Serial.println(當(dāng)前);
Serial.print(“ Power:”);
Serial.println(power);
Serial.print(“ Energy:”);
Serial.println(energy);
Serial.print(“ Temp:”);
Serial.println(tempC);
Serial.println(電壓);
延遲(1000);
* /
// ================ OLED顯示器上的顯示數(shù)據(jù)========================== ======================
//顯示太陽能電池板電壓
display.setTextSize(1);
display.clearDisplay();
display.setCursor(10,10);
display.print(電壓,1);
display.print(“ V”);
//顯示太陽能電池板電流
display.setCursor(70,10);
如果(當(dāng)前》 0 &&當(dāng)前《1)
{
display.print(current * 1000,0);
display.print(“ mA”);
}
別的
{
display.print(current,2);
display.print(“ A”);
}
//以瓦為單位顯示太陽能電池板的功率
display.setTextSize(2);
display.setCursor(10,25);
display.print(power);
display.print(“ W”);
//顯示太陽能電池板產(chǎn)生的能量
display.setCursor(10,45);
如果(能量》 = 1000)
{
display.print(energy / 1000,3);
display.print(“ kWh”);
}
別的
{
display.print(energy,1);
display.print(“ Wh”);
}
display.display();
display.clearDisplay();
// =================在Blynk應(yīng)用程序上顯示數(shù)據(jù)========================== ======================
Blynk.run();
Blynk.virtualWrite(0,voltage); //虛擬引腳0
Blynk.virtualWrite(1,current); //虛擬針腳1
Blynk.virtualWrite(2,power); //虛擬引腳2
Blynk.virtualWrite(3,energy / 1000); //虛擬引腳3
Blynk.virtualWrite(4,tempC); //虛擬針腳4
Blynk.virtualWrite(5,Saving); //虛擬針腳4
// delay(1000);
}
// =========================計(jì)算太陽能電池板電壓的功能================== ==================
雙return_voltage_value(int pin_no)
{
雙tmp = 0;
雙ADCVoltage = 0;
double inputVoltage = 0;
平均雙倍= 0;
對(duì)于(int i = 0; i 《100; i ++)
{
tmp = tmp + AnalogRead(pin_no);
}
平均= tmp / 100;
ADCVoltage =((平均* 3.3)/(4095))+ 0.184; // 0.184通過加熱進(jìn)行偏移調(diào)整,然后嘗試
inputVoltage = ADCVoltage * VOLTAGE_SCALE;
返回inputVoltage;
}
// =========================計(jì)算太陽能電池板電流的功能================= ==================
double return_current_value(int pin_no)
{
雙tmp = 0;
平均雙倍= 0;
雙ADCVoltage = 0;
雙安培= 0;
對(duì)于(int z = 0; z 《150; z ++)
{
tmp = tmp + AnalogRead(pin_no);
}
平均= tmp / 150;
ADCVoltage =((平均* 3331)/ 4095); //獲得mV
安培=(((ADCVoltage * CURRENT_SCALE-ACSoffset)/ mVperAmp); // 1.5是分壓器的縮放比例
返回安培;
} 《br》
步驟13:現(xiàn)場(chǎng)測(cè)試
現(xiàn)在,我們的設(shè)備已準(zhǔn)備就緒,可以進(jìn)行現(xiàn)場(chǎng)測(cè)試。連接應(yīng)如下所示:
1.將負(fù)載的負(fù)極端子連接到輸出螺絲端子的負(fù)極端子,然后將正極端子連接到輸出正極端子。在這里,我已將out端子連接到我的充電控制器太陽能輸入端子。
2.將太陽能電池板的負(fù)極端子連接到輸入螺絲端子的負(fù)極端子,將正極連接到輸入正極端子。
輸入和輸出螺釘端子可用于26-10AWG的線徑。
您可以參考上面的接線圖以獲得更好的理解。
注意:請(qǐng)確保您連接到正確的極性,否則您會(huì)看到魔煙。該電路沒有反極性保護(hù)。
完成所有連接后,您將在OLED顯示屏上看到太陽能電池板參數(shù)。您可以通過打開Blynk應(yīng)用程序從智能手機(jī)進(jìn)行檢查。
至此,我們的項(xiàng)目就設(shè)計(jì)完成了,歡迎大家動(dòng)手實(shí)踐互動(dòng)。
責(zé)任編輯:pj
-
監(jiān)控系統(tǒng)
+關(guān)注
關(guān)注
21文章
3862瀏覽量
173501 -
電流傳感器
+關(guān)注
關(guān)注
10文章
977瀏覽量
41101 -
ESP32
+關(guān)注
關(guān)注
18文章
958瀏覽量
17098
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論