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

Arduino Solar Tracker

구성품 및 소모품

Arduino UNO
× 1
SG90 마이크로 서보 모터
× 2
LDR, 5Mohm
× 4
저항 330옴
× 4
회전 전위차계(일반)
× 1
푸시버튼 스위치, 푸시버튼
× 2
미니 태양광 패널
× 1

필요한 도구 및 기계

Arduino IDE
시차 PLX-DAQ

이 프로젝트 정보

이 프로젝트는 태양열 추적기를 위한 개방형 하드웨어/소프트웨어 테스트 벤치를 제공합니다. 제안된 프로토타입은 사용하기 쉬운 하드웨어 및 소프트웨어를 기반으로 하는 오픈 소스 프로토타이핑 플랫폼인 Arduino Uno로 제어되는 2축 태양광 추적기를 기반으로 합니다. 태양광 추적기는 LDR(LightDependent Resistor) 센서를 사용하여 자동으로 제어하거나 전위차계를 사용하여 수동으로 제어할 수 있습니다. 또한 이 테스트 벤치는 태양열 추적기 데이터를 기록하고 표시할 수 있는 Excel 기반 가상 계측을 제공합니다. 사용된 하드웨어는 저렴하고 컴팩트하며 다용도로 선택되었습니다. 제안된 테스트 벤치는 학생들이 제어 이론 및 응용 프로그램에 대한 이해를 개발할 수 있도록 설계되었습니다.

제안된 테스트 벤치는 그림 1에 나와 있습니다. 이것은 4개의 LDR 센서와 2개의 서보 모터(SM1 및 SM2)의 도움으로 태양을 추적하기 위해 자동으로 회전하거나 전위차계를 사용하여 수동으로 회전할 수 있는 태양 추적기를 기반으로 합니다. 두 가지 모드(자동 및 수동) 사이를 전환하려면 푸시 버튼이 사용됩니다. 또 다른 푸시 버튼은 SM1(상하 서보 모터) 또는 SM2(좌우 서보 모터)를 전위차계에 연결하여 움직임을 제어하는 ​​데 사용됩니다. 또한 시간에 따른 PV 패널의 모드와 전류, 전압 및 전력을 MS Excel로 시각화하기 위해 컴퓨터를 가상 계기로 사용하였다. Arduino Uno 보드는 시스템의 모든 소프트웨어 요구 사항을 구현하는 데 활용됩니다.

기계 설계

그림 2와 같이 태양광 추적기의 CAD(Computer-Aided Design) 3D 모델은 CATIA로 설계되었습니다. PV 패널, 좌우 상하 서보모터, 4개의 LDR 센서로 구성되어 있습니다. 수평축의 경우 베어링을 상하 서보모터와 평행하게 고정하여 유연성을 높였습니다. 태양 추적기는 좌우 서보 모터에 의해 동쪽에서 서쪽으로, 상하 서보 모터에 의해 남쪽에서 북쪽으로 2개의 자유도를 갖도록 설계되었습니다. LDR 센서는 PV 패널의 네 모서리에 배치되고 태양 조명을 감지하기 위해 상단에 작은 구멍이 있는 어두운 튜브에 배치됩니다. 이 어두운 튜브는 또한 복사 집중 장치로 간주되며 태양 추적기의 견고성을 높이는 데 사용됩니다.

하드웨어 시스템

그림 3은 제안한 테스트벤치의 전자회로를 나타낸다. 자동 모드의 경우 마이크로컨트롤러는 LDR 센서(핀 A0 ~ A3)의 아날로그 값을 디지털로 변환합니다. 그런 다음 두 개의 PWM(펄스 폭 변조) 신호(핀 5 및 6)를 사용하여 두 개의 서보 모터(위-아래 및 왼쪽-오른쪽)를 제어하여 태양을 추적합니다. 회전 운동은 2개의 축에서 발생하는데, 매일 태양의 경로에 따라 동쪽에서 서쪽으로 방위각으로 그리고 계절 태양의 경로에 따라 남쪽에서 북쪽으로 고도에서 발생합니다. 수동 모드의 경우 전위차계(핀 A4)는 두 서보 모터의 움직임을 제어하는 ​​데 사용되며 푸시 버튼(핀 11)은 전위차계를 상하 서보 모터 또는 좌우 서보 모터에 연결하기 위해 배치됩니다. 게다가 또 다른 푸시버튼(핀 12)은 두 모드 사이를 전환하는 데 사용됩니다. 또한 아두이노의 아날로그 핀 A5를 통해 PV 전압을 측정하고 부하의 저항을 이미 알고 있기 때문에 PV 전류를 계산한다. 다음으로 PV 전류, 전압, 전력 대 시간 및 실제 모드가 컴퓨터로 전송되어 MS Excel에서 실시간으로 표시됩니다.

