Modifications

aucun résumé de modification
Ligne 1 : Ligne 1 :  
Afin de vous aider à mieux comprendre la façon dont nous avons réalisé notre projet, nous avons rédigé ce document tutoriel. Cela devrait vous permettre de réussir à reprendre les différentes étapes du projet si nécessaire.
 
Afin de vous aider à mieux comprendre la façon dont nous avons réalisé notre projet, nous avons rédigé ce document tutoriel. Cela devrait vous permettre de réussir à reprendre les différentes étapes du projet si nécessaire.
TUTO EN COURS DE REDACTION
      
=Projet 1 : Carte d'alimentation=
 
=Projet 1 : Carte d'alimentation=
Ligne 98 : Ligne 97 :     
==Explication du code et lien vers le Git==
 
==Explication du code et lien vers le Git==
===Code STMCubeIDE===
+
===Explication du Code STMCubeIDE===
Pour réaliser la communication UART entre la STM32 et notre module Bluetooth, on commence par brancher les câbles comme mentionnées un peu plus haut. On doit ensuite configurer notre projet sur STMCubeIDE. Pour cela il suffit de sélectionner l'UART, de l'activer puis de régler certains paramètres.
+
Comme nous l'avons expliqué dans le rapport nous avons utilisé les fonctions suivantes dans notre code sur STMCubeIDE ;
On pourra ainsi modifier le baudrate, la structure de la trame (nombre de bit de stop, nombre de bits de données...), activer ou non les interruptions... Dans notre cas, on choisira le mode Asynchrone pour l'UART, un baudrate de 9600 et on activera les interruptions.
  −
 
  −
Une fois ces réglages réalisés, notre communication est opérationnelle. On pourra ainsi utiliser différentes fonctions dans le code de la STM32 pour envoyer les données sur les pins de l'UART4.
  −
On utilisera par exemple les fonctions :
   
  '''HAL_UART_Transmit_IT'''(&huart4, (uint8_t*) txt_a_envoyer,sizeof(txt_a_envoyer));
 
  '''HAL_UART_Transmit_IT'''(&huart4, (uint8_t*) txt_a_envoyer,sizeof(txt_a_envoyer));
 
  '''HAL_Delay'''(temps) qu'on remplacera par osDelay(temps) avec l'utilisation de FreeRTOS
 
  '''HAL_Delay'''(temps) qu'on remplacera par osDelay(temps) avec l'utilisation de FreeRTOS
Ligne 114 : Ligne 109 :  
[[Fichier:Terminal text.png|200px|vignette|centré|Réception des données ]]
 
[[Fichier:Terminal text.png|200px|vignette|centré|Réception des données ]]
   −
'''Choix des valeurs à afficher'''<br>
+
Pour rappel, nous avons affichés à l'écran les données suivantes :  
Nous avons discuté avec les autres groupes travaillant sur le robot pour savoir quels types d'informations ils aimeraient que l'on affiche sur notre écran.
  −
Nous allons donc afficher les données suivantes :
   
*Tension de la batterie
 
*Tension de la batterie
 
*Distance parcourue
 
*Distance parcourue
 
*Vitesse du robot
 
*Vitesse du robot
*Coordonnées du robot (position)
+
*Coordonnées du robot (position x et y)
*Trajectoire (peut-être), le but serait qu'à la fin du parcours on affiche graphiquement la trajectoire qu'a emprunté le robot. Mais à voir si cela est possible et utile surtout
  −
 
  −
Nous aimerions également pouvoir stocker les données recueillies pendant le parcours du robot. Toutes ces informations pourraient nous permettre pendant le parcours de vérifier le bon fonctionnement du robot. En cas d'erreur/problème/bug on pourra étudier les données stockées pour tentant de trouver l'origine du problème.
  −
 
  −
On pense également qu'il pourrait être intéressant de rajouter une option sur l'écran de contrôle permettant l'arrêt d'urgence du robot en cas de problème détecté. Pour cela, nous avons travaillé avec Florian et Flavien qui travaillent sur la carte de puissance pour qu'ils intègrent cela à leur système.
      
<br>
 
