SE5 2023/2024 P3

De projets-se.plil.fr
Révision datée du 29 janvier 2024 à 09:53 par Mhalaoui (discussion | contributions) (→‎Bilan)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Présentation du Robot Centaure

Le robot Centaure est un robot d’accueil créé en 2004 par des élèves ingénieurs. Il peut avoir une discussion avec une personne et pouvoir la guider au sein de Polytech.

"centaure"


Préparation du projet

Calendrier prévisionnel

Afin d'avoir une bonne gestion de projet, j'ai choisi le diagramme de Gantt pour bien organiser les taches pour la réalisation de mon projet.

"gantt"


Cahier de charge

Je dois réaliser plusieurs tâches. Tout d’abord :

  • Suite à l’état des lieux, une mission principale se dessine, sécuriser le robot en retravaillant le câblage et l’organisation .
  • Etude générale du robot en se basant sur les anciens rapports.
  • Commande du robot à travers le joystick.
  • Finaliser l'implantation des capteurs

Une fois ces tâches effectuées on peut envisager un contrôle de plus haut niveau du robot par caméra.

Spécifications technique

Partie Commande : Afin de développer la partie commande j'utilise l'IDE d'Arduino pour la programmation des différentes fonctionnalités.

"ide"

L’environnement de développement intégrée Arduino est un environnement facile à utiliser et en même temps contient plusieurs bibliothèques déjà installées .


Pour la partie matériel ,j'utilise :

  • Arduino MEGA :
"Arduino mega"

Arduino est un excellent outil pour développer des objets interactifs. Il existe de nombreuses bibliothèques permettant de faire des choses complexes, comme écrire sur des cartes SD, des écrans LCD, analyser des GPS, ainsi que des bibliothèques pour faire des choses simples, comme des boutons ou allumer une lumière.

L'Arduino Mega offre plus de broches d'E/S numériques (54 contre 14) et analogiques (16 contre 6), ainsi qu'une mémoire Flash plus grande (256 Ko contre 32 Ko) par rapport à l'Arduino Uno.


  • Shield Arduino:

Carte d'interface permettant de raccorder facilement les modules capteurs et les actionneurs Grove à une carte Arduino.Développé par les anciennes promotions équipé par deux ADCs pour la commande des variateurs de vitesse.

  • Relais électromécanique:
"relais"

L'utilisation d'un module relais avec Arduino offre de nombreux avantages. Tout d'abord, il permet à Arduino de contrôler des appareils qui nécessitent une tension ou un courant plus élevé que ce que le microcontrôleur peut fournir.Dans notre cas ,c’est le contrôle du variateur.

Partie puissance :

Dans la partie puissance on trouve plusieurs composants choisis en se basant sur les performances du système et avoir une consommation minimale d’énergie pour éviter les dissipations.

  • Deux variateurs de vitesse 8CH2QM :
"VV"
  • Deux moteurs DC:
 moteurs SRG0131 24V / 15.5 A / 0.35 kW / 10 km/h
 Ces moteurs ont un courant de pic d’approximativement 30-35A. En régime normal, leur
 consommation est d’environ 8A.
  • Un convertisseur DC/DC :
"DC1"
 Tension d’entrée : 16,8…31,2V (Recommandée : 24V)
  Tension de sortie : 12 VDC
  Courant de sortie : 12,5A


  • Un convertisseur DC/DC:
"DC2"
 Tension d’entrée : 19…36V (Recommandée : 24V)
  Tension de sortie : 12 VDC
  Courant de sortie : 12,5A
  • Un contacteur:
"contacteur"
Les contacteurs sont des équipements de sécurité majeurs. Leur fonctionnement est
 toujours le même : un circuit de commande en courant faible (<2A) permet, grâce à une
 bobine, de fermer les contacts (équivalents à des interrupteurs) du circuit de courant fort
 (>2A).


Porte 5 fusibles :

"fusible"

On trouve aussi une carte mère avec une mémoire SSD , un écran et une caméra Kinect pour le traitement d’image.

  • La combinaison entre les deux parties va permettre de former notre Robot.
"schèma"


Le projet est décomposé en deux parties :

  • La première partie est la commande manuelle du Robot: grâce à des programmes informatiques téléversés dans le microcontrôleur de la carte Arduino , on peut contrôler notre robot.
  • La deuxième partie est la commande automatique du robot à travers la caméra: grâce à des algorithmes d’intelligence artificielle , le robot peut prendre des décisions tout seul .


