« I2L 2025 Groupe3 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
(Mise en page)
 
(37 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 46 : Ligne 46 :
Au 15 octobre 2025, la carte est complétement soudée, y compris la carte d'essai pour porter le sonar. A la même date le sonar a été déplacé vers PB0 et la LED initialement sur PB0 vers PF6. Attention aux fils au recto de la carte : fragile !
Au 15 octobre 2025, la carte est complétement soudée, y compris la carte d'essai pour porter le sonar. A la même date le sonar a été déplacé vers PB0 et la LED initialement sur PB0 vers PF6. Attention aux fils au recto de la carte : fragile !


= Travaux (étudiants) =
= Travaux (étudiants)‎ ‎ =


- 13 Octobre 2025 :
''13 octobre 2025''


Découverte de la carte et des composants, programmation pour pouvoir allumer les LEDS avec un délai d'une seconde en appuyant sur un bouton. Importation de la bibliothèque LCD pour pouvoir utiliser l'écran, et nous avons réussi à afficher du texte sur celui-ci.
Découverte de la carte et des composants, programmation pour pouvoir allumer les LEDS avec un délai d'une seconde en appuyant sur un bouton. Importation de la bibliothèque LCD pour pouvoir utiliser l'écran, et nous avons réussi à afficher du texte sur celui-ci.
‎ ‎ 
‎ ‎ 
''13 octobre 2025''
=== '''Mise en route du servo-moteur''' ===
Nous avons commencé par la mise en fonctionnement du '''servo-moteur'''. L’objectif initial était de vérifier son bon comportement sur toute son amplitude de mouvement. Pour cela, nous avons réalisé plusieurs essais en faisant varier l’angle de '''0° à 180°'''. Après plusieurs tests, nous avons remarqué que les valeurs envoyées au servo devaient être ajustées pour correspondre réellement à cette plage d’angles. Ainsi, nous avons déterminé que les valeurs de '''5 à 19''' représentaient une rotation complète de '''0° à 180°'''. Ces réglages ont permis d’obtenir un mouvement fluide et précis sur toute la course du servo.
[[Fichier:Servo.mov|alt=Mise en route du servo|gauche|vignette|Mise en route du servo]]
‎ ‎
‎ ‎‎ ‎ 
‎ ‎ 
‎ ‎ 
‎ ‎ 
‎ ‎ 
''‎‎13 octobre 2025''
=== '''Affichage de l’angle sur l’écran LCD''' ===
Une fois le servo calibré, nous avons ajouté un '''affichage en temps réel''' de l’angle sur l’écran '''LCD'''. À chaque changement de position du servo, la valeur de l’angle actuel était calculée et affichée instantanément. Cela nous a permis de vérifier visuellement la cohérence entre la position physique du servo et la valeur numérique affichée.
[[Fichier:AffichageAngle.mov|vignette|gauche|Affichage de l'angle sur écran LCD]]
‎ 
‎ 
‎ ‎   
‎''16 octobre 2025'' 
=== '''Mise en route du sonar''' ===
Nous avons ensuite mis en place le '''capteur à ultrasons (sonar)''', chargé de mesurer la '''distance''' entre le capteur et un obstacle. Un programme a été développé pour calculer la distance en temps réel, en fonction du temps aller-retour du signal ultrasonique. Cette valeur était également affichée sur l’écran LCD, ce qui permettait de suivre les variations de distance en direct.
‎‎ ‎ 
‎ ‎ 
''16 octobre 2025''
=== '''Problème d’intégration des trois éléments : servo, sonar et écran LCD''' ===
À cette étape, nous avons tenté de faire fonctionner simultanément les trois composants principaux du système : le '''servo-moteur''', le '''capteur à ultrasons (sonar)''' et l’'''écran LCD'''.
Cependant, nous avons rencontré plusieurs '''difficultés d’intégration'''. Chaque module fonctionnait correctement lorsqu’il était testé séparément, mais leur association dans un même programme a engendré des dysfonctionnements.
Plus précisément :
* Le '''servo''' exécutait ses mouvements de balayage de manière irrégulière, parfois bloquée ou ralentie.
* Le '''sonar''' ne renvoyait pas toujours des valeurs cohérentes, possiblement à cause de délais d’attente mal gérés.
* L’'''affichage sur le LCD''' subissait des perturbations, notamment des rafraîchissements incomplets ou des valeurs erronées.
Ces problèmes provenaient principalement de la '''synchronisation des signaux''' et de la '''gestion du temps d’exécution''' entre les trois périphériques. Le microcontrôleur devait gérer simultanément plusieurs tâches dépendant du temps (mesures, affichage, rotation), ce qui rendait la coordination complexe.
‎ ‎
‎ ‎
''13 novembre 2025‎''
=== '''Intégration complète et fonctionnement global''' ===
Après plusieurs ajustements, nous sommes parvenus à '''faire fonctionner les trois éléments ensemble de manière stable'''.
Le programme final assure désormais un '''balayage automatique''' :
* le '''servo''' effectue une rotation de 5° à 19°, puis revient à 5°, en boucle continue ;
* le '''sonar''' mesure en temps réel la distance à chaque position du servo ;
* l’'''écran LCD''' affiche sur la première ligne '''l’angle actuel du servo''', et sur la deuxième ligne '''la distance mesurée'''.
Grâce à cette intégration, le système fournit une '''visualisation en temps réel''' des données d’angle et de distance, tout en assurant une '''stabilité de fonctionnement'''. Ce résultat marque l’aboutissement du travail d’intégration matérielle et logicielle de l’ensemble du dispositif.
[[Fichier:Fonctionnement complet.mov|alt=Fonctionnement complet|gauche|vignette|Fonctionnement complet]]
   
‎ ‎
‎ ‎
‎ ‎
‎ ‎‎ ‎
‎ ‎
''13 novembre 2025 matin ‎''
=== '''Fonctionnalités''' ===
Afin d’enrichir l’interaction avec le système, nous avons ajouté plusieurs '''fonctionnalités de contrôle''' accessibles directement via des '''boutons'''.
* Le '''premier bouton''' permet de '''déplacer le servo manuellement''', '''angle par angle'''.  À chaque appui, le servo effectue une rotation de '''1 supplémentaire''', ce qui permet de positionner précisément le capteur selon le besoin. Ce mode manuel est particulièrement utile pour '''tester des positions spécifiques''' ou pour effectuer des mesures ponctuelles avec le sonar.
* Le '''second bouton''' active le '''mode automatique''' du servo.  Dans ce mode, le servo effectue un '''balayage continu''' allant de '''5 à 19,''' puis revient de '''19 à 5''', en boucle. Pendant ce mouvement, le système continue d’afficher en temps réel :
** l’'''angle actuel''' du servo
** la '''distance mesurée''' par le sonar
Ces fonctionnalités offrent donc deux modes d’utilisation complémentaires :
* un '''mode manuel''' pour un contrôle précis
* un '''mode automatique''' pour un '''balayage global et continu''' de l’environnement
‎ ‎
‎ ‎‎ 
‎ ‎
''13 novembre 2025 matin ‎''
=== '''Tentative de connexion avec le PC via LUFA pour un affichage amélioré''' ===
Dans la continuité de notre projet, nous avons cherché à '''établir une communication entre le système embarqué et un programme Python''' exécuté sur un ordinateur. L’objectif est d’obtenir un '''affichage plus complet et interactif''' des données du sonar, notamment sous la forme d’un '''graphique dynamique''' représentant la distance mesurée en fonction de l’angle du servo.
Pour cela, nous avons envisagé d’utiliser '''LUFA (Lightweight USB Framework for AVRs)''', une bibliothèque permettant de gérer la '''communication USB''' sur les microcontrôleurs. L’idée est de faire reconnaître notre carte comme un périphérique série virtuel, afin que le programme Python puisse récupérer en temps réel les mesures envoyées par le microcontrôleur.
L’objectif final est de pouvoir '''transmettre les valeurs d’angle et de distance''' vers l’ordinateur, puis de les '''afficher en temps réel''' sous forme de radar sur une interface graphique Python (par exemple avec ''matplotlib'' ou ''pygame'').
Bien que cette fonctionnalité ne soit pas encore totalement opérationnelle, elle ouvre la voie à une '''amélioration significative de l’interface utilisateur''' et à une '''meilleure exploitation des données du sonar'''.
Mise en place du LUFA :
Pour compiler le LUFA, allez dans I2L/Minimal et faire faire "make". Ensuite pour flasher le LUFA sur le micro-contrôleur faire "make dfu" et accepter l'autorisation sur l'ordinateur si c'est demandé.
Prochaine étape, regrouper le code du sonar et le LUFA ensemble pour que cela fonctionne ensemble.
‎ ‎
‎ ‎
''13 novembre 2025 après-midi ‎''
=== '''Mise en place de la communication LUFA''' ===
La prochaine étape de notre projet consiste à '''intégrer LUFA''' (Lightweight USB Framework for AVRs) afin d’établir une '''communication USB''' entre le microcontrôleur et un ordinateur.
==== '''Configuration matérielle et initialisation''' ====
L’intégration de LUFA nécessitera une adaptation du '''fichier HardwareSetup()''', où l’initialisation du module USB devra être effectuée.
L’idée est d’y ajouter un simple appel à la fonction '''USB_Init()''', permettant d’initialiser la pile LUFA sans interférer avec les autres périphériques du système.
Nous devrons également vérifier que la fonction '''sonar_mesure()''' ne provoque pas de '''délais trop longs''', car cela pourrait '''bloquer la boucle principale''' et perturber la communication USB. Si nécessaire, elle sera optimisée ou exécutée de manière non bloquante.
==== '''Comportement automatique et gestion de la connexion''' ====
Le système devra être capable de '''détecter automatiquement''' s’il est connecté ou non à un PC :
* '''Si aucune connexion USB n’est détectée''', le programme lancera directement le '''mode automatique''' du servo (balayage continu de 5° à 19°).
* '''Si une connexion LUFA est active''', le système restera en attente de commandes provenant du PC via un '''endpoint USB OUT'''.
==== '''Communication via les endpoints USB''' ====
* '''Endpoint OUT''' : réception de données envoyées par le PC.  Lorsqu’un message est reçu (par exemple un angle spécifique), le programme exécutera la fonction '''setServoAngle()''' afin de positionner le servo à l’angle demandé.
* '''Endpoint IN''' : envoi d’informations vers le PC.  Ce canal permettra de '''transmettre les données du sonar''' (distance mesurée, angle actuel, etc.) afin qu’elles soient '''affichées en temps réel''' sur une interface Python.
==== '''Vérifications de compatibilité''' ====
Avant d’intégrer définitivement LUFA, il sera nécessaire de '''vérifier que le timer 0''' n’est '''pas déjà utilisé''' par la bibliothèque LUFA. (après vérification il n'est pas utilisé)
En effet, le fichier '''servo.c''' repose sur ce timer pour la gestion des impulsions PWM du servo. En cas de conflit, il faudra soit '''modifier le timer utilisé''', soit '''adapter la configuration LUFA''' afin d’éviter toute interférence entre les deux modules.
=== '''Annexes''' ===
Au cours du projet, un autre groupe a rencontré des difficultés à faire fonctionner son servo-moteur.
Ayant déjà réussi cette partie de notre côté, nous avons décidé de leur apporter notre aide à plusieurs reprises au fil des séances.
Nous avons commencé par examiner leur code et leur fournir quelques conseils sur la gestion du signal et du timing. Par la suite, nous leur avons envoyé notre propre code afin qu’ils puissent s’en inspirer, puis nous les avons accompagnés dans son adaptation à leur configuration.
Et pour pousser encore plus loin notre esprit d’équipe, nous leur avons même prêté '''notre propre servo et notre propre carte''', ce qui nous a temporairement ralentis dans notre progression !
Cette collaboration nous a permis de renforcer notre compréhension technique tout en favorisant un véritable esprit d’entraide et de coopération entre groupes.
Et honnêtement… après tout ça, on mériterait bien '''quelques points bonus''', non ? 😉
----


= Extraits significatifs de code (étudiants) =
= Extraits significatifs de code (étudiants) =

Version actuelle datée du 13 novembre 2025 à 13:05

Proposition de système (étudiants)

Ce projet consiste à créer un détecteur d'obstacles Sonar. Le système utilisera un capteur sonar monté sur un servomoteur pour balayer la zone et mesurer les distances.

La programmation se basera sur un principe événementiel. Le microcontrôleur enverra une onde, démarrera un chronomètre, puis calculera la distance de l'obstacle en fonction du temps mis pour recevoir l'écho. Ce cycle se répétera en continu pour un balayage complet.

Les données brutes seront envoyées à un ordinateur via le port série USB pour un affichage "radar". Un écran LCD affichera en temps réel des données de base. Deux LEDs serviront d'indicateurs de l'état de fonctionnement du programme et une dernière LED sous tension.

Contre-proposition (intervenant)

Votre objet doit pouvoir être autonome et marcher sur batterie avec affichage sur l'écran LCD 2 lignes.

L'objet doit aussi pouvoir être connecté par USB à un PC et recevoir un angle de détection du PC puis envoyer la distance du premier obstacle au PC sur cet angle. Dans ce cas une représentation du type "sonar sous-marin" est affiché sur le PC. Vous utiliserez la classe USB "vendeur" (spécifique) pour votre périphérique.

Le bricolage pour installer le sonar sur le servo-moteur est à votre charge. Une solution avec un PCB d'essai vous sera proposé.

Proposition définitive (étudiants)

Répartition du travail (étudiants)

Carte

Schéma initial (étudiants)

Schéma de la carte

Carte routée (intervenant)

Vous utiliserez la carte avec batterie.

Composants (intervenant)

Il manque au 10 octobre 2025, un connecteur femelle 16 broches.

Carte réalisée (intervenant)

Photo de la carte

La carte est entiérement soudée à l'exception d'un connecteur 16 broches pour l'écran. Il reste aussi du travail autour de la carte d'essai portant le sonar.

A noter : un problème pour la broche de commande du servo-moteur. Cette broche est reliée à PF6 alors qu'elle devrait être connecté à une broche gérée par un minuteur pour générer un signal PWM comme PB7 ou PD0.

Au 15 octobre 2025, la carte est complétement soudée, y compris la carte d'essai pour porter le sonar. A la même date le sonar a été déplacé vers PB0 et la LED initialement sur PB0 vers PF6. Attention aux fils au recto de la carte : fragile !

Travaux (étudiants)‎ ‎

13 octobre 2025

Découverte de la carte et des composants, programmation pour pouvoir allumer les LEDS avec un délai d'une seconde en appuyant sur un bouton. Importation de la bibliothèque LCD pour pouvoir utiliser l'écran, et nous avons réussi à afficher du texte sur celui-ci.

‎ ‎

‎ ‎

13 octobre 2025

Mise en route du servo-moteur

Nous avons commencé par la mise en fonctionnement du servo-moteur. L’objectif initial était de vérifier son bon comportement sur toute son amplitude de mouvement. Pour cela, nous avons réalisé plusieurs essais en faisant varier l’angle de 0° à 180°. Après plusieurs tests, nous avons remarqué que les valeurs envoyées au servo devaient être ajustées pour correspondre réellement à cette plage d’angles. Ainsi, nous avons déterminé que les valeurs de 5 à 19 représentaient une rotation complète de 0° à 180°. Ces réglages ont permis d’obtenir un mouvement fluide et précis sur toute la course du servo.




‎ ‎

‎ ‎‎ ‎

‎ ‎

‎ ‎

‎ ‎

‎ ‎

‎‎13 octobre 2025

Affichage de l’angle sur l’écran LCD

Une fois le servo calibré, nous avons ajouté un affichage en temps réel de l’angle sur l’écran LCD. À chaque changement de position du servo, la valeur de l’angle actuel était calculée et affichée instantanément. Cela nous a permis de vérifier visuellement la cohérence entre la position physique du servo et la valeur numérique affichée.

Affichage de l'angle sur écran LCD

‎ ‎

16 octobre 2025

Mise en route du sonar

Nous avons ensuite mis en place le capteur à ultrasons (sonar), chargé de mesurer la distance entre le capteur et un obstacle. Un programme a été développé pour calculer la distance en temps réel, en fonction du temps aller-retour du signal ultrasonique. Cette valeur était également affichée sur l’écran LCD, ce qui permettait de suivre les variations de distance en direct.

‎‎ ‎

‎ ‎

16 octobre 2025

Problème d’intégration des trois éléments : servo, sonar et écran LCD

À cette étape, nous avons tenté de faire fonctionner simultanément les trois composants principaux du système : le servo-moteur, le capteur à ultrasons (sonar) et l’écran LCD.

Cependant, nous avons rencontré plusieurs difficultés d’intégration. Chaque module fonctionnait correctement lorsqu’il était testé séparément, mais leur association dans un même programme a engendré des dysfonctionnements.

Plus précisément :

  • Le servo exécutait ses mouvements de balayage de manière irrégulière, parfois bloquée ou ralentie.
  • Le sonar ne renvoyait pas toujours des valeurs cohérentes, possiblement à cause de délais d’attente mal gérés.
  • L’affichage sur le LCD subissait des perturbations, notamment des rafraîchissements incomplets ou des valeurs erronées.

Ces problèmes provenaient principalement de la synchronisation des signaux et de la gestion du temps d’exécution entre les trois périphériques. Le microcontrôleur devait gérer simultanément plusieurs tâches dépendant du temps (mesures, affichage, rotation), ce qui rendait la coordination complexe.

‎ ‎

‎ ‎

13 novembre 2025‎

Intégration complète et fonctionnement global

Après plusieurs ajustements, nous sommes parvenus à faire fonctionner les trois éléments ensemble de manière stable.

Le programme final assure désormais un balayage automatique :

  • le servo effectue une rotation de 5° à 19°, puis revient à 5°, en boucle continue ;
  • le sonar mesure en temps réel la distance à chaque position du servo ;
  • l’écran LCD affiche sur la première ligne l’angle actuel du servo, et sur la deuxième ligne la distance mesurée.

Grâce à cette intégration, le système fournit une visualisation en temps réel des données d’angle et de distance, tout en assurant une stabilité de fonctionnement. Ce résultat marque l’aboutissement du travail d’intégration matérielle et logicielle de l’ensemble du dispositif.




‎ ‎

‎ ‎

‎ ‎

‎ ‎‎ ‎

‎ ‎

13 novembre 2025 matin ‎

Fonctionnalités

Afin d’enrichir l’interaction avec le système, nous avons ajouté plusieurs fonctionnalités de contrôle accessibles directement via des boutons.

  • Le premier bouton permet de déplacer le servo manuellement, angle par angle. À chaque appui, le servo effectue une rotation de 1 supplémentaire, ce qui permet de positionner précisément le capteur selon le besoin. Ce mode manuel est particulièrement utile pour tester des positions spécifiques ou pour effectuer des mesures ponctuelles avec le sonar.
  • Le second bouton active le mode automatique du servo. Dans ce mode, le servo effectue un balayage continu allant de 5 à 19, puis revient de 19 à 5, en boucle. Pendant ce mouvement, le système continue d’afficher en temps réel :
    • l’angle actuel du servo
    • la distance mesurée par le sonar

Ces fonctionnalités offrent donc deux modes d’utilisation complémentaires :

  • un mode manuel pour un contrôle précis
  • un mode automatique pour un balayage global et continu de l’environnement

‎ ‎

‎ ‎‎

‎ ‎

13 novembre 2025 matin ‎

Tentative de connexion avec le PC via LUFA pour un affichage amélioré

Dans la continuité de notre projet, nous avons cherché à établir une communication entre le système embarqué et un programme Python exécuté sur un ordinateur. L’objectif est d’obtenir un affichage plus complet et interactif des données du sonar, notamment sous la forme d’un graphique dynamique représentant la distance mesurée en fonction de l’angle du servo.

Pour cela, nous avons envisagé d’utiliser LUFA (Lightweight USB Framework for AVRs), une bibliothèque permettant de gérer la communication USB sur les microcontrôleurs. L’idée est de faire reconnaître notre carte comme un périphérique série virtuel, afin que le programme Python puisse récupérer en temps réel les mesures envoyées par le microcontrôleur.


L’objectif final est de pouvoir transmettre les valeurs d’angle et de distance vers l’ordinateur, puis de les afficher en temps réel sous forme de radar sur une interface graphique Python (par exemple avec matplotlib ou pygame).

Bien que cette fonctionnalité ne soit pas encore totalement opérationnelle, elle ouvre la voie à une amélioration significative de l’interface utilisateur et à une meilleure exploitation des données du sonar.


Mise en place du LUFA :

Pour compiler le LUFA, allez dans I2L/Minimal et faire faire "make". Ensuite pour flasher le LUFA sur le micro-contrôleur faire "make dfu" et accepter l'autorisation sur l'ordinateur si c'est demandé.

Prochaine étape, regrouper le code du sonar et le LUFA ensemble pour que cela fonctionne ensemble.

‎ ‎

‎ ‎

13 novembre 2025 après-midi ‎

Mise en place de la communication LUFA

La prochaine étape de notre projet consiste à intégrer LUFA (Lightweight USB Framework for AVRs) afin d’établir une communication USB entre le microcontrôleur et un ordinateur.

Configuration matérielle et initialisation

L’intégration de LUFA nécessitera une adaptation du fichier HardwareSetup(), où l’initialisation du module USB devra être effectuée.

L’idée est d’y ajouter un simple appel à la fonction USB_Init(), permettant d’initialiser la pile LUFA sans interférer avec les autres périphériques du système.

Nous devrons également vérifier que la fonction sonar_mesure() ne provoque pas de délais trop longs, car cela pourrait bloquer la boucle principale et perturber la communication USB. Si nécessaire, elle sera optimisée ou exécutée de manière non bloquante.

Comportement automatique et gestion de la connexion

Le système devra être capable de détecter automatiquement s’il est connecté ou non à un PC :

  • Si aucune connexion USB n’est détectée, le programme lancera directement le mode automatique du servo (balayage continu de 5° à 19°).
  • Si une connexion LUFA est active, le système restera en attente de commandes provenant du PC via un endpoint USB OUT.

Communication via les endpoints USB

  • Endpoint OUT : réception de données envoyées par le PC. Lorsqu’un message est reçu (par exemple un angle spécifique), le programme exécutera la fonction setServoAngle() afin de positionner le servo à l’angle demandé.
  • Endpoint IN : envoi d’informations vers le PC. Ce canal permettra de transmettre les données du sonar (distance mesurée, angle actuel, etc.) afin qu’elles soient affichées en temps réel sur une interface Python.

Vérifications de compatibilité

Avant d’intégrer définitivement LUFA, il sera nécessaire de vérifier que le timer 0 n’est pas déjà utilisé par la bibliothèque LUFA. (après vérification il n'est pas utilisé)

En effet, le fichier servo.c repose sur ce timer pour la gestion des impulsions PWM du servo. En cas de conflit, il faudra soit modifier le timer utilisé, soit adapter la configuration LUFA afin d’éviter toute interférence entre les deux modules.


Annexes

Au cours du projet, un autre groupe a rencontré des difficultés à faire fonctionner son servo-moteur.

Ayant déjà réussi cette partie de notre côté, nous avons décidé de leur apporter notre aide à plusieurs reprises au fil des séances.

Nous avons commencé par examiner leur code et leur fournir quelques conseils sur la gestion du signal et du timing. Par la suite, nous leur avons envoyé notre propre code afin qu’ils puissent s’en inspirer, puis nous les avons accompagnés dans son adaptation à leur configuration.

Et pour pousser encore plus loin notre esprit d’équipe, nous leur avons même prêté notre propre servo et notre propre carte, ce qui nous a temporairement ralentis dans notre progression !

Cette collaboration nous a permis de renforcer notre compréhension technique tout en favorisant un véritable esprit d’entraide et de coopération entre groupes.

Et honnêtement… après tout ça, on mériterait bien quelques points bonus, non ? 😉


Extraits significatifs de code (étudiants)

Rendus (étudiants)

Projet KiCAD : Fichier:I2L-2025-Carte-G3-final.zip

Programmes :