본문 바로가기
생활 취미 만들기

DIY 태양 전지판 모니터링 시스템

by 굿뜨클랑 2023. 5. 20.
728x90
반응형

DIY 태양 전지판 모니터링 시스템

태양광(PV) 모니터링 시스템을 구성하는 방법에 대해 설명드리겠습니다.

재료:

ACS758 센서: 1개
ADS1115 아날로그-디지털 컨버터(ADC): 1개
Xiao ESP32 마이크로 컨트롤러: 1개
OLED 디스플레이: 1개
전압 분배기: 1개
DS18B20 온도 센서: 1개
XL7015 전압 레귤레이터: 1개
경쟁력 있는 ESS 배터리 커넥터: 1개

 

작업 단계:

Xiao ESP32 마이크로 컨트롤러 설정
Xiao ESP32 마이크로 컨트롤러와 OLED 디스플레이를 연결합니다.
ADS1115 ADC 및 DS18B20 온도 센서가 연결 될 때까지 PCB에 필요한 모든 부품을 연결합니다.
ADS1115 및 DS18B20 센서를 연결합니다.
XL7015 전압 레귤레이터를 연결합니다.
경쟁력있는 ESS 배터리 커넥터를 연결합니다.

 

소프트웨어 설정
사용자 정의 소프트웨어를 다운로드하고 시스템을 구성합니다.
코드를 수정하여 센서값 및 모니터링 문의 구현합니다.
목표 전압, 전류 값 및 패널 온도를 설정합니다.

 

시스템 테스트
시스템이 잘 작동하는지 확인하려면 테스트를 수행합니다.
위와 같은 단계를 수행하면 종합적인 태양광 PV 모니터링 시스템을 구성할 수 있습니다. 이러한 시스템은 태양광 발전 시스템의 성능을 모니터링하고 제어하는 데 필요한 정보를 고객에게 제공합니다. 또한 시스템의 역할 및 작동 방법을 파악하면 사용자 정의 센서 및 컴포넌트를 추가하여 시스템을 확장 할 수 있습니다.

 

모든 재생 에너지 애호가와 전자 애호가를 환영합니다. 지속 가능성과 방대한 잠재력을 지닌 태양광 발전은 재생 에너지의 필수 불가결한 원천입니다. 그러나 이 전력을 최적으로 활용하려면 태양광 발전(PV) 시스템의 성능을 모니터링하고 제어하는 도구가 필요합니다.

이 Instructable은 포괄적인 태양광 PV 모니터링 시스템 구축에 대한 자세한 단계별 가이드를 제공하고자 합니다. 이 시스템은 ACS758 센서, ADS1115 아날로그-디지털 컨버터(ADC), Xiao ESP32 마이크로 컨트롤러 및 OLED 디스플레이를 포함한 다양한 부품을 통합합니다. 또한 시스템의 기능을 향상시키기 위해 정확한 전압 측정을 위한 전압 분배기, 패널 온도를 모니터링하는 DS18B20 온도 센서, 안정적인 전원 공급을 유지하기 위한 XL7015 전압 레귤레이터 및 에너지 저장용 배터리 커넥터를 통합할 것입니다.

 

공급

사용되는 구성 요소:

1. 샤오 ESP32C3 ( 아마존 | 알리익스프레스 )

2. ADS1115 모듈 (아마존 | 알리익스프레스 )

3. ACS758 모듈 ( 아마존 | 알리익스프레스 )

4. XL7015 벅 컨버터 (아마존 | 알리익스프레스 )

5. OLED 디스플레이( 아마존 | 알리익스프레스 )

6 . 저항기 ( 100K , 10K , 4.7K , 2K , 1K ) ( 아마존 | 알리익스프레스 )

7. 0.1 uF 커패시터 (아마존 | 알리익스프레스 )

8. 나사 단자 2P – 9.52mm(LCSC )

9. 나사 단자 3P- 3.5mm (LCSC )

