Vous êtes sur la page 1sur 10

Rapport du mini-projet d’autonomie d’un objet connecté

Semestre 9

Autonomie des systèmes communicants

FAYE Michel
VIVET Jayson

Professeur : Monsieur Jean-François DIOURIS

Introduction :
1
Ce module d’autonomie des systèmes communicants a été abordé dans le semestre 9 et
nous a permis d’en savoir un peu sur les sources d’énergie autonomes et l’optimisation de
l’énergie consommée par les circuits. Les objectifs de ce mini-projet sont :
- L’étude de l’architecture d’un noeud;
- La réalisation électronique et la programmation du micro-contrôleur
- La modélisation et la mesure de la consommation du dispositif;
- L’optimisation de la consommation du micro-contrôleur et du capteur;
- L’optimisation de la consommation méthode de transmission;
- Le protocole de transmission

Q1 :

2
En consultant la datasheet, nous repérons principalement les composants suivants

- 78L05 est un régulateur de tension (linéaire)


- PIC16F876A est un microcontrôleur
- LM35 est un capteurs de température (Vout sur RA0/AN0 et VCC sur alimsensor et
RB0)
- BIM3B-869.85 est un radio transceiver (émetteur et récepteur)

Q2 :
On peut retenir le synoptique de base ci-dessous. Dans ce dernier on considère les blocs
les plus importants du capteur communicant, à l’image du régulateur de tension, du micro-
contrôleur et du transceiver.

Q3 :

Les connecteurs P4, P5 et P6 sont utilisés pour :


- P4 contrôle l’alimentation de la cate
- P5 contrôle l’alimentation du transceiver
- P6 contrôle l’alimentation du microcontrôleur

4:
Dans un premier temps, on crée un projet avec MPLAB et en suivant les étapes décrites sur
le polycopié de TP, on fait la configuration du micro-contrôleur.
Ensuite, on insère un programme permettant de faire clignoter la LED. Ce programme est
fourni sur le polycopié. On a ainsi réussi à vérifier que la carte est bien fonctionnelle.
L'étape suivante a été de mesurer la consommation de la lampe.

Q4.3 :

3
On recueille à l’aide de l’oscilloscope les valeurs de tensions lorsque la LED est allumée et
lorsqu’elle est éteinte. Connaissant la valeur de la résistance aux bornes de laquelle la
tension a été mesurée, nous déduisons le courant. Ainsi, nous pouvons calculer le courant
moyen en utilisant une intégrale et en déduire la puissance moyenne.

Voff = 25mV, Von = 45mV


Ioff = 2.5mA, Ion = 4.5mA
En intégrant sur le temps, on a :
Imoy = 2.5*0.8 + 4.5*0.2 = 2.9mA (0.8s et 0.2s correspondent aux temps d'extinction et
d’allumage de la LED)

Figure : Tension mesurée aux bornes de la résistance

La puissance moyenne est alors de Pmoy = U*Imoy = 5 * 2.9 = 14.5mW

5 Utilisation du mode sommeil

Le mode sommeil permet de réaliser une économie d’énergie dans le cas où le micro-
contrôleur ne réalise aucune action. L'instruction permettant d’utiliser ce mode sommeil est :
asm(“sleep”). Le réveil pourra se faire par l’utilisation du watchdog timer. Ce compteur est
activé par un oscillateur RC interne. Lorsque le compteur dépasse sa capacité, un reset est
généré si le micro est en fonctionnement normal.
Pour fixer la période de réveil, il est nécessaire de positionner les bits du registre OPTION
en utilisant les instructions fournies dans le sujet de TP.
On autorise aussi l’utilisation du WatchDog timer dans les registres de configuration avec
l’instruction asm(“CLRWDT”).
Le programme utilisé pour cette partie est donné ci-dessous.

/*
* File: main.c
* Author: E198145A
*

4
* Created on 1 février 2023, 08:54
*/

#include <stdio.h>
#include <stdlib.h>

#include <xc.h>

// PIC16LF876A Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = ON // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial
Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data
EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write
protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code
protection off)

#define _XTAL_FREQ 8000000

#define TRISLED TRISCbits.TRISC5


#define LED PORTCbits.RC5

