DIY太阳能电池板监测系统- V1.0

1777年

24

4

DIY太阳能板监控系统- V1.0

关于:我是一个DIY爱好者的激情和动力工程师的专业。我的大部分作品都与Solar Energy和Arduino有关。除了电子产品,我喜欢3D打印,木工和用旧的东西做工艺品…

几个月前,我安装了一个小型离网太阳能系统。我总是很好奇,想看看我的太阳能光伏系统的性能,好消息是,我使用的充电控制器有自己的本地显示器监测。但是,我非常想念远程监控设施。所以,我决定制作自己的监控系统,必须同时具备本地和远程监控设施。

为什么我们需要监控?

1.它提供了有关各种太阳能参数,提取的能量,故障检测,太阳能植物的历史分析以及相关能量损失的清晰信息。

2.您可以很容易地测量您的太阳能生产和节省每月电费账单。

3.您可以通过智能手机实时跟踪太阳能光伏系统的所有重要参数。

在本教程中,我将向您展示我已经通过使用ESP32开发板和ACS723电流传感器制作了一个简单的太阳能监测系统。

规格:

1.输入电压- 0- 24V(可扩展至50V)

2.输入电流:0 -15A

3.太阳能电池板额定值- 250W (12V) / 500W (24V)

完整的视频教程:

补给品:

组件使用:

1.ESP32板- 30引脚(伯格多德/阿里巴巴全球速卖通)

2.ACS723传感器(LCSC)

3.OLED显示器(亚马逊/伯格多德)

4.电阻(亚马逊/伯格多德)

5.陶瓷电容器(亚马逊/伯格多德)

6.降压转换器模块(亚马逊)

7.温度传感器(Amazon / .伯格多德)

8.螺丝端子3P- 3.5mm间距(LCSC)

9.螺丝端子2P - 9.52mm间距(LCSC)

10.头针(亚马逊/伯格多德)

11.跳线M-F (亚马逊)

12. PCB.

13.焊剂(伯格多德)

14.焊剂(伯格多德)

工具使用:

1.烙铁(亚马逊/伯格多德)

2.尼珀(亚马逊/伯格多德)

3.剥线器(亚马逊/伯格多德)

4.3 d打印机(亚马逊/伯格多德)

1 .如何使用?

太阳能电池板的电压和电流分别由电压传感器和电流传感器检测。这里使用分压器网络来测量太阳能电池板电压,使用AC723霍尔效应电流传感器来测量太阳能电池板电流。同样,环境温度由DS18B20温度传感器感知。

来自所有传感器的原始传感器数据由ESP32板处理,并做所有必要的数学计算,以计算功率,能量。处理后的数据然后发送到一个OLED显示器用于本地监控,也可以发送到云用于远程监控。远程监控是通过安装在智能手机上的Blynk应用完成的。

步骤2:测量电压

太阳能电池板的电压由两个电阻R1=47k和R2=6.8k组成的分压器网络感知。r1和R2的输出连接到ESP32模拟引脚GPIO引脚34。分压器的输出采用陶瓷电容C1进行平滑处理。

电压测量:

ESP32的模拟输入可以用来测量0到3.3V之间的直流电压。我所考虑的太阳能电池板可以产生24V(开路电压)。要读取这个电压,我们必须阶跃电压,这可以通过使用分压器网络来实现。

用于分压电路

Vout = R2/(R1+R2) x Vin

Vin = (R1+R2)/R2 x Vout

函数的作用是读取电压并将其转换为0到4095之间的数字

校准:

我们将使用Arduino的一个模拟输入和它的analogRead()函数读取输出值。该函数输出0到4095之间的值,即每增加一次就输出3.3/4095

Vin = Vout*(R1+R2)/R2;R1 = 47 k和R2 = 6.8 k

Vin= ADC计数*(3.3/4095)*((47+6.8)/ 6.8)伏

选择合适的电阻R1和R2,可以使用电压更高的太阳能电池板。

要选择分压器电阻值,可以在线使用计算器

步骤三:测量电流

对于电流测量,我使用了一个霍尔效应电流传感器ACS 723 -20AUvariant。ACS723传感器的其他变种基于其电流传感的范围。ACS712传感器读取电流值并将其转换为相应的电压值,连接两个测量值的值是灵敏度。输出灵敏度可以从数据表中获得。根据数据表,灵敏度为200mV / A

