Mesure précise du rayonnement solaire avec Arduino UNO et shield Ethernet
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO | 1 |
| Shield Ethernet Arduino 2 | 1 |
| Cellule solaire | 1 |
| Résistance 10 kΩ | 1 |
Outils nécessaires
- Multimètre numérique
À propos de ce projet
Contexte
Il existe de nombreux capteurs pour la température, l'humidité, la luminosité… mais pas de capteur abordable pour le rayonnement solaire (irradiance). Les pyranomètres professionnels coûtent 200–800 $, même chez les fournisseurs chinois. Inaccessibles pour le hobbyiste moyen.
Je voulais estimer l'énergie solaire disponible chez moi avant d'acheter des panneaux. Au lieu d'acheter un pyranomètre, j'ai construit le mien : beaucoup moins cher, et amusant ! Composants courants, Arduino pour les calculs.
Montage
- La cellule solaire a deux fils (noir = masse, rouge = tension). Si codes couleurs différents, testez au multimètre : tension positive = fil noir du multimètre sur la masse de la cellule.
- Connectez la masse de la cellule → GND Arduino. Le fil VCC → broche analogique A0 via la résistance 10 kΩ. La résistance est cruciale : elle doit être bien supérieure à la résistance interne de la cellule.
Le principe : la cellule convertit l'énergie solaire en tension électrique. Plus l'irradiance est forte, plus la tension est élevée. Relation directement proportionnelle.
Paramètres nécessaires :
- Tension de référence analogique Arduino = 5 V (peut varier)
- Tension max de votre cellule solaire (à vérifier, ~5 V pour cellule de calculatrice)
- Dimensions de la cellule (règle : longueur × largeur pour la surface)
Calculs :
Puissance = (analogRead(A0)²) / RésistanceSurface = longueur × largeur(en m²)Rayonnement solaire = Puissance / Surface(W/m²)
Code exemple (Pyranomètre basique)
#define ANALOG_PIN A0
#define RESISTANCE 10 // en kΩ
#define PANEL_LENGTH 60 // mm
#define PANEL_WIDTH 20 // 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 / 10000.0; // m²
Power = pow(analogRead(ANALOG_PIN), 2) / RESISTANCE;
Radiation = Power / Area;
char msg[64];
sprintf(msg, "Rayonnement solaire : %.2f W/m2", Radiation);
Serial.println(msg);
delay(1000);
}
Valeurs typiques : 150–300 W/m² jour normal, jusqu'à 900 W/m² par temps très ensoleillé ou près de l'équateur.
Ajout de la connectivité Ethernet
Montez le shield Ethernet sur l'Arduino, broches alignées. Le code ci-dessous héberge un mini serveur web qui affiche la valeur et rafraîchit toutes les 5 s.
#include <SPI.h>
#include <Ethernet.h>
#define ANALOG_PIN A0
#define RESISTANCE 10
#define PANEL_LENGTH 60
#define PANEL_WIDTH 20
volatile float Area, Power, 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("Serveur à "); Serial.println(Ethernet.localIP());
}
void loop() {
Area = PANEL_LENGTH * PANEL_WIDTH / 10000.0;
Power = pow(analogRead(ANALOG_PIN), 2) / RESISTANCE;
Radiation = Power / Area;
char msg[64];
sprintf(msg, "Rayonnement solaire : %.2f W/m2", Radiation);
EthernetClient client = server.available();
if (client) {
Serial.println("Nouveau client");
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("Client déconnecté");
}
}
Schéma
Schéma de la cellule solaire, résistance et connexions (image fournie).
Processus de fabrication
- Mesure de température sur Raspberry Pi avec capteurs 1‑Wire Maxim et pont I2C DS2482
- Capteur CO2 K30 : Surveillance en temps réel de la qualité de l'air intérieur
- Faciliter la communication sourd-aveugle avec 1Sheeld et Arduino
- Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Intégrer un capteur d'empreintes capacitif DFRobot (ID809) avec Arduino ou ESP8266
- Station météo interactive Nextion HMI avec Arduino Mega et capteurs
- Bras robotique 6 DoF piloté par Nunchuk Wii – Kit Arduino Mega
- Solar Tracker V2.0 – Système avancé de suivi solaire DIY pour panneau photovoltaïque