La réalisation de projets de fin d'études et de soutenances devient de plus en plus exigeante. Les sujets traditionnels manquent souvent d'innovation et de pertinence, ne répondant pas aux critères actuels. De nombreux étudiants rencontrent des difficultés pour faire valider leurs systèmes.
Pour vous aider à réussir votre projet avec un minimum d'effort, voici un projet de qualité :
Système de poursuite solaire basé sur microcontrôleur (code source + matériel + mémoire).
Évaluation synthétique du projet (sur 5 points) :
- Difficulté : 3
- Charge de travail : 3
- Innovation : 4
Détails du projet disponibles en fin d'article.
Démonstration en conditions réelles
L'étude des systèmes de poursuite solaire basés sur la carte Arduino Uno suscite un vif intérêt. De nombreux chercheurs améliorent les performances et la précision de ces systtèmes en optimisant les algorithmes de contrôle, en sélectionnant des photorésistances de qualité, ou en intégrant des capteurs avancés et des moteurs précis. Ces travaux élargissent le champ de recherche et les applications possibles. L'objectif principal est de mieux exploiter l'énergie solaire, une ressource renouvelable, afin d'augmenter le rendement de conversion, de réduire les émissions polluantes et de faire face à la crise énergétique. Ce système présente donc un fort potentiel pratique et de développement.
Principe de la Poursuite Lumineuse
Le système de poursuite solaire basé sur Arduino Uno repose sur le suivi de la position du soleil pour orienter un panneau photovoltaïque, maximisant ainsi l'efficacité de conversion. Le fonctionnement est le suivant :
- Détection de la position solaire : Des photorésistances captent la position du soleil et transmettent en temps réel les données correspondantes.
- Calcul de la trajectoire solaire : À partir des variations de position, le système détermine la trajectoire du soleil dans le ciel et la convertit en paramètres cinématiques.
- Pilotage des servomoteurs : La carte Arduino Uno contrôle des servomoteurs qui orientent le panneau solaire pour l'aligner avec la position réelle du soleil.
- Algorithme PID : Un correcteur PID (Proportionnel, Intégral, Dérivé) est implémenté pour ajuster finement l'angle du panneau.
- Ajustement automatique : Le système modifie automatiquement l'angle du panneau selon des paramètres prédéfinis pour qu'il reste perpendiculaire aux rayons solaires, optimisant ainsi la capture d'énergie.
En résumé, ce système détecte en continu la position du soleil et ajuste l'angle du panneau pour assurer une poursuite efficace. Grâce à l'algorithme PID, il garantit une grande stabilité et une capacité d'auto-ajustement, même lorsque la trajectoire solaire évolue, ce qui améliore significativement le rendement de conversion énergétique.
Architecture du Système
Ce système utilise des capteurs de lumière pour identifier automatiquement la diretcion de la source lumineuse. Il s'ajuste en continu pour suivre le soleil. L'ajout d'un panneau solaire haute performance pour l'alimentation n'est pas traité ici, mais le projet vise à terme à être couplé à un tel panneau pour maximiser l'efficacité énergétique. Le schéma fonctionnel est le suivant :
Le dispositif de mesure est composé de quatre photorésistances placées sur les quatre faces d'un tétraèdre. Chaque photorésistance est connectée à une entrée analogique de la carte Arduino via un diviseur de tension. En l'absence de lumière, leur résistance est de plusieurs centaines de kilo-ohms, voire méga-ohms. Sous lumière, elle chute à quelques kilo-ohms. Après la réinitialisation, la résistance de la photorésistance exposée diminue, ce qui met la broche à la masse. Le circuit utilise une résistance de 100 kΩ en série avec la photorésistance, le tout mis à la masse. En comparant les valeurs des conversions analogique-numérique (A/N) et en appliquant un algorithme de contrôle, le système ajuste l'orientation du tétraèdre jusqu'à ce que les quatre faces reçoivent une intensité lumineuse équivalente, réalisant ainsi le suivi solaire.
- Conception Matérielle
Principe de la photorésistance : Une photorésistance (LDR, Light Dependent Resistor) est un composant semi-conducteur dont la résistance varie en fonction de l'intensité lumineuse reçue. Un matériau photosensible (comme le sélénium ou le sulfure d'indium) absorbe l'énergie lumineuse, modifiant sa conductivité et donc sa résistance.
Dans ce système de poursuite solaire, la photorésistance est utilisée pour mesurer l'intensité lumineuse ambiante. Lorsqu'elle est éclairée, sa résistance diminue. La mesure s'effectue en connectant la photorésistance à une entrée analogique de l'Arduino et en utilisant la fonction analogRead(). La valeur lue est convertie en tension, puis, après calibration via la courbe caractéristique du composant, en valeur d'intensité lumineuse.
En mesurant en continu l'intensité lumineuse, le système détermine la position du soleil et commande les servomoteurs pour orienter le panneau solaire. Le schéma de câblage de la photorésistance est présenté ci-dessous :
- Conception Logicielle
1) Programme d'initialisation : Au démarrage, le programme configure les broches et les variables associées aux servomoteurs, capteurs et autres périphériques.
2) Détection par photorésistance : Les photorésistances détectent la position du soleil. Les données sont lues, stockées et transmises à l'Arduino Uno pour analyse.
3) Pilotage et calcul des angles des servomoteurs : Les angles calculés sont envoyés aux servomoteurs. Le calcul s'effectue à partir des données des capteurs, souvent en utilisant des fonctions trigonométriques pour déterminer la hauteur et l'azimut du soleil, puis en convertissant ces valeurs en angles de rotation pour les servomoteurs.
4) Algorithme PID : L'asservissement PID est utilisé pour corriger en temps réel l'angle du panneau solaire, minimisant l'erreur d'orientation et maintenant le panneau aligné avec le soleil.
Le diagramme de flux du logiciel de poursuite solaire est présenté ci-dessous :
Programme d'Initialisation
Au début du programme, les broches et variables relatives aux servomoteurs, capteurs et autres périphériques sont initialisées. Extrait de code :
const int TrigPin = 11;
const int EchoPin = 13;
// Définition des types pour les broches
uchar infraPin, lightPin, servoPin;
uchar EAmortorA, IN1mortorA, IN2mortorA;
uchar EAmortorB, IN3mortorB, IN4mortorB;
// Assignation des broches
infraPin = 12; // Capteur infrarouge
lightPin = 0; // Photorésistance (entrée analogique)
servoPin = 9; // Servomoteur
EAmortorA = 3; // Enable moteur A
IN1mortorA = 2; // Entrée 1 moteur A
IN2mortorA = 4; // Entrée 2 moteur A
EAmortorB = 6; // Enable moteur B
IN3mortorB = 7; // Entrée 3 moteur B
IN4mortorB = 8; // Entrée 4 moteur B
Servo myServo; // Déclaration de l'objet Servo
Détection par Photorésistance
La détection de la position solaire via les photorésistances est cruciale. Les données collectées sont analysées par l'Arduino Uno.
Étapes de conception logicielle :
Étape 1 : Connexion matérielle
La photorésistance est connectée à la broche analogique A0 de l'Arduino Uno, avec une résistance de limitation de courant de 10 kΩ.
Étape 2 : Déclaration des variables
En haut du programme, la variable lightPin est déclarée pour stocker le numéro de la broche analogique utilisée.
Initialisation unique
Dans la fonction setup(), l'initialisation est effectuée une seule fois.
Boucle principale
Dans la fonction loop(), la fonction analogRead() lit la valeur sur la broche A0. Les valeurs des quatre photorésistances (ldrlt, ldrrt, ldrld, ldrrd) sont lues et stockées dans les variables entières (lt, rt, ld, rd). Comme la résistance est inversement proportionnelle à l'intensité lumineuse, la valeur lue peut être convertie en intensité.
Pilotage et Calcul des Angles des Servomoteurs
Deux servomoteurs sont utilisés : un pour l'axe horizontal et un pour l'axe vertical. Leurs positions initiales sont définies par les variables servoh et servov. Après une temporisation de 100 ms, le servomoteur vertical se déplace vers la position médiane définie par les limites servovLimitLow et servovLimitHigh. Une autre temporisation de 100 ms est observée, puis le servomoteur horizontal se déplace vers la position médiane définie par servohLimitHigh et servohLimitLow. Ceci termine l'initialisation.
// Connexion des servomoteurs
horizontal.attach(SERVOPINH); // Servo horizontal sur la broche définie
vertical.attach(SERVOPINV); // Servo vertical sur la broche définie
// Position initiale
horizontal.write(servoh);
vertical.write(servov);
delay(100);
// Position médiane verticale
vertical.write((servovLimitLow + servovLimitHigh) / 2);
delay(100);
// Position médiane horizontale
horizontal.write((servohLimitHigh + servohLimitLow) / 2);
Note : SERVOPINH, SERVOPINV, servoh, servov, servovLimitLow et servohLimitHigh sont des constantes ou variables définies en début de programme.
Le calcul des angles des servomoteurs est effectué dans la fonction loop().
Les détails complets de conception sont présentés dans la mémoire jointe.
- Résultats Obtenus
Vidéo de démonstration
Éléments fournis :
- Code source complet
- Schémas et plans du matériel
- Mémoire de projet détaillée
Détails du projet disponibles en fin d'article.