diff --git a/README.md b/README.md index 3c80789..0df92c3 100644 --- a/README.md +++ b/README.md @@ -1,112 +1,92 @@ # 빛 추적 스마트 전력 제어 시스템 - - ## 1. 프로젝트 개요 -빛 추적 스마트 전력 제어 시스템은 빛 추적 태양패널로 발전 효율을 높이고 스마트 콘센트로 전력을 제어하는 IoT 기반 에너지 관리 프로젝트입니다. +본 프로젝트는 태양광 패널의 발전 효율을 향상시키고, 생성된 전력을 사용자 환경에 맞게 제어하기 위한 IoT 기반 통합 전력 관리 시스템이다. -기존 고정형 태양광 패널은 태양의 이동이나 주변 장애물에 따른 조도 변화에 대응하지 못해 발전 효율이 떨어집니다. -이를 해결하기 위해 CDS 센서 기반 태양광 추적 기능을 구현하는 한편, 효과적으로 에너지를 관리할 수 있도록 패널 관련 정보 실시간 서버 저장, 스마트 콘센트 제어, LCD 시각화 UI 기능을 포함하는 통합 에너지 관리 시스템을 구축했습니다. +일반적인 고정형 태양광 패널은 태양의 위치 변화나 주변 환경에 따른 조도 차이를 반영하지 못해 효율 저하가 발생한다. +이를 개선하기 위해 다수의 CDS 센서를 활용한 능동형 태양광 추적 구조를 설계하였고, 수집된 발전 정보를 서버에 저장하여 스마트 콘센트 제어 및 시각화까지 연계되는 시스템을 구현하였다. + +본 시스템은 STM32–Raspberry Pi–Arduino로 구성된 분산 구조를 가지며, 각 장치는 Wi-Fi 및 Bluetooth 통신을 통해 유기적으로 동작한다. -### 전체 시스템 구성 - +## 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에 실시간 정보 송신 - +### 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 상태 재수신하여 서버로 전달 - - +### 2) 서버 기반 데이터 처리 +- 문자열 기반 센서 데이터 패킷 수신 +- 패킷 파싱 후 MariaDB에 실시간 저장 +- 장치 ID 기반 메시지 라우팅 지원 ### 3) Arduino UNO — LCD UI + 스마트 콘센트 제어 -- Raspberry Pi → Bluetooth로 데이터 수신 -- LCD에 패널 방향, 전압, 콘센트 상태 출력 -- 사용자 버튼 입력으로 콘센트 ON/OFF -- 릴레이 제어 + 상태를 Raspberry Pi로 다시 송신 - +- 서버 명령에 따른 릴레이 제어 +- 사용자 입력 이벤트를 서버로 전송 +- 패널 상태와 콘센트 상태를 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 반응 속도 개선 ---