La partie commande va permettre d’actionner la partie puissance pour faire tourner les moteurs DC.

Suivi du Projet

Semaine 1

Début du projet le 11/10/2024

du 11/10 au 13/10

  • La recherche des rapports des années précédentes sur le robot centaure.
  • Compréhension de l’architecture du Robot
  • Vérification de la charge des batteries.
  • Développement d’un code arduino pour faire avancer le robot sans commande pour vérifier le fonctionnement des moteurs.7-Développement d’un code pour tester le joystick.


Problèmes rencontrés:

Une des deux batteries se déchargent rapidement d’où la nécessité d'acheter une autre batterie avec les mêmes dimensions Problème d’alimentation des deux variateurs de vitesse (absence de tension)

Le test de code n’est pas possible en attendant d’avoir la batterie et de pouvoir alimenter les variateurs correctement.

Semaine 2

J'ai commencé par la recherche des solutions pour les problèmes rencontrés dans la première semaine.Tout d'abord, pour les batteries je n'ai pas encore trouvé les batteries avec les dimensions souhaitées par suite j'ai pris la décision d'utiliser les mêmes batteries en attendant de trouver les mêmes dimensions mais en garantissant une charge continue des batteries comme ça je peux avoir les 24V pour l'alimentation des différents composants.

Pour l'alimentation des deux variateurs, après deux jours de recherche j'ai trouvé que le fil qui lie le premier variateur et le contacteur est défaillant et par suite j'étais obligé de le changer pour alimenter le premier variateur.

"schèma variateur"

La partie puissance fonctionne et donc j'ai passé à tester la partie commande en utilisant le joystick.A cause du problème d'alimentation les deux variateurs ne peuvent pas pas fonctionner en même temps mais le code fonctionne.

Comme vous voyez dans la vidéo , juste un seul moteur qui tourne et donc j'ai fait fait du débogage en utilisant des prints dans le programme pour savoir la source du problème mais apparemment tout marche nickel et pour confirmer l'hypothèse de l'alimentation , j'ai fait un programme pour faire tourner les moteurs sans joystick.

Résumé:

  • Problème des variateurs résolu
  • Je suis encore à la recherche des batteries avec les mêmes dimensions.
  • Le programme fonctionne.

Durant les vacances , je vais essayer de développer plus le programme de la partie commande et en même temps développer des algorithmes d'intelligence artificielle pour la commande automatique.

Semaine3

