본문 바로가기

아두이노우노 R4

LDR 및 서보 모터를 사용한 2축 태양광 추적기 아두이노 프로젝트

반응형

 

안녕하세요, IoT 프로젝트에 오신 것을 환영합니다. 이 기사에서는 LDR과 서보 모터를 사용하여 이중 축 태양 추적기 아두이노 프로젝트를 단계별로 만드는 방법을 배웁니다.

 

 

 

이 프로젝트에서는 (LDR)과 같은 감광 센서를 사용하여 햇빛을 추적하고 태양 전지판을 효율을 높이는 영역으로 향하게 할 것입니다. 이 글은 7개의 섹션으로 나눴습니다: 

 

이 프로젝트에 필요한 구성 요소

 

다음 목록은 이 프로젝트에 필요한 모든 구성 요소의 목록입니다: 

 

S.N Components  Name Description Quantity  
1 Arduino UNO ARDUINO UNO R3 1 https://amzn.to/2L0iZf2
2 Servo Motor Micro Servo - SG90 2 https://amzn.to/2NRXXAy
  LDR LDR ( Photoresistor) Sensor 4 https://amzn.to/3kiHz8r
3 Resistors 10k-ohm resistors 4 https://amzn.to/2NTPtsF
4 Breadboard Mini Breadboard 1 https://amzn.to/2NP2UKL
5 3D body parts 3D body parts Design 1 https://www.thingiverse.com/thing:2467743
6 Potentiometer 10k Potentiometer 2 https://amzn.to/2MgRMWz

 

 

LDR 센서의 작동 원리

 

여기서 LDR은 광 검출기 역할을 합니다. 포토 레지스터라고도 합니다. 실제로는 빛에 민감한 장치입니다. 그래프에서 볼 수 있듯이 빛이 내리쬐면 저항이 감소합니다. 이 프로젝트에서는 4개의 LDR을 사용하여 햇빛을 감지합니다. 그리고 아두이노에 신호를 보내면 두 개의 서보 모터가 태양 전지판의 효율을 극대화하기 위해 더 나은 위치에 배치하도록 안내합니다. 

 

 

프로젝트 시뮬레이션: LDR 및 서보 모터를 사용한 이중 축 태양 추적기

 

아두이노 프로젝트 여기에서는 이 프로젝트의 전체 개요를 보여드리겠습니다. 나중에 배선 시스템에 대해 설명하겠습니다. 하지만 지금은 이 프로젝트에 박차를 가할 것입니다. 

 

아두이노의 전원을 켜면 모든 센서와 서보 모터가 작동합니다. 위 이미지에서 볼 수 있듯이. 일반적으로 LDR 센서의 빛의 강도를 높이면 신호가 아두이노로 전송됩니다. 따라서 두 개의 서보 모터가 태양광 패널을 더 잘 배치하도록 안내합니다. 효율을 높이기 위해서죠. 실제로 여기에서 서보 모터가 작동할 때 빛의 강도를 높이거나 낮추는 것을 볼 수 있습니다.

 

이 두 전위차계를 사용하여 서보 모터의 속도도 제어할 수 있습니다. 이에 대해서는 나중에 프로그래밍 섹션에서 설명하겠습니다. 

 

팅커캐드 이중 축 태양광 추적기 아두이노 시뮬레이션 파일 

 

팅커 캐드 파일 다운로드

 

