Académique Documents
Professionnel Documents
Culture Documents
BARRIGA Ricardo
Elec5 - Systèmes
Embarqués
Objectif : L’objectif du TP est d’étudier la consommation des objets connectés et de concevoir
une application intégrant la gestion de la consommation.
I.- Introduction :
Dans ce TP nous allons étudier la consommation d’une carte Arduino mini pro qui contient une
antenne LoRa et que peut être compilé avec l’IDE Arduino. Nous allons envoyer des données en
utilisant le protocole LoRa afin d’étudier la consommation en faisant varier les paramètres de
configuration d’émission et réception.
II.- Développement :
Pour commencer nous allons télécharger l’IDE Arduino et aussi le driver pour la carte. Ensuite
sur Arduino on a choisi comme gestionnaire de Carte Arduino Pro or Pro mini. Il faut installer
aussi la librairie LORA.h. Cela peut se faire avec le gestionnaire de bibliothèques. On a choisi
aussi le processeur Atmega328 les programmes LoraSender.ino et LoraReceiver.ino.
Nous avons choisi 865E6 comme fréquence d’émission pour ne pas perturber des autres
canaux.
Nous pouvons voir dans l’image ci-dessous le programme LoraReceiver.ino qui sera
téléchargé dans une autre carte UCA.
Nous avons choisi 865E6 Hz comme fréquence pour recevoir le message dans le même
canal.
Nous modifions le message envoyé pour le reconnaitre. Donc on peut voir le message
reçu dans le moniteur série du récepteur. Nous pouvons voir aussi qu’on obtient le
RSSI(Received signal strength indication) qui est la puissance du signal en réception, ce qui va
sera affecté par les paramètres utilisés pour la transmission et des perturbations trouvés dans
le chemin.
Ex 2 : Après avoir étudié l’architecture de la plateforme, lister les différentes fonctions qui
nécessitent d’être caractérisées en consommation ainsi que les paramètres qui interviennent.
Dans cette partie nous allons étudier la consommation énergétique par rapport aux différents
paramètres de transmission. On sait que la portée d’une communication LoRa est déterminée
par sa bande passante, la puissance de sortie du signal ainsi que par le facteur d’étalement utilisé
– Spreading Factor (SF). L’étalement du signal augmente sa portée, au détriment du débit car il
est transmis sur une plus longue période. Au détriment également de l’autonomie de
l’équipement car la communication radio consume de l’énergie.
Nous avons donc une carte UCA émetteur et une carte UCA récepteur comme on peut voir dans
l’image ci-dessous :
Nous pouvons confirmer que plus on augmente le Spreading Factor, plus on consomme de
l’énergie avec un maximum de watts consommés dans 12SF.
Nous pouvons voir que les watts et les ampères en émission augmentent considérablement.
Aussi on peut voir que le RSSI (puissance du signal en réception) augmente si on augmente la
puissance d’émission.
Ensuite on va modifier le coding rate. Le coding rate fait référence à la proportion de bits
transmis qui transportent réellement des informations. Le taux de codage peut être 6/8, 4/8,
etc. Donc, si CR est 4/8, nous transmettons deux fois plus de bits que ceux contenant des
informations. Donc on va modifier de 5 à 8 le Coding Rate et on obtient le tableau suivant :
Nous pouvons voir ci-dessous les modèles de consommation par rapport aux différents
paramètres.
Consommation en fonction du Spreading factor
0.7
Consommation en émission(W)
0.6 y = 0.0658x - 0.1795
0.5
0.4
0.3
0.2
0.1
0
0 2 4 6 8 10 12 14
Spreading Factor
Pour connecter notre capteur on a fait attention de ne pas utiliser les pins 3, 6, 7 qui sont utilisés
par l’antenne LoRa. C’est pour cette raison qu’on utilise le digital pin 5 et l’analogique pin A0.
Ensuite on va configurer dans le setup le digital pin 5 comme input et le 13 comme output pour
la led. Après on va afficher la valeur du A0 dans le moniteur série et on va allumer la Led en
utilisant le pin 13.
Quand on rapproche l’aimant on obtient des valeurs proches de 0 et quand on éloigne l’aimant
on obtient 1023.
Nous voudrions connaitre la duré de vie de la batterie. Pour le savoir nous allons évaluer
l’autonomie de deux batteries : 3,7V, 1200 mAh et 3,7V, 2850 mAh.
D’abord on a trouvé que le courant en émission est de 0.053 et nous allons émettre pendant
100ms selon le tableau d’avant qui montre le time on air. Ensuite on a mis le LoRa en mode sleep
et aussi la carte pour mesurer le courant consommé quand on n’émet pas.
Comme on peut voir dans l’image ci-dessus on a réussi diminuer la consommation à 0.019A
minimum. Par rapport à notre projet nous allons envoyer les données chaque 5 secondes.
I(A)
Sending data Sleep mode
0.053A
0.019A
s
T(s)
0.1s 4.9s
Nous allons multiplier le courant fois le temps d’envoie et du temps en sleep mode. Ensuite nous
allons multiplier par le nombre d’envois dans une heure. Donc si on envoie des données chaque
5 secondes nous allons envoyer 720 fois les données dans une heure.
𝐸 = 𝐼𝑒𝑛𝑣𝑜𝑖𝑒 ∗ 𝑇𝑒𝑛𝑣𝑜𝑖𝑒 + 𝐼𝑠𝑙𝑒𝑒𝑝 + 𝑇𝑠𝑙𝑒𝑒𝑝
𝐸 = (0.053𝐴 ∗ 0.1𝑠 + 0.019𝐴 ∗ 4.9𝑠) ∗ 3600/5
𝐸 = 0.0984𝐴𝑠 ∗ 720
𝐸 = 70.848𝐴ℎ
𝐸 = 70848𝑚𝐴ℎ
Ensuite nous allons choisir la batterie de 3,7V, 1200 mAh. Avec celui-ci nous allons diviser la
capacité de la batterie par l’énergie consommé dans une heure par notre système. On fait le
calcul suivant :
Nous pouvons conclure que notre système consume beaucoup d’énergie. Il faudrait élargir
l’intervalle d’envoi de données et utiliser un spreading factor de 7 pour améliorer l’autonomie
de la batterie.
Ensuite nous voudrions capter quand il y a un danger et envoyer un mail à l’utilisateur. Pour le
faire nous allons utiliser python. Voici le code qui permet de voir si le champ magnétique est
trop bas.
Alerte->envoyer mail
De même nous voudrions aussi envoyer une alerte quand le niveau de la batterie est trop bas.
Nous avons modifié le code de l’émetteur pour récupérer la tension de la batterie sur le pin A0.
Nous pouvons voir ci-dessous le code :
Ensuite sur python on va modifier aussi pour envoyer un mail quand le niveau de la batterie est
de 1.5V.
Alerte->envoyer mail
Setup()
Loop()
• Commencer tx LORa
• Lire données du capteur
• Lire Tension de la batterie
• Send packet LoRa
• Delay (200)
Récepteur :
Setup()
Loop()
F Imprimer « Pas de
Alerte ?
danger »
Nous pouvons voir ci-dessous le mails reçus lors de l’exécution du programme python :
Aussi on a fait un code python pour pouvoir dessiner des graphiques de nos données. Nous
pouvons voir ci-dessous l’image de données du champ magnetique vs temps :
Nous pouvons voir qu’on a la forme de V puisque nous données diminuent trop vite de 1024 à
16 quand on approche un aimant au capteur. Le code complet se trouve en annexe.
Aussi en utilisant la library numpy nous pouvons enregistre dans un fichier .csv les données
mesurés. Nous pouvons voir ci-dessous le fichier généré :
Conclusion :
En conclusion, ce TP nous a permis d’analyser et comprendre le fonctionnement d’une
antenne LoRa et pouvoir évaluer la consommation énergétique en fonction des divers
paramètres utilisés tels que le spreading factor, la puissance d’émission, le coding rate, la bande
passante et le channel. Après avoir fait les modelés de consommation nous avons pu déterminer
que les paramètres qui affectent le plus à la consommation sont la puissance d’émission et le
spreading factor. Aussi nous avons pu développer une application Objet connectés dans lequel
nous avons utilisé un capteur de champ magnétique. Nous avons appris à calculer le rendement
de la batterie et à envoyer des alertes par mail en utilisant python dans le cas d’un danger, soit
pour un champ magnétique étrange ou pour un niveau de batterie trop bas.
1. #include <SPI.h>
2. #include <LoRa.h>
3.
4. //temperature mesure
5.
6. int led = 13; // define the LED pin
7. int digitalPin = 5; // KY-025 digital interface
8. int analogPin = A1; // KY-025 analog interface
9. int digitalVal; // digital readings
10. int analogVal; //analog readings
11. int counter = 0;
12. const float TMaxA0 = 3.3;
13.
14. void setup() {
15. Serial.begin(9600);
16. while (!Serial);
17. pinMode(led, OUTPUT);
18. pinMode(digitalPin, INPUT);
19. Serial.println("LoRa Sender");
20.
21. if (!LoRa.begin(865E6)) {
22. Serial.println("Starting LoRa failed!");
23. while (1);
24. }
25.
26. LoRa.setTxPower(10);
27. LoRa.setSpreadingFactor(8);
28. // LoRa.setSignalBandwidth(125E3);
29. }
30.
31. void loop() {
32.
33. //Serial.print("Sending packet: ");
34. Serial.println(counter);
35. unsigned int raw_bat = analogRead(A0);
36. float tension_bat = (raw_bat * ( TMaxA0 / 1024)) ;
37. Serial.print("Niveau de la batterie :");
38. Serial.print(tension_bat);
39. // send packet
40. LoRa.beginPacket();
41. // LoRa.print("Hola ");
42. // Read the digital interface
43. digitalVal = digitalRead(digitalPin);
44.
45. // Read the analog interface
46. analogVal = analogRead(analogPin);
47. Serial.println(analogVal); // print analog value to serial
48. delay(100);
49. //LoRa.print("analogVal: ");
50. LoRa.print(analogVal);
51. // LoRa.print("counter: ");
52. //LoRa.print(counter);
53. LoRa.endPacket();
54.
55. counter++;
56.
57. delay(200);
58. }
Annexe 3 : Code Python
1. import smtplib
2. from email.mime.text import MIMEText
3. from email.mime.multipart import MIMEMultipart
4.
5. import serial as s
6. ser=s.Serial()
7.
8. ser.baudrate = 9600 #Configuration du port (9600 bauds)
9. ser.port = "COM8" #Donner le port COM associé
10. ser.timeout=10 #Timeout : temps à partir duquel,
11. ser.open()
12.
13.
14. i=0
15. while i<10:
16. x=ser.readline().strip()
17. if x == b'16' or x == b'17':
18. print("Alerte")
19. print(x)
20. msg = MIMEMultipart()
21. msg['From'] = 'rbarrigaponcedeleon@gmail.com'
22. msg['To'] = 'guor1998@gmail.com'
23. msg['Subject'] = 'Alerte Champ magnetique detectée!!'
24. message = 'Valeur < 20'
25. msg.attach(MIMEText(message))
26. mailserver = smtplib.SMTP('smtp.gmail.com', 587)
27. mailserver.ehlo()
28. mailserver.starttls()
29. mailserver.ehlo()
30. mailserver.login('rbarrigaponcedeleon@gmail.com', 'xxxxx')
31. mailserver.sendmail('rbarrigaponcedeleon@gmail.com', 'guor1998@gmail.c
om',msg.as_string())
32. mailserver.quit()
33.
34. if x == b'1023' :
35. print("Pas de danger")
36. print(x)
37.
38. ser.close()