10 PCB 보드(PCBWay )

사용 된 도구 :

1. 1납땜 인두 (아마존 )

2. 니퍼 (아마존) )

3. 와이어 스트리퍼 (아마존 )

4.3D 프린터 (아마존) )

1단계: 핵심 구성 요소

ACS758 전류 센서

홀 효과 기반 선형 전류 센서인 ACS758은 감지된 전류에 비례하는 아날로그 전압 출력을 제공합니다. AC 및 DC 전류를 모두 측정할 수 있는 견고하고 정확도가 높은 구성 요소로, 태양광 PV 시스템의 전력 흐름을 모니터링하는 데 적합합니다.

ADS1115 ADC

ADS1115는 ACS16의 아날로그 전압 신호를 Xiao ESP758에서 처리할 수 있는 디지털 형식으로 변환하는 데 사용되는 정밀 32비트 ADC(아날로그-디지털 컨버터)입니다.

전압 분배기

전압 분배기 회로는 고전압을 강압하는 데 사용됩니다.tage 태양 전지판의 출력은 ADS1115에서 안전하게 측정할 수 있는 수준입니다. 두 개의 저항을 사용하여 입력 전압을 더 작은 비례 전압으로 나눕니다.

DS18B20 온도 센서

DS18B20은 넓은 온도 범위에서 고정밀 판독값을 제공하는 디지털 온도 센서이다. 태양 전지판의 효율은 온도 변화에 영향을 받을 수 있으므로 온도 모니터링은 필수적입니다.

샤오 ESP32

Xiao ESP32는 ADS1115 및 DS18B20에서 수신한 데이터를 처리한 다음 이 정보를 OLED 디스플레이에 전달하는 기능이 풍부한 소형 마이크로 컨트롤러입니다. 또한 Wi-Fi 및 Bluetooth 기능으로 인해 원격 모니터링과 같은 IoT 기능을 제공합니다.

XL7015 전압 레귤레이터

XL7015는 최대 80V의 입력 전압을 처리할 수 있는 고성능의 조정 가능한 강압 DC-DC 모듈입니다. 태양광 패널의 전압을 안전한 5V 레벨로 효율적으로 낮추어 Xiao ESP32에 전력을 공급합니다.

OLED 디스플레이

OLED(유기 발광 다이오드) 디스플레이는 처리된 데이터를 선명하고 읽기 쉬운 형식으로 표시합니다. 이 디스플레이는 고대비, 낮은 전력 소비 및 넓은 시야각을 제공합니다.

배터리 커넥터

배터리 커넥터는 또한 낮 동안 초과 에너지를 저장하고 야간이나 햇빛이 적은 시간에 보드에 전원을 공급하기 위해 시스템에 통합되어 있습니다.

2단계: 작동 원리

전류 및 전압 측정: ACS758 전류 센서는 태양 전지판에서 생성된 전류를 측정하고 전압 분배기 회로는 안전한 측정을 위해 태양 전지판 전압을 낮춥니다.

아날로그에서 디지털로 변환: ADS1115 ADC는 ACS758 및 전압 분배기의 아날로그 신호를 디지털 신호로 변환합니다.

온도 모니터링: DS18B20 온도 센서는 태양광 패널의 효율에 영향을 줄 수 있으므로 태양 전지판의 온도를 지속적으로 모니터링합니다.

데이터 처리: Xiao ESP32는 ADS1115 및 DS18B20의 디지털 데이터를 처리하여 태양광 PV 시스템의 전력 출력과 패널 온도를 결정합니다.

전력 조절: XL7015는 Xiao ESP5에 전원을 공급하기 위해 태양 전지판의 전압을 안전한 32V 레벨로 낮춥니다.

자료 전시: OLED 디스플레이는 태양광 PV 시스템의 출력 및 패널 온도에 대한 실시간 모니터링 데이터를 보여줍니다.