校准:

模拟读取值= analogRead(引脚);

ADCVoltage =(3.3/4095)*模拟读取值

安培中的电流= (ADCVoltage - Offset Voltage) /灵敏度

根据数据表,偏置电压为0.1 * Vcc (0.5V),灵敏度为200mV/A

注意:ACS723的输出由R4和R5组成的分压网络降压。

第四步:测量温度

我使用外部DS18B20探头来测量环境温度。它采用单线协议与单片机通信。单线设备需要一个上拉电阻连接到它们的信号线,以便您的板正确读取。在这里,我使用了一个4.7K电阻(R6)作为上拉电阻。

它可以通过3引脚螺丝端子连接到PCB上。

要与DS18B20温度传感器接口,您需要安装一线库达拉斯温度图书馆。你可以阅读这篇文章有关DS18B20传感器的详细信息。

连接方式如下:

红线-> Vcc

黄线->数据

黑线-> GND

为了避免混淆,以上所有内容在PCB上都有清楚的标示。

第五步:连接OLED显示屏

为了在本地显示太阳能电池板参数,我使用了0.96”OLED显示屏。它有128 x 64的分辨率,并使用I2C总线与ESP32通信。采用ESP32的两个引脚SCL (GPIO22)和SDA (GPIO21)进行通信。

我用的是Adafruit_SSD1306图书馆显示参数。首先,您必须下载adafruit_ssd1306。然后安装它。

连接方式如下:

ESP32 -->OLED

3.3 v - > VCC

接地——>接地

GPIO21——> SDA

GPIO22——> sci

步骤6:PCB设计

我用工具画出了原理图EasyEDA在线软件,然后为该项目设计了定制PCB。PCB是为安装不同的模块而设计的,而不是使用大量的组件。我已经从那里订购了我的PCBJLCPCB并在7天内收到。

您可以下载下面附加的Gerber文件。

步骤7:PCB组装

对于焊接,你将需要一个像样的烙铁,焊锡,钳,和万用表。根据组件的高度来焊接是一种很好的做法。先焊低高度部件。

您可以按照以下步骤来焊接组件:

1.推动组件腿通过他们的孔,并翻转PCB的背面。

2.将烙铁的尖端固定在焊盘和元件腿的连接处。

3.将焊料注入连接处,使其流经铅的周围并覆盖焊盘。

一旦它四处流动,把顶端移开。

步骤8:焊接ACS723

在整个PCB中,较小的高度组件是电流传感器ACS723,这是本项目中唯一使用的SMT组件。

首先,在所有8个焊盘上涂上助焊剂,然后在角盘上涂少量焊锡。使用镊子放置并对齐二极管芯片。当用烙铁的尖端接触焊盘时,将芯片固定在适当的位置,以便焊料将引脚和焊盘熔化在一起。

确保PCB和ACS723 IC上的点符号是匹配的。点符号表示引脚编号为-1。

现在应用焊锡到所有的垫,你完成。如果你在焊接过程中搞砸了,你可以用拆焊芯除去多余的焊锡。

你可以阅读本教程如果您是使用烙铁焊接SMD组件的新手。

步骤9:3D打印附件

为了提供良好的商业产品外观,我已经使用Autodesk Fusion 360设计了该项目的机箱。所有组件和PCB安装孔的尺寸由Vernier Caliper测量,然后在设计期间考虑相同的尺寸。

机箱由两部分组成。主体2。上盖

主体基本上设计用于保持PCB板。顶部盖子是覆盖主体打开并安装OLED显示屏。

我用我Creality CR-10打印机和1.75毫米绿色PLA灯丝打印零件。打印主体花了我6个小时,打印顶盖花了我2个小时。
我的设置:

打印速度:60mm /s

层高:0.2mm(0.3也可以)

填充密度:20%

挤出机温度:200℃

床温:60℃

下载STL文件Thingiverse

步骤10:组装3D打印附件

PCB可以安装在3D打印机箱中的4个支座上。您可以使用4 X M3螺钉直接固定PCB,或者您可以安装螺纹热插入件以进行更可靠性。在这里,我在每个支架上使用了热插入物。

将PCB安装到主体上后,我们可以移动安装OLED显示屏。OLED显示屏可以用热熔胶或强力胶带安装在顶盖背面。

将跳线从OLED显示屏连接到PCB OLED端口。PCB上的头引脚有清楚的标记。

