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