3단계: 회로도

4단계: 전압 측정

태양 전지판 voltage는 두 개의 저항 R1=100k 및 R2=10k로 구성된 전압 분배기 네트워크에 의해 감지됩니다. 전압 분배기의 출력은 ADC1115 핀 A0에 연결됩니다. 전압 분배기의 출력은 세라믹 커패시터 C1을 사용하여 평활화됩니다.

전압 측정 :

전압 분배기 회로의 경우

Vout = R2/(R1+R2) x Vin

빈 = (R1+R2)/R2 x Vout

ads.readADC_SingleEnded(0) 함수는 원시 아날로그 데이터를 읽습니다

계산:

Arduino의 아날로그 입력 중 하나와 analogRead() 함수를 사용하여 출력 값을 읽을 것입니다. 이 함수는 0에서 4095 사이의 값을 출력하며, 이는 각 증분에 대해 3.3/4095입니다

Vin = 원시 전압 *(R1+R2)/R2 ; R1=100k 및 R2=10k

적절한 저항 R1 및 R2를 선택하여 더 높은 전압의 태양 전지판을 사용할 수 있습니다.

전압 분배기 저항 값을 선택하려면 이 온라인 계산기를 사용할 수 있습니다.

5단계: 전류 측정

전류 측정을 위해 홀 효과 전류 센서 ACS 758 -50B를 사용했습니다. 전류 센서의 출력은 저항 R3 및 R4로 구성된 전압 분배기 네트워크에 연결됩니다. ACS758 센서에는 전류 감지 범위에 따라 다른 변형이 있습니다. ACS758 센서는 전류 값을 읽고 관련 전압 값으로 변환하며, 두 측정값을 연결하는 값은 감도입니다. 출력 감도는 ACS758-Datasheet에서 얻을 수 있습니다. 데이터 시트에 따라 감도는 40mV / A입니다

계산:

아날로그 읽기 값 = analogRead(핀);

ADC전압 = ads.readADC_SingleEnded(1);

그런 다음 ADC1115의 기본 이득((0.1875/1000))을 곱한 다음 전압 분배기 계수(R3+R4)/R3을 곱합니다

전류 단위: amp = ( ADCVoltage – 오프셋 전압 ) / 감도

데이터 시트에 따르면 오프셋 전압은 Vcc/2(2.5V)이고 감도는 40mV/A입니다.

 

6단계: 온도 측정

주변 온도를 측정하기 위해 외부 DS18B20 프로브를 사용했습니다. 이 소자는 단선 프로토콜을 사용하여 마이크로 컨트롤러와 통신합니다. 단선 장치는 보드에서 제대로 읽을 수 있도록 신호 라인에 연결된 풀업 저항이 필요합니다. 여기서는 풀업 저항으로 4.7K 저항(R5)을 사용했습니다.

3핀 나사 단자를 통해 PCB에 연결할 수 있습니다.

DS18B20 온도 센서와 인터페이스하려면 One Wire 라이브러리 Dallas Temperature 라이브러리를 설치해야 합니다. DS18B20 센서에 대한 자세한 내용은 이 문서를 참조하십시오.

연결은 다음과 같습니다.

빨간색 와이어 -> Vcc

노란색 와이어 -> DATA

블랙 와이어 -> GND

위의 모든 내용은 혼동을 피하기 위해 PCB에 명확하게 표시되어 있습니다.

7단계: OLED 디스플레이 인터페이스

태양 전지판 매개변수를 로컬로 표시하기 위해 0.96인치 OLED 디스플레이를 사용했습니다. 128 x 64 해상도를 가지며 I2C 버스를 사용하여 ESP32와 통신합니다. ESP22의 두 핀 SCL(GPIO21), SDA(GPIO32)가 통신에 사용됩니다.

매개 변수를 표시하기 위해 Adafruit_SSD1306 라이브러리를 사용하고 있습니다.

