산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

이중축 태양광 추적기: 자동/수동 모드 전환 가능한 고효율 선트래킹 시스템

부품 및 소모품

부품수량비고
아두이노 우노1메인 컨트롤러
MG996R 서보 모터2수평/수직 축 구동 (고토크 메탈 기어 권장)
포토레지스터 (CdS)4좌상, 우상, 좌하, 우하 4방향 조도 감지
로터리 포텐셔미터2수동 모드 시 수평/수직 각도 직접 제어용
택트 스위치 12mm1자동/수동 모드 전환 버튼
LED (적색, 청색)각 1수동/자동 모드 표시용
10kΩ 저항5포토레지스터 분압용 4개 + 버튼 풀업 1개
221Ω 저항2LED 전류 제한용

필요 도구

소프트웨어

프로젝트 개요

초등학생 메이커 클럽(Young Hackers, 2017-2018) 프로젝트로, 5V 소형 태양광 패널을 이축(수평/수직)으로 회전시켜 최대 일사량을 추적하는 시스템입니다. OpenSourceClassroom의 설계를 기반으로 하되, 자동 모드(4개 조도 센서 기반)와 수동 모드(포텐셔미터 2개 직접 제어)를 버튼 하나로 전환하도록 확장했습니다. 학생들이 분업(납땜, 절연, 나사 조립 등)해 제작 라인 방식으로 완성했습니다.

동작 원리

모드 전환

자동 추적 알고리즘

  1. 좌/우 평균 조도 계산: `LeftLight = (TL + BL)/2`, `RightLight = (TR + BR)/2`
  2. 상/하 평균 조도 계산: `TopLight = (TL + TR)/2`, `BottomLight = (BL + BR)/2`
  3. 편차 임계값 4% 이상일 때만 서보 1°씩 이동 (진동 방지)
  4. 좌측이 밝으면 좌측으로(서보 각도 증가), 우측이 밝으면 우측으로(각도 감소)
  5. 상단이 밝으면 상단으로(서보 각도 감소), 하단이 밝으면 하단으로(각도 증가)
  6. 서보 한계(0°/180°) 체크 후 이동

코드 (완전판)

#include <Servo.h>

int mode = 0;           // 0: 수동, 1: 자동
int buttonState = 0;
int prevButtonState = 0;

// 조도 센서 원시값
int topLeftLight, topRightLight, bottomLeftLight, bottomRightLight;
// 정규화된 조도 (0~100)
int LeftLight, RightLight, TopLight, BottomLight;

Servo servo_9;  // 수평 (핀 9)
Servo servo_10; // 수직 (핀 10)

void setup() {
  pinMode(7, INPUT);       // 모드 버튼
  pinMode(12, OUTPUT);     // 적색 LED (수동)
  pinMode(11, OUTPUT);     // 청색 LED (자동)
  pinMode(A0, INPUT);      // 포텐셔미터 좌우
  pinMode(A1, INPUT);      // 포텐셔미터 상하
  pinMode(A2, INPUT);      // 포토레지스터 좌상
  pinMode(A3, INPUT);      // 포토레지스터 우상
  pinMode(A4, INPUT);      // 포토레지스터 좌하
  pinMode(A5, INPUT);      // 포토레지스터 우하
  
  servo_9.attach(9);
  servo_10.attach(10);
}

void loop() {
  // 모드 버튼 디바운스 & 토글
  buttonState = digitalRead(7);
  if (buttonState != prevButtonState) {
    if (buttonState == HIGH) {
      if (mode == 1) {
        mode = 0;
        digitalWrite(12, HIGH);  // 적색 ON
        digitalWrite(11, LOW);   // 청색 OFF
      } else {
        mode = 1;
        digitalWrite(11, HIGH);  // 청색 ON
        digitalWrite(12, LOW);   // 적색 OFF
      }
    }
  }
  prevButtonState = buttonState;
  delay(50);

  if (mode == 0) {
    // 수동 모드: 포텐셔미터 직접 매핑
    servo_9.write(map(analogRead(A0), 0, 1023, 0, 180));
    servo_10.write(map(analogRead(A1), 0, 1023, 0, 180));
  } else {
    // 자동 모드: 센서별 개별 보정 후 정규화
    topLeftLight     = map(analogRead(A2), 50, 980, 0, 100);
    topRightLight    = map(analogRead(A3), 200, 990, 0, 100);
    bottomLeftLight  = map(analogRead(A4), 170, 970, 0, 100);
    bottomRightLight = map(analogRead(A5), 250, 1000, 0, 100);
    
    // 평균 조도 계산
    TopLight    = (topRightLight + topLeftLight) / 2;
    BottomLight = (bottomRightLight + bottomLeftLight) / 2;
    LeftLight   = (topLeftLight + bottomLeftLight) / 2;
    RightLight  = (topRightLight + bottomRightLight) / 2;
    
    // 수평 축 제어
    if (abs(RightLight - LeftLight) > 4) {
      if (RightLight < LeftLight) {  // 좌측이 밝음
        if (servo_9.read() < 180) servo_9.write(servo_9.read() + 1);
      } else {  // 우측이 밝음
        if (servo_9.read() > 0) servo_9.write(servo_9.read() - 1);
      }
    }
    
    // 수직 축 제어
    if (abs(TopLight - BottomLight) > 4) {
      if (TopLight < BottomLight) {  // 하단이 밝음
        if (servo_10.read() < 180) servo_10.write(servo_10.read() - 1);
      } else {  // 상단이 밝음
        if (servo_10.read() > 0) servo_10.write(servo_10.read() + 1);
      }
    }
  }
}

회로도

제공된 배선도 이미지 참조. 주요 포인트: 포토레지스터 4개는 각각 10kΩ 풀다운 저항과 분압 구성, 서보 전원은 아두이노 5V에서 공급(소형 패널용), 대형 패널 시 외부 전원 필수.

제작 포인트 & 교육적 가치

확장 아이디어

제조공정

  1. DHT11 온습도 센서 + LED 표시등 + 피에조 부저 프로젝트
  2. 아두이노로 간단한 장애물 센서 만들기 - IR LED & 포토다이오드 튜토리얼
  3. 솔라 트래커 V2.0: 고급 DIY 태양광 패널 추적 시스템
  4. IoT 기반 듀얼 축 태양광 추적기: 아두이노로 구현하는 스마트 에너지 관리
  5. 아두이노 우노와 1Sheeld로 만드는 4x4x4 LED 큐브 – 인터랙티브 LED 프로젝트
  6. 아두이노 고속 RPM 카운터 – 레이저 + IR 센서 싱글샷 알고리즘으로 40ms 초고속 측정
  7. 구리 도금 프로젝트: 아두이노 우노로 만드는 스마트 전기분해 시스템
  8. 아두이노 우노와 이더넷 실드로 정확한 태양광 복사량 측정하기
  9. 정밀 서보 구동 태양 추적 플랫폼 - 최적 에너지 수확을 위한 이축 트래커
  10. 태양광 패널 품질: 최적 성능을 위한 필수 관리 포인트