int main(int argc, char** argv){


//Configuration de la led
TRISLED = 0;
OPTION_REGbits.PSA=1;
OPTION_REGbits.PS2=1;
OPTION_REGbits.PS1=0;
OPTION_REGbits.PS0=1;
asm("CLRWDT");
while(1)
{
LED = 0;
asm("sleep");
LED = 1;
asm("sleep");
}

Q5 :
On procède comme précédemment pour mesurer la consommation du micro-contrôleur.

5
Voff = 1.8mV, Von = 22.8mV
Ioff = 0.18mA, Ion = 2.28mA
En intégrant sur le temps, on a :
Imoy = (0.18 + 2.28)/2 = 1.23 mA rapport cyclique de 0.5

La puissance moyenne est alors de Pmoy = U*Imoy = 5 * 1.23 = 6.15mW < 14.5mW
On voit qu’on économise plus de 8mW de puissance, ce qui est quand même très grand vu
les ordres de grandeur utilisés. On peut alors conclure que pour un système communicant, il
est essentiel de mettre ce dernier en mode sommeil lorsqu’il ne fait aucune tâche afin
d’utiliser le moins d’énergie possible et d’avoir une bonne longévité en termes d’énergie.

Q6 : Capteur de température
En regardant la datasheet du capteur de température utilisé, on voit qu’il fonctionne de la
manière suivante. La tension de sortie du LM35 est à 0V à 0° et augmente de 10 mV pour
chaque degrés au-dessus de 0°.

6
Q6 et Q7 :
Ci-dessous nous voyons le code demandé pour ces deux questions.
Nous voyons dans le main que nous initialisons le capteur en appelant la fonction
initAdc sur le channel 0. Cette fonction change les bits du microcontrôleur pour lire la sortie
du capteur et ensuite elle commence la lecture d’une température. La ligne suivante appel
AdcRead qui assigne la valeur lu dans la mémoire du microcontrôleur. Suite à cela nous
n’avons plus besoin de changer ces bits sur le microcontrôleur ainsi pour effectuer les
mesures suivantes nous n’avons plus besoin de initADC et nous appelons la fonction
adcStartConv pour commencer une prise de valeur. Enfin, pour prendre la moyenne de ces
valeurs nous créons un boucle for qui effectue une somme de chaque valeur mesuré qui
sera divisé à la fin par le nombre de mesures.

/*
* File: main.c
* Author: E198145A
*
* Created on 1 février 2023, 08:54
*/

#include <stdio.h>
#include <stdlib.h>

#include <xc.h>

7
// PIC16LF876A Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial
Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data
EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write
protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code
protection off)

#define _XTAL_FREQ 8000000


#define TRISLED TRISCbits.TRISC5
#define LED PORTCbits.RC5
#define CurrVSTemp 0.48

void initAdc(int channel)


{
ADCON0bits.ADCS=3;
ADCON0bits.CHS=channel;
ADCON0bits.ADON=1;
ADCON1bits.ADFM=1;
ADCON1bits.PCFG=0;
// Start the conversion
ADCON0bits.GO_nDONE=1;
}

void adcStartConv()
{
ADCON0bits.GO_nDONE = 1;
}

int adcRead()
{
//Attend la fin de conversion
while (ADCON0bits.GO_nDONE) {}

return ((ADRESH << 8) + ADRESL);


}

int main(int argc, char** argv){


//Configuration de la led
TRISLED = 0;
OPTION_REGbits.PSA=1;
OPTION_REGbits.PS2=1;
OPTION_REGbits.PS1=0;
OPTION_REGbits.PS0=1;

8
asm("CLRWDT");

TRISBbits.TRISB0=0;
PORTBbits.RB0=1;
int chan=0;
initAdc(chan);
int temp1=adcRead();
float temp= temp1/1023.0*5.0;
temp=temp*100.0;
float Tempav=temp;
for (int i=0;i<9;i++){
adcStartConv();
temp1=adcRead();
temp=temp1/1023.0*500.0;
Tempav=+temp;
}
Tempav=Tempav/10;

/*while(1)
{
LED = 0;
asm("sleep");
LED = 1;
asm("sleep");
}*/

Q8 :
Après avoir fait la prise de valeur des tensions, similairement aux question précédentes,
nous observons que la tension aux bornes de la résistance est constante et que donc le
courant la traversant l’est aussi:
24.6
I= =2.46 mA
10

On en déduit que la puissance consommé ici est la suivante:


P = U * I = 5*2.46 = 12.3mW

Malheureusement, nous n’avons pas réussi à réaliser les parties suivantes de ce


projet. Nous avons réussi à émettre quelque chose que la carte du professeur à reçu, mais
ce que nous transmettions ne correspondait pas à nos attentes. De plus, le code que nous
avons réalisé pour cette partie n’a pas été importé sur nos clefs USB et nous n’avons pas pu
le fournir dans le document. Ceci termine notre rapport sur le projet de consommation.

9
Conclusion
Ce mini-projet nous a permis de mieux comprendre le cours sur l’autonomie des
systèmes communicants. Il nous a aussi permis entre autres de revoir les bases du langage
C. Nous avons vu comment le mode sommeil peutaider à économiser de l’énergie pour que
l’appareil dure le plus longtemps possible.

10

Vous aimerez peut-être aussi