This commit is contained in:
seoamugae committed 2026-01-09 11:37:27 +09:00
1 parent 8d3510c695
commit b0b8196b11
1 file changed
+59 -79
+59 -79
View File
@@ -1,112 +1,92 @@
# 빛 추적 스마트 전력 제어 시스템
<!-- <img width="1840" height="777" alt="Image" src="https://github.com/user-attachments/assets/3232f946-62a0-4f54-866c-43c3ea1adb5a" /> -->
<!-- <img width="2308" height="685" alt="Image" src="https://github.com/user-attachments/assets/335bddba-67d5-42a7-bbe8-9c78f891ad86" /> -->
## 1. 프로젝트 개요
빛 추적 스마트 전력 제어 시스템은 빛 추적 태양패널로 발전 효율을 높이고 스마트 콘센트로 전력을 제어하는 IoT 기반 에너지 관리 프로젝트입니다.
본 프로젝트는 태양광 패널의 발전 효율을 향상시키고, 생성된 전력을 사용자 환경에 맞게 제어하기 위한 IoT 기반 통합 전력 관리 시스템이다.
기존 고정형 태양광 패널은 태양의 이동이나 주변 장애물에 따른 조도 변화에 대응하지 못해 발전 효율이 떨어집니다.
이를 해결하기 위해 CDS 센서 기반 태양광 추적 기능을 구현하는 한편, 효과적으로 에너지를 관리할 수 있도록 패널 관련 정보 실시간 서버 저장, 스마트 콘센트 제어, LCD 시각화 UI 기능을 포함하는 통합 에너지 관리 시스템을 구축했습니다.
일반적인 고정형 태양광 패널은 태양의 위치 변화나 주변 환경에 따른 조도 차이를 반영하지 못해 효율 저하가 발생한다.
이를 개선하기 위해 다수의 CDS 센서를 활용한 능동형 태양광 추적 구조를 설계하였고, 수집된 발전 정보를 서버에 저장하여 스마트 콘센트 제어 및 시각화까지 연계되는 시스템을 구현하였다.
본 시스템은 STM32–Raspberry Pi–Arduino로 구성된 분산 구조를 가지며, 각 장치는 Wi-Fi 및 Bluetooth 통신을 통해 유기적으로 동작한다.
### 전체 시스템 구성
<!-- <img width="960" height="540" alt="Image" src="https://github.com/user-attachments/assets/43fa549c-5ee2-49ef-9705-b3aec7b91486" /> -->
## 2. 시스템 구성 및 역할
- #### **STM32 Nucleo-F411RE**
- 8개의 CDS 센서 입력
- 태양광 패널 자동 회전(스텝 모터)
- 태양광 패널 전압 측정
- Wi-Fi(ESP 모듈)로 Raspberry Pi 서버에 데이터 송신
- CDS 센서 8채널 입력을 통한 조도 측정
- 조도 분포 분석 후 태양광 패널 방향 자동 조정
- 태양광 패널 출력 전압 측정
- ESP8266 기반 Wi-Fi 통신으로 서버에 데이터 전송
- #### **Raspberry Pi 5 (서버)**
- 소켓 서버(iot_server.c)
- MariaDB 데이터 저장
- Bluetooth로 Arduino와 데이터 송수신
- #### **Raspberry Pi 5**
- 다중 클라이언트 소켓 서버 운영
- 센서 데이터 수신 및 MariaDB 저장
- Bluetooth 통신을 통해 Arduino와 제어 명령 중계
- 시스템 전체 데이터 흐름 관리 허브 역할 수행
- #### **Arduino UNO**
- 패널 방향 / 전압 / 콘센트 상태 LCD 출력
- 사용자 콘센트 ON/OFF 제어(릴레이)
- Bluetooth로 명령 수신
- 서버로부터 패널 상태 및 전압 정보 수신
- LCD를 통한 실시간 상태 표시
- 사용자 입력 기반 콘센트 ON/OFF 제어
- 릴레이 제어 결과를 서버로 피드백
### 🔗 통신 구조
- STM32 ↔ **Wi-Fi** ↔ Raspberry Pi
- Arduino ↔ **Bluetooth** ↔ Raspberry Pi
## 3. 통신 구조
- STM32 ↔ Raspberry Pi : Wi-Fi
- Arduino ↔ Raspberry Pi : Bluetooth
중앙 서버인 Raspberry Pi가 모든 데이터를 중계·관리하는 허브 구조로 설계되었다.
---
## 2. 주요 기능
## 4. 주요 기능
### 1) STM32 — 태양광 패널 자동 추적 및 센서 데이터 송신
- 8개 CDS 센서로 빛의 강도 측정
- 가장 밝은 방향으로 패널 자동 회전
- 태양광 패널 전압 측정
- Wi-Fi(ESP 모듈)로 Raspberry Pi에 실시간 정보 송신
<!-- <img width="960" height="540" alt="Image" src="https://github.com/user-attachments/assets/78693961-5826-4d20-9175-7829c63f153f" /> -->
### 1) 태양광 자동 추적
- CDS 센서 간 조도 비교를 통해 최대 광량 방향 계산
- 스텝 모터를 이용한 패널 회전 제어
- 실시간 환경 변화에 따른 패널 각도 갱신
### 2) Raspberry Pi 5 — IoT 서버 + 데이터베이스 저장
- **iot_server.c**
- 멀티 클라이언트 소켓 연결
- ID/PW 기반 인증 처리
- 메시지 라우팅 (ALLMSG, 특정 ID 전송)
- **sql_client.c**
- “[LT_STM_SQL]SENSOR@…” 패킷 파싱
- MariaDB(sensor 테이블)에 실시간 INSERT
- **bt_client.c**
- Bluetooth HC-06 모듈 사용
- Arduino에 명령 전달
- Arduino 상태 재수신하여 서버로 전달
<!-- <img width="960" height="540" alt="Image" src="https://github.com/user-attachments/assets/df6e9a35-0a65-4247-82fc-e0819f64ae56" /> -->
<!-- <img width="960" height="540" alt="Image" src="https://github.com/user-attachments/assets/64098ebe-fb36-40ef-9fb6-705e0fad388c" /> -->
### 2) 서버 기반 데이터 처리
- 문자열 기반 센서 데이터 패킷 수신
- 패킷 파싱 후 MariaDB에 실시간 저장
- 장치 ID 기반 메시지 라우팅 지원
### 3) Arduino UNO — LCD UI + 스마트 콘센트 제어
- Raspberry Pi → Bluetooth로 데이터 수신
- LCD에 패널 방향, 전압, 콘센트 상태 출력
- 사용자 버튼 입력으로 콘센트 ON/OFF
- 릴레이 제어 + 상태를 Raspberry Pi로 다시 송신
<!-- <img width="960" height="540" alt="Image" src="https://github.com/user-attachments/assets/0c44df98-3c01-47f0-9a35-7bc1c6404dd3" /> -->
- 서버 명령에 따른 릴레이 제어
- 사용자 입력 이벤트를 서버로 전송
- 패널 상태와 콘센트 상태를 LCD로 동시 출력
---
## 3. 담당 역할
## 5. 담당 역할
### Raspberry Pi **IoT 서버 설계 및 구현 (iot_server 계열)**
### **IoT 서버 설계 및 구현**
#### ① STM32 ↔ ESP8266 Wi-Fi 통신 모듈 연동 개발
- STM32와 ESP8266 간 UART 통신 제어
- 서버(Raspberry Pi)와 실시간 센서 데이터 송신 구조 구현
- AT Command 기반 Wi-Fi 설정
#### ① IoT 소켓 서버 설계 및 구현
- 다중 클라이언트 접속을 고려한 TCP 서버 구현
- ID/PW 기반 클라이언트 인증 처리
- 장치별 메시지 분기 및 브로드캐스트 기능 구현
#### ② 센서 데이터 패킷 설계 및 송신 로직 구현
- CDS 센서 값 / 태양광 패널 전압 데이터 패킷 포맷 정의
- 서버 수신을 고려한 문자열 기반 패킷 구성
- 데이터 손실 방지를 위한 송신 타이밍 및 포맷 안정화
#### ③ 서버 연동 테스트 및 통신 검증
- Raspberry Pi 소켓 서버와 ESP8266 TCP 통신 테스트
- 패킷 수신/DB 저장 여부 검증
#### ② STM32 데이터 수신 및 DB 연동
- 센서/전압 데이터 패킷 포맷 정의
- 수신 문자열 파싱 로직 구현
- MariaDB 연동 및 실시간 INSERT 처리
---
## 4. 트러블슈팅
### 1) **데이터 송신 중 스텝 모터 끊김 현상**
- 원인: Wi-Fi 송신(ESP) 루틴이 블로킹으로 동작
- 해결: **TIM4 기반 논블로킹(non-blocking)방식 스텝 모터 제어 구조 구현**
- 결과: 모터 회전 안정성 확보
## 6. 트러블슈팅
### 1) **Wi-Fi 통신 중 모터 제어 불안정**
- 문제: 통신 루틴이 블로킹 방식으로 동작하며 모터 회전이 끊김
- 해결: 타이머 인터럽트 기반 비동기 모터 제어 구조로 변경
- 결과: 통신과 구동이 독립적으로 동작하며 안정성 확보
### 2) **스텝 모터 회전 시 전압 강하 → CDS 값 일시적 하락**
- 원인: 모터 구동 시 순간적인 전류 피크 → ADC 레일 변동
- 해결: **모터 전원과 MCU/센서 전원을 완전 분리**
- 결과: CDS 값 일시적 하락 현상 해결
### 2) **모터 구동 시 센서 값 왜곡**
- 문제: 모터 동작 시 전류 피크로 ADC 기준 전압 변동 발생
- 해결: 모터 전원과 MCU/센서 전원을 분리
- 결과: CDS 센서 값의 순간 하락 현상 제거
### 3) **LCD 잔상(ghosting) 발생**
- 원인: 문자열 길이 변화로 이전 텍스트 일부가 남음
- 해결:
- `lcd.clear()` 반복 호출 지양
- partial update 구조 도입 (변경된 라인만 업데이트)
- 공백 패딩으로 잔상 제거
- 결과: LCD 화면이 깨끗하게 유지되고 출력 속도 향상
### 3) **LCD 잔상 문제**
- 문제: 출력 문자열 길이 변화로 이전 데이터 일부 잔존
- 해결: 전체 clear 방식 제거
- 결과: 출력 품질 및 LCD 반응 속도 개선
---