IMA4 2019/2020 P10
Sommaire
- 1 Présentation générale
- 2 Analyse du projet
- 3 Préparation du projet
- 4 Réalisation du Projet
- 5 Documents Rendus
Présentation générale
Dans les sujets proposés, j'ai décidé de prendre le projet "Capteur de niveau d'eau et de pollution" dirigé par Antoine Branquart lors de la période 2018/2019.
Le but est de reprendre le projet, d'expliquer les soucis de sa non finalisation et d'enfin mener le projet à son terme. Ce projet vise la réalisation d'un système de détection de pollution dans l'eau. En effet, la pollution provoque une mauvaise qualité de l'eau, et cela engendre près de 2 millions de morts par an dû à la maladie.
La pollution est présente sous différente formes, est difficilement détectable et parfois avec une constante de temps assez longue (Certains toxiques produisent leur effet néfaste qu'après certaines années).
Il est difficile de prévoir les épisodes de pollution (qui intervient lorsque un ou plusieurs polluant dépassent la concentration limite fixés par des seuils) car les tests sont ponctuels et nécessitent des outils coûteux dans des laboratoires, ce qui prend du temps.
Le projet vise donc la réalisation d'un capteur autonome qui permet d’éviter les épisodes de pollution et d'envoyer ses résultat à un module via un couple émetteur-récepteur radio.
Description
Lors de son projet, Antoine a commencé par la réalisation d'une carte électronique avec un potentiostat. Commençons par expliquer ce qu'est un potentiostat.
Potentiostat
Un potentiostat est un outil capable de réaliser des expériences de voltamétrie cyclique simple. C'est une méthode d’électro-analyse basée sur la mesure du flux de courant résultant de la réduction ou de l'oxydation des composés tests présents en solution (ici, dans de l’eau) sous l'effet d'une variation contrôlée de la différence de potentiel entre deux électrodes spécifiques.
Le potentiostat est composé de 3 électrodes :
- Une électrode de travail "ET" (en platine)
- Une électrode de référence "ECS" (au calomel saturé)
- Une contre électrode "CE" (en platine)
Le principe est d'imposer une différence de potentiel entre l'ET et L'ER et de mesurer le courant traversant l'ET.
Schéma de principe
Sur le schéma, on peut voir que l'AOP permet de maintenir la différence de potentiel entre la référence et l'électrode de travail, aussi proche possible du potentiel d'entrée de la source.
Objectifs
J'ai discuté avec Antoine à propos de son projet qu'il a continué au Vietnam. Là-bas il a designé une nouvelle carte différente de celle qu'il avait faite en France. Malheureusement, la carte n'était pas fonctionnelle. Il m'a conseillé de m'inspirer du montage qu'il avait vu (et routée) et que j'ai retrouvé dans un document. (lien vers le pdf : Fichier:Pot.pdf)
Le synoptique du système reste le même :
La communication entre le microcontrôleur et le potentiostat se fera de la manière suivante. Le microcontrôleur envoie les données numériques pour générer un potentiel. Ces valeurs numériques passent à travers un DAC pour générer des valeurs analogues correspondantes. Ensuite, l'amplificateur opérationnel compare cette valeur au potentiel mesuré entre le courant dans la contre électrode jusqu'à ce que la valeur mesurée soit égale à la valeur de consigne générée par le microcontrôleur via le DAC. Ensuite, le potentiel mesuré est introduit dans un ADC, pour transmettre le tout au microcontrôleur. La transmission se fait via un bus SPI et le microcontrôleur envoie les données au module radio via également un bus SPI. Les deux modules radio communiquent via le protocole LoRa.
Antoine avait fait son potentiostat sur une carte à part, je pense qu'il est possible de faire une carte de type "shield" et de brancher ça directement sur la carte du microcontrôleur.
Pour la communication entre les deux systèmes (les deux microcontrôleurs), il est judicieux d'utiliser le protocole LoRa avec les modules radios achetés pour le projet. Enfin, pour les microcontrôleurs, les cartes Nucléo qu'Antoine utilisait au début de son projet. Cependant, ces cartes souffrent d'un manque de librairies au niveau des protocoles LoRa, et une carte arduino de basse consommation sera également envisageable.
Donc, il y aura une partie de réalisation de carte, en s'inspirant du schéma trouvé sur internet. Ensuite, la réalisation du code pour la communication radio entre les deux microcontrôleurs.
Analyse du projet
Analyse de l'ancien projet
Antoine à réalisé une carte potentiostat et à également réussi une communication entre les deux modules radio qu'il a acheté au vietnam.
Cependant, les tests réalisés avec le potentiostat qu'il a réalisé au Vietnam n'étaient pas bons. Cela vient peut-être qu'il n'a pas pu tester son capteur avec un "dummy cell", petit module qui permet de tester efficacement un potentiostat. Par ailleurs, il n'a pas réussi à assembler complètement son système.
Réunion avec M.Boé
Le 19 Septembre, j'ai eu une réunion avec M.Boé. Nous avons discuté des différends points du projet.
Tout d'abord, M.Boé m'a conforté dans mon choix de réaliser le schéma suivant :
Nous avons d'abord discuté du choix du microcontrôleur. Il m'a conseillé d'enlever le PIC16F1259 du schéma et d'intégrer dans le projet une carte avec un STM32F4XXX (de STMicroElectronics) qui se programme à l'aide de Mbed OS. C'est un RTOS (Real-time Operating system) qui permet de programmer des périphériques se basant sur un processeur ARM comme avec le STM32. De plus, pour la sélection de la carte STM32, je dois choisir une carte en adéquation avec un module radio LoRa compatible, et qui se branche directement sur la carte.
Par ailleurs, nous avons également discuté du DAC et des deux ADC présents sur le schéma. Ils utilisent le protocole SPI pour échanger des données. Les auteurs du pdf dans lequel se trouve le schéma on utiliser des librairies permettant l'utilisation du SPI. Le but est donc de réécrire en partie du code afin de l'adapter à mon projet.
En outre, M.Boé m'a conseillé d'ajouter des jumpers ainsi que des "tests points", afin de pouvoir déboguer la carte la plus rapidement et simplement possible.
De surcroît, la carte potentiostat sera réalisée en type "shield" afin de la brancher plus facilement sur la carte STM et d'avoir un système le plus compact possible. Il est envisageable par la suite de réfléchir sur un autre type de microcontrôleur moins gourmand en énergie.
Liste de Matériel
En adéquation avec le schéma, je reprends les composants qui sont disposés sur le schématique :
Circuits intégrés
- LM2662 (Régulateur de tension 5V - 9V)(ref : LM2662MX/NOPB) (Lien Digikey : [1] Lien Farnell : [2]) (Quantité = 1)
- DAC1220 (Convertisseur Numérique Analogique)(ref : DAC1220E) (Lien Digikey : [3] Lien Farnell : [4]) (Quantité = 1)
- ADR421 (2.5V Reférence) (ref : ADR421ARZ) (Lien Digikey : [5] Lien Farnell : [6]) (Quantité = 1)
- MCP3550 (Convertisseur Analogique Numérique) (ref : MCP3550-50E/SN) (Lien Digikey : [7] Lien Farnell : [8] ) (Quantité = 2)
- OPA4192 (AOP) (ref : OPA4192IDR) (Lien Digikey : [9] Lien Farnell : [10] (TSSOP)] (Quantité = 1)
- OPA2192 (AOP) (ref : OPA2192IDR) (Lien Digikey : [11] Lien Farnell : [12]) (Quantité = 1)
- DG449 (Analog Switch) (ref : DG449DS-T1-E3) (Lien Digikey : [13] Lien Farnell : [14]) (Quantité = 1)
Résistances
- Résistances 1k ±1% de type 0805 (ref : RC0805FR-071KL) (Lien Digikey : [15] Lien Farnell : [16]) (Quantité = 5)
- Résistances 10k ±1% de type 0805 (ref : RC0805FR-0710KL) (Lien Digikey : [17] Lien Farnell :[18])(Quantité = 2)
- Résistance 27 ohms ±1% de type 0805 (ref : RC0805FR-0727RL) (Lien Digikey : [19] Lien Farnell : [20]) (Quantité = 1)
- Résistances 240k ±0.05% de type 0805 (ref : RG2012N-244-W-T1) (Lien Digikey : [21] Lien Farnell : [22]) (Quantité = 2)
- Résistances 75k ±0.05% de type 0805 (ref : ERA-6ARW753V) (Lien Digikey : [23] Lien Farnell : [24])(Quantité = 6)
- Résistance 10 ohms ±0.1% de type 0805 (ref : CPF0805B10RE) (Lien Digikey : [25] Lien Farnell : [26]) (Quantité = 1)
- Résistance 1k ±0.1% de type 0805 (ref : ERA-6AEB102V) (Lien Digikey : [27] Lien Farnell : [28]) (Quantité = 1)
- Résistance 100k ±0.1% de type 0805 (ref : ERA-6AEB104V) (Lien Digikey : [29] Lien Farnell : [30]) (Quantité = 1)
- Résistance 18k ±0.1% de type 0805 (ref : ERA-6AEB183V) (Lien Digikey : [31] Lien Farnell : [32]) (Quantité = 1)
- Résistance 2k ±0.1% de type 0805 (ref : ERA-6AEB202V) (Lien Digikey : [33] Lien Farnell : [34]) (Quantité = 1)
- Résistance 10M ±5% de type 0805 (ref : CRGS0805J10M) (Lien Digikey : [35] Lien Farnell : [36]) (Quantité = 2)
Capacités
- Capacité, 10µF 25V X7R 1210 (ref : GRM32DR71E106KA12L) (Lien Digikey : [37] Lien Farnell : [38] )(Quantité = 9)
- Capacité, 0.1µF 25V X7R 0805 (ref : C0805C104K3RACTU) (Lien Digikey : [39] Lien Farnell : [40]) (Quantité = 13)
- Capacité 12pF 50V NP0 0805 (ref : CL21C120JBANNNC) (Lien Digikey : [41] Lien Farnell : [42]) (Quantité = 4)
- Capacité 3300pF 50V NP0 0805 (ref : C0805C332J5GACTU) (Lien Digikey : [43] Lien Farnell : [44]) (Quantité = 1)
- Capacité 10nF 50V NP0 0805 (ref : C0805C103J5GACTU) (Lien Digikey : [45] Lien Farnell : [46]) (Quantité = 1)
- Capacité 4700pF 50V NP0 0805 (ref : C0805C472K5RACTU) (Lien Digikey : [47] Lien Farnell : [48]) (Quantité = 1)
Autres composants
- Diode Schottky Dual BAT721S SOT-23 (ref : BAT721S,215) (Lien Digikey : [49] Lien Farnell : [50]) (quantité = 2)
- LED 3mm Rouge (ref : WP710A10LSRD) (Lien Digikey : [51] Lien Farnell : [52]) (quantité = 2)
- Quartz 2.5Mhz (ref : ECS-25-S-1X) (Lien Digikey : [53] Lien Farnell (Equivalent): [54]) (quantité = 1)
- Bornier Connection Electrodes (ref : 1751277) (Lien Digikey : [55] Lien Farnell : [56]) (quantité = 1)
- Cavaliers (ref : 142270-1) (Lien Farnell : [57]) (quantité = 10)
- Connecteurs 26pins 2.54mm (ref : SSQ-126-23-F-S) (Lien Farnell : [58]) (quantité = 2)
- Pointes de test (ref : S1621-46) (Lien Farnell : [59]) (quantité :)
- Carte STM32 B-L072Z-LRWAN1 (ref : B-L072Z-LRWAN1) (Lien Farnell : [60]) (quantité = 2)
Positionnement par rapport à l'existant
Analyse du premier concurrent
Analyse du second concurrent
Scénario d'usage du produit ou du concept envisagé
Réponse à la question difficile
Préparation du projet
Cahier des charges
Donc, après cette réunion, je peux commencer mon cahier des charges et ensuite réaliser un petit planning.
- Réalisation d'un potentiostat fonctionnel
- Communication entre le potentiostat et le STM32F4XXX fonctionnelle
- Communication entre l'emetteur et le recepteur LoRa fonctionnelle
- Assemblage fonctionnelle
Pour le planning :
- Réalisation du schématique & Routage de la carte du potentiostat
- Recherches autour du module radio & du STM32F4XXX
- Validation de la carte & Modifications
Choix techniques : matériel et logiciel
Liste des tâches à effectuer
Calendrier prévisionnel
Réalisation du Projet
Feuille d'heures
Tâche | Prélude | Heures S1 | Heures S2 | Heures S3 | Heures S4 | Heures S5 | Heures S6 | Heures S7 | Heures S8 | Heures S9 | Heures S10 | Total |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Analyse du projet | 0 |
Prologue
Semaine 1
Pour la séance du 26 septembre, j'ai commencé par réaliser des recherches à propos du protocole LoRa.
Protocole LoRa
Le protocole LoRa ou LoRaWAN(Long Range Wide-area network) permet la communication à bas débit d'objet à faible consommation d'énergie facilitant l'internet des objets. C'est un protocole crée par la startup grenobloise Cycléo et rachetée par Semtech en 2012. Ce protocole utilise une technique de modulation par étalement de spectre de type Chirp spread spectrum propriétaire appelée LoRa.
Un réseau LoRaWAN est composé d'équipements sans-fils basse consommation qui interagissent avec des serveurs applicatifs au travers de passerelles. La modulation utilisée entre les équipements et les passerelles est LoRa. La communication entre les passerelles et les serveurs est établie via le protocole IP au moyen d'un réseau de collecte Ethernet ou 3G. La topologie d'un réseau LoRaWAN est en étoile car un serveur applicatif est connecté à une multitude de passerelles elles-mêmes connectées à une multitude d'équipements.
C'est pour cela que ce protocole est parfaitement adapté aux utilisations de basse consommation d'énergie. Dans le cas de ce projet, nous pouvons imaginer le potentiostat proche d'un courant d'eau qui détermine la pollution de cette source. Ensuite, elle transmet les données collectées par le potentiostat au µC. Ce µC connecté à un module LoRa transmet à la station la plus proche, en charge de la gestion des eaux, ces données via le protocole LoRa. Ensuite, ces données sont stockées sur un serveur en attente de traitement par un opérateur.
Il est également possible d'utiliser un protocole P2P entre deux modules radio LoRa en utilisant seulement la modulation qu'offre ce protocole. Dans notre cas, nous allons nous attacher à faire communiquer deux modules radio LoRa eux-mêmes connectés à des µC STM32.
Recherche STM32
Ensuite, après avoir réalisé mes recherches à propos de ce protocole, je me suis attaché à trouver un µC de STM compatible avec des modules radio. Il existe de nombreuses combinaisons possibles. Je peux partir sur une carte de développement qui intègre directement une chip LoRa ainsi qu'un µC STM32L0 de faible consommation d'énergie. Ces cartes ont l'avantage de permettre la communication P2P entre elles, car des exemples existent directement sur Mbed.
Je peux également prendre une carte STM32F4 discovery et trouver une carte qui intègre une chip LoRa et tenter de les faire communiquer. Cependant, cette solution semble risquée.
J'ai donc trouvé une carte de développement : la carte B-L072Z-LRWAN1 (https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/ac/62/15/c7/60/ac/4e/9c/DM00329995/files/DM00329995.pdf/jcr:content/translations/en.DM00329995.pdf). Cette carte est intéressante car elle intègre un module LoRa avec un µC sur la même carte. Elle est compatible Mbed, possède plusieurs bus SPI (pour permettre la communication entre le DAC et les ADC du potentiostat). Enfin, il existe des exemple de code de communication P2P entre deux cartes identiques de cette référence (https://os.mbed.com/teams/ST/code/DISCO-L072CZ-LRWAN1_LoRa_PingPong/)
Semaine 2
Etude du schéma du potentiostat
Avant de commencer la réalisation du potentiostat, il est intéressant d'étudier le schéma et les modification que je vais y apporter. (Pour repère, le schéma dont je vais parler est situé plus haut dans le wiki)
Alimentation
Pour l'alimentation, le potentiostat utilise un LM2662 qui va transformer le 5V transmis par la carte du MicroContrôleur, en 9V, afin d'alimenter les circuits intégrés commes les AOP, ou le switch DG449.
De plus, Il y a un autre circuit (ADR421) qui va permettre de fixer le Vref (2.5V) qui va être utile pour le DAC et les deux ADC.
Circuit Analogique
Le circuit analogique est rendu possible grâce aux AOP, OPA2192 & OPA4192. U7a, sur le schéma, permet de comparer la tension imposée par le microcontrôleur via le DAC à la tension de retour du potentiostat ou galvanostat selon le mode, et conduit l'électrode de travail jusqu'a ce que les deux valeurs soient égales. La résistance R5 et la capacité C24 permettent de fixer la bande passante de U7a. Les valeurs donnent une fréquence d'environ 3Khz, ce qui reste largement supérieur à la constante de temps d'une mesure, et donc ne risque pas d'avoir un impact sur la mesure.
Sur le schéma, on remarque la présence d'un relais K1. Ce relais permet d'activer l’électrode de travail lorsque le microcontrôleur envoie le signal "CELL_ON", et une Led permet de signaler la mise en route de la mesure. Comme je me base sur un microcontrôleur différent, je pense remplacer le signal de commande par un interrupteur. L'interrupteur connectera le reste du circuit à du 5V. Lorsque ça sera activé, le courant passera dans la bobine ainsi que dans la led, ce qui sera équivalent au circuit antérieur, et ainsi activer la mesure via l'électrode de travail.
Le retour du potentiostat/galvanostat est récupéré par les AOP U7b, U7d et U7c. U7d et U7b permettent d'isoler les électrodes et le reste du montage grâce à leurs grandes impédances d'entrée, et donc d'avoir aucun courant entre l'électrode SE et l'électrode RE. Les tensions récupérées sont ensuite transmises à U7c qui fonctionne en amplificateur différentiel.
Avec Vref = 2.5V et R7 = 75kOmh & R6 = 240kOmh, la différence de potentiel entre l'électrode SE et l'électrode RE qui en entrée (avant U7c) varie de -8V et +8V, et en sortie de 0-5V, ce qui permet de matcher correctement avec les entrées des deux ADC qui vont permettre de transmettre les données au microcontrôleur.
Le retour galvanique est acquis grâce aux résistances de shunt qui permettent de transformer le courant de retour en une tension équivalente. Les relais sont là pour choisir la précision du galvanostat. Dans la plus grande range, le courant est compris entre -25mA et 25mA (avec R10). U9a convertit ce courant avec l'aide de la résistance associée en une tension comprise entre 0 et 5V, idéal pour les ADC ensuite. Chaque résistance divise par 10 le courant capté et permet une meilleur précision.
Comme le galvanostat n'est pas l'objectif premier de la carte, je vais enlever les relais (qui on un certain coût) et conserver seulement la résistance R10 directement connectée à la masse.
Enfin, les signaux retournés par les électrodes et traités par les AOP U7 et U9 sont envoyés vers DG449, qui est un switch analogique. Il permet de sélectionner dans quel mode se trouve la carte. Lorsque l'entrée IN est à 0, le switch met la carte en mode potentiostat. Au contraire, si IN est à 1, on est en mode galvanostat.
Comme l'entrée IN est contrôlée par le microcontrôleur, j'ai choisi de modifier cette partie. A la place, je vais mettre deux résistance de 10MOhm et 10Mohm avec un interrupteur. Lorsque l'interrupteur sera ouvert, l'entrée IN connectée à la résistance de 10M sera forcée à 0 (la masse), et lorsque l'interrupteur sera fermé, le niveau logique 1 (5V) sera sur l'entrée IN, avec un courant limité à 0.5µA, ce qui est inférieur à l'ampérage maximum que l'entrée peut recevoir (selon la documentation). On pourra alors choisir entre le mode galvanostat ou potentiostat avec cet interrupteur.
Conversion Analogique/Numérique
Les retours Vmes et Imes sont ensuite introduits dans les deux ADC U4 et U5 qui sont des MCP3550 qui sont d'une grande précision et permettent de filtrer le bruit d'entrée. En entrée de chaque ADC, un filtre est ajouté afin de réduire le bruit et d'améliorer la conversion.
Conversion Numérique/Analogique
Le DAC reçoit du Microcontrôleur les données numériques via le bus SPI. Lors de mes recherches, j'ai trouvé des bibliothèques sur Mbed dédiées à la carte de developpement B-L072Z-LRWAN1, ce qui facilera la communication. Ensuite, le DAC envoie la tension de contrôle à U7a qui ensuite va comparer au valeur retournées par les electrodes.
Semaine 3 & 4
Réalisation Schématique
Ces semaines on été dédiées à la réalisation du schématique, basé sur la carte STM32 que j'ai sélectionnée plus haut. Il y a 3 pages sur le schématique, je vais les décrire plus en détail, mais elles sont basées sur le schématique étudié plus haut.
Page 1
Sur cette page, il y a d'abord le convertisseur 5V/+-9V qui va permettre de convertir la tension 5V transmise via le STM32 en +-9V et nécessaire pour l'alimentation des AOP. Il y a également la conversion du 5V en 2.5V pour fixer la tension Vref, nécessaire pour différents composants. Nous avons également le DAC qui connecté au microcontrôleur via le bus SPI, permet de convertir les données digitales en donnée analogique pour les transmettre au électrodes. Les deux ADC sont présents, et font le travail inverse, c'est à dire, transformer la valeur analogique retournée par la contre-électrode en valeur numérique, pour être traitée ensuite par le microcontrôleur. La modification que j'ai faite par rapport au schématique original, est l'absence des relais, que j'ai enlevé, car je les ai jugés inutiles, il y a juste une diode qui témoigne de la mise sous tension de la carte (D4).
Page 2
La seconde page apporte des nouveautées, j'ai enlevé les 3 relais qui permettaient de sélectionner le calibre sur le potentiel de retour de la contre-électrode. M.Boé m'a conseillé de mettre des cavaliers à la place, ce qui est le cas. J'ai rajouté à la fin de chaque mesure (mesure de courant ou de tension, suivant le cas où la carte est en potentiostat ou galvanostat), un "jumper" qui permettra d'observer le signal à l’oscilloscope, comme M.Boé me l'avait demandé. J'ai également rajouté un "jumper" identique jsute avant l'électrode de travail. Par ailleurs, sur le schématique originel, la sélection du mode galvanostat/potentiostat se faisait via le microcontrôleur, j'ai préférer enlever cela, et le remplacer par un interrupteur, où en position ouvert, le switch analogique sera directement relié à la masse via la résistance de pull-down et enclenchera le mode potentiostat. En revanche, lorsque l'interrupteur sera fermé, le mode galvanostat sera activé.
Page 3
Cette page concerne seulement les deux connecteurs, qui sont des connecteurs femelles 26pins qui sont standards (mais assez difficiles à trouver sur les sites de composants). Je me suis référencé à la documentation de la carte B-L072Z-LRWAN1 pour l'affectation des pins, notamment pour les pins associées au bus SPI et les 3 pins que je vais utiliser pour le chip select. In fine, j'ai décidé de l'attribution des pins suivantes :
- PB12 -> CS1 (pour le DAC)
- PB9 -> CS2 (Pour l'ADC 1)
- PB8 -> CS3 (Pour l'ADC 2)
Semaine 5& 6
Ensuite, après une réunion avec M.Boé, afin d’éclaircir quelques points, notamment sur le bus SPI et pour également valider le choix de la carte STM32, j'ai commencé à router ma carte. J'ai incorporé les demandes de M.Boé, avec les cavaliers et les "jumpers" pour pouvoir débugger la carte plus facilement. Le routage m'a pris du temps, notamment parce que je ne suis pas expert dans ce domaine, mais également parce que j'essayais de me passer de via, chose que je n'ai pas réussi à faire. Finalement, j'ai fini un premier routage, mais j'attends le retour de M.Boé, car il est évident que certaines choses sont à revoir.
Semaine 7
Cette semaine à été consacrée aux modifications sur le pcb demandées par M.Boé.
Voici la listes des modifications apportées
- Tailles des pistes supérieures à 0.3mm, elles ont étés fixées à 0.35 par la suite
- Taille de la piste d'alimentation de 5V à augmenter (1mm si possible), je l'ai fixée à 0.9 par la suite, car je n'avais pas la place nécéssaire.
- Vias percés en 0.6mm
- Quelques pistes à décaler pour les aligner
- Le quartz n'existait pas en version CMS, je l'ai donc placé sur le bottom et sera soudé à l'opposé.
- Réduction de la taille des pistes qui arrivent sur les CI, juste localement pour qu'elles soit inférieures à la taille du footprint
Par ailleurs, U8 possède un packaging assez petit, malheureusement, il n'existe pas dans un autre type de packaging, je le souderais avec la plus grande précaution possible. Ensuite, j'ai écarté la masse des piste, via les règles de clearance. Cela à engendré que toutes les masse n'étaient pas reliées entre elles. J'ai donc dû rajouter des vias pour régler ce souci. Enfin, pour indication, sur la face bottom, on aura un plan de masse et je souderais des fils pour faire les pistes. Cela ne sera d'une qualité professionnelle, mais simplifiera la création de carte pour Thierry Flamen.
Enfin, j'ai volontairement enlevé l'interrupteur qui permettait de switcher entre les deux modes du potentiostat/galvanostat. Notamment parce qu'il était cher et aussi parce que c'était assez gadget. A la place, j'ai mis un cavalier. Lorsque le cavalier est présent, la broche 6 du switch est au potentiel 1, et donc la carte est en mode galvanostat. Lorsque qu'il n'y a pas de cavalier, la broche est lié à la masse via la résistance de pull-down, et la carte est en mode potentiostat.
Semaine 8
Après la soutenance de mi-projet, j'ai pu me procurer une Carte B-L072Z-LRWAN1, la carte sur laquelle je me suis basé pour la réalisation de mon shield potentiostat. En plus de cette carte, il m'a confié également un shield I-NUCLEO-LRWAN1, shield qui lorsque connecté à une nucléo permet d'envoyer des packets LoRa. Cependant, le shield NUCLEO intègre un module LoRa SX1272, alors que la carte B-L072Z-LRWAN1 intègre un module LoRa SX1276. Un tableau résume les différences entre ces deux technologies LoRa.
Sur Mbed, il existe des librairies pour les deux types de technologies. J'ai commencé par réaliser un programme pour la carte B-L072Z-LRWAN1, car c'est elle qui possède le plus d'exemple. Dans le code, il y a plusieurs parties. La première est la déclaration des différentes variables pour le module LoRa :
#define RF_FREQUENCY 868000000 // Hz #define TX_OUTPUT_POWER 14 // 14 dBm #define LORA_BANDWIDTH 125000 // LoRa default, details in SX1276::BandwidthMap #define LORA_SPREADING_FACTOR LORA_SF7 #define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5 #define LORA_PREAMBLE_LENGTH 6 // Same for Tx and Rx #define LORA_SYMBOL_TIMEOUT 10 // Symbols #define LORA_FIX_LENGTH_PAYLOAD_ON false #define LORA_FHSS_ENABLED false #define LORA_NB_SYMB_HOP 4 #define LORA_IQ_INVERSION_ON false #define LORA_CRC_ENABLED true #define RX_TIMEOUT_VALUE 3500 // in ms #define BUFFER_SIZE 32 // Define the payload size here
Ces variables vont nous permettre de déterminer la fréquence des paquets LoRa, la bande passante, etc...
Ensuite, nous avons les différentes initialisations :
typedef enum { SLEEP = 0, RX_INIT, RX_INIT_WAIT, RX_ENUM, RX_ENUM_WAIT, TX_PING, RX_TIMEOUT, RX_ERROR, TX_INIT, TX_INIT_WAIT, TX_ENUM, TX_ENUM_WAIT, CAD, CAD_DONE } AppStates_t;//Objet nécessaire pour l'initialisation du module LoRa ensuite DigitalOut myled1(LED1); static RadioEvents_t RadioEvents;// Initialisation d'un objet de classe RadioEvents Serial serial(SERIAL_TX, SERIAL_RX);// Initialisation d'un objet serial de classe Serial SX1276Generic *Radio;// Initialisation d'un pointeur sur un objet de classe SX1276 const uint8_t PongMsg[] = { 0xFF, 0xFF, 0xFF, 0xFF};// Message à envoyer;
Puis, dans une fonction void init() on initialise nos différends objets
//On initialise notre Objet radio Radio = new SX1276Generic(NULL, MURATA_SX1276, LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET, LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5, LORA_ANT_RX, LORA_ANT_TX, LORA_ANT_BOOST, LORA_TCXO); //Initialisation du driver Radio RadioEvents.TxDone = OnTxDone; RadioEvents.RxDone = OnRxDone; RadioEvents.RxError = OnRxError; RadioEvents.TxTimeout = OnTxTimeout; RadioEvents.RxTimeout = OnRxTimeout; if (Radio->Init( &RadioEvents ) == false) { while(1) { serial.printf("Radio could not be detected!"); wait( 1 ); } } Radio->SetChannel(RF_FREQUENCY ); Radio->SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, LORA_IQ_INVERSION_ON, 2000 ); Radio->SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0, LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, LORA_IQ_INVERSION_ON, true );
Les fonctions de RadioEvents sont importantes, car c'est ce qui permet de savoir si un paquet est correctement reçu ou envoyé.
void OnTxDone(void *radio, void *a, void *b) { Radio->Sleep( ); serial.printf( "> OnTxDone\n\r" ); } void OnRxDone(void *radio, void *a, void *b, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) { Radio->Sleep( ); serial.printf( "> OnRxDone\n\r" ); } void OnTxTimeout( void *radio, void *a, void *b) { Radio->Sleep( ); serial.printf( "> OnTxTimeout\n\r" ); } void OnRxTimeout( void *radio, void *a, void *b) { Radio->Sleep( ); serial.printf( "> OnRxTimeout\n\r" ); } void OnRxError( void *radio, void *a, void *b ) { Radio->Sleep( ); serial.printf( "> OnRxError\n\r" ); }
Par exemple, la fonction void OnTxDone(void *radio, void *a, void *b) envoie sur le port série le message "> OnTxDone". Enfin, dans la boucle principale,
while(1) { Radio->Send( (void*) PingMsg, BufferSize); serial.printf("Pong\n\r"); myled1 != myled1; // inverser état led1 }
On envoie le message Ping et si l'envoi est effectué correctement, la fonction void OnTxDone(void *radio, void *a, void *b) est appelée. Pour ajouter quelque chose de plus visuel, on fait clignoter une led à chaque envoi de paquet.
Sur le port série, on observe les messages suivants :
Ensuite, après le code d'envoi via le B-L072Z-LRWAN1, j'ai essayé de faire un code pour récupérer le paquet transmis, avec le shield Nucleo. Malheureusement, je n'y suis pas encore parvenu, et cela malgré l'envoi et la réception sur la même fréquence/Bande passante. La solution est que j'ai réussi à me procurer une autre carte B-L072Z-LRWAN1, et le code de réception sera plus simple, car utilisant la même librairie.