Rastreador Solar de Dois Eixos com Controle Automático e Manual - Sistema Eficiente de Rastreamento Solar
Componentes e Materiais Necessários
| Componente | Quantidade | Observações |
|---|---|---|
| Arduino UNO | 1 | Controlador principal |
| Potenciômetro rotativo (genérico) | 2 | Para controle manual dos dois eixos |
| LED (genérico) | 2 | Indicadores: vermelho (manual), azul (automático) |
| Chave táctil 12mm (SparkFun) | 1 | Botão para alternar modo auto/manual |
| Servos Tower Pro MG996R | 2 | Movimento dos dois eixos (horizontal/vertical) |
| Fotorresistor (LDR) | 4 | Sensores de luz para rastreamento automático (canto sup. esq., sup. dir., inf. esq., inf. dir.) |
| Resistor 10kΩ | 5 | Pull-down para botão e divisores de tensão para LDRs |
| Resistor 221Ω | 2 | Limitadores de corrente para LEDs indicadores |
Ferramentas Necessárias
- Ferro de solda (genérico)
Aplicativos e Serviços Online
- Autodesk Tinkercad (para simulação e programação inicial)
- Arduino IDE
Sobre o Projeto
Este é um projeto que meus alunos implementaram durante o clube noturno 2017-2018 "Young Hackers". É um projeto exigente para estudantes do ensino fundamental e levou muitas reuniões para ser concluído. Contém um pequeno painel solar de 5V que pode rotacionar em dois eixos para colher a máxima potência do sol. O projeto é baseado no Projeto Rastreador Solar de Dois Eixos do OpenSourceClassroom.
Queríamos implementar dois modos no produto final:
- Modo manual - controlado por dois potenciômetros.
- Modo automático - controlado com quatro sensores de luz (LDRs).
Para alcançar isso, programamos o dispositivo para alternar entre modos com a ajuda de um botão e dois LEDs indicadores. Quando o dispositivo está no modo manual, a luz vermelha acende e podemos controlar a rotação do painel em dois eixos com a ajuda de dois potenciômetros. Quando o dispositivo está no modo automático, a luz azul acende e a rotação do painel é determinada pela luz coletada pelos quatro LDRs. A programação foi feita no Tinkercad.
Os alunos trabalharam em grupos em estilo de linha de produção para completar as tarefas (soldagem de fios, isolamento de fios, parafusamento de peças, etc.).
Código
#include <Servo.h>
// Inicializa variáveis
int mode = 0; // 0 = manual, 1 = auto
int buttonState = 0;
int prevButtonState = 0;
int topLeftLight = 0;
int topRightLight = 0;
int bottomLeftLight = 0;
int bottomRightLight = 0;
int LeftLight = 0;
int RightLight = 0;
int TopLight = 0;
int BottomLight = 0;
// Declara dois servos
Servo servo_9; // Servo movimento horizontal (direita-esquerda)
Servo servo_10; // Servo movimento vertical (cima-baixo)
void setup() {
pinMode(7, INPUT); // Botão de modo
pinMode(12, OUTPUT); // LED indicador modo manual (vermelho)
pinMode(11, OUTPUT); // LED indicador modo auto (azul)
pinMode(A0, INPUT); // Potenciômetro movimento horizontal
pinMode(A1, INPUT); // Potenciômetro movimento vertical
pinMode(A2, INPUT); // Sensor luz canto superior esquerdo
pinMode(A3, INPUT); // Sensor luz canto superior direito
pinMode(A4, INPUT); // Sensor luz canto inferior esquerdo
pinMode(A5, INPUT); // Sensor luz canto inferior direito
servo_9.attach(9); // Servo horizontal no pino 9
servo_10.attach(10); // Servo vertical no pino 10
}
void loop() {
buttonState = digitalRead(7);
// Detecção de borda do botão (mudança de estado)
if (buttonState != prevButtonState) {
if (buttonState == HIGH) {
// Alterna modo e acende indicador correto
if (mode == 1) {
mode = 0;
digitalWrite(12, HIGH); // LED vermelho - manual
digitalWrite(11, LOW);
} else {
mode = 1;
digitalWrite(11, HIGH); // LED azul - automático
digitalWrite(12, LOW);
}
}
}
prevButtonState = buttonState;
delay(50); // Debounce de 50ms
if (mode == 0) {
// MODO MANUAL: mapeia valores dos potenciômetros para graus de rotação
servo_9.write(map(analogRead(A0), 0, 1023, 0, 180));
servo_10.write(map(analogRead(A1), 0, 1023, 0, 180));
} else {
// MODO AUTOMÁTICO: mapeia valores dos sensores para intensidade 0-100
// Cada sensor de luz tem sensibilidade diferente e deve ser testado
// primeiro para seus valores alto e baixo
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);
// Calcula condições médias de luz
TopLight = (topRightLight + topLeftLight) / 2;
BottomLight = (bottomRightLight + bottomLeftLight) / 2;
LeftLight = (topLeftLight + bottomLeftLight) / 2;
RightLight = (topRightLight + bottomRightLight) / 2;
// Rotaciona servos se necessário
// Move horizontal apenas se diferença de luz > 4%
if (abs(RightLight - LeftLight) > 4) {
if (RightLight < LeftLight) {
if (servo_9.read() < 180) {
servo_9.write(servo_9.read() + 1);
}
}
if (RightLight > LeftLight) {
if (servo_9.read() > 0) {
servo_9.write(servo_9.read() - 1);
}
}
}
// Move vertical apenas se diferença de luz > 4%
if (abs(TopLight - BottomLight) > 4) {
if (TopLight < BottomLight) {
if (servo_10.read() < 180) {
servo_10.write(servo_10.read() - 1);
}
}
if (TopLight > BottomLight) {
if (servo_10.read() > 0) {
servo_10.write(servo_10.read() + 1);
}
}
}
}
}
Esquemático
Notas importantes:
- Os valores de mapeamento (
map()) para os LDRs (50,980,200,990, etc.) devem ser calibrados para seus sensores específicos, pois cada LDR tem características diferentes. - O threshold de 4% para diferença de luz evita movimentos constantes por ruído. Ajuste conforme necessário.
- Os servos MG996R são servos de metal com bom torque, adequados para mover um pequeno painel solar.
- Para uso externo permanente, considere proteção contra intempéries e fonte de alimentação adequada (painel solar + bateria + controlador de carga).
Processo de manufatura
- Projeto DHT11: Sensor Temperatura/Umidade com LEDs Indicadores e Buzzer
- Construa um Sensor de Obstáculos Simples com Arduino – Tutorial Fácil com LED IR e Fotodiodo
- Rastreador Solar V2.0 – Sistema Avançado de Rastreamento Solar DIY
- Rastreador Solar IoT: Gestão Inteligente de Energia com Arduino
- Construa um Cubo de LED 4x4x4 com Arduino Uno e 1Sheeld – Projeto Interativo de LED
- Contador de RPM Arduino de Alta Velocidade com Algoritmo Inovador
- Projeto de Galvanoplastia de Cobre: Construa um Sistema Inteligente com Arduino UNO
- Medição Precisa de Radiação Solar com Arduino UNO e Ethernet Shield
- Plataforma de Rastreamento Solar de Precisão com Servos para Captura Ótima de Energia
- Qualidade de Painéis Solares: Pontos de Controle Essenciais para Desempenho Ótimo