Você está na página 1de 36

EN41, Rapport de Projet

Tracker Solaire
Samuel Goutenoir GESC 01
Denis Touillon GESC 02
Responsable de lUV Damien Paire
TP Eric Chrtien
Printemps 2011
Prface
LUV EN41 nous a permis de dvelopper notre premier projet dlectronique ncessitant un
panel de comptences diverses. Nous avons bnci chaque jeudi pour une dure de 3 heures,
dune salle de travail quipe des logiciels et du matriel ncessaire an de mener laboutisse-
ment de notre projet.
Nous nous sommes port sur le sujet tracker solaire. Nous pensons que cest un sujet tout
fait dactualit dans le domaine de lindustrie puisque aujourdhui beaucoup de panneaux so-
laires sont dots dun tracker solaire.
Ce rapport a pour objectif de retracer lvolution de la ralisation de notre projet, de la
dnition du cahier des charges la phase de tests nous permettant de valider ou non lavance
du projet.
Vous pouvez retrouver ce rapport au format Pdf sur le site : http ://samuel.goutenoir.com/
Accs direct
TABLE DES MATIRES
Table des matires
1 Introduction 5
1.1 Dnition du sujet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Quest-ce quun Tracker Solaire ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Est-ce rentable ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Calendrier prvisionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2 Conception 8
2.1 Principe de fonctionnement du systme . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Schma bloc du systme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Les modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1 Les panneaux solaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 Les photorsistances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.3 Le moteur pas pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.4 Le driver du moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.5 La carte mre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Ralisation de la carte sous Altium . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4.1 Le schma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4.2 Le Typon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5 Maquette 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3 Ralisation Matriel 21
3.1 Construction de la maquette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Montage de la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Phase de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3
TABLE DES MATIRES
3.3.1 Test du moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.2 Test des photorsistances . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.3 Test des panneaux solaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4 Ralisation Logiciel 24
4.1 Fonctions du Moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2 getTravel() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3 Main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5 Conclusion 28
5.1 Amliorations possibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.2 Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
A Programme 29
A.1 TrackerSolaire.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
A.2 Cong.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
A.3 Stepper.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
A.4 Stepper.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4
1 Introduction
Le soleil ne se lve que pour celui qui va sa rencontre. Henri le Saux
1.1 Dnition du sujet
Objectif : Raliser un tracker solaire command par un moteur pas pas an dassurer une
production lectrique optimale.
Le travail consiste proposer et raliser une commande de moteur pas pas (PaP) pour
permettre une rotaton denviron 140

, un mini panneau solaire donne une information tension