연결은 다음과 같아야 합니다.

ESP32 – ->OLED

3.3V —>VCC

GND –>GND

GPIO21—-> SDA

GPIO22 - > SCL

OLED 디스플레이 대신 I2C LCD 디스플레이를 연결할 수도 있습니다. 그러나 그에 따라 코드를 수정해야 합니다.

단계 8: PCB 설계

EasyEDA 온라인 소프트웨어를 사용하여 회로도를 그린 다음 이 프로젝트를 위한 맞춤형 PCB를 설계했습니다. PCB는 많은 구성 요소를 사용하는 대신 다양한 모듈을 장착하도록 설계되었습니다.

9단계: PCB 조립

 

납땜의 경우 적절한 납땜 인두, 납땜, 니퍼 및 멀티 미터가 필요합니다. 높이에 따라 부품을 납땜하는 것이 좋습니다. 높이가 작은 부품을 먼저 납땜하십시오.

다음 단계에 따라 구성 요소를 납땜할 수 있습니다.

1. 부품 다리를 구멍을 통해 밀어 넣고 PCB를 뒤쪽으로 돌립니다.

2. 납땜 인두의 끝을 패드의 접합부와 부품의 다리에 대십시오.

3. 땜납을 조인트에 공급하여 리드 주위로 흐르고 패드를 덮도록 합니다.

사방으로 흐르면 팁을 멀리 옮깁니다.

10단계: 소프트웨어 및 라이브러리

Arduino 라이브러리와 함께 XIAO ESP32 보드를 사용하려면 ESP32 보드를 지원하는 Arduino IDE를 사용해야 합니다. 아직 수행하지 않은 경우 Sparkfun의 이 자습서에 따라 Arduino IDE에 ESP32 보드 지원을 쉽게 설치할 수 있습니다.

라이브러리를 설치합니다.

코드를 업로드하기 전에 다음 라이브러리를 설치합니다.

1. Adafruit_ADS1X15

2. Blynk

3. Adafruit_SSD1306

4. One Wire

5. Dallas Temperature

6. Blynk Library

 

11단계: Blynk 2.0과 인터페이스

Blynk 2.0은 장치에서 센서 데이터를 모니터링하기 위한 사용자 지정 대시보드를 만들 수 있는 다목적 IoT 플랫폼입니다. 이 섹션에서는 2개의 게이지, 0개의 레이블 및 <>개의 그래프를 사용하여 Blynk <>.<>에서 웹 및 모바일 대시보드를 모두 설정하는 방법을 안내합니다.

1 단계 : Blynk 2.0 계정 설정

아직 가입하지 않았다면 먼저 새 Blynk 2.0 계정에 가입하십시오. Blynk의 웹사이트로 이동하거나 모바일 장치에서 Blynk 앱을 다운로드한 다음 새 계정을 등록하십시오.

2단계: 새 프로젝트 만들기

로그인하면 Blynk 계정 대시보드로 이동합니다. 이제 하드웨어(태양광 PV 모니터링 V2)에 이름을 지정해야 합니다. 하드웨어 유형을 ESP32로, 연결 유형을 WiFi로 선택합니다. 설명 상자에 설명을 작성할 수도 있습니다. 그런 다음 완료를 클릭합니다. 이제 템플릿이 성공적으로 생성되었습니다.

3단계: 데이터 스트림 추가

이 프로젝트에서는 전압, 전류, 전력, 에너지, 온도 및 절약을 위해 6개의 데이터 스트림을 사용했습니다. 그리고 모든 변수에 대해 V0에서 V5까지 가상 핀을 할당했습니다.

또한 측정 단위와 최소값, 최대값을 제공해야 합니다. 우리의 경우 전압은 가상 핀 V0에 할당되고 데이터 유형은 Double, 단위는 Volt, 최소값은 0, 최대값은 태양 전지판 최대 전압입니다. 원하는 특정 색상을 선택할 수도 있습니다.

