Medição Precisa de Radiação Solar com Arduino UNO e Ethernet Shield
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino UNO | 1 |
| Arduino Ethernet Shield 2 | 1 |
| Célula Solar | 1 |
| Resistor 10k ohm | 1 |
Ferramentas Necessárias
- Multímetro Digital
Sobre o Projeto
Sobre
Existem muitos sensores para medir temperatura, umidade, intensidade de luz, mas não há sensores acessíveis para medir radiação solar. A radiação solar é difícil de medir devido à ampla faixa de comprimentos de onda do Sol.
O instrumento profissional é o Piranômetro, que custa US$ 200-800, inacessível para hobbyistas. Queria estimar a energia solar disponível na minha região para avaliar viabilidade de painel solar residencial, então decidi construir meu próprio piranômetro barato e divertido.
Usei componentes facilmente encontrados e Arduino para cálculos. Comprei a maioria na Chinavasion, mas há muitos fornecedores.
Configuração
- Sua célula solar deve ter 2 fios: terra (preto) e vivo (vermelho). Se não souber, use multímetro: se tensão for positiva, fio do probe preto é terra; se negativa, invertido.
- Conecte terra da célula ao GND do Arduino e VCC a um pino analógico através do resistor escolhido (essencial para cálculos, deve ser muito maior que resistência interna da célula). Usaremos pino A0.
Células solares convertem energia solar em elétrica: maior radiação → maior tensão. Usamos essa relação direta para estimar radiação solar.
Parâmetros Necessários
- Tensão de referência analógica do Arduino = 5V (pode variar)
- Tensão máxima de saída da sua célula solar (varia conforme painel; verifique; célula de calculadora típica ~5V)
- Dimensões da célula solar (meça com régua: comprimento e largura para área)
Cálculo da Radiação Solar
Estimamos radiação calculando potência da célula e dividindo por sua área.
- Potência = (analogRead(A0))² / Resistência
- Área = comprimento × largura (assumindo retângulo)
- Radiação solar = Potência / Área
Código de Exemplo
/*------------------------------------------------------------------------------------------------------------------------*/
#define ANALOG_PIN A0
#define RESISTANCE 10 // Resistência em milhares de ohms
#define PANEL_LENGTH 60 // Comprimento da célula em mm
#define PANEL_WIDTH 20 // Largura da célula em mm
volatile float Area;
volatile float Power;
volatile float Radiation;
void setup() {
Serial.begin(9600);
while(!Serial);
delay(100);
}
void loop() {
Area = PANEL_LENGTH * PANEL_WIDTH / (100*100); // área em m²
Power = pow(analogRead(ANALOG_PIN), 2) / RESISTANCE;
Radiation = Power / Area;
char *msg;
sprintf(msg, "A Radiação Solar é %f W/M2", Radiation);
Serial.println(msg);
delay(1000);
}
/*----------------------------------------------------------------------------------------------------------------------------*/
Valores médios de irradiação em dia normal: 150-300 W/m². Varia muito com localização. Pode chegar a 900 W/m² em dia ensolarado ou perto do equador.
Adicionando Funcionalidade Ethernet
Para conectar à internet, use o Ethernet Shield. Não precisa de novas conexões: apenas encaixe o shield no Arduino e os pinos correspondem (pino 1 do Arduino = pino 1 do shield).
Código
Código para Piranômetro
#define ANALOG_PIN A0
#define RESISTANCE 10
#define PANEL_LENGTH 60
#define PANEL_WIDTH 20
volatile float Area;
volatile float Power;
volatile float Radiation;
void setup() {
Serial.begin(9600);
while(!Serial);
delay(100);
}
void loop() {
Area = PANEL_LENGTH * PANEL_WIDTH / (100*100);
Power = pow(analogRead(ANALOG_PIN), 2) / RESISTANCE;
Radiation = Power / Area;
char *msg;
sprintf(msg, " A Radiação Solar é %f W/M2 ", Radiation);
Serial.println(msg);
delay(1000);
}
Código com Função Ethernet
#include <SPI.h>
#include <Ethernet.h>
#define ANALOG_PIN A0
#define RESISTANCE 10
#define PANEL_LENGTH 60
#define PANEL_WIDTH 20
volatile float Area;
volatile float Power;
volatile float Radiation;
byte mac[] = {0xDE, 0x0D, 0x8E, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 177);
EthernetServer server(80);
void setup() {
Serial.begin(9600);
while (!Serial);
Ethernet.begin(mac, ip);
server.begin();
Serial.print("servidor em ");
Serial.println(Ethernet.localIP());
}
void loop() {
Area = PANEL_LENGTH * PANEL_WIDTH / (100*100);
Power = pow(analogRead(ANALOG_PIN), 2) / RESISTANCE;
Radiation = Power / Area;
char *msg;
sprintf(msg, " A Radiação Solar é %f W/M2 ", Radiation);
EthernetClient client = server.available();
if (client) {
Serial.println("novo cliente");
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 5");
client.println();
client.println("");
client.println("");
client.print(msg);
client.println("
");
client.println("");
break;
}
if (c == '\n') currentLineIsBlank = true;
else if (c != '\r') currentLineIsBlank = false;
}
}
delay(1);
client.stop();
Serial.println("cliente desconectado");
}
}
Esquemático
Esquemático da célula solar, resistor e conexões.

Processo de manufatura
- Medição de Temperatura no Raspberry Pi com Sensores Maxim 1‑Wire e Bridge I2C DS2482
- Sensor K30 CO₂: Monitoramento de Qualidade do Ar Interno em Tempo Real
- Facilitando Comunicação Surdo-Cego com 1Sheeld e Arduino
- Mealheiro Inteligente: Controlar Aceitador de Moedas com Arduino Nano
- Controlar um LED via Bluetooth com Arduino – Guia DIY Simples
- Integrando Sensor de Impressão Digital Capacitivo DFRobot com Arduino ou ESP8266
- Projeto HMI Interativo com Nextion, Arduino Mega e Sensores
- Braço Robótico 6 GDL Controlado por Nunchuk com Arduino Mega
- Rastreador Solar V2.0 – Sistema Avançado de Rastreamento Solar DIY
- Roda de Medição Precisa DIY com Arduino Nano e Encoder Rotativo