La semaine 3 a commencé par la soutenance intermédiaire dont laquelle j'ai présenté mon état d'avancement et les taches à venir. J'ai eu plusieurs remarques de la part du Jury à propos de la méthodologie de travail et le faite que je dois prioriser les taches les plus importantes.Par suite, il y'a eu un changement dans le cahier de charge : -Organisation du Robot et sécurisation du cabalge. -Commande par Joystick physique et virtuel. -Commande par Caméra Kinect(au lieu d'utiliser les capteurs séparement , je vais utiliser le capteur infrarouge de la caméra Kinect).

En ce qui concerne la présentation de mon état d'avancement ,j'avais présenté 3 points:

  • Le test des moteurs par commande directe avec arduino.
  • La commande de joystick non réussi car les batteries se déchargeait.
  • En attendant la réception des batteries ,j'ai commencé par le développement du joystick virtuel.

Dans cette partie j'ai commencé par définir les protocoles utilisé pour lier le serveur et le client et le serveur et l'arduino.


"schèma"

le protocole série est RS232.

Node.js est une plateforme logicielle libre en JavaScript, orientée vers les applications réseau évènementielles hautement concurrentes.

En résumé : j'utilise HTML ,CSS pour le frontend et Javascript avec NodeJS pour le Back-end ,comme ça j'aurai une interface Web qui contient un joystick virtuel pour commander le robot.

  • Développement d'un algorithmes de reconnaissance vocale et de détection de visage.

Après la réception des deux batteries , je me suis lancé dans la partie commande du robot par joystick physique.J'ai commencé par charger les batteries et de les installer dans le Robot.Le code du Joystick physique était déjà prêt ,il fallait juste avoir des batteries en bonne état. Le résultat est comme suit:

Après plusieurs tests du code de Joystick Physique , j'ai rencontré le même problème des batteries qui se déchargent et donc ça montre que le problème ne provient pas des batteries.

Hypothèse 1 : les freins des moteurs non desserrés et par suite le circuit consomme plus que prévu et ça permet de décharger les batteries. Pour vérifier cette hypothèse , j'ai démonté le premier étage et de chercher le câble responsable de l'alimentation des freins Sachant que les freins doit être alimentés par 24V.

Après l'identification du câble responsable ,j'ai procédé à la mesure de la tension jusqu'au contacteur .Après les mesures de chaque point du chemin d'alimentation j'ai trouvé que la tension 24V est présente et donc logiquement le problème ne provient pas des freins des moteurs.

Hypothèse 2 : Un composant du circuit consomme plus que d'habitude.

Pour confirmer cette hypothèse, Monsieur Redon m'a proposé de voir avec Monsieur Chevalier pour trouver une solution à cette problématique.

Pour vérifier cette hypothèse ,j'ai posé plusieurs étapes :

  • Vérification du courant sortant des batteries.
  • Débrancher l'étage de commande et tester le courant sortant des deux batteries

En général ça va être un débogage de composant par composant pour trouver le composant qui consomme le courant.

Monsieur Redon m'a fait la remarque de l'organisation du Robot surtout la partie la commande ,donc en attendant de trouver la solution du problème , j'ai fait la conception d'un shield en se basant sur ce que les groupes précédents ont fait comme travail.

Un shield équipé par 2 DACs et un port RJ11 et un emplacement pour brancher les capteurs.

Pour la partie Joystick virtuel ,j'ai implémenté un serveur

"PCB"


semaine 4 et 5

ces deux semaines ont connu la finalisation de plusieurs tâches:

  • Finalisation de la page web pour le joystick virtuel : comme mentionné précédemment que j'ai utilisé les langages HTML,CSS pour le Frontend et javascript,NodeJS pour le Backend.
""

Les caractéristiques de l'interface :

  1. 2 boutons ,un pour la connexion et l'autre pour la déconnexion.
  2. Pour se connecter il faut faire entrer l'adresse IP du Robot et le numéro de Port(8080)
  Les valeurs de X et Y sont comprises entre 0 et 200 pour avoir plus de précision et  la valeur de milieu est  à 100 (joystick à sa position initiale).
  • Finalisation du développement de l'application mobile avec Cordova:


"App"
  • Test de l'application avec le serveur NodeJS
  • Écriture du code Arduino qui regroupe le joystick physique et le joystick virtuel:
    • L'Arduino reçoit deux informations:
      • Du joystick physique par le port RJ11
      • Du joystick virtuel par port série
    • Le joystick physique est prioritaire donc le joystick virtuel est activé dans le cas où le joystick physique est dans sa position initiale.
  • Réalisation des tests sur robot  :

test du joystick physique :


  • Test du joystick virtuel :
  Les tests ont montré que le code marche bien mains ça n’empêche pas de continuer l’amélioration du code  Arduino et de continuer les tests. 
  • Réalisation du routage du PCB: en se basant sur le routage qui a été déjà réalisé par une étudiante mais avec des fautes, j'ai corrigé ces fautes et j'ai finalisé le routage.
"routage PCB"
  • Organisation du Robot: Conception d'un boîtier avec le logiciel Onshape pour organiser plus la partie Commande du Robot:
"boitier"

La fabrication va être lancée le 08 janvier.

Problème Variateur de vitesse : Comme indiqué précédemment que le variateur se mettait toujours en mode erreur et en se basant sur la Datasheet (https://projets-ima.plil.fr/mediawiki/images/4/46/P50_Variateur_CH2QM.pdf)

La réalisation de ce montage :


"schéma"

Comme indiqué dans la Datasheet qu'il existe plusieurs modes d'erreurs selon le nombre de clignotement de la LED rouge du variateur.Pour notre cas j'avais en premier 5 clignotements ce qui indique que la tension du potentiomètre n'est pas bonne.

Démarche : la tension du potentiomètre provient de la tension de la sortie du DAC de l'Arduino donc j'ai varié le rapport de la tension de commande du DAC de 0% à 100% pour réaliser les mesures de la tension de sortie du DAC.Les mesures sont effectuées en premier avec multimètre après j'ai utilisé un oscilloscope pour plus de précision.


"oscillo"

Résultat : Après plusieurs tests la tension de sortie est comprise entre 0.2V et 3.9V , ces valeurs ne représentent un mode erreur pour le variateur ce qui est contradictoire avec le mode d'erreur affiché. Après plusieurs tests , le variateur est réinitialiser et n'affiche plus ce mode d'erreur.

La deuxième erreur (soit 2 clignotements ou 3 par exemple si je commande le moteur pour avancer (Forward) , j'ai une erreur qui indique que la tension du Backward est présente ce qui est contradictoire sachant que j'ai réalisé la mesure de la tension du backward et j'ai trouvé que c'est égale à 0V.

Le deuxième test : j'ai éliminé le relais et j'ai injecté directement 24V de la batterie dans le forward et le backward avec le Ground Résultat : le mode erreur persiste avec 2 clignotement ou 3 ça dépend du sens de rotation.

Deuxième problème rencontré : A force de tester la commande des moteurs deux résistance ont brûlées.La valeur de la résistance est illisible et donc il faut trouver une solution pour savoir la valeur de la résistance pour la changer.

"schéma"

Solution:Après plusieurs jours de recherche , j'ai trouvé une solution qui consiste à :

  1. Dessouder la résistance brûlée du variateur
  2. Gratter avec un cutter la couche isolante
    "schéma"
  3. Sachant que la couche du carbone qui a été coupée, il faut juste identifié la coupure et de considérer qu'on a deux résistance en série , après il faut mesurer la première résistance et la deuxième résistance et de faire la somme des deux résistances pour obtenir la valeur de la résistance grillée.


"schéma"

En suivant cette démarche , j'ai pu mesurer la valeur de la résistance qui est égale à 100 Ohms

Après l'identification de la valeur de la résistance , j'ai procédé au changement de la résistance des deux variateurs.

Test et Résultats : Une fois j'ai changé les deux résistances,j'ai réalisé le test de chaque variateur dans le robot et apparemment la résistance branchée marche bien mais le mode erreur persiste.

Après les vacances ,je vais continuer le débogage et les tests afin de démarrer les deux variateurs.

semaine 6

Cette semaine a commencé par le débogage du variateur ,comme je l'ai déjà mentionné que le problème de la résistance est réglée mais le mode erreur persiste.

Afin de bien comprendre le fonctionnement du variateur , monsieur Redon m'a proposé de réalisé le montage de base de commande variateur :

"schéma"
"schéma"

Résultats : le premier variateur marche bien mais le deuxième variateur se met en mode erreur avec un seul clignotement de la led rouge qui indique qu’il faut changer la carte d’après la datasheet.En fin de compte un seul variateur est fonctionnel.

Variateur fonctionnel :

Variateur défaillant :

En se basant sur le variateur fonctionnel , j’ai réalisé plusieurs mesures de la tension au borne du pin du potentiomètre.

Résultat : le variateur ne démarre que si la tension au borne du potentiomètre est au alentours de 165mV.Une donnée importante à prendre en considération dans la fonction Setup de l’Arduino.

NB: Pour avoir une tension de 165mv , il faut fournir un rapport de 170 au DAC

Solution : En prenant en considération cette donnée , j’ai repris le montage de commande précédent et en téléversant un programme simple qui commande un des deux moteurs pour avancer ou reculer et par suite le variateur fonctionne en commandant un des deux moteurs.

Commande moteur vidéo :

Organisation Robot : j'ai terminé la semaine par la fabrication du boitier par la découpe laser

"schéma"

Bilan

Bilan : Après 6 semaines de travail , j’ai pu réaliser plusieurs points :

Organisation étage de commande :

Conception d’un boitier pour la partie commande

Conception du Shield avec plusieurs fonctionnalités mais sans le fabriquer.

Développement de la commande :

Commande par Joystick physique

Commande par joystick virtuel (page web ,application mobile )

Objectif non réalisés :

Commande par la caméra Kinect en utilisant :

  • Le capteurs infrarouge.
  • L’IA.

La sécurisation du cablage du robot.

Le problème que j’ai eu avec le variateur m’a pris plus que 50% de mon temps de travail et le fait que j’ai commencé le projet un mois en retard m’a empêché de réaliser tous les objectifs.

Rendus

Présentation PowerPoint : Presentation_Projet_Centaure

Rapport final : Rapport_projet.pdf


Code page web et application mobile avec le serveur : Centaure_codeapp.zip

Code Arduino commande joystick : Joystick_code.zip

Code général avec gestion de priorité : Centaure_code_general.zip