<br>
'''Affichage des valeurs souhaitées'''<br>
   
Pour transmettre les différentes valeurs souhaitées, nous avons ajouté dans le code de la STM les fonctions mentionnées plus haut.  
 
Pour transmettre les différentes valeurs souhaitées, nous avons ajouté dans le code de la STM les fonctions mentionnées plus haut.  
 
On envoie ensuite les données dans un ordre précis : on commence par envoyer le flag qui va nous permettre de marquer le début de chaque nouveau while, nous avons choisi de lui donner la valeur -9999 car cette valeur ne peut être atteinte par aucune autre données que nous affichons. Il n'y a donc pas de problème possible de ce côté là. Ce flag nous sera utile pour la suite car cela signalera à l'application qui réceptionne les données quand nous serons au début de la boucle while du code. Cela permet donc de synchroniser l'envoi des données.
 
On envoie ensuite les données dans un ordre précis : on commence par envoyer le flag qui va nous permettre de marquer le début de chaque nouveau while, nous avons choisi de lui donner la valeur -9999 car cette valeur ne peut être atteinte par aucune autre données que nous affichons. Il n'y a donc pas de problème possible de ce côté là. Ce flag nous sera utile pour la suite car cela signalera à l'application qui réceptionne les données quand nous serons au début de la boucle while du code. Cela permet donc de synchroniser l'envoi des données.
Ligne 182 : Ligne 169 :  
  HAL_UART_Transmit_IT(&huart3, (uint8_t*) buff_posy,sizeof(buff_posy)); // position y
 
  HAL_UART_Transmit_IT(&huart3, (uint8_t*) buff_posy,sizeof(buff_posy)); // position y
 
  osDelay(400);
 
  osDelay(400);
*Notre code est maintenant prêt à être implémenté sur le robot.
  −
  −
Par exemple l'image ci-dessous avec des valeurs fictives (compteurs qui s'incrémentent) :
  −
  −
[[Fichier:Terminal.png|200px|vignette|centré|Réception de données]]
  −
  −
'''Système d'exploitation Temps Réel''' <br>
  −
[[Fichier:Logo freertos.jpg|vignette|droite]]
  −
  −
Afin de coordonner toutes les tâches que le robot a à effectuer, on utilise conjointement avec l'équipe de projet de 4A un OS (système d'exploitation) temps réel. Il s'agit de FreeRTOS. Celui-ci est intégrable directement depuis l'outil STMCubeIDE et il est même possible de prédéfinir nos différentes tâches et une multitude de paramètres (les priorités des tâches par exemple). Un OS temps réel permet aussi de gérer la préemptivité (ou la priorité) de chaque tâche, une tâche de haute priorité ayant toujours la priorité sur une tâche de basse priorité. Il va de soit que notre tâche prendra une priorité faible par rapport aux autres tâches puisque le plus important pour le robot est qu'il puisse se diriger et manœuvrer et que notre tache consiste juste à afficher des données. Pour suivre le schéma de code utilisé par les autres groupes, nous avons dû créer une nouvelle tâche avec FreeRTOS : dataDisplayTask. Tout notre code se trouve donc à l'intérieur de cette tâche. FreeRTOS se chargera ensuite d'alterner entre toutes les tâches du programme du robot en fonction de leur priorité. On pourra par contre revoir cette priorité dans le cas où l'on ajoute un bouton d'arrêt d'urgence sur notre application ou même créer une autre tâche spécialement pour ce bouton avec une forte priorité. Une fois la ou les tâche(s) et les paramètres définis, il nous suffit de générer le code et de remplir notre tâche.
  −
[[Fichier:Capture menu FreeRTOS.png|centré|vignette|Paramétrage de FreeRTOS]]
     −
===Récupérer du code général===
+
===Récupérer le code général===
 
Pour pouvoir accéder au code général du robot vous devez :
 
Pour pouvoir accéder au code général du robot vous devez :
 
*Créer un compte GitLab
 
*Créer un compte GitLab
*Contacter le responsable de Polybot pour qu'il vous donne l'accès aux Git de polybot
+
*Contacter le responsable de Polybot (Errikos Messara) pour qu'il vous donne l'accès aux Git de Polybot
 