4단계: 새 장치 추가

이제 여기에 새 장치를 추가해야 합니다. 이전에 만든 템플릿에서 장치를 선택합니다. 장치에 이름을 지정한 후 만들기를 클릭합니다. 이제 장치 인증 토큰(오른쪽 상단 모서리에 있는 블랙박스에 3줄)이 생성됩니다. 이 인증 토큰은 Arduino 코드에 필요하므로 저장해야 합니다.

5단계: 웹 대시보드 만들기

웹 대시보드에서 위젯 게이지 4개, 레이블 7개, 차트 <>개를 대시보드에 끌어다 놓습니다. 그런 다음 톱니바퀴 아이콘을 클릭하여 아래와 같이 매개변수를 설정합니다. 그런 다음 저장하고 <>개의 위젯을 모두 설정하기 위해 동일한 프로세스를 반복합니다.

위젯을 설정한 후 드래그 앤 드롭으로 원하는 대로 정렬할 수 있습니다. 기본 설정에 맞게 크기를 조정할 수도 있습니다.

6단계: 모바일 대시보드 만들기

모바일 대시보드를 설정하는 프로세스는 웹 대시보드와 유사합니다. 위젯을 정렬한 후 대시보드가 모바일 장치에서 어떻게 보일지 미리 볼 수 있습니다. 웹 대시보드에서 변경한 내용은 모바일 대시보드에 영향을 주지 않으며 그 반대의 경우도 마찬가지입니다. 특정 요구 사항에 맞게 각각을 사용자 지정할 수 있습니다.

7단계: 프로젝트를 디바이스에 동기화

이제 Blynk 프로젝트와 대시보드가 설정되었으므로 Xiao ESP32와 동기화할 차례입니다. 2단계에서 받은 인증 토큰을 사용하여 Arduino 코드에 포함합니다.

12단계: 아두이노 코드

#define BLYNK_TEMPLATE_ID "TMPL3V-0wJfRH"
#define BLYNK_TEMPLATE_NAME "Solar PV Energy Meter V2"
#define BLYNK_AUTH_TOKEN "YOUR AUTH TOKEN"
#define BLYNK_PRINT Serial


#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_ADS1X15.h>
#include <BlynkSimpleEsp32.h>
#include <OneWire.h>
#include <DallasTemperature.h>


// Pin definitions
const int oneWirePin = D3; // OneWire pin for DS18B20


// OLED display
Adafruit_SSD1306 display(128, 64, &Wire);


// ADS1115
Adafruit_ADS1115 ads;


// DS18B20 temperature sensor
OneWire oneWire(oneWirePin);
DallasTemperature sensors(&oneWire);


float voltage =0;
float current =0;
float power =0;
unsigned long previousMillis = 0;
float energy = 0;
float temperature =0;
float saving =0; // cost saving
const float EnergyCost = 6.5;


// Voltage divider resistor values
const float R1 = 100;  // 100K
const float R2 = 10;  // 10K
const float R3 = 1;  // 1K
const float R4 = 2; // 2K


// ACS758 zero-current output voltage ( Offset Voltage)
float OffsetVoltage = 2.5; 
// ACS758 current sensor sensitivity
const float sensitivity = 40; // in mV/A


//========================= Variables for wifi server setup =============================
const char* ssid = "XXXXXXX";
const char* password = "XXXXX";
const char* blynkAuth = BLYNK_AUTH_TOKEN;     


void setup()
{
  Serial.begin(115200);  
  // Initialize the Wi-Fi and Blynk connections
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nConnected to Wi-Fi");
  Blynk.begin(blynkAuth, ssid, password);

  // Initialize the OLED display
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.display();


  // Initialize the ADS1115
  ads.begin();


  // Initialize the DS18B20 temperature sensor
  sensors.begin();
}