LDR 센서 회로는 전압 분배기 회로로 설계되었습니다. 광도의 변화는 분배기 출력 전압의 변화에 ​​비례합니다. 전위 분배기의 상단은 5V이고 접지는 0V이며 전압 분배기의 출력은 아날로그 입력(A 예를 들어 0) 마이크로 컨트롤러. 이후 마이크로컨트롤러의 ADC(Analog to Digital Converter)는 A에서 읽은 아날로그 값을 변환합니다. ADC가 10비트로 코딩되어 있기 때문에 0을 0에서 1023 사이의 디지털 값으로 변환하고 이 값에 따라 빛의 정도를 알 수 있다. 분압기에 사용되는 저항값은 330Ω입니다.

2개의 180도 서보 모터가 사용됩니다. 좌우 서보모터인 수직축에 따라 솔라트래커를 제어하는 ​​서보모터(MG996R). 그리고 태양광 트래커를 수평축에 따라 제어하는 ​​마이크로 서보모터(SG90)인 업다운 서보모터를 포함한다. 서보 모터의 장점은 드라이버 없이 마이크로컨트롤러의 출력에 직접 연결된 단일 저전류 와이어를 사용하여 정지, 실행, 회전 방향 및 속도를 제어할 수 있다는 것입니다. 사용된 서보 모터는 그림 3과 같이 3-와이어 전기 케이블을 통해 Arduino UNO 보드에 의해 제어됩니다. 두 개의 와이어는 공급용이고 한 개의 와이어는 위치를 제어하는 ​​PWM용입니다.

임베디드 소프트웨어 디자인

임베디드 소프트웨어는 태양 추적기 테스트 벤치를 제어하고 모니터링하기 위해 하드웨어(Arduino Uno)에 임베디드될 부분입니다. 임베디드 소프트웨어는 다음 요구 사항을 충족하도록 설계되었습니다.

1. 테스트 벤치에는 수동 및 자동의 두 가지 모드가 있습니다. 푸시버튼은 핀 12에 연결되어 두 모드 사이를 전환합니다.

2. 수동 모드가 활성화되면 전위차계는 좌우 모터의 경우 동쪽에서 서쪽으로, 상하 모터의 경우 남쪽에서 북쪽으로 서보 모터를 제어할 수 있습니다. 푸시 버튼은 핀 11에 연결되어 두 모터 사이의 전위차계를 전환합니다. 이 스위치는 좌우 서보 모터 또는 상하 서보 모터를 제어합니다.

3. 자동 모드가 활성화되면 그림 4에 표시된 알고리즘이 실행됩니다. 후자는 LDR 센서에서 반환된 아날로그 값을 사용합니다. 예를 들어 방위각 또는 수직축을 고려하여 두 개의 오른쪽 LDR과 두 개의 왼쪽 LDR의 평균값을 비교하고 왼쪽 LDR 세트가 더 많은 빛을 받으면 태양 추적기는 왼쪽-오른쪽 서보 모터를 통해 해당 방향으로 이동합니다. 후자는 차이 결과가 [−10, 10] 범위에 있을 때까지 계속 회전합니다. 이 범위는 컨트롤러를 안정화하는 데 사용되며 태양 추적기가 태양에 수직이면 더 이상 제어할 수 없습니다. 반면에 오른쪽 LDR 세트가 더 많은 빛을 받으면 태양 추적기는 왼쪽-오른쪽 서보 모터를 통해 해당 방향으로 이동하고 차이 결과가 [−10, 10] 범위에 있을 때까지 계속 회전합니다. 고도 축에도 동일한 방법이 사용됩니다. 또한 4개의 LDR 센서 사이의 평균 방사선을 측정했으며 이 값이 작은 값(8:실제 조정 및 테스트를 거쳐 방사선 조사가 null일 때 반환되는 값)보다 작은 경우에도 측정합니다. 즉, 밤이 왔습니다. 이 경우 태양 추적기는 태양의 상승 위치로 돌아가야 합니다. 예를 들어, 태양의 상승 위치는 좌우 서보 모터에서 0도, 상하 서보 모터에서 30도를 설정하여 도달할 수 있는 경우입니다. 이것은 C 함수 "servox.xml"을 통해 쉽게 수행할 수 있습니다. write(angle)''은 아두이노 IDE에서 제공합니다.

