« SE2a4 USB 2023/2024 E12 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(9 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :


=Manette=
=Présentation du Projet Système et Réseau=
PDF du schéma.
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.


Image du PCB.
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.  


Photo de la carte soudée.
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


Lien sur le GIT du projet KiCAD (archives.plil.fr).
 
 
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
=Code=
==Choix de la partie à coder==
Serveur UDP et thread de scan des contrôleurs d'écrans.


Serveur HTTP de pages statiques et des deux pages dynamiques.
 
==Réalisation==
 
Lien sur le GIT du code (archives.plil.fr).
=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

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 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.

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

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

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 :

./serveur_http -p XXXX

Ou bien de manière plus verbeux :

./serveur_http --port XXXX
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 :

Rapide mémo sur le format des trames utilisées.
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.