LDR 및 서보 모터를 사용한 이중 축 태양광 추적기 아두이노 프로젝트 인터페이스하기 

 

 

 

 

  • 아두이노의 5V 핀을 브레드보드의 아래쪽 수평 행에 연결합니다.
  • 마찬가지로 아두이노의 GND 핀을 브레드보드의 두 번째 아래쪽 수평 행에 연결합니다.
  • 5V와 GND 행을 각각 브레드보드의 위쪽 수평 행으로 확장합니다.
  • 이제 수직 및 수평 서보 모터의 전원 핀을 모두 5V에 연결합니다.
  • 마찬가지로 수평 및 수직 서보 모터의 GND 핀을 모두 접지에 연결합니다.
  • 이제 수직 서보 모터의 신호 핀을 아두이노의 디지털 핀 10번과 연결합니다.
  • 다시 수평 서보 모터의 신호 핀을 아두이노의 디지털 핀 9번과 연결합니다.
  • 두 전위차계의 한쪽 단자를 접지에 연결하고 두 전위차계의 다른 쪽 단자를 VCC 5V에 연결합니다.
  • 이제 10k옴 저항을 통해 한 단자의 모든 LDR을 5V에 연결하고 다른 단자를 접지에 연결합니다.
  • 전위차계-1의 와이퍼 핀을 아날로그 핀 A4에 연결하고 A5를 전위차계-2의 다른 와이퍼 핀에 연결해 봅시다.
  • 왼쪽 하단 LDR 전압 분배기를 아두이노의 A1 핀에 연결합니다.
  • 다시 왼쪽 상단 LDR 전압 분배기를 아두이노의 A0 핀에 연결합니다.
  • 마찬가지로 오른쪽 상단 LDR 전압 분배기를 A2 핀에 연결합니다.
  • 마지막으로 LDR의 오른쪽 하단 전압 분배기를 아두이노의 A3 핀에 연결합니다. 

 

2축 태양광 추적기 프로젝트를 위한 아두이노 프로그래밍하기 

 

#include은 서보 헤더 라이브러리 파일을 포함하는 데 사용됩니다.

 

#include <Servo.h>

 

 

수평 서보에 대한 구성입니다. 서보 수평은 180도로 설정됩니다. 신호 값이 높을 때 서보 수평 제한은 175도로 설정됩니다. 다시, 신호 값이 낮을 때의 서보 수평 제한은 5도로 설정됩니다.

 

Servo horizontal; // horizontal servo
int servoh = 180; 
int servohLimitHigh = 175;
int servohLimitLow = 5;
// 65 degrees MAX

 

수직에 대한 서보 구성입니다 서보 수직은 45도로 설정됩니다. 신호가 높을 때의 서보 수직 제한은 60도로 설정됩니다. 또한 신호 값이 낮을 때의 서보 수직 제한은 1도로 설정됩니다. 서보 수직;

 

Servo vertical; // vertical servo
int servov = 45; 
int servovLimitHigh = 60;
int servovLimitLow = 1;

 

LDR 핀 연결

  • ldrlt는 상단 왼쪽
  • ldrrt는 상단 오른쪽
  • ldrld는 하단 왼쪽
  • ldrrd는 하단 오른쪽입니다. 

 

// LDR pin connections
// name = analogpin;
int ldrlt = A0; //LDR top left - BOTTOM LEFT <--- BDG
int ldrrt = A3; //LDR top rigt - BOTTOM RIGHT
int ldrld = A1; //LDR down left - TOP LEFT
int ldrrd = A3; //ldr down rigt - TOP RIGHT

 

 

void setup에서 수직 및 수평 서보 신호 핀을 연결하고 수평 서보 회전은 180도로 설정했습니다. 마찬가지로 수직 서보도 45도로 설정했습니다. 또한 2.5초의 지연을 설정했습니다. 

 

void setup(){
horizontal.attach(9);
vertical.attach(10);
horizontal.write(180);
vertical.write(45);
delay(2500);
}

 

Void loop() 함수에서는 LDR에 연결된 Arduino의 아날로그 핀 값을 읽은 다음 수직과 수평의 평균을 계산합니다. 

 

void loop() {
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right
int dtime = 10; int tol = 90; // dtime=diffirence time, tol=toleransi
int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt

 

 

IF 및 IF-ELSE 문은 프로그램을 반복하고 각 LDR의 평균값을 계산하도록 정의되어 있습니다. 마지막으로 이 코드는 서보 모터의 각도를 변경하는 데 도움이 됩니다. 그래서 더 효과적일 수 있습니다. 

 

if (-1*tol > dvert || dvert > tol) 
 {
 if (avt > avd)
 {
 servov = ++servov;
 if (servov > servovLimitHigh)
 {servov = servovLimitHigh;}
 }
 else if (avt < avd)
 {servov= --servov;
 if (servov < servovLimitLow)
 { servov = servovLimitLow;}
 }
 vertical.write(servov);
 }
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
 {
 if (avl > avr)
 {
 servoh = --servoh;
 if (servoh < servohLimitLow)
 {
 servoh = servohLimitLow;
 }
 }
 else if (avl < avr)
 {
 servoh = ++servoh;
 if (servoh > servohLimitHigh)
 {
 servoh = servohLimitHigh;
 }
 }
 else if (avl = avr)
 {
 delay(5000);
 }
 horizontal.write(servoh);
 }

 

마지막으로 (dtime)의 지연을 추가했습니다. 

 

delay(dtime);
 
}

 

 