4. 아날로그 핀 A5를 통해 획득한 PV 전압은 PV 전류 및 전력을 계산하기 위해 처리되고 사용되어야 합니다. 그런 다음 이 모든 데이터와 실제 모드를 USB 케이블을 통해 컴퓨터로 전송한 다음 MS Excel로 표시해야 합니다.

PLX-DAQ Excel 매크로는 Arduino 마이크로 컨트롤러에서 Excel 스프레드시트로 데이터를 수집하는 데 사용됩니다. 다운로드만 하면 됩니다. 설치 후 "PLX-DAQ Spreadsheet"라는 바로 가기가 있는 PC에 "PLX-DAQ"이라는 폴더가 자동으로 생성됩니다. 그런 다음 보드와 Excel 간의 통신을 설정하려면 스프레드시트를 열고 PLX-DAQ 창에서 연결 설정(전송 속도 및 포트)을 정의하기만 하면 됩니다(그림 5). 그 후 "연결"을 클릭하면 출력 데이터가 수집되어 Excel 스프레드시트에 실시간으로 표시됩니다.

프로토타입

그림 6은 분리 및 조립 상태의 태양열 추적기를 보여줍니다. 제시된 바와 같이 전체 구조는 나무 판을 사용하여 제조되었으며 언급된 모든 구성 요소는 수동 및 자동 모드(LDR 센서, Arduino Uno, 서보 모터, 전위차계, 푸시 버튼 및 작은 PV 패널).

그림 7은 전체 테스트 벤치, 가상 계측이 있는 태양열 추적기, 태양열 추적기를 테스트하기 위해 빛을 노출할 수 있는 인공 램프를 보여줍니다. 태양열 추적기와 컴퓨터는 USB 케이블을 통해 연결됩니다. PV 전압이 획득되면 컨트롤러는 이 정보를 처리하고 이를 사용하여 PV 전류 및 전력을 계산합니다. 그런 다음 이러한 모든 데이터를 컴퓨터로 보내 MSExcel에 표시합니다. 무화과에서. 도 5 및 6을 참조하면, 제안된 테스트 벤치가 작고 유연하며 사용하기 쉽다는 것이 분명합니다. 이를 통해 학생, 연구원 및 엔지니어는 대형 태양 추적 장치의 구현을 진행하기 전에 알고리즘을 쉽게 적용할 수 있습니다.