将温度传感器电缆插入机柜右侧给出的孔中。然后将电线连接到螺钉端子。

现在用4 × M3的螺钉关闭顶部盖子。

为了使机箱更有吸引力,我粘贴了顶部盖子上的令人助长的贴纸。

步骤11:软件和库

要使用带有Arduino库的ESP32板,您必须使用带有ESP32板支持的Arduino IDE。如果你还没有这样做,你可以很容易地安装ESP32板支持您的Arduino IDE通过以下教程Sparkfun

安装库:

在上传代码之前,请安装以下库:

1.ESP32

2.Blynk

3.Adafruit_SSD1306

4.一个线

5.达拉斯的温度

如何安装库?

您可以通过以下方法阅读本教程Sparkfun安装Arduino库。

步骤12:使用Blynk App界面

Blynk是最流行的物联网平台,用于将任何硬件连接到云,设计应用程序来控制它们,并大规模管理已部署的产品。Blynk Library可以连接超过400个硬件模型,包括ESP8266, ESP32, NodeMCU和Arduino到Blynk Cloud。

步骤1:

下载Blynk应用程序

1.为安卓

2.为iPhone

步骤2:

为了连接Blynk App和你的硬件,你需要一个Auth Token。

1.在Blynk应用中创建一个新帐户。

2.按下顶部菜单栏上的QR图标。通过扫描上面的QR码创建这个项目的克隆。一旦检测成功,整个项目将立即在您的手机上。我已经做了太阳气象站的应用程序。欢迎您试用!

要开始使用它:

1.下载Blynk应用程序:http://j.mp/blynk_Android或者http://j.mp/blynk_Android

2.触摸QR-code图标,并将相机指向下面的代码,享受我的应用程序!

3.项目创建后,我们将通过电子邮件向您发送Auth Token。

4.检查您的电子邮件收件箱,并找到认证令牌。

步骤3:

准备Arduino IDE为Wemos board上传Arduino代码到Wemos board,你必须遵循这个Instructables

步骤4:

安装上述库后,粘贴下面给出的Arduino代码。
输入步骤1中的认证码、ssid和路由器的密码。

然后上传代码。