void loop() {

  // Read the raw voltage values from the ADS1115
  int16_t voltageRaw = ads.readADC_SingleEnded(0);
  int16_t currentRaw = ads.readADC_SingleEnded(1);


  // Calculate the voltage values in Volts
  float voltageVolts = voltageRaw * (0.1875/1000) ; //  0.1875mV is default Gain 
  float voltage = voltageVolts * ((R1 + R2) / R2); // Calculate the actual voltage by using the voltage dividers  

  // Calculate the current values in Amps
  float currentVolts = currentRaw * ((R3 + R4) / R4)* (0.1875/1000); //  0.1875mV is default Gain 
  current =  (currentVolts - OffsetVoltage )/(sensitivity / 1000.0) ; // convert voltage into current  

  // Calculate the power output (P = V * I)
  power = voltage * current;


  // Calculate energy by integrating power over time
  unsigned long currentMillis = millis();
  energy += power * (currentMillis - previousMillis) / 3600000; // Energy in Wh
  saving = EnergyCost * ( energy /1000 );
  previousMillis = currentMillis;


  // Read the temperature from the DS18B20 sensor
  sensors.requestTemperatures();
  temperature = sensors.getTempCByIndex(0);  // temperature in Celsius
//temperature = sensors.getTempFByIndex(0); // temperature in Fahrenheit

  //Display the values on the OLED screen  
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10); 
  display.print(voltage,2);
  display.println(" V");
  display.setCursor(70, 10); 
  display.print(current,2);
  display.println(" A");
  display.setTextSize(2);
  display.setCursor(10,25);  
  display.print(power,2);
  display.println(" W");
  display.setCursor(10,45); 
  display.print(energy,2);
  display.println(" Wh");
 // display.print("T: ");
 // display.print(temperature);
 // display.println(" C");
  display.display();


  // ================= Display Data on Blynk App ================================================

  // Send the data to Blynk
  Blynk.run();
  Blynk.virtualWrite(V0, voltage);
  Blynk.virtualWrite(V1, current);
  Blynk.virtualWrite(V2, power);
  Blynk.virtualWrite(V3, energy/1000);
  Blynk.virtualWrite(V4, temperature);
  Blynk.virtualWrite(V5, saving);


 // Print the values on the Serial Monitor  
  Serial.print(" Voltage: ");
  Serial.print(voltage);
  Serial.print("V");  
  Serial.print(" Current: ");
  Serial.print(current);
  Serial.print("A");
  Serial.print(" Power: ");
  Serial.print(power);
  Serial.print("W");
  Serial.print(" Energy: ");
  Serial.print(energy,2);
  Serial.print("Wh");
  Serial.print(" Savings: ");
  Serial.print("Rs.");
  Serial.print(saving,2);  
  Serial.print(" Temp: ");
  Serial.print(temperature);
  Serial.println("C");

  delay(100);
}

13단계: 현장 테스트

이제 우리 장치는 실제 현장 테스트를 할 준비가되었습니다. 연결은 다음과 같습니다.

1. 부하의 음극 단자를 출력 나사 단자의 음극 단자에 연결한 다음 양극 단자를 출력 양극 단자에 연결합니다. 여기에 출력 단자를 인버터 태양광 입력 단자에 연결했습니다.

2. 태양 전지판의 음극 단자를 입력 나사 단자의 음극 단자에 연결하고 양극을 입력 양극 단자에 연결합니다.

입력 및 출력 나사 단자는 26 – 10AWG의 와이어 크기에 사용할 수 있습니다.

참고: 올바른 극성에 연결하고 있는지 확인하십시오., 그렇지 않으면 마법의 연기가 보입니다. 회로에는 역극성 보호 기능이 없습니다.

모든 연결이 끝나면 OLED 디스플레이에 태양 전지판 매개변수가 표시되는 것을 볼 수 있습니다. 스마트폰에서 Blynk 앱을 열어 확인할 수 있습니다.

728x90
반응형

댓글