<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • 임베디드 소프트웨어 OS 태양열 추적기 테스트 벤치
  • 임베디드 소프트웨어 OS 태양열 추적기 테스트 벤치Arduino
    //서보 모터 라이브러리#include //변수 초기화int mode =0;int ax =0; 정수 버튼 상태1 =0; 정수 버튼 상태2 =0; int prevButtonState1 =0;int prevButtonState2 =0; 정수 ldrtopr=0; // 오른쪽 위 LDR int ldrtopl =1; // 왼쪽 상단 LDR int ldrbotr =2; // 오른쪽 하단 LDR int ldrbotl =3; // 왼쪽 하단 LDR int topl =0;int topr =0; int botl =0;int botr =0;//두 개의 서보 선언Servo servo_updown;Servo servo_rightleft;int threshold_value=10; //측정감도void setup(){ Serial.begin(9600); //직렬 연결 설정 //직렬 포트를 열고 데이터 속도를 9600bps로 설정합니다. Serial.println("CLEARDATA"); //이미 있는 모든 데이터 지우기 Serial.println("LABEL,t,voltage,current,power,Mode"); //열 머리글 정의(PLX-DAQ 명령) pinMode(12, INPUT); //모드 전환 버튼 pinMode(11, INPUT); //축 전환 pinMode(A4, INPUT); //오른쪽-왼쪽 이동 및 위-아래 이동에 대한 전위차계 서보_updown.attach(5); //서보 모터 상하 이동 서보_rightleft.attach(6); //서보 모터 좌우 이동}void loop(){// pv_power();char Mode; 부동 전압 =analogRead(A5)*5.0/1023; 부동 전압 =2*볼트; // 전압=(R1/R1+R2)*전압 / R1=R2=10Ohms => 전압=2*볼트) 부동 전류 =전압/20; // I=전압/(R1+R2) 부동 전력 =전압*전류; Serial.print("데이터, 시간,"); // PLX-DAQ 명령 Serial.print(전압); // 직렬 포트에 전압을 보냅니다. Serial.print(","); Serial.print(현재); //현재를 직렬 포트로 보냅니다. Serial.print(","); Serial.print(전원); // 직렬 포트에 전원을 보냅니다. Serial.print(","); // Serial.println(모드); 버튼 상태1 =디지털 읽기(12); if (buttonState1 !=prevButtonState1) { if (buttonState1 ==HIGH) { //모드를 변경하고 올바른 표시기를 켜십시오. if (mode ==1) { mode =0; } 그렇지 않으면 { 모드 =1; } } } 이전 버튼 상태1 =버튼 상태1; 지연(50); // 50밀리초 동안 기다립니다. if (mode ==0) { Mode='M'; Serial.println(모드); // "Manual" 모드를 직렬 포트로 보냅니다. manualsolartracker(); } else { // 자동 모드 Mode ='A'; Serial.println(모드); 자동 태양광 추적기(); // "자동" 모드를 직렬 포트로 전송 } }void automaticsolartracker(){ //각 LDR의 아날로그 값 캡처 topr=analogRead(ldrtopr); //오른쪽 상단 LDR의 아날로그 값 캡처 topl=analogRead(ldrtopl); //왼쪽 상단 LDR의 아날로그 값 캡처 botr=analogRead(ldrbotr); //봇 오른쪽 LDR의 아날로그 값 캡처 botl=analogRead(ldrbotl); //봇 왼쪽 LDR의 아날로그 값 캡처 // 평균 계산 int avgtop =(topr + topl) / 2; //상위 LDR의 평균 int avgbot =(botr + botl) / 2; //하위 LDR의 평균 int avgleft =(topl + botl) / 2; //왼쪽 LDR의 평균 int avgright =(topr + botr) / 2; //오른쪽 LDR의 평균 //다른 값 구하기 int diffelev =avgtop - avgbot; //상위 LDR과 LDR 봇 사이의 다른 평균을 구합니다. int diffazi =avgright - avgleft; //오른쪽 LDR과 왼쪽 LDR 사이의 다른 평균을 구합니다. //태양 추적기의 왼쪽-오른쪽 움직임 if (abs(diffazi)>=threshold_value){ //빛 차이가 threshold_value보다 클 경우에만 위치 변경 if (diffazi> 0 ) { if (servo_rightleft.read() <180) { servo_rightleft.write((servo_updown.read() + 2)); } } if (diffazi <0) { if (servo_rightleft.read()> 0) { servo_rightleft.write((servo_updown.read() - 2)); } } } //태양 추적기의 상하 움직임 if (abs(diffelev)>=threshold_value){ //빛의 차이가 임계값보다 클 경우에만 위치 변경 if (diffelev> 0) { if (servo_updown.read() <180) { 서보_updown.write((servo_rightleft.read() - 2)); } } if (diffelev <0) { if (servo_updown.read()> 0) { servo_updown.write((servo_rightleft.read() + 2)); } } } } manualsolartracker(){ buttonState2 =digitalRead(13); if (buttonState2 !=prevButtonState2) { if (buttonState2 ==HIGH) { //모드를 변경하고 올바른 표시기를 켜십시오. if (axe ==1) { ax =0; } 그렇지 않으면 { 도끼 =1; } } } 이전 버튼 상태2 =버튼 상태2; 지연(50); // 50밀리초 동안 기다립니다. if (axe ==0) { //오른쪽-왼쪽 움직임을 제어합니다.servo_rightleft.write(map(analogRead(A4), 0, 1023, 0, 180)); } else { // // 상하 이동 제어 서보_updown.write(map(analogRead(A4), 0, 1023, 0, 180)); } }

    회로도


    제조공정

    1. Arduino 디지털 주사위
    2. Arduino 게임 컨트롤러
    3. 솔라 트래커 V2.0
    4. 픽셀 체이서 게임
    5. 사물 인터넷(IoT) 기반 태양열 추적기
    6. Arduino 반발 전자기 부상
    7. Alexa에 의해 활성화된 Arduino 홈 컨트롤러
    8. NeoMatrix Arduino Pong
    9. Arduino로 태양 복사열 측정
    10. LED 룰렛 게임