Skip to content

Analyseur de Gisement Solaire

Objectif

L'AGS - Analyseur de Gisement Solaire - est un produit composé d'un panneau solaire inclinable. AGS

Le but de ce projet est de concevoir plusieurs briques indépendantes:

  • Une interface graphique en LabVIEW pour superviser le panneau solaire
  • Un microcontrôleur pour pour lire les données analogiques grâce à l'ADC d'un microcontrôleur Microchip PIC18F45K20
  • Un filtre pour filtrer le signal analogique, notamment perturbé par le 50 Hz du secteur

Et enfin, la gestion de projet, avec la conception d'un diagramme de Gantt. Le projet a été réalisé en groupe de 3 personnes.

Réalisation

Interface graphique

LabVIEW est un langage de programmation graphique. Je ne l'avais jamais utilisé auparavant, et j'ai donc dû apprendre à l'utiliser.

Une DLL était fournie, proposant différentes fonctions pour communiquer avec l'AGS. J'ai donc dû créer une interface graphique permettant de communiquer avec l'AGS, et de visualiser les données.

Cliquer pour afficher des captures d'écran
IHM
Code LabVIEW

Microcontrôleur

La partie microcontrôleur consistait à lire les données analogiques à l'aide de l'ADC du PIC18F45K20, et à allumer certaines LEDs en fonction de la valeur lue. J'ai utilisé le logiciel MPLAB X pour programmer le microcontrôleur en C.

Pour laisser le temps à l'ADC d'échantillonner le signal, j'ai utilisé un timer pour déclencher l'échantillonnage toutes les 10ms.

c
void temporisation(void)
{
    // configuration du contenu initial du timer
    // afin d'overflow au bout d'environ 500ms
    TMR0H = OxE1;
    TMR0L = Ox7A;

    // on démarre le timer
    T0CONbits.TMR0ON = 1;

    // on attend que TMR0IF ne soit plus nul, donc qu'il ait overflow
    while(INTCONbits.TMR0IF == 0b0) {}

    if (INTCONbits.TMR0IF == 0b1)
    {
        // on éteint et on reset le timer
        TOCONbits.TMROON = 0b0;
        INTCONbits.TMROIF = 0b0;
    }
}

Enfin, il faut configurer les registres de l'ADC pour qu'il fonctionne correctement, ainsi que les registres pour les LEDs.

c
void main(void)
{
    // initialisation des LEDs
    TRISD = 0b00000000;
    PORTD = 0xFF;

    // initialisation de l'ADC sur RA0
    initADC();

    // configuration TMR0 en 16 bits et prescaler 1:16
    T0CON = 0b00000111;
    INTCON = 0x00; // on reset le registre INTCON

    while (1) {
        PORTD = ADC_read();
    }

}
Cliquer pour afficher le code relatif à l'ADC
c
void initADC(void)
{
    // configuration de l'ADC
    ADCON1 = 0b00000000;
    ADCON2 = 0b00111000;
    ADCON0 = 0b00000001;
}

int ADC_read(void)
{
    ADCON0bits.GO_DONE = 1; // on démarre la conversion
    while (ADCON0bits.GO_DONE == 1); // on attend la fin de la conversion
    return ADRESH; // on retourne la valeur lue
}