이제 프로그램을 컴파일하고 아두이노 보드에 업로드합니다. 

 

최종 프로그램 코드/스케치 

 

#include <Servo.h> 


Servo horizontal; // horizontal servo
int servoh = 180; 
int servohLimitHigh = 175;
int servohLimitLow = 5;
// 65 degrees MAX

Servo vertical; // vertical servo
int servov = 45; 
int servovLimitHigh = 60;
int servovLimitLow = 1;

// LDR pin connections
// name = analogpin;
int ldrlt = A0; //LDR top left - BOTTOM LEFT <--- BDG
int ldrrt = A3; //LDR top rigt - BOTTOM RIGHT
int ldrld = A1; //LDR down left - TOP LEFT
int ldrrd = A3; //ldr down rigt - TOP RIGHT

void setup(){
horizontal.attach(9);
vertical.attach(10);
horizontal.write(180);
vertical.write(45);
delay(2500);
}
void loop() {
int lt = analogRead(ldrlt); // top left
int rt = analogRead(ldrrt); // top right
int ld = analogRead(ldrld); // down left
int rd = analogRead(ldrrd); // down right
int dtime = 10; int tol = 90; // dtime=diffirence time, tol=toleransi
int avt = (lt + rt) / 2; // average value top
int avd = (ld + rd) / 2; // average value down
int avl = (lt + ld) / 2; // average value left
int avr = (rt + rd) / 2; // average value right
int dvert = avt - avd; // check the diffirence of up and down
int dhoriz = avl - avr;// check the diffirence og left and rigt

if (-1*tol > dvert || dvert > tol) 
 {
 if (avt > avd)
 {
 servov = ++servov;
 if (servov > servovLimitHigh)
 {servov = servovLimitHigh;}
 }
 else if (avt < avd)
 {servov= --servov;
 if (servov < servovLimitLow)
 { servov = servovLimitLow;}
 }
 vertical.write(servov);
 }
if (-1*tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
 {
 if (avl > avr)
 {
 servoh = --servoh;
 if (servoh < servohLimitLow)
 {
 servoh = servohLimitLow;
 }
 }
 else if (avl < avr)
 {
 servoh = ++servoh;
 if (servoh > servohLimitHigh)
 {
 servoh = servohLimitHigh;
 }
 }
 else if (avl = avr)
 {
 delay(5000);
 }
 horizontal.write(servoh);
 }
 
 delay(dtime);
 
}

 

결론

 

마지막으로 LDR 및 서보 모터를 사용한 이중 축 태양광 추적기 아두이노 프로젝트 인터페이싱을 완료했습니다. 이제 이 프로젝트를 사용하여 태양광 패널을 추적하고 효율을 40%까지 높일 수 있습니다.

 

이 프로젝트가 도움이 되셨기를 바랍니다!궁금한 점이 있으면 아래에 댓글을 남겨 주세요. 최선을 다해 답변해 드리겠습니다. 

 

언제나 그렇듯이 이 프로젝트의 참고 링크를 따라가면 문서를 만날 수 있습니다. 배움을 멈추지 마세요.  

 

문서의 다른 프로젝트 링크

 

Interfacing Temperature and Humidity Sensor with Arduino

DIY Mobile Phone using GSM Module & Arduino with Nextion Display

Simple Weather station using Arduino & BME280 Barometric Pressure Sensor

RFID Based Attendance System Using NodeMCU with PHP Web App

Capacitive Soil Moisture Sensor with OLED Display & Arduino

 

ESP8266 based Coronavirus Tracker for your country

NodeMCU ESP8266 Monitoring DHT11/DHT22 Temperature and Humidity with Local Web Server

Home Automation with ESP8266 Web Server & Relay Module Control Appliances from Local Network

Interfacing DHT11 Humidity and Temperature Sensor with Arduino & LCD

IoT Based Flood Monitoring System Using NodeMCU & Thingspeak

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