« SE2a4 USB 2023/2024 E12 » : différence entre les versions
Aucun résumé des modifications |
|||
(9 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
= | =Présentation du Projet Système et Réseau= | ||
L'objectif de ce projet est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. | |||
Le projet est composé d'une carte relié en USB à l'ordinateur le plus proche ainsi que d'un serveur web accessible depuis un navigateur. | |||
L'objectif étant de pouvoir depuis une page web connaître l'état d'un moniteur et de pouvoir le changer en appuyant physiquement sur le bouton d'extinction/allumage de ce dernier | |||
L'ensemble de ma production sur ce projet est disponible sur mon archive GIT. | |||
Lien de l'archive git: | |||
https://archives.plil.fr/nconrard/ProjetSystemeReseauNoah | https://archives.plil.fr/nconrard/ProjetSystemeReseauNoah | ||
Serveur | |||
== | |||
=CAO= | |||
[[Fichier:Schema pcb SR.jpg|bordure|centré|cadre|Schéma de la carte utilisée]] | |||
Le schéma complet de la carte est celui disponible ci-dessus. Il est basé sur le design originel fourni par M. Redon, disponible sur la [[SE2a4 Projet système/réseau 2023/2024|page du projet.]] | |||
Cette conception inclut 3 indicateurs lumineux, un directement commandé par la tension d'alimentation de la carte et deux autres sur des entrées/sorties de l'ATMEGA32U4, ainsi qu'une unique sortie pour servo-moteur. | |||
La détection de l'état du moniteur se fait au travers d'une LDR (ou photorésistance) qui par un jeu de résistance fait varier une tension au niveau d'un CAN de l'ATMEGA32U4. On peut calculer la tension par un calcul de diviseur de tension : | |||
<math>V_{can} = V_{cc}\times\left(\frac{22{k\Omega}}{R_{LDR}+22{k\Omega}} \right ), R_{LDR}\in[ 20k\Omega ; 100k\Omega ]</math> | |||
Le contrôleur pourra en fonction de cette tension choisir si il doit ou non bouger le Servo-moteur via la broche MLI sur PD0. | |||
[[Fichier:Board pcb SR.jpg|centré|cadre|Board de la carte utilisée]] | |||
Le routage de la carte est celui ci-dessus. On notera que les emplacements pour le Servo-moteur ainsi que la LDR sont traversants afin de pouvoir les déporter par la suite. | |||
=PCB= | |||
[[Fichier:Pcb v1 PROJET SR.jpg|centré|vignette|Carte électronique sous-cablée projet Système et Réseau 2023/2024]] | |||
Le micro-contrôleur est accessible via le port USB, le chargeur d'amorçage (bootloader) a été téléversé initialement via le port ISP de l'ATMEGA32U4. | |||
Des programmes de test afin de faire clignoter les LEDs sont présents sur l'archive git. | |||
=Serveur Web= | |||
[[Fichier:Action site.jpg|vignette|Aperçu de la page des actions du site web]] | |||
=== HTML : === | |||
Il est possible de lancer (pour l'instant) en local un site web de la manière suivante : <syntaxhighlight lang="bash"> | |||
./serveur_http -p XXXX | |||
</syntaxhighlight>Ou bien de manière plus verbeux : <syntaxhighlight lang="bash"> | |||
./serveur_http --port XXXX | |||
</syntaxhighlight>[[Fichier:Aperçu page états.png|vignette|Aperçu de la page des status des moniteurs]]Par défaut, le port utilisé par défaut est 8080. | |||
Le site est composé de 3 pages, une page d'accueil, une pour la liste des actions ainsi qu'une pour surveiller le statut des écrans. Une amélioration future pourrait être de fusionner ses 3 pages. | |||
=== UDP : === | |||
Une ébauche de serveur UDP est également présent sur l'archive git. | |||
Lorsque compilé et exécuté, il écoute sur le port 4242 les messages et en fonction de leur contenu le code rentre dans une étape précise. Le format des trames peut être trouvé ci-dessous, il a été discuté avec les autres membres du projet. | |||
On peut notamment le constater sur le code ci-dessous :[[Fichier:Note rapide trame.pdf|vignette|Rapide mémo sur le format des trames utilisées.]]<syntaxhighlight lang="c" line="1" start="69"> | |||
if (nreseau[0] == NRES[0] && nreseau[1] == NRES[1] && nreseau[2] == NRES[2]) { | |||
switch (action) { | |||
case '0': // Retourner ID usb | |||
printf("Veut retourner ID usb\n"); | |||
break; | |||
case '1': // Retourner Etat Ecran | |||
printf("Veut retourner Etat Ecran\n"); | |||
break; | |||
case '2': // Changer Etat Ecran | |||
printf("Veut changer Etat Ecran\n"); | |||
break; | |||
default: | |||
perror("Erreur lors de la réception du message / Action non reconnue"); | |||
exit(EXIT_FAILURE); | |||
break; // ?? en théorie inutile. | |||
} | |||
} | |||
</syntaxhighlight>D'autres codes sont également disponibles sur l'archive afin d'émettre des messages vers ce serveur UDP ainsi que celui d'autres groupes. | |||
La suite du projet coté serveur Web serait de relier la partie HTML avec la partie UDP (programmation "multi-threadé") et relier les boutons des pages HTML à des vraies actions d'envoi de trame. |
Version actuelle datée du 27 mai 2024 à 14:26
Présentation du Projet Système et Réseau
L'objectif de ce projet est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques.
Le projet est composé d'une carte relié en USB à l'ordinateur le plus proche ainsi que d'un serveur web accessible depuis un navigateur.
L'objectif étant de pouvoir depuis une page web connaître l'état d'un moniteur et de pouvoir le changer en appuyant physiquement sur le bouton d'extinction/allumage de ce dernier
L'ensemble de ma production sur ce projet est disponible sur mon archive GIT. Lien de l'archive git:
https://archives.plil.fr/nconrard/ProjetSystemeReseauNoah
CAO
Le schéma complet de la carte est celui disponible ci-dessus. Il est basé sur le design originel fourni par M. Redon, disponible sur la page du projet.
Cette conception inclut 3 indicateurs lumineux, un directement commandé par la tension d'alimentation de la carte et deux autres sur des entrées/sorties de l'ATMEGA32U4, ainsi qu'une unique sortie pour servo-moteur.
La détection de l'état du moniteur se fait au travers d'une LDR (ou photorésistance) qui par un jeu de résistance fait varier une tension au niveau d'un CAN de l'ATMEGA32U4. On peut calculer la tension par un calcul de diviseur de tension :
Le contrôleur pourra en fonction de cette tension choisir si il doit ou non bouger le Servo-moteur via la broche MLI sur PD0.
Le routage de la carte est celui ci-dessus. On notera que les emplacements pour le Servo-moteur ainsi que la LDR sont traversants afin de pouvoir les déporter par la suite.
PCB
Le micro-contrôleur est accessible via le port USB, le chargeur d'amorçage (bootloader) a été téléversé initialement via le port ISP de l'ATMEGA32U4.
Des programmes de test afin de faire clignoter les LEDs sont présents sur l'archive git.
Serveur Web
HTML :
Il est possible de lancer (pour l'instant) en local un site web de la manière suivante :
./serveur_http -p XXXX
Ou bien de manière plus verbeux :
./serveur_http --port XXXX
Par défaut, le port utilisé par défaut est 8080.
Le site est composé de 3 pages, une page d'accueil, une pour la liste des actions ainsi qu'une pour surveiller le statut des écrans. Une amélioration future pourrait être de fusionner ses 3 pages.
UDP :
Une ébauche de serveur UDP est également présent sur l'archive git.
Lorsque compilé et exécuté, il écoute sur le port 4242 les messages et en fonction de leur contenu le code rentre dans une étape précise. Le format des trames peut être trouvé ci-dessous, il a été discuté avec les autres membres du projet.
On peut notamment le constater sur le code ci-dessous :
if (nreseau[0] == NRES[0] && nreseau[1] == NRES[1] && nreseau[2] == NRES[2]) {
switch (action) {
case '0': // Retourner ID usb
printf("Veut retourner ID usb\n");
break;
case '1': // Retourner Etat Ecran
printf("Veut retourner Etat Ecran\n");
break;
case '2': // Changer Etat Ecran
printf("Veut changer Etat Ecran\n");
break;
default:
perror("Erreur lors de la réception du message / Action non reconnue");
exit(EXIT_FAILURE);
break; // ?? en théorie inutile.
}
}
D'autres codes sont également disponibles sur l'archive afin d'émettre des messages vers ce serveur UDP ainsi que celui d'autres groupes.
La suite du projet coté serveur Web serait de relier la partie HTML avec la partie UDP (programmation "multi-threadé") et relier les boutons des pages HTML à des vraies actions d'envoi de trame.