IMA5 2021/2022 P28
Présentation générale
Description
La crise de la Covid-19 et les différents confinements ou cours à distance ont montré les limites des outils disponibles pour de l’enseignement à distance ou pour les enseignements en dehors des temps dédiés. Par exemple, il est extrêmement difficile de réviser un TP ou de le terminer en dehors des heures d’enseignement car l’accès aux salles est compliquée, notamment les soirs ou les week-end.
Ce projet propose de réaliser une plateforme permettant d’accéder au matériel de TP à distance. La plateforme sera composée d’équipements supportant le protocole LXI. Une unité pourra contenir un générateur de fonction, une alimentation stabilisée, un multimètre et un oscilloscope. Tous les équipements sont reliés au travers d’un réseau Ethernet.
Objectifs
L'objectif de ce projet est de réaliser un POC complet d'un banc d'observation pour réaliser des TP à distance.
La réalisation de ce POC est décomposé en 3 parties :
- une matrice de commutation permettant de relier différents montages expérimentaux aux appareils de mesures ;
- une interface de commande des appareils de mesures et de visualisation des données (partiellement réalisé) ;
- une interface permettant l’accès à la plateforme de façon sécurisée et avec un planning avec réservation du/des banc(s) d'observation(s).
Préparation du projet
Cahier des charges
Fichier:CDC PI Louis Wadbled.pdf
Cahier des spécifications
Fichier:Cahier des specifications PI.pdf
Liste du matériel
Farnell :
200 0 ohm - https://fr.farnell.com/multicomp/mcwr12x000-ptl/res-couche-epaisse-0r-1-0-25w/dp/2695115RL
30 Relais - https://fr.farnell.com/oeg-te-connectivity/oje-sh-105lmh-000/relais-puiss-5vdc-spst-no-8a-trav/dp/3397625
30 transistors Mosfet en CMS - https://fr.farnell.com/nexperia/nxv55unr/mosfet-n-ch-30v-1-9a-sot-23/dp/3617842
30 diodes équivalent 1N4001 en CMS - https://fr.farnell.com/rohm/rr1vwm4stftr/diode-aec-q101-1a-400v-cms/dp/2886628
10 connecteurs BNC - https://fr.farnell.com/molex/73100-0154/conn-coax-rf-bnc-femelle-50-ohms/dp/1909205
10 fiches bananes - https://fr.farnell.com/multicomp/24-243-3/fiche-femelle-ci-4mm-jaune/dp/1698985
2 nucleo F7 (avec écran ?) - https://fr.rs-online.com/web/p/outils-de-developpement-pour-microcontroleurs/1231052
5 MC14514BDWR2G (décodeurs) - https://fr.farnell.com/on-semiconductor/mc14514bdwr2g/verrou-transparent-decod-4-16/dp/2845025?ost=mc14514bdwr2g
5 cordons BNC - BNC - https://fr.farnell.com/schutzinger/ko-88-58-100-sw/cordon-de-test-bnc-male-1m/dp/3224334
5 cordons BNC - banane - https://fr.farnell.com/mh-connectors/bnc4mml1mrg58/cordon-de-test-1m/dp/3153514?st=cordons%20bnc%20bnc
10 cordons banane - banane https://fr.farnell.com/staubli/28-0124-100-21/cordon-test-noir-1m-1kv-32a/dp/152737?st=cordons%20banane%20banane
2 connecteurs Nucléo vers carte matrice 2 rangées n contacts - https://fr.farnell.com/samtec/tsw-135-08-t-d/conn-header-70-voies-2-rangs-2/dp/3585156
2 connecteurs Nucléo vers carte matrice 2 rangées n contacts https://fr.farnell.com/samtec/esq-135-14-t-d/conn-fem-70-voies-2-rangees-2/dp/3514956
1 connecteur Nucléo vers RPi - https://fr.farnell.com/multicomp/2214s-40sg-85/connecteur-femelle-40-voies-2/dp/2847248
1 adaptateur serie USB https://fr.farnell.com/adafruit-industries/954/usb-to-ttl-serial-cable-raspberry/dp/2215041
ESI :
switch ethernet type SWITCH TP−LINK TL−SG108E - https://shop.esipro.fr/produit/cuc-317368-tp-link-tl-sg108e-switch-metal-8-ports-gigabit-igmp-vlan-qos
Ne pas acheter .... HUB USB - https://shop.esipro.fr/produit/2-4783130-15m-usb-2-0-active-cable-with-4-port-hub
caméra usb
1 kit RPi - https://shop.esipro.fr/produit/cuc-151366-starter-kit-officiel-raspberry-pi-3-b
Liste non exhaustive des tâches à effectuer
Interface Web
- Création d'une BDD contenant : les logins des utilisateurs de la plateforme, les créneaux des bancs d'observations (réservés ou non) ;
- Mise en place d'un serveur pour réaliser l'interface ;
- Programmation des différentes pages de l'interface :
- Page d'accueil (identification de l'utilisateur) ;
- Page de réservation des bancs d'essai ;
- Page d'utilisation du banc réservé.
Matrice de commutation
- Lister le matériel ;
- Réalisation du PCB de la matrice :
- Souder la matrice ;
- Programmation du contrôle de la matrice : une Raspberry Pi recevant les ordres du serveurs et un microcontrôleur qui contrôle la matrice ;
- Réalisation des tests de la matrice.
Documentation
- Ecriture de la documentation technique du POC.
Diagramme de Gantt
Voici le diagramme de Gantt prévisionnel du projet. Celui-ci sera mis régulièrement à jour selon les tâches effectuées et potentiellement les tâches à ajouter/modifier.
Réalisation du projet
Semaine 1
- Réalisation du cahier des charges
Semaine 2
- Réalisation du cahier des spécifications
Cette semaine marque également un début de réflexion concernant la matrice de commutation. Pour relier une entrée de la matrice avec une sortie, on souhaite utiliser des relais.
Comme on peut le voir sur le schéma rapide ci-dessus, les relais n'ont besoins que d'un interrupteur ouvert ou fermé, donc on pourra choisir des relais SPST (Single Pole Single Throw). De plus, je préfère choisir ici des relais normalement ouverts ce qui implique que l'on envoie un courant à la bobine simplement pour fermer l'interrupteur.
Les relais seront contrôlés par le microcontrôleur. On ajoute une diode de roue libre pour protéger la bobine du relais.
Ici, la matrice a été pensée pour lier 4 entrées et 4 sorties. Or pour réaliser le POC de la plateforme, on souhaite placer au minimum 3 appareils sur un banc d'observation, donc ce schéma n'est pas complet puisqu'il faudrait ajouter une entrée et une sortie (5 entrées pour les appareils déjà prêt à utilisation : 2 pour l'oscilloscope, 2 pour le multimètre et 1 pour le générateur de signaux).
On peut ensuite dresser un premier schéma de la plateforme. Cela permettra de réaliser la liste du matériel nécessaire notamment pour les connecteurs.
Le serveur pourra contrôler les appareils de mesures selon ce que l'utilisateur de l'interface Web souhaite grâce à leurs adresses IP. Pour contrôler la matrice de commutation, le serveur communiquera avec une Raspberry Pi qui transmet les informations au microcontrôleur de la matrice afin de modifier les états des relais pour associer les appareils de mesures avec les dispositifs de tests.
- Réalisation de la liste de matériel
Semaine 3
- Réalisation du diagramme de Gantt
Afin de réaliser le PCB de la matrice, certains sites permettent de trouver les empreintes des composants électroniques. Il est possible d'utiliser :
De nouvelles réflexions ont lieu concernant la matrice de commutation avant de pouvoir réaliser le PCB. On ajoute ici un transistor MOSFET en commutation pour que la bobine du relais ne soit pas tout le temps alimentée. Le fonctionnement de ce transistor est le suivant : lorsque VGS < VT, le transistor représente un circuit ouvert donc la bobine sera alimentée (ce qui ferme l'interrupteur du relais); lorsque VGS > VT, le transistor représente un fil, donc la bobine ne sera pas alimentée (ce qui ouvre l'interrupteur du relais). VGS représente la tension grille-source et VT la tension de seuil du transistor.
En poursuivant la réflexion, il devrait être possible de placer le relais et le transistor en série. Le fonctionnement serait alors le suivant : lorsque VGS < VT, le transistor représentera un circuit ouvert donc aucun courant ne passe dans le transistor. Il passe donc par la diode de roue libre ce qui va faire décroitre le courant progressivement dans la bobine, ce qui entraine l'ouverture de l'interrupteur du relais. Dans le cas inverse, lorsque VGS > VT, le transistor représente un fil donc le courant passe dans le transistor, la bobine sera alors alimentée ce qui ferme l'interrupteur du relais.
Le 2ème schéma ici semble plus approprié à ce que l'on souhaite réaliser. Il faudra réfléchir également au besoin d'ajouter ou non des résistances autour du transistor.
Du côté de l'interrupteur du relais, on trouve simplement un lien entre une entrée et une sortie, qui sont représentés par un connecteur BNC (pour connecter les appareils à la matrice) et par une fiche Banane (pour connecter le circuit de test à la matrice).
Le PCB sera réalisé en utilisant Altium. Sur le site comprenant les schématiques et empreintes des composants électroniques, il est actuellement impossible de télécharger les fichiers du transistor et des connecteurs Nucléo, je vais me lancer dans d'autres recherches pour des fichiers de ces composants.
Le schéma et l'empreinte du transistor sont trouvables ici :
Après avoir téléchargé les différents fichiers des composants, on peut réaliser un début de schéma de la matrice. Ici on ne place pour l'instant qu'un lien entre une entrée et une sortie.
Il faut maintenant se pencher sur la partie du contrôle du transistor (côté grille du transistor). On utilise des démultiplexeurs pour utiliser moins de pins de la carte Nucléo. En effet, sans décodeur, on aurait eu besoin de 25 pins de la carte Nucléo, alors qu'avec 2 décodeurs 4 vers 16, on utilise seulement 10 pins.
Sur la vue schématique, on peut alors relier une sortie du décodeur vers le transistor. Les entrées sont reliées à 4 pins du connecteur Nucléo et 1 pin supplémentaire pour le contrôle des sorties. Les pins du connecteur Nucléo seront reliés par des fils sur la carte Nucléo.
Pour une entrée reliée à 5 sorties, on peut retrouver le schéma suivant :
Pour réaliser les entrées suivantes, étant donné la place prise pour une seule entrée, il est obligatoire d'utiliser plusieurs fichiers Schematics. Il faut alors ajouter des ports pour relier ces entrées aux sorties. Ces ports sont donc reliés aux fiches bananes et sont nommés "FB1" pour fiche banane 1 puis numérotés selon le numéro de la sortie. On peut retrouver l'exemple de la 5ème entrée placée sur une autre feuille schématique :
De plus, on peut remarquer des ports "2S4" jusqu'à "2S8" du côté de la grille du transistor. Ces ports sont reliés au second décodeur de la matrice.
Il ne semble maintenant rester qu'une seule partie de la matrice à schématiser : la partie connexion avec la carte Nucléo. N'ayant pas encore trouvé de librairie Altium pour le connecteur, je ne peux pas encore le représenter. Néanmoins, les connexions devraient être assez simple : nous avons besoin de 10 pins pour les relier en entrée des décodeurs(4 pins de data +1 pour chaque décodeur comme expliqué précédemment), et 2 pins représentant la tension d'entrée et la masse.
Semaine 4
Certains composants de la liste ont été modifiés (comme par exemple les transistors parce qu'ils allaient être trop compliqués à souder). En attendant les schématiques et les empreintes des différents composants (résistances et transistors) sous Altium, je commence à placer les composants sur le PCB, et router très rapidement les composants qui n'auront pas besoin d'être modifiés par la suite. De plus, on retire les décodeurs étant donné que les connecteurs ont largement assez de broches pour contrôler les 25 transistors.
Une fois les nouveaux schématiques et empreintes reçues, je modifie les différents fichiers schématics avant de les importer sur le PCB. Etant donné que la plupart des composants étaient déjà placés, les empreintes se sont mises directement aux endroits souhaités. Pour éviter de mettre des pistes sur les deux faces, on utilise des résistances 0 Ohm. Je les utilise notamment pour relier les grilles des transistors avec le connecteur 70 contacts de la carte NUCLEO. J'ordonne alors les transistors avec les connecteurs les plus proches pour essayer d'utiliser le moins de résistances possible.
Une fois que tout est routé, j'ai lancé le Design Rule Check (DRC). Celui-ci indiqué beaucoup d'erreur de collisions entre entre des noms de composants. J'ai donc modifié l'emplacement des noms des composants impliqués, et en relançant le DRC, plus aucune erreur n'est indiqué sur le PCB.
Il reste maintenant potentiellement quelques composants à placer sur le PCB : le second connecteur de la NUCLEO et le connecteur Raspberry Pi. Pour ces connecteurs, il faudra faire attention à la distance entre les deux connecteurs de la NUCLEO pour que celle-ci s'emboite directeur avec la matrice.
J'ai également programmé l'interface de la page de login, on peut en voir un aperçu :
Pour mettre en place la plateforme, j'installe un serveur Apache2 sur la zabeth14 :
$ apt-get install apache2
Les fichiers du serveur se trouve maintenant dans le dossier /var/www/html et on peut voir les erreurs du serveur avec la commande :
$ tail -f /var/log/apache2/error.log
Il faut également installer PHP :
$ apt-get install php $ apt-get install php-mysql
On installe également le paquetage lxi-tools, qui servira pour la commande des appareils de mesures :
$ apt-get install lxi-tools
Ensuite on redémarre le serveur pour qu'il puisse prendre le compte le PHP :
$ service apache2 restart
Avant de pouvoir se connecter sur l'interface, il faut créer la base de donnée. J'utilise alors la commande :
$ mysql
Je créer l'utilisateur 'lwadbled' ainsi qu'une base de donnée du même nom. Dans cette base de donnée, je crée une table 'utilisateur' contenant un identifiant et un mot de passe. Cette table permettra la connexion à la plateforme. J'y ajoute l'utilisateur 'lwadbled' avec un mot de passe.
Ce diagramme UML représente la base de donnée que je met en place. Il est possible que celui ci soit modifié par la suite si je me rends compte d'une erreur. Le banc est représenté par un numéro, et possèdera au minimum 3 appareils. L'utilisateur est représenté par un identifiant et un mot de passe et un créneau par un jour. La réservation est l'association entre un utilisateur, un banc et une date. Cette table reprends les champs identifiant, numéro et jour, et ajoute également les heures de début et de fin du créneau. On peut traduire l'association par : pour un créneau donné, un banc peut être réservé par un unique utilisateur.
Une fois toutes les tables créées, on peut reprendre la page de login et se connecter avec l'utilisateur tout juste créé :
La page de vérification deviendra par la suite la page de menu offrant d'autres possibilités. Une fois sur cette page, on ouvre une session avec une fonction PHP pour pouvoir garder en mémoire l'identifiant de la personne qui se connecte aux travers les différentes pages. Un bouton de connexion permettra de fermer cette session et ne permettra plus à la personne d'accéder aux autres pages sans se connecter à la plateforme.
Semaine 5
Concernant l'interface Web, j'ai créé un dépôt GIT contenant les codes de la page sur archives.plil (lien vers le dépôt dans la section Documents Rendus).
Lors de la connexion, on arrive maintenant sur une page de menu avec différents choix (deconnexion, réserver un créneau et voir ses créneaux). J'ai implémenté la possibilité de réserver des créneaux. Une fois le créneau réservé, les informations suivantes sont stockés dans la BDD : le banc choisi, le nom de l'utilisateur, la date, l'heure de début et l'heure de fin du créneau. Un créneau dure 1h. Je n'ai pas encore implémenté le blocage des créneaux déjà réservés, mais c'est quelque chose de très important à réaliser le plus vite possible.
De plus, j'ai ajouté une page pour voir les réservations effectués. Sur cette même page, il est possible de supprimer une réservation faite en la supprimant dans la base de données. Ensuite je vais y ajouter le lien vers la page de visualisation et de commande du banc lorsque l'on est dans le créneau (date+heure). Je n'ai pas encore touché à la page de visualisation et de commande du banc.
Les trois captures suivantes montrent les pages de réservations effectués. Le design reste à être modifié :
Pour le PCB de la matrice, je réduis encore sa taille.
Semaine 6
J'ai ajouté maintenant la vérification de la disponibilité des créneaux. Pour réaliser cette fonctionnalité, une fonction Javascript permet de réaliser un appel Ajax lors du changement de la date dans la page de réservation. L'appel Ajax permet d'accéder à la base de données pour prendre les créneaux réservés sur la date choisie et les rendre non sélectionnable sur le site pour l'utilisateur afin qu'un créneau ne puisse être réservé que par une seule personne.
Le design est à présent un peu modifié par rapport à précédemment. J'ai également ajouté un message d'erreur lorsque la réservation n'a pas fonctionné pour éviter tout problème dans la base de données.
Dans la page "mes réservations", un bouton d'accès au banc a été mis en place, et celui-ci n'est utilisable que si la date du créneau correspond avec la date actuelle et si l'heure actuelle est dans l'intervalle du créneau. Ensuite, en ayant relié ce bouton avec l'interface de visualisation et de commande des appareils, on peut accéder à l'affichage du banc. Pour cela, j'ai modifié la façon de recevoir les informations pour l'interface de visualisation et de commande des appareils.
Dorénavant, on ne transmet à la page que le banc choisi (contrairement à tous les appareils un par un précédemment). Ensuite, avec une requête SQL, on peut prendre les informations des différents appareils (IP, nom et type) liés au banc pour afficher leurs résultats et réaliser leurs commandes.
Sur cette page, il reste alors à implémenter la déconnexion obligatoire à la fin du créneau. Sur la page "mes réservations", une fonctionnalité à ajouter est de supprimer les réservations qui ne pourront plus être accessible, ou au moins les masquer à la vue des utilisateurs pour un affichage plus propre.
Autre chose à implémenter : une page "admin" afin d'avoir un calendrier des réservations, ajouter des appareils à la BDD, ajouter des bancs...
Un lien entre la BDD et LDAP de l'école pour l'authentification est également quelque chose à réaliser pour que toutes les personnes de l'école puissent se connecter sur la plateforme.