// ====================================================================================== // // // //太阳能电池板能量监控V1.0固件// // // // //由Debasish Dutta开发,最后更新:06.05.2021 // // // // ====================================================================================== // #include  #include  #include  #include  #include“wire.h“#include  #define blynk_print序列#include  #define screen_width 128 // OLED显示宽度,以像素#define screen_height 64 // OLED显示高度,在像素#define input_voltage_sense_pin 34#define input_current_sense_pin 35 #define temp_sense_pin 4 #define电压_cale 7.911 // r1 + r2 / r2 //(47k + 6.8k)/ 6.8k #define current_scale 1.5 // r4 + r5 / r5 //(1k + 2k)/ 2k双重mvperamp = 200;//传感器的SensityVit //使用100对于20A模块和66,适用于30A模块Double ACSOFFSET = 514;//理想情况下,它应该是(0.1 x VCC)//测量值为514mV unsigned long last_time = 0;unsigned long clust_time = 0; float power =0 ; // Power in Watt float energy =0 ; // Emergy in Watt-Hour float tempC=0; // temperaure in Celcius //float tempF = 0; temperature in F float saving=0; // cost saving WiFiClient client; // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // GPIO where the DS18B20 is connected to const int oneWireBus = 2; // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(TEMP_SENSE_PIN); DallasTemperature sensors(&oneWire); //========================= Variables for wifi server setup ============================= // Your WiFi credentials. // Set password to "" for open networks. char ssid[] = "XXXX"; // WiFi Router ssid char pass[] = "XXXX"; // WiFi Router password // copy it from the mail received from Blynk char auth[] = "XXXX"; //========================= Setup Function ================================================ void setup() { Serial.begin(115200); Blynk.begin(auth, ssid, pass); sensors.begin(); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for (;;); } display.clearDisplay(); display.setTextColor(WHITE); display.display(); delay(500); } //========================= Loop Function ================================================ void loop() { // read voltage and current float voltage = abs( return_voltage_value(INPUT_VOLTAGE_SENSE_PIN)) ; float current = abs( return_current_value(INPUT_CURRENT_SENSE_PIN)) ; // read temperature from DS18B20 sensors.requestTemperatures(); // get temperatures tempC = sensors.getTempCByIndex(0); //tempF = sensors.getTempFByIndex(0); // Calculate power and energy power = current * voltage ; // calculate power in Watt last_time = current_time; current_time = millis(); energy = energy + power *(( current_time -last_time) /3600000.0) ; // calculate power in Watt-Hour // 1 Hour = 60mins x 60 Secs x 1000 Milli Secs saving = 6.5 * ( energy /1000 ); // 6.5 is cost per kWh // used just for example // ================= Display Data on Serial Monitor ================================================ /* Serial.print("Voltage: "); Serial.println(voltage); Serial.print("Current: "); Serial.println(current); Serial.print("Power: "); Serial.println(power); Serial.print("Energy: "); Serial.println(energy); Serial.print("Temp: "); Serial.println(tempC); Serial.println(voltage); delay(1000); */ // ================= Display Data on OLED Display ================================================ // Display Solar Panel Voltage display.setTextSize(1); display.clearDisplay(); display.setCursor(10, 10); display.print(voltage,1); display.print(" V"); // Display Solar Panel Current display.setCursor(70, 10); if (current >0 && current < 1 ) { display.print(current*1000,0); display.print(" mA"); } else { display.print(current,2); display.print(" A"); } // Display Solar Panel Power in Watt display.setTextSize(2); display.setCursor(10,25); display.print(power); display.print(" W"); // Display Energy Generated by the Solar Panel display.setCursor(10,45); if ( energy >= 1000 ) { display.print(energy/1000,3); display.print(" kWh"); } else { display.print(energy,1); display.print(" Wh"); } display.display(); display.clearDisplay(); // ================= Display Data on Blynk App ================================================ Blynk.run(); Blynk.virtualWrite(0, voltage ); // virtual pin 0 Blynk.virtualWrite(1, current ); // virtual pin 1 Blynk.virtualWrite(2, power); // virtual pin 2 Blynk.virtualWrite(3,energy/1000);// virtual pin 3 Blynk.virtualWrite(4,tempC ); // virtual pin 4 Blynk.virtualWrite(5,saving); // virtual pin 4 //delay(1000); } //========================= Function to Calculate Solar Panel Voltage =================================== double return_voltage_value(int pin_no) { double tmp = 0; double ADCVoltage = 0; double inputVoltage = 0; double avg = 0; for (int i = 0; i < 100; i++) { tmp = tmp + analogRead(pin_no); } avg = tmp / 100; ADCVoltage = ((avg * 3.3) / (4095)) + 0.184 ; // 0.184 is offset adjust by heat and try inputVoltage = ADCVoltage * VOLTAGE_SCALE; return inputVoltage; } //========================= Function to Calculate Solar Panel Current =================================== double return_current_value(int pin_no) { double tmp = 0; double avg = 0; double ADCVoltage = 0; double Amps = 0; for (int z = 0; z < 150; z++) { tmp = tmp + analogRead(pin_no); } avg = tmp / 150; ADCVoltage = ((avg*3331) / 4095); // Gets you mV Amps = ((ADCVoltage * CURRENT_SCALE - ACSoffset ) / mVperAmp); // 1.5 is the scaling for voltage divider return Amps; }

步骤13:现场测试

现在我们的设备可以进行实地测试了。连接方式如下:

1.将负载的负极连接到输出螺钉端子的负极,再将负载的正极连接到输出正极。在这里,我已经连接出终端到我的充电控制器太阳能输入终端。

2.太阳能板负极与输入螺钉端子负极连接,正极与输入正极连接。

输入和输出螺钉端子可以用于26 - 10AWG线尺寸。

您可以参考上面的接线图来更好地理解。

注意:确保你连接的是正确的极性,否则你会看到魔法烟雾。电路没有反极性保护。

所有连接后,您将看到您的太阳能电池板参数显示在OLED显示屏上。你可以在智能手机上打开Blynk App来查看。

未来的目标:MQTT和Home Assistant的实现

感谢您阅读我的《教学指南》。
如果你喜欢我的项目,不要忘记分享它。欢迎评论和反馈。

做第一个分享的人

    建议

    • 时钟速度的挑战

      时钟速度的挑战
    • 玩具游戏大赛

      玩具游戏大赛
    • 大vs小的挑战

      大vs小的挑战

    4评论

    0
    bldrkamal

    1天前

    不错的工作。