sur la production lectrique.
Lachage des grandeurs lectrique et de position se fera sur lacheur LCD.
1.2 Quest-ce quun Tracker Solaire ?
Un tracker solaire
1
ou suiveur de Soleil est une installation de production dnergie solaire
utilisant le principe de lhliostat. Cest une structure portante qui permet dorienter des pan-
neaux solaires tout au long de la journe an den augmenter la productivit.
Son principe de fonctionnement est de suivre le Soleil tout au long de la journe, ce qui a
pour eet daugmenter la production dnergie de manire substantielle.
En eet, la position du soleil varie constamment, la fois pendant la journe, mais aussi
pendant les direntes priodes de lanne.
Le tracker permet ainsi de placer au mieux le panneau par rapport au positionnement du
Soleil (orthogonal au rayonnement si possible).
Suivre le soleil peut se faire sur deux axes : en azimut (dest en ouest, mesure de lavance
de la journe) et en hauteur (selon la saison et, de nouveau, lavance de la journe). Lidal est
dutiliser un tracker deux axes, mais il en existe aussi avec un seul (typiquement avec un suivi
seulement en azimut, langle par rapport au sol tant x selon loptimum local, qui dpend de
la latitude.
Dans notre cas, le suivi de soleil se fera sur un seul axe, en azimut.
1. Source : http ://fr.wikipedia.org/wiki/Tracker_solaire
5
1.3. EST-CE RENTABLE?
1.3 Est-ce rentable ?
La question ne se pose videment pas pour notre tracker solaire, tant le moteur est surdimen-
sionn (et assez peu ecace vu la temprature quil peut atteindre). Nanmoins si nous aurions
voulu faire un tracker plus conome :
Il aurait tout dabord fallu tenir compte de divers paramtres extrieurs au tracker solaire
en lui- mme qui sont :
Lensoleillement qui dpend de notre position gographique (de 1200kWh.m-2 au nord de
la France on passe 1900kWh.m-2).
Linuence des eets dombres et dhorizon de lenvironnement : arbre, immeuble, valle
encaisse peuvent diminuer la quantit de lumire reue par le panneau.
Lusure du panneau (on value la perte decacit denviron 10% par rapport la valeur
dorigine tout les 10 ans).
Sur le tracker solaire nous pourrions amliorer et tenir compte :
De lecacit du moteur (pourquoi pas un autre type)
De la sensibilit du tracker : (pour que le bnce changement de position sur puissance
reue soit le maximum)
Du rendement rel du panneau (celui-ci se dgradant avec laugmentation de la tempra-
ture, il faudrait peut tre envisager un radiateur, mais celui-ci augmenterai aussi le poids
du panneau et donc la puissance fournir au moteur. . .)
Pourquoi pas grer le mode sleep du pic si on veut pousser la recherche de lconomie au
maximum.
Si cest une rentabilit orient gain dargent, il faut tenir compte du fait que EDF achte
plus cher llectricit provenant des panneaux solaires mont en bti (ce qui sensible un non-sens
en raison de la dgradation du rendement avec laugmentation de la temprature).
6
1.4. CALENDRIER PRVISIONNEL
1.4 Calendrier prvisionnel
1
re
sance : Dnition du cahier des charges du projet et rexion sur le fonctionnement
globale. Recherche de documentation sur les dirents composants. Etude succincte du PIC
(tension dlivre en sortie et accept par les entres)
2
me
sance : Essai avec des transistors (pour la commande du moteur pas pas), essai sur
le moteur pas pas, choix et calibrage du conditionneur pour les photorsistances et test sur le
capteur solaire (tension et courant dlivr, sensibilit)
3
me
sance : Formation Altium (sur un exemple)
4
me
sance : Construction du typon et recherche sur les dirents composants appropris.
5
me
sance : Finalisation du typon et fabrication de la maquette
6
me
sance : Cration du programme de commande du moteur
8
me
sance : Poursuite de la cration du programme de commande du moteur et test de
celui-ci
9
me
sance : Cration des programmes dacquisition de la tension et dachage sur le LCD
et tests
10
me
sance : Cration du programme principal et test de fonctionnement de lensemble du
trackeur solaire
11
me
sance : Derniers tests et rglages (sensibilit, vitesse)
12
me
sance : Sance supplmentaire si des problmes imprvus sont rencontrs
7
2 Conception
2.1 Principe de fonctionnement du systme
Nous avions le choix entre deux principes de suivi de soleil :
Utiliser la tension des panneaux solaires pour dterminer la meilleure orientation face au
soleil
Utiliser deux photorsistances
1
(abrviation : LDR) cartes lune de lautre et dterminer
lorientation du soleil en calculant la dirence dclairage.
Aprs quelques tests, nous avons choisis la solution avec les LDRs car cest elle qui nous
permettait davoir la meilleur prcision concernant lorientation du soleil.
Le dessin suivant reprsente la maquette :
PC18F4580
Panneaux Solaires Photorsistances Moteur PaP
Driver Moteur
Montage
Suiveur 12V
Sortie B Digital : 5V
LCD
Affichage tension + angle
Maquette
Carte Fille
Carte Mre
Rcupre tension des
photorsistances
TensionEST >
TensionOUEST
Moteur va EST Moteur va OUEST
Rcupre tension des
panneaux solaires et l'affiche
sur le LCD
Panneau solaire
LDR
OUEST
LDR
EST
Panneau solaire
Moteur PaP
OUEST EST
Course du
soleil
Figure 2.1 Dessin - Maquette
1. Photorsistance : Composant lectronique dont la rsistivit varie en fonction de la quantit de lumire
incidente (Source : http ://fr.wikipedia.org/wiki/Photorsistance)
8
2.1. PRINCIPE DE FONCTIONNEMENT DU SYSTME
On voit sur le dessin que la LDR EST reoit plus de lumire que la LDR OUEST donc le
moteur PaP va tourner en direction de lEST pour galiser tout a.
Lorganigrame suivant rsume le principe de fonctionnement :
PC18F4580
Panneaux Solaires Photorsistances Moteur PaP
Driver Moteur
Montage
Suiveur 12V
Sortie B Digital : 5V
LCD
Affichage tension + angle
Maquette
Carte Fille
Carte Mre
Rcupre tension des
photorsistances
TensionEST >
TensionOUEST
Moteur va EST Moteur va OUEST
Rcupre tension des
panneaux solaires et l'affiche
sur le LCD
Figure 2.2 Organigramme - Principe de fonctionnement
Il faut savoir aussi que le Tracker solaire sera limit en rotation comme indiqu dans le cahier
des charges, il ne pourra se dplacer que de 140

dEST en OUEST. Cet angle est facilement


changeable bien videmment.
9
2.2. SCHMA BLOC DU SYSTME
2.2 Schma bloc du systme
Le schma bloc suivant reprsente lensemble de notre projet et comment les dirents mo-
dules vont tre lis.
PC18F4580
Panneaux Solaires Photorsistances Moteur PaP
Driver Moteur
Montage
Suiveur 12V
Sortie B Digital : 5V
LCD
Affichage tension + angle
Maquette
Carte Fille
Carte Mre
Figure 2.3 Schma bloc - Systme
2.3 Les modules
2.3.1 Les panneaux solaires
Figure 2.4 Photo - Panneaux solaires
Les panneaux solaires choisis pour notre projet, sont des panneaux solaires de jardin.
Nous avons donc deux panneaux solaires en srie, dlivrant chacun de 0V 2,5V soit 5V
maximum au total.
10
2.3. LES MODULES
2.3.2 Les photorsistances
Figure 2.5 Photo - Photorsistance
Pour rcuprer une valeur utilisable par le PIC, nous devons lui envoyer une tension ana-
logique. Pour ce faire, la LDR tant une rsistance, il nous sut de faire un pont diviseur de
tension avec la LDR et une rsistance de 10K. On obtient alors une tension entre 0 et 5V pour
chaque LDR en fonction de leur clairement.
Remarque : Aprs un rapide test, on sest rendu compte que limpdence de sortie du pont
diviseur ntait pas adapte lentre analogique du PIC, donc pour remdier ce prblme,
nous avons rajouter un amplicateur (LM358) en montage suiveur en sortie du pont.
Ce qui nous donne le schma suivant :
Figure 2.6 Schma - Cblage du LM358 avec les LDRs
11
2.3. LES MODULES
2.3.3 Le moteur pas pas
Figure 2.7 Photo - Moteur pas pas
Dnition
Un moteur pas pas
2
permet de transformer une impulsion lectrique en un mouvement
angulaire. Ce type de moteur est trs courant dans tous les dispositifs o lon souhaite faire
du contrle de vitesse ou de position en boucle ouverte, typiquement dans les systmes de
positionnement. Lusage le plus connu du grand public est dans les imprimantes relies un
ordinateur (positionnement de la tte dimpression et rotation du rouleau porte-papier dans
les imprimantes matricielles, marguerite et jet dencre, et rotation du rouleau porte-papier
seulement dans les imprimantes xrographie laser).
Commande
Dans notre projet nous utilisons un moteur aimant permanent unipolaire 5 ls (4 bobines
+ 1 commun) dont la commande ce fait en alimentant les bobines du moteur dans un ordre prcis.
Figure 2.8 Dessin - Moteur pas pas
2. Source : http ://fr.wikipedia.org/wiki/Moteur_pas__pas
12
2.3. LES MODULES
Impulsion Bobine A Bobine B Bobine C Bobine D
T1 + - + -
T2 - + + -
T3 - + - +
T4 + - - +
Figure 2.9 Tableau - Alimentation des bobines
Lalimentation des bobines sera gr par un driver de moteur, mais la commande est faites
logistiquement.
2.3.4 Le driver du moteur
Plusieurs choix sorent nous pour alimenter le moteur pas pas sous sa tension et intensit
nominale.
Les transistors BD203
Facile mettre en oeuvre, notre premier choix sest port sur des transistors BD203 pouvant
supporter des courants jusqua 3A. Mais aprs quelques tests, on sest rendu compte que les
transistors napportaient pas assez de protection pour le moteur.
Le L293D
Le L293D est un C.I. intgrant 4 transistors, des diodes et une bonne gestion pour commander
un moteur pas pas. Il peut supporter des courants de sortie jusqu 300mA, ce qui est juste
pour notre moteur pas pas qui consomme 160mA/Phase.
Le SN7544A
Le SN7544A est la version amlior du L293D, il possde les mmes fonctions mais peut
supporter des courants de sortie jusqu 1A.
13
2.3. LES MODULES
SN754410
QUADRUPLE HALFH DRIVER

SLRS007B NOVEMBER 1986 REVISED NOVEMBER 1995

Copyright 1995, Texas Instruments Incorporated


1 POST OFFICE BOX 655303 DALLAS, TEXAS 75265
POST OFFICE BOX 1443 HOUSTON, TEXAS 772511443
1-A Output-Current Capability Per Driver
Applications Include Half-H and Full-H
Solenoid Drivers and Motor Drivers
Designed for Positive-Supply Applications
Wide Supply-Voltage Range of 4.5 V to 36 V
TTL- and CMOS-Compatible
High-Impedance Diode-Clamped Inputs
Separate Input-Logic Supply
Thermal Shutdown
Internal ESD Protection
Input Hysteresis Improves Noise Immunity
3-State Outputs
Minimized Power Dissipation
Sink/Source Interlock Circuitry Prevents
Simultaneous Conduction
No Output Glitch During Power Up or
Power Down
Improved Functional Replacement for the
SGS L293

description
The SN754410 is a quadruple high-current half-H
driver designed to provide bidirectional drive
currents up to 1 A at voltages from 4.5 V to 36 V.
The device is designed to drive inductive loads
such as relays, solenoids, dc and bipolar stepping
motors, as well as other high-current/high-voltage
loads in positive-supply applications.
All inputs are compatible with TTL-and low-level CMOS logic. Each output (Y) is a complete totem-pole driver
with a Darlington transistor sink and a pseudo-Darlington source. Drivers are enabled in pairs with drivers 1 and
2 enabled by 1,2EN and drivers 3 and 4 enabled by 3,4EN. When an enable input is high, the associated drivers
are enabled and their outputs become active and in phase with their inputs. When the enable input is low, those
drivers are disabled and their outputs are off and in a high-impedance state. With the proper data inputs, each
pair of drivers form a full-H (or bridge) reversible drive suitable for solenoid or motor applications.
A separate supply voltage (V
CC1
) is provided for the logic input circuits to minimize device power dissipation.
Supply voltage V
CC2
is used for the output circuits.
The SN754410 is designed for operation from 40C to 85C.
1
2
3
4
5
6
7
8
16
15
14
13
12
11
10
9
1,2EN
1A
1Y
2Y
2A
V
CC2
V
CC1
4A
4Y
HEAT SINK AND
GROUND
3Y
3A
3,4EN
HEAT SINK AND
GROUND
A
H
L
X
EN
H
H
L
Y
H
L
Z
INPUTS

OUTPUT
FUNCTION TABLE
(each driver)
H = high-level, L = low-level
X = irrelevant
Z = high-impedance (off)

In the thermal shutdown


mode, the output is in a high-
impedance state regardless
of the input levels.
NE PACKAGE
(TOP VIEW)
PRODUCTION DATA information is current as of publication date.
Products conform to specifications per the terms of Texas Instruments
standard warranty. Production processing does not necessarily include
testing of all parameters.
Figure 2.10 Schma - SN7544A
Notre choix sest port sur le SN7544A qui permet un meilleur contrle du moteur et est
plus facilement interchangeable si un problme survient.
Lutilisation du SN7544 nous donne un schma de cblage comme ceci :
Figure 2.11 Schma - Cablge du SN7544A
14
2.3. LES MODULES
2.3.5 La carte mre
Introduction
Cette carte a t ralise pour les projets de ralisation technique de lUV EN41. Elle est
construite autour du microcontrleur PIC18F4580. Ce dernier est interfac de nombreux p-
riphriques et composants an dassurer de nombreuses fonctionnalits.
Liaison RS232
Acheur LCD (Displaytech / 2 lignes)
Horloge temps rel (PCF8563)
Contrleur bus CAN (MCP2551)
Boutons poussoirs (RA4, RA5, RB4 et RB5)
Potentiomtre (RA0)
Diodes lectroluminescentes (RA1, RA2, RA3, RB6, RB7)
Buzzer (RC0)


Cette carte a t ralise pour les projets de ralisation technique de
lUV EN41. Elle est construite autour du microcontrleur
PIC18F4580. Ce dernier est interfac de nombreux priphriques et
composants afin dassurer de nombreuses fonctionnalits.

Liaison RS232
Afficheur LCD (Displaytech / 2 lignes)
Horloge temps rel (PCF8563)
Contrleur bus CAN (MCP2551)
Boutons poussoirs (RA4, RA5, RB4 et RB5)
Potentiomtre (RA0)
Diodes lectroluminescentes (RA1, RA2, RA3, RB6, RB7)
Buzzer (RC0)





Figure 2.12 Photo - Carte mre
15
2.3. LES MODULES
Les Entres/Sorties
Nous avons utilis les entres analogiques A0, A1 et A2 pour rcuprer les tensions des LDRs
et des panneaux solaires.
Enn nous avons choisis les sorties B2, B3, B4 et B5 pour la commande du moteur.
Gestion du LCD
Le LCD tant intgr la carte mre nous navions rien mettre en oeuvre.
Remarque : Le LCD utilisant les ports D du PIC, nous ne pouvions les utiliser pour
commander le moteur du coup nous avons utilis les ports B pour le commander.
16
2.4. RALISATION DE LA CARTE SOUS ALTIUM
2.4 Ralisation de la carte sous Altium
2.4.1 Le schma
Figure 2.13 Schma - Carte lle
17
2.4. RALISATION DE LA CARTE SOUS ALTIUM
2.4.2 Le Typon
Figure 2.14 Typon - Carte lle
Le Typon a t cre en respectant quelques rgles :
Largeur des pistes : 40 mil
Taille des pastilles : 80 mil pour les rsistances et 120 mil pour les borniers
Bottom layer seulement, straps autoriss
Ajout dun condensateur CMS aux bornes de lalimentation
18
2.5. MAQUETTE 3D
2.5 Maquette 3D
La maquette 3D a t modlise avec Google SketchUp 8
3
.
Une modlisation 3D pour une utilisation en temps rel tait envisageable sur une dure de
projet un peu plus longue.
Figure 2.15 Dessin - Maquette 3D avec textes
3. Site web : http ://sketchup.google.com/intl/fr/
19
2.5. MAQUETTE 3D
Figure 2.16 Dessin - Maquette 3D avec cotations
20
3 Ralisation Matriel
3.1 Construction de la maquette
La construction de la maquette sest droule sur deux sances. Les deux principaux mat-
riaux utiliss sont le bois et les chutes de plaque dpoxy.
Nous avons utilis de la glue pour coller les plaques dpoxy entre elles, et des vis pour toutes
les autres xations.
Notre maquette est entirement dmontable et facilement transportable. Le seul lger pro-
blme rgne dans la xation du tronc laxe du moteur qui est facilement rsolvable en pais-
sissant laxe du moteur avec du scotch.
Figure 3.1 Photo - Notre maquette
21
3.2. MONTAGE DE LA CARTE
3.2 Montage de la carte
Aprs avoir perc des trous de 0.8mm pour les C.I. et les rsistances, et des trous de 1mm
pour les borniers, on se rend compte que les pastilles sont justes niveau grosseur. Heureusement
le soudage sest droul correctement, pas de bavures et pas de dcollage de pistes.
On peut apercevoir sur les straps jaunes un peu de cuivre, ceci est d au fait que lors du
soudage la temprature du fer fait fondre les parties plastiques les plus proches.
Les supports de la carte sont juste de simple crous avec des boulons pour surlever la carte
par rapport au plateau en bois.
Figure 3.2 Photo - Notre carte
22
3.3. PHASE DE TEST
3.3 Phase de test
La carte ayant plusieurs modules spars (le moteur, les panneaux solaires et les LDRs) nous
avons pu les tester sparment pour voir si tout fonctionnait aprs avoir branch les alimentations
aux borniers.
3.3.1 Test du moteur
Faire fonctionner le moteur ft notre plus gros problme. En eet, nous avions pris comme
sorties du PIC, les pins RB2 RB5 pour contrler le moteur, or apparemment le pin RB5 posait
problme vis vis du PIC. Il tait dj utilis par le PIC par une autre fonction. Du coup le
moteur, nayant que trois signaux de commande sur quatre, ne tournait pas. Aprs quelques
recherches du ct de la datasheet du PIC, nous avons ni par trouver comment dsactiver la
fonction nuisible.
3.3.2 Test des photorsistances
Un rapide test loscilloscope nous a permit de voir que les LDRs fonctionnaient correcte-
ment. Lorsque nous passions notre main au dessus dune LDR, sa tension de sortie rduisait.
3.3.3 Test des panneaux solaires
Les panneaux solaires tant de moyenne qualit, ctait dicile dobtenir 5V part en plein
soleil midi. En moyenne nous rcuprions 2,5-3V.
23
4 Ralisation Logiciel
4.1 Fonctions du Moteur
Vous pourrez trouver en annexe la librairie utilise pour commander le moteur pas pas.
Cest une librairie basique, avec une fonction init() pour initialiser le moteur, une fonction set-
Vitesse() pour rgler la vitesse du moteur pas pas et une fonction avanceStepper() qui permet
de faire tourner le moteur dans les deux sens.
La librairie commande le moteur en lui envoyant une squence prcise (voir 2.3.3) sur ces
bobines.
En voici un extrait :
1 void pasMoteur ( int un_pas )
{
3 switch ( un_pas ) {
case 0: // 1010
5 moteur_pin_1 = 1;
moteur_pin_2 = 0;
7 moteur_pin_3 = 1;
moteur_pin_4 = 0;
9 break ;
case 1: // 0110
11 moteur_pin_1 = 0;
moteur_pin_2 = 1;
13 moteur_pin_3 = 1;
moteur_pin_4 = 0;
15 break ;
case 2: //0101
17 moteur_pin_1 = 0;
moteur_pin_2 = 1;
19 moteur_pin_3 = 0;
moteur_pin_4 = 1;
21 break ;
case 3: //1001
23 moteur_pin_1 = 1;
moteur_pin_2 = 0;
25 moteur_pin_3 = 0;
moteur_pin_4 = 1;
27 break ;
}
29 }
24
4.2. GETTRAVEL()
4.2 getTravel()
Cette fonction compare lerreur moyenne (calcule dans le main) avec la deadband (variable
dnissant la sensibilit) et renvoie une commande (0, 1 ou -1). Le calcul du nombre de pas sert
limiter le Tracker dans sa rotation, ici il est limit entre 0 et 40 pas soit 0 et 144

.
2 / FONCTION GETTRAVEL( ) /
// Foncti on qui r envoi e l a commande du moteur en f onc t i on des LDRs
4 float getTravel ( )
{
6
// Rotati on Hor ai r e
8 if ( erreurMOY < ( deadband 1) )
{
10 if ( nbdepas > 0)
{
12 nbdepas;
return 1. 0;
14 }
}
16 else
{
18 // Rotati on AntiHor ai r e
if ( erreurMOY > deadband )
20 {
if ( nbdepas < 40)
22 {
nbdepas++;
24 return 1 . 0 ;
}
26 }
else
28 {
//On ne bouge pas dans l a deadband
30 return 0 . 0 ;
}
32 }
}
25
4.3. MAIN()
4.3 Main()
1 / FONCTION MAIN( ) /
void main ( void )
3 {
5 // De f i ni t i on des E/S du moteur
TRISBbits . TRISB5 = 0; / Sor t i e B5 /
7 TRISBbits . TRISB4 = 0; / Sor t i e B4 /
TRISBbits . TRISB3 = 0; / Sor t i e B3 /
9 TRISBbits . TRISB2 = 0; / Sor t i e B2 /
11 // De f i ni t i on des E/S des LDR
TRISAbits . TRISA1 = 1; / ent r e A1 /
13 TRISAbits . TRISA0 = 1; / ent r e A0 /
15 // De f i ni t i on des E/S des panneaux s o l a i r e
TRISAbits . TRISA2 = 1; / ent r e A2 /
17
/ Re gi s t r e ADCON /
19 ADCON1bits . PCFG3 = 0;
ADCON1bits . PCFG2 = 0;
21 ADCON1bits . PCFG1 = 0;
ADCON1bits . PCFG0 = 0;
23
// On i n i t i a l i s e l e moteur pas pas
25 initStepper ( ) ;
27 // On r e g l e sa v i t e s s e a 100 t r s /min
setVitesseStepper ( 100) ;
29
// On i n i t i a l i s e l e c onve r t i s s e ur ADC
31 OpenADC ( ADC_FOSC_64 & ADC_RIGHT_JUST& ADC_20_TAD , ADC_CH0 & ADC_INT_OFF&
ADC_REF_VDD_VSS , 0 ) ;
Delay10TCYx ( 5) ;
33
// On i n i t i a l i s e l e LCD
35 XLCDInit ( ) ; // i n i t i a l i s a t i o n du module LCD
XLCDL1home ( ) ; // Posi ti onnement l a premi ere l i g ne
37 XLCDDisplayOnCursorOff ( ) ; // On n a f f i c h e pas l e cur s eur
39 {
while ( 1)
41 {
/ /
43 / Conversi on ADC /
/ /
45
// On r ecuper e l a val eur de l a LDR de dr oi t e
47 SetChanADC ( ADC_CH0 ) ; // s e l e c t i o n RA0
Delay10TCYx ( 5) ;
49 ConvertADC ( ) ; // Demarre l a conver s i on
while ( BusyADC ( ) ) ; // Attente ADC conver s i on
51 valeurDroite = ReadADC ( ) ; // On l i t l e r e s ul t a t et l e met
dans val eur Dr oi t e
53 // On r ecuper e l a val eur de l a LDR de gauche
SetChanADC ( ADC_CH1 ) ; // s e l e c t i o n RA1
55 Delay10TCYx ( 5) ;
ConvertADC ( ) ; // Demarre l a conver s i on
26
4.3. MAIN()
57 while ( BusyADC ( ) ) ; // Attente ADC conver s i on
valeurGauche = ReadADC ( ) ; // On l i t l e r e s ul t a t et l e met dans
val eurGauche
59
// On r ecuper e l a val eur de l a t e ns i on des panneaux s o l a i r e s
61 SetChanADC ( ADC_CH2 ) ; // s e l e c t i o n RA2
Delay10TCYx ( 5) ;
63 ConvertADC ( ) ; // Demarre l a conver s i on
while ( BusyADC ( ) ) ; // Attente ADC conver s i on
65 tension = ReadADC ( ) ; // On l i t l e r e s ul t a t et l e met dans t e ns i on
67 / /
/ Commande Moteur /
69 / /
71 // Cal cul de l e r r e ur
erreur = valeurGauche valeurDroite ;
73
// Cal cul de l e r r e ur moyenne
75 erreurMOY = ( erreurMOY + erreur ) / 2;
77 // On r ecuper e l a commande du moteur ( 0 , 1 ou 1)
travel = getTravel ( ) ;
79
// On f a i t t our ner l e moteur en f onc t i on
81 avanceStepper ( travel ) ;
83 // Cal cul de l angl e ac t ue l du moteur
angle = nbdepas 3 . 6 ;
85
// Cal cul de l a t e ns i on mapper des panneaux
87 tensionmapper = tension 5. 0/1024. 0;
89 / /
/ Af f i chage LCD /
91 / /
93 // On a f f i c h e l a t e ns i on
XLCDL1home ( ) ;
95 sprintf ( buf , "Tension ") ;
XLCDPutRamString ( buf ) ;
97 ftoa ( tensionmapper , buf , 2 , f) ;
XLCDPutRamString ( buf ) ;
99 sprintf ( buf , " V") ;
XLCDPutRamString ( buf ) ;
101 XLCDL2home ( ) ;
// On a f f i c h e l angl e
103 sprintf ( buf , "Angle ") ;
XLCDPutRamString ( buf ) ;
105 ftoa ( angle , buf , 2 , f) ;
XLCDPutRamString ( buf ) ;
107 sprintf ( buf , " deg") ;
XLCDPutRamString ( buf ) ;
109
}
111 }
}
27
5 Conclusion
5.1 Amliorations possibles
Pour amliorer lecacit du systme, il existe plusieurs solutions, toutes envisageables sur
un projet plus long terme :
Remplacer le moteur pas pas par un servo-moteur :
* Plus besoin de +12V mais +5V pour alimenter le servo
* Plus facile mettre en oeuvre
* Couple de maintient plus important
* Pas besoin de lalimenter constamment => gain dnergie
Ajouter un servo-moteur pour lorientation en hauteur :
* Gain dnergie
Faire un systme auto-aliment par les panneaux :
* Aucune source dnergie externe
Rajouter une carte SD pour lenregistrement des donnes
5.2 Bilan
Etant donn quil y a trs peu de notation individuelle, lobjectif de cette UV rside dans un
autre concept, le cahier des charges respecter et de la cration de A Z dun projet.
Chaque tapes de llaboration du projet nous ont appris beaucoup quant la conception et
la fabrication de cartes lectroniques. Cela ft galement une dcouverte des Microcontrleurs
pour nous. Ce projet constitue donc pour nous une premire exprience trs enrichissante que
nous saurons trs probablement mettre oeuvre dans le futur. Laspect gestion de projet nous
a galement permis de mieux percevoir les dicults inhrentes au management du temps dans
les projets techniques.
En conclusion notre projet marche trs bien, notre Tracker solaire suit sans souci une lumire
avec un peu de latence mais rien de gnant. En ralit le soleil se dplace tellement lentement
que nous pourrions mme faire une mise jour du dplacement que tous les quarts dheure.
28
A Programme
A.1 TrackerSolaire.c
/ /
2 / Tr ac ke r Sol ai r e /
/ /
4 / Auteur : Goutenoi r Samuel & Toui l l on Deni s /
/ Pri ntemps 2011 /
6 / /
8 // I n i t i a l i s a t i o n de l a f onc t i on get Tr avel ( )
float getTravel ( ) ;
10
12 / INCLUDES /
14 #include <us ar t . h>
#include <s t di o . h>
16 #include <p18f 4580 . h>
#include <c onf i g . h>
18 #include <s t epper . h>
#include <del ays . h>
20 #include <adc . h>
#include "xlcd.h"
22
24 / DEFINE /
26 #define XLCDDisplayOnCursorOff ( ) XLCDCommand(0x0C)
28
/ VARIABLES /
30
float valeurGauche = 0; // Val eur LDR gauche
32 float valeurDroite = 0; // Val eur LDR dr oi t e
float erreur =0; // La de vi at i on ent r e l e s deux LDRs
34 float erreurMOY = 0; // La moyenne de l a de vi at i on
float deadband = 20; // S e n s i b i l i t e : 10 = 10 to +10
36 float travel ; // Nombre de tour voyager ( 0 , 1 , 1)
float nbdepas = 20; // Nombre de pas du moteur ac t ue l (20 pour l e mettre au
cent r e
38 float angle = 0; // Angle du moteur ( nbdepas 3. 6)
float tension = 0; // Tensi on des panneaux en s o r t i e du c onve r t i s s e ur (0
1023)
40 float tensionmapper = 0; // Tensi on des panneaux s o l a i r e mapper (0 5)
42 unsigned char buf [ 3 ] ; // Buf f er pour l e LCD
29
A.1. TRACKERSOLAIRE.C
44
/ FONCTION GETTRAVEL( ) /
46 // Foncti on qui r envoi e l a commande du moteur en f onc t i on des LDRs
float getTravel ( )
48 {
50 // Rotati on Hor ai r e
if ( erreurMOY < ( deadband 1) )
52 {
if ( nbdepas > 0)
54 {
nbdepas;
56 return 1. 0;
}
58 }
else
60 {
// Rotati on AntiHor ai r e
62 if ( erreurMOY > deadband )
{
64 if ( nbdepas < 40)
{
66 nbdepas++;
return 1 . 0 ;
68 }
}
70 else
{
72 //On ne bouge pas dans l a deadband
return 0 . 0 ;
74 }
}
76 }
78 / FONCTION MAIN( ) /
void main ( void )
80 {
82 // De f i ni t i on des E/S du moteur
TRISBbits . TRISB5 = 0; / Sor t i e B5 /
84 TRISBbits . TRISB4 = 0; / Sor t i e B4 /
TRISBbits . TRISB3 = 0; / Sor t i e B3 /
86 TRISBbits . TRISB2 = 0; / Sor t i e B2 /
88 // De f i ni t i on des E/S des LDR
TRISAbits . TRISA1 = 1; / entre A1 /
90 TRISAbits . TRISA0 = 1; / entre A0 /
92 // De f i ni t i on des E/S des panneaux s o l a i r e
TRISAbits . TRISA2 = 1; / entre A2 /
94
/ Re gi s t r e ADCON /
96 ADCON1bits . PCFG3 = 0;
ADCON1bits . PCFG2 = 0;
98 ADCON1bits . PCFG1 = 0;
ADCON1bits . PCFG0 = 0;
100
// On i n i t i a l i s e l e moteur pas pas
102 initStepper ( ) ;
30
A.1. TRACKERSOLAIRE.C
104 // On r e g l e sa v i t e s s e a 100 t r s /min
setVitesseStepper ( 100) ;
106
// On i n i t i a l i s e l e c onve r t i s s e ur ADC
108 OpenADC ( ADC_FOSC_64 & ADC_RIGHT_JUST& ADC_20_TAD , ADC_CH0 & ADC_INT_OFF&
ADC_REF_VDD_VSS , 0 ) ;
Delay10TCYx ( 5) ;
110
// On i n i t i a l i s e l e LCD
112 XLCDInit ( ) ; // i n i t i a l i s a t i o n du module LCD
XLCDL1home ( ) ; // Posi ti onnement l a premi ere l i g ne
114 XLCDDisplayOnCursorOff ( ) ; // On n a f f i c h e pas l e cur s eur
116 {
while ( 1)
118 {
/ /
120 / Conversi on ADC /
/ /
122
// On r ecuper e l a val eur de l a LDR de dr oi t e
124 SetChanADC ( ADC_CH0 ) ; // s e l e c t i o n RA0
Delay10TCYx ( 5) ;
126 ConvertADC ( ) ; // Demarre l a conver s i on
while ( BusyADC ( ) ) ; // Attente ADC conver s i on
128 valeurDroite = ReadADC ( ) ; // On l i t l e r e s ul t a t et l e met
dans val eur Dr oi t e
130 // On r ecuper e l a val eur de l a LDR de gauche
SetChanADC ( ADC_CH1 ) ; // s e l e c t i o n RA1
132 Delay10TCYx ( 5) ;
ConvertADC ( ) ; // Demarre l a conver s i on
134 while ( BusyADC ( ) ) ; // Attente ADC conver s i on
valeurGauche = ReadADC ( ) ; // On l i t l e r e s ul t a t et l e met dans
val eurGauche
136
// On r ecuper e l a val eur de l a t e ns i on des panneaux s o l a i r e s
138 SetChanADC ( ADC_CH2 ) ; // s e l e c t i o n RA2
Delay10TCYx ( 5) ;
140 ConvertADC ( ) ; // Demarre l a conver s i on
while ( BusyADC ( ) ) ; // Attente ADC conver s i on
142 tension = ReadADC ( ) ; // On l i t l e r e s ul t a t et l e met dans t e ns i on
144 / /
/ Commande Moteur /
146 / /
148 // Cal cul de l e r r e ur
erreur = valeurGauche valeurDroite ;
150
// Cal cul de l e r r e ur moyenne
152 erreurMOY = ( erreurMOY + erreur ) / 2;
154 // On r ecuper e l a commande du moteur ( 0 , 1 ou 1)
travel = getTravel ( ) ;
156
// On f a i t t our ner l e moteur en f onc t i on
158 avanceStepper ( travel ) ;
160 // Cal cul de l angl e ac t ue l du moteur
31
A.2. CONFIG.H
angle = nbdepas 3 . 6 ;
162
// Cal cul de l a t e ns i on mapper des panneaux
164 tensionmapper = tension 5. 0/1024. 0;
166 / /
/ Af f i chage LCD /
168 / /
170 // On a f f i c h e l a t e ns i on
XLCDL1home ( ) ;
172 sprintf ( buf , "Tension ") ;
XLCDPutRamString ( buf ) ;
174 ftoa ( tensionmapper , buf , 2 , f) ;
XLCDPutRamString ( buf ) ;
176 sprintf ( buf , " V") ;
XLCDPutRamString ( buf ) ;
178 XLCDL2home ( ) ;
// On a f f i c h e l angl e
180 sprintf ( buf , "Angle ") ;
XLCDPutRamString ( buf ) ;
182 ftoa ( angle , buf , 2 , f) ;
XLCDPutRamString ( buf ) ;
184 sprintf ( buf , " deg") ;
XLCDPutRamString ( buf ) ;
186
}
188 }
}
TrackerSolaire.c
A.2 Cong.h
1 / Fi c hi e r de c onf i g /
3 #ifndef CONFIG_H
#define CONFIG_H
5
#include <p18F4580 . h>
7
/ De f i ni t i on des pi ns du moteur /
9
#define moteur_pin_1 LATBbits . LATB5 / Ec r i t ur e sur PortB Bi t B5 /
11 #define moteur_pin_2 LATBbits . LATB4 / Ec r i t ur e sur PortB Bi t B4 /
#define moteur_pin_3 LATBbits . LATB3 / Ec r i t ur e sur PortB Bi t B3 /
13 #define moteur_pin_4 LATBbits . LATB2 / Ec r i t ur e sur PortB Bi t B2 /
15 / De f i ni t i on du nombre de pas du moteur ( pour un tour ) /
17 #define NBDEPAS 100
19 #endif CONFIG_H
Cong.h
32
A.3. STEPPER.H
A.3 Stepper.h
1 /
s t epper . c Li br a i r i e pour moteur pas a pas
3
Pour moteur PaP uni po l a i r e ou bi po l a i r e u t i l i s a n t 2 ou 4 f i l s de c ont r o l e s .
5
La sequence de c ont r ol e pour 4 f i l s e s t comme s ui t :
7
Pas C0 C1 C2 C3
9 1 1 0 1 0
2 0 1 1 0
11 3 0 1 0 1
4 1 0 0 1
13
15 /
17 #ifndef STEPPER_H
#define STEPPER_H
19
21 / Foncti ons /
23 // Creati on des moteurs
void initStepper ( void ) ;
25
// De f i ni e l a v i t e s s e
27 void setVitesseStepper ( long vitesse ) ;
29 // Foncti on ext er ne qui f a i t avancer l e moteur d un nombre de pas
void avanceStepper ( float nb_de_pas ) ;
31
// Foncti on i nt e r ne
33 void pasMoteur ( int un_pas ) ;
35 #endif STEPPER_H
Stepper.h
A.4 Stepper.c
/
2 s t epper . c Li br a i r i e pour moteur pas a pas
4 Pour moteur PaP uni po l a i r e ou bi po l a i r e u t i l i s a n t 2 ou 4 f i l s de c o nt r ol e s .
6 La sequence de c ont r ol e pour 4 f i l s e s t comme s ui t :
8 Pas C0 C1 C2 C3
1 1 0 1 0
10 2 0 1 1 0
3 0 1 0 1
12 4 1 0 0 1
14
/
33
A.4. STEPPER.C
16
#include <s t epper . h>
18 #include <c onf i g . h>
#include <del ays . h>
20
/ Var i abl es Gl obal es pour l e Stepper /
22
int step_direction ; // Di r e c t i on de l a r ot at i on
24 int step_vitesse ; // v i t e s s e en t r s /min
int step_numero ; // Quel pas l e moteur e s t act uel l ement ( 1 , 2 , 3 ou 4)
26 int step_nb_de_pas ;
int step_direction ;
28
unsigned long step_delay ; // temps ent r e chaque pas , en ms , en f c t de l a
v i t e s s e
30
// numero des pi ns du moteurs :
32 int step_moteur_pin_1 ;
int step_moteur_pin_2 ;
34 int step_moteur_pin_3 ;
int step_moteur_pin_4 ;
36
long step_last_step_time ;
38
void initStepper ( void )
40 {
step_numero = 0;
42 step_vitesse = 0;
step_direction = 0;
44 step_last_step_time = 0;
step_nb_de_pas = NBDEPAS ;
46 }
48 /
De f i ni l a v i t e s s e du moteur en t r /min
50 /
void setVitesseStepper ( long vitesse )
52 {
step_delay = 60L 1000L / step_nb_de_pas / vitesse ;
54 }
56 /
Bouge l e moteur du nombre de pas "nb_de_pas"
58 /
void avanceStepper ( float nb_de_pas )
60 {
int pas_restant ;
62 // Cb de pas i l r e s t e
if ( nb_de_pas > 0) {pas_restant = nb_de_pas ; }
64 if ( nb_de_pas < 0) {pas_restant = nb_de_pas ; }
66
// Determi ne l a di r e c t i o n en s e basant sur l e + ou de "nb_de_pas"
68 if ( nb_de_pas > 0) {step_direction = 1; }
if ( nb_de_pas < 0) {step_direction = 0; }
70
72 // Decremente l e nombre de pas , on avance d un pas a chaque f o i s :
while ( pas_restant > 0) {
74 // On attend un moment
34
A.4. STEPPER.C
Delay10KTCYx ( step_delay /4) ; // 10000TCY step_del ay (TCY = 0. 4 us )
76
// Incremente ou decremente l e numero du pas
78 // en f onc t i on de l a di r e c t i o n
if ( step_direction == 1) {
80 step_numero++;
if ( step_numero == step_nb_de_pas ) {
82 step_numero = 0;
}
84 }
else {
86 if ( step_numero == 0) {
step_numero = step_nb_de_pas ;
88 }
step_numero;
90 }
// On decremente
92 pas_restant;
// On met l e numero c or r e c t 0 , 1 , 2 , or 3:
94 pasMoteur ( step_numero % 4) ;
}
96 }
98 /
Fai t t our ner l e moteur avant ou a r r i e r e .
100 /
void pasMoteur ( int un_pas )
102 {
switch ( un_pas ) {
104 case 0: // 1010
moteur_pin_1 = 1;
106 moteur_pin_2 = 0;
moteur_pin_3 = 1;
108 moteur_pin_4 = 0;
break ;
110 case 1: // 0110
moteur_pin_1 = 0;
112 moteur_pin_2 = 1;
moteur_pin_3 = 1;
114 moteur_pin_4 = 0;
break ;
116 case 2: //0101
moteur_pin_1 = 0;
118 moteur_pin_2 = 1;
moteur_pin_3 = 0;
120 moteur_pin_4 = 1;
break ;
122 case 3: //1001
moteur_pin_1 = 1;
124 moteur_pin_2 = 0;
moteur_pin_3 = 0;
126 moteur_pin_4 = 1;
break ;
128 }
}
Stepper.c
35
TABLE DES FIGURES
Table des gures
2.1 Dessin - Maquette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Organigramme - Principe de fonctionnement . . . . . . . . . . . . . . . . . . . . . 9
2.3 Schma bloc - Systme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Photo - Panneaux solaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 Photo - Photorsistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Schma - Cblage du LM358 avec les LDRs . . . . . . . . . . . . . . . . . . . . . 11
2.7 Photo - Moteur pas pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.8 Dessin - Moteur pas pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.9 Tableau - Alimentation des bobines . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.10 Schma - SN7544A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.11 Schma - Cablge du SN7544A . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.12 Photo - Carte mre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.13 Schma - Carte lle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.14 Typon - Carte lle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.15 Dessin - Maquette 3D avec textes . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.16 Dessin - Maquette 3D avec cotations . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1 Photo - Notre maquette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Photo - Notre carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
36

Você também pode gostar