*Accéder au dossier concerné
 
*Accéder au dossier concerné
 
*Télécharger le master
 
*Télécharger le master
Ligne 203 : Ligne 179 :     
<br>
 
<br>
Si vous souhaitez uniquement regarder la tâche relative à notre partie du projet, vous pourrez la trouver sous format .txt au lien suivant : METTRE LE LIEN DE NOTRE CODE
+
Si vous souhaitez uniquement regarder la tâche relative à notre partie du projet, vous pourrez la trouver sous format .txt au lien suivant : [https://drive.google.com/file/d/1vw60jSFCPwRbrCF2yBndYtXRUh3kE4vX/view?usp=sharing Code .txt]
    
==Utilisation des modules Bluetooth HC-06==
 
==Utilisation des modules Bluetooth HC-06==
Ligne 240 : Ligne 216 :  
*Cliquez ensuite sur le fichier "stockage_data_robot.csv" pour lire les données enregistrées au format .csv
 
*Cliquez ensuite sur le fichier "stockage_data_robot.csv" pour lire les données enregistrées au format .csv
   −
Pour traiter ces données et les afficher dans un tableau :
+
Pour traiter ces données et les afficher dans un tableau par exemple :
 
*Branchez vous téléphone sur un PC
 
*Branchez vous téléphone sur un PC
 
*Ouvrez sur le PC le fichier "stockage_data_robot.csv" qui se trouve dans le dossier AppInventor/asset de votre téléphone
 
*Ouvrez sur le PC le fichier "stockage_data_robot.csv" qui se trouve dans le dossier AppInventor/asset de votre téléphone
 
*Sélectionner le tableau de données en entier
 
*Sélectionner le tableau de données en entier
 
*Cliquer sur "Données" puis cliquer sur "Convertir" et choisir : délimité, virgule, identif de texte ", standard puis TERMINER
 
*Cliquer sur "Données" puis cliquer sur "Convertir" et choisir : délimité, virgule, identif de texte ", standard puis TERMINER
METTRE UN SCREEN DES REGLAGES
   
*Sélectionnez les colonnes de pos x et pos y  
 
*Sélectionnez les colonnes de pos x et pos y  
 
*Cliquez sur "Insertion nuage de point" et vous obtiendrez le tracé de votre trajectoire
 
*Cliquez sur "Insertion nuage de point" et vous obtiendrez le tracé de votre trajectoire
Ligne 253 : Ligne 228 :  
*A chaque nouveau lancement de l'application, les données précédentes sont supprimées. Si vous souhaitez les conserver pensez donc à copier-coller le fichier quelque part.
 
*A chaque nouveau lancement de l'application, les données précédentes sont supprimées. Si vous souhaitez les conserver pensez donc à copier-coller le fichier quelque part.
 
*En cas de problème, vérifiez bien que vous cocher bien bouton "Stockage" lors du lancement de l'application.
 
*En cas de problème, vérifiez bien que vous cocher bien bouton "Stockage" lors du lancement de l'application.
 +
 +
===Idée : communication entre 2 modules (1 sur chaque robot)===
 +
Une idée intéressante serait de fixer un module sur chaque robot pour les faire communiquer entre eux pendant la compétition.
 +
Nous avons donc réfléchi à cela est voici les contraintes que nous avons trouvées:
 +
*Un module Bluetooth peut être connecté à un seul périphérique à la fois. Donc si on veut faire communiquer les robots entre eux + recevoir les données sur l'application, il faudrait installer 2 modules Bluetooth sur chaque robot (1 pour la communication avec l'autre robot et 1 pour la communication avec l'application).
 +
*Le module Bluetooth HC-06 ne fonctionne que comme un esclave (il ne peut pas être pas être maître) il ne pourra donc pas envoyer d'ordre à un autre module. Dans ce cas, il faudra que les modules utilisés pour faire communiquer les 2 robots entre eux soit des modèles HC-05; qui fonctionnent en maître/esclave (contrairement au HC-06).
 +
*Une fois ces conditions réunies il devrait être tout a fait possible de réaliser une communications entre les 2 robots.
243

modifications