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 8 : |
Ligne 7 : |
| ==Procédure générale== | | ==Procédure générale== |
| Pour pouvoir utiliser notre application vous devez : | | Pour pouvoir utiliser notre application vous devez : |
− | *Télécharger les applis et docs nécessaires + l'application Polybot (voir section ci-dessous) | + | *Télécharger les applis et docs nécessaires + l'application Polybot (voir section "Télécharger l'application") |
− | *Câbler le module sur la STM32 (voir section ci-dessous) | + | *Câbler le module sur la STM32 (voir section "Cablâge des modules") |
| *Connecter le téléphone/tablette au module Bluetooth dans les paramètres généraux | | *Connecter le téléphone/tablette au module Bluetooth dans les paramètres généraux |
| *Lancer l'application (le robot doit être allumé) | | *Lancer l'application (le robot doit être allumé) |
Ligne 26 : |
Ligne 25 : |
| *Installer de "Cx Explorateur de fichier" | | *Installer de "Cx Explorateur de fichier" |
| *Brancher votre mobile sur un ordinateur | | *Brancher votre mobile sur un ordinateur |
− | *Télécharger le dossier AppInventor à ce lien : (créer sur le drive polybot) | + | *Télécharger le dossier AppInventor à ce lien : [https://drive.google.com/drive/folders/1-9vrBf9ciiOXk0jMBe_aJsc4PlTqDaVl?usp=sharing Dossier AppInventor] |
− | *Copier/coller ce dossier AppInventor dans votre téléphone (dans le stockage général) | + | *Dézippez puis copier/coller ce dossier AppInventor dans votre téléphone (dans le stockage général) |
− | *Depuis votre téléphone, téléchargez l'application au format .apk au lien suivant : (mettre lien Drive) puis suivez les consignes jusque l'installation de l'application | + | *Depuis votre téléphone, téléchargez l'application au format .apk au lien suivant : [https://drive.google.com/file/d/1X_COMQBpWy7zllDSmKVcEQrs_f51KMpv/view?usp=sharing Application Polybot] |
| + | *Puis suivez les consignes jusque l'installation de l'application |
| *Lancez l'application puis continuez de suivre les étapes de la section : Procédure Générale | | *Lancez l'application puis continuez de suivre les étapes de la section : Procédure Générale |
| | | |
− | *Si vous souhaitez modifier l'application, vous devez télécharger le fichier .aia au lien suivant : (mettre lien drive); ouvrir la page web MIT app inventor et téléchager dessus le .aia
| + | ===Comprendre et/ou modifier le code de l'application=== |
| + | Si vous souhaitez modifier l'application, vous devez : |
| + | *Télécharger le fichier .aia au lien suivant : [https://drive.google.com/file/d/1XvCx8m_984NGFHAy1XcAURyGfx47GXMH/view?usp=sharing Application .aia] |
| + | *Ouvrir la page web MIT App inventor et y charger le fichier .aia |
| + | *Vous aurez ainsi accès à toutes les composantes de l'application Polybot |
| | | |
− | ATTENTION vous ne pouvez pas modifier le code de la STM32 sans modifier le code Scratch de l'application. | + | '''ATTENTION''' vous ne pouvez pas modifier le code de la STM32 sans modifier le code Scratch de l'application (dans certains cas) ! |
| | | |
− | ===Comprendre et/ou modifier le code de l'application===
| |
− | ====Affichage des données====
| |
− | Pour réaliser notre application, nous avons utilisé MIT App Inventor qui permet de réaliser des applications pour mobile, tablette ou autre périphérique grâce au langage de programmation Scratch.
| |
− | Nous aurions pu réaliser une application plus développée avec un autre langage de programmation mais le but de ce projet n'était pas de réaliser la meilleure application mais plutôt de bien recevoir et afficher les données.
| |
| | | |
− | Nous avons donc commencé à réaliser les différentes pages (Screen) de l'application. Pour cela nous avons utilisé les différents outils mis à notre disposition par App Inventor (boutons, texte, switch, images ...).
| + | <br> |
− | [[Fichier:App inventor.png|vignette|centré|Outils de création de l'interface]]
| + | Rappels des différents Screen crées : |
− | | |
− | Voici les différents Screen crées :
| |
| * Screen 1 : Page de lancement avec logo Polybot | | * Screen 1 : Page de lancement avec logo Polybot |
| * Screen 2 : Choix des valeurs à afficher et choix de stocker ou non les données affichées | | * Screen 2 : Choix des valeurs à afficher et choix de stocker ou non les données affichées |
| * Screen 3 : Affichage des données souhaitées | | * Screen 3 : Affichage des données souhaitées |
| | | |
− | | + | [[Fichier:Screen1.png|150px|vignette|centré|Screen 1 de l'application]] |
− | [[Fichier:Screen1.png|250px|vignette|centré|Screen 1 de l'application]] | + | [[Fichier:Screen2.png|150px|vignette|centré|Screen 2 de l'application]] |
− | [[Fichier:Screen2.png|250px|vignette|centré|Screen 2 de l'application]] | + | [[Fichier:Appli2.png|150px|vignette|centré|Screen 3 de l'application]] |
− | [[Fichier:Appli2.png|250px|vignette|centré|Screen 3 de l'application]] | |
− | | |
− | | |
− | Pour télécharger l'application et la faire fonctionner, nous vous invitons à suivre notre tuto d'utilisation au lien suivant :
| |
− | [[Projet_5A_2020_2021/Tuto utilisation et modification|Tutoriel d’utilisation]]
| |
| | | |
| <br> | | <br> |
− | '''Programmation'''<br>
| |
| Étant donné que nous avons utilisé App Inventor pour réaliser notre application, nous avons uniquement pu utiliser du Scratch pour coder le fonctionnement de l'appli. Malheureusement ce langage de programmation sous forme de blocs entraine souvent de grosses suites de blocs pas toujours très lisibles. Nous allons donc essayer de vous expliquer clairement et simplement ce que nous avons réalisé pour chaque Screen. | | Étant donné que nous avons utilisé App Inventor pour réaliser notre application, nous avons uniquement pu utiliser du Scratch pour coder le fonctionnement de l'appli. Malheureusement ce langage de programmation sous forme de blocs entraine souvent de grosses suites de blocs pas toujours très lisibles. Nous allons donc essayer de vous expliquer clairement et simplement ce que nous avons réalisé pour chaque Screen. |
| | | |
− | *Screen 1 : on affiche simplement le logo de Polybot pendant 4 secondes puis on ouvre le Screen suivant. | + | *Screen 1 : on affiche simplement le logo de Polybot pendant 4 secondes puis on ouvre le Screen suivant. La fonction "when clock1.timer" va permettre de synchroniser des actions (lance une sorte de chrono). Dans la partie interface, on peut choisir la fréquence de la Clock (par exemple 1s ou 200ms). |
| [[Fichier:Code1.png|vignette|centré|Code pour le Screen 1 ]] | | [[Fichier:Code1.png|vignette|centré|Code pour le Screen 1 ]] |
| *Screen 2 : on initialise les variables globales qui nous indiqueront si les valeurs ont été cochées (1) ou décochées (0), c'est à dire si on souhaite les afficher par la suite ou non. On aura donc une variables globale pour chaque donnée à afficher (distance parcourue, tension, vitesse, position...). | | *Screen 2 : on initialise les variables globales qui nous indiqueront si les valeurs ont été cochées (1) ou décochées (0), c'est à dire si on souhaite les afficher par la suite ou non. On aura donc une variables globale pour chaque donnée à afficher (distance parcourue, tension, vitesse, position...). |
Ligne 71 : |
Ligne 63 : |
| | | |
| [[Fichier:Code2 2.png|vignette|centré|Stockage des variables]] | | [[Fichier:Code2 2.png|vignette|centré|Stockage des variables]] |
− | *Screen 3 : à l'ouverture du Screen on va récupérer les valeurs des variables globales dans la base de donnée. En fonction de leur valeur (0 ou 1) on rendra visible ou non les données correspondantes. Par exemple, si la variable box_tension vaut 1 alors les valeurs de la tension seront rendues invisibles sur l'écran. | + | *Screen 3 : à l'ouverture du Screen on va récupérer les valeurs des variables globales dans la base de donnée. En fonction de leur valeur (0 ou 1) on rendra visible ou non les données correspondantes. Par exemple, si la variable box_tension vaut 1 alors les valeurs de la tension seront rendues invisibles sur l'écran. On met donc toutes ces fonctions dans le bloc "when Screen3.initialize", c'est à dire qu'on passera une fois dans ce bloc lors du lancement du screen. |
| | | |
| [[Fichier:Code3 1.png|vignette|centré|Récupération des variables globales]] | | [[Fichier:Code3 1.png|vignette|centré|Récupération des variables globales]] |
| + | [[Fichier:Visible.png|vignette|centré|Visibilité de chaque valeur]] |
| On configure ensuite le bouton qui nous permet d'aller nous connecter au périphérique souhaité (ici notre module HC-06). Il affiche la liste des périphériques Bluetooth connecté, après en avoir sélectionné un on affiche "Périphérique Connecté". | | On configure ensuite le bouton qui nous permet d'aller nous connecter au périphérique souhaité (ici notre module HC-06). Il affiche la liste des périphériques Bluetooth connecté, après en avoir sélectionné un on affiche "Périphérique Connecté". |
| | | |
Ligne 82 : |
Ligne 75 : |
| [[Fichier:Code3 3.png|vignette|700px|centré|Réception et affichage des données]] | | [[Fichier:Code3 3.png|vignette|700px|centré|Réception et affichage des données]] |
| | | |
− | Enfin, nous avons créé plusieurs fonctions permettant le stockage des données affichées si l'utilisateur le souhaite. Nous avons par exemple créé la fonction nettoyer_fichier qui vide le fichier à chaque nouveau lancement de l'application, et la fonction stockage_data qui va ajouter les données dans le fichier de stockage. En amont, il faudra ajouter un fichier .csv dans le téléphone. Pour avoir plus d'informations sur la façon dont nous avons géré le stockage, nous vous invitons à aller voir notre page de tuto :
| |
| ====Stockage des données==== | | ====Stockage des données==== |
| + | Le reste des fonctions créés sont utiles pour le stockage. |
| + | *On commence par initialiser la variable texte "fichier" qui correspond au chemin d'accès au fichier de stockage : "stockage_data_robot.csv". Si la variable globale "stockage" vaut 1 (c'est à dire si l'utilisateur à coché la case stockage) alors on va aller lire ce fichier grâce à la fonction ci-dessous. |
| + | [[Fichier:Stockage2.png|vignette|1000px|centré|Indication du chemin d'accès au fichier]] |
| + | [[Fichier:Stockage1.png|vignette|centré|Lecture du fichier "stockage_data_robot.csv"]] |
| + | |
| + | *Une fois que le fichier a été lu (Fichier.GotText = 1) alors on lance la fonction "nettoyer_fichier". |
| + | [[Fichier:Stockage3.png|vignette|centré|1000px|Appel à la fonction "nettoyer_fichier"]] |
| + | |
| + | Cette fonction détaillée ci-dessous permet de nettoyer le fichier .csv à chaque nouveau lancement de l'application. En effet, à chaque nouveau lancement on va aller supprimer les données stockées précédentes. Si on veut stocker les données précédents il faudra alors faire des screen ou alors copier les données avant que celles-ci soient supprimées. |
| + | [[Fichier:Stockage4.png|vignette|centré|1000px|Fonction "nettoyer_fichier"]] |
| + | |
| + | Dans cette fonction "nettoyer_fichier", on commence par remplacer le fichier .csv par une liste vide puis on ajoute ensuite une ligne contenant les noms des valeurs (tensions, vitesse..etc). Enfin, on sauvegarde la nouvelle ligne. |
| + | |
| + | *On a ensuite créé la fonction "stockage_data" que l'on appelle à chaque début d'une nouvelle boucle d'envoi de données (c'est à dire juste après le flag qui signifie qu'on se trouve au début de la boucle). On va ainsi pouvoir ajouter les données dans le fichier stockage à chaque nouveau cycle d'envoi de données. |
| + | [[Fichier:Stockage6.png|vignette|centré|1000px|Appel à la fonction "stockage_data"]] |
| + | |
| + | Voici comment est composé la fonction "stockage_data" : |
| + | [[Fichier:Stockage5.png|vignette|centré|1000px|Fonction "stockage_data"]] |
| + | Dans cette fonction, on créé une ligne qui va contenir toutes les nouvelles données mises à jour puis on sauvegarde la ligne dans le fichier de stockage. |
| | | |
| ==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 102 : |
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 130 : |
Ligne 129 : |
| | | |
| *Afin d'obtenir les différentes données à envoyer, à savoir la vitesse, la distance parcourue, ainsi que la position (x,y) du robot, nous devons mettre en place des calculs spécifiques. On notera que l'on ne peut pas reset les encodeurs au début de chaque boucle (plus facile pour calculer la différence de tour par rapport à la boucle précédente) car ceux ci servent aussi à asservir les moteurs du robot en position. On va donc d'abord mettre en place quelques lignes permettant de faire nos calculs comme si nous avions un reset des encodeurs. On commence par stocker les valeurs des encodeurs avant que ceux ci soient mis à jour avec la fonction de lecture des encodeurs, on récupère ensuite les nouvelles valeurs puis on réalise la différence entre ces 2 valeurs. On obtient alors le nombre de tours en plus (ou en moins dans le cas d'une marche arrière) par rapport au while précédent. | | *Afin d'obtenir les différentes données à envoyer, à savoir la vitesse, la distance parcourue, ainsi que la position (x,y) du robot, nous devons mettre en place des calculs spécifiques. On notera que l'on ne peut pas reset les encodeurs au début de chaque boucle (plus facile pour calculer la différence de tour par rapport à la boucle précédente) car ceux ci servent aussi à asservir les moteurs du robot en position. On va donc d'abord mettre en place quelques lignes permettant de faire nos calculs comme si nous avions un reset des encodeurs. On commence par stocker les valeurs des encodeurs avant que ceux ci soient mis à jour avec la fonction de lecture des encodeurs, on récupère ensuite les nouvelles valeurs puis on réalise la différence entre ces 2 valeurs. On obtient alors le nombre de tours en plus (ou en moins dans le cas d'une marche arrière) par rapport au while précédent. |
− | encRg_save = encRg; | + | encRg_save = encRg + encRg_save; //encRg_save et encRd_save sont définis ici pour être la valeur des encodeurs avant le relèvement des encodeurs |
− | encRd_save = encRd; | + | encRd_save = encRd + encRd_save; |
− | MCP233_readEncoderCountM1(&mcp,&encRg); | + | MCP233_readEncoderCountM1(&mcp,&encRg); //relèvement de la valeurs des encodeurs et mises dans encRg (encodeur gauche) |
− | MCP233_readEncoderCountM2(&mcp,&encRd); | + | MCP233_readEncoderCountM2(&mcp,&encRd); //relèvement de la valeurs des encodeurs et mises dans encRd (encodeur droit) |
− | encRg = encRg - encRg_save; | + | encRg = encRg - encRg_save; //on corrige ici encRg et encRd pour qu'ils correspondent aux valeurs d'encodeurs d'un cycle (et non total) |
| encRd = encRd - encRd_save; | | encRd = encRd - encRd_save; |
| On en vient maintenant aux calculs en eux même. Pour la distance totale parcourue, on met en place des variables qui calculent le cumul des incréments des encodeurs depuis le démarrage du robot, on calcule ensuite la moyenne des valeurs (des 2 encodeurs) afin d'obtenir la distance parcourue par le centre du robot. Finalement, on vient multiplier cette résultante par 2*pi*R/incr (incr étant le nombre incréments de l'encodeurs lorsqu'il effectue un tour et R le rayon des encodeurs). Dans notre cas on aura incr = 4096 et R=44mm. <br> | | On en vient maintenant aux calculs en eux même. Pour la distance totale parcourue, on met en place des variables qui calculent le cumul des incréments des encodeurs depuis le démarrage du robot, on calcule ensuite la moyenne des valeurs (des 2 encodeurs) afin d'obtenir la distance parcourue par le centre du robot. Finalement, on vient multiplier cette résultante par 2*pi*R/incr (incr étant le nombre incréments de l'encodeurs lorsqu'il effectue un tour et R le rayon des encodeurs). Dans notre cas on aura incr = 4096 et R=44mm. <br> |
− | distRd = distRd + encRd; | + | distRd = distRd + encRd; //calcul de la valeur total de l'encodeur droit depuis le démarrage du robot |
− | distRg = distRg + encRg; | + | distRg = distRg + encRg; //calcul de la valeur total de l'encodeur gauche depuis le démarrage du robot |
− | distTot = ((M_PI*2*R/incr)*(distRd+distRg))/2; (à noter que le résultat est en mm ici) | + | distTot = ((M_PI*2*R/incr)*(distRd+distRg))/2; //à noter que le résultat est en mm ici //calcul de la distance totale |
| Pour la vitesse, on doit d'abord calculer la distance parcourue par le robot entre 2 prises de valeurs d'encodeurs, afin d'avoir une vitesse le plus instantané possible. On calcule donc cette distance exactement de la même manière que précédemment sauf qu'on ne cumule pas les valeurs d'incréments des encodeurs, en effet, on veut ici les valeurs d'incrémentation momentanées. On vient ensuite faire un rapport dist/time (dist étant la valeur que l'on vient de calculer, time étant le temps d'exécution d'une boucle d'envoie des données, on estime sa valeur par rapport aux "osDelay") : <br> | | Pour la vitesse, on doit d'abord calculer la distance parcourue par le robot entre 2 prises de valeurs d'encodeurs, afin d'avoir une vitesse le plus instantané possible. On calcule donc cette distance exactement de la même manière que précédemment sauf qu'on ne cumule pas les valeurs d'incréments des encodeurs, en effet, on veut ici les valeurs d'incrémentation momentanées. On vient ensuite faire un rapport dist/time (dist étant la valeur que l'on vient de calculer, time étant le temps d'exécution d'une boucle d'envoie des données, on estime sa valeur par rapport aux "osDelay") : <br> |
| dist = (M_PI*2*R/incr)*((encRd+encRg)/2); //en mm | | dist = (M_PI*2*R/incr)*((encRd+encRg)/2); //en mm |
Ligne 170 : |
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>
| + | ===Récupérer le code général=== |
− | [[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=== | |
| 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 191 : |
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 222 : |
Ligne 210 : |
| |} | | |} |
| | | |
− | ===Traiter les données enregistrées - Tracer la trajectoire du robot=== | + | ===Voir et traiter les données enregistrées - Tracer la trajectoire du robot=== |
− | *Ouvrir le fichier "stockage_data_robot.csv" qui se trouve dans le dossier AppInventor/asset | + | Pour visualiser les données que vous avez enregistrées : |
− | *Sélectionner le tableau en entier | + | *Ouvrir l'application "Cx Explorateur de fichiers" (ou connecter votre périphérique à un PC) |
− | *Aller sur "Données" puis cliquer sur "Convertir" : | + | *Ouvrez le dossier "AppInventor" puis "asset" |
− | ->délimité, virgule, identif de texte ", standart TERMINER
| + | *Cliquez ensuite sur le fichier "stockage_data_robot.csv" pour lire les données enregistrées au format .csv |
− | METTRE UN SCREEN DES REGLAGES
| + | |
− | *Sélection de pos x et pos y | + | Pour traiter ces données et les afficher dans un tableau par exemple : |
− | *Insertion nuage de point | + | *Branchez vous téléphone sur un PC |
− | ET VOILA ON OBTIENT NOTRE TRAJECTOIRE
| + | *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 |
| + | *Cliquer sur "Données" puis cliquer sur "Convertir" et choisir : délimité, virgule, identif de texte ", standard puis TERMINER |
| + | *Sélectionnez les colonnes de pos x et pos y |
| + | *Cliquez sur "Insertion nuage de point" et vous obtiendrez le tracé de votre trajectoire |
| + | |
| + | REMARQUES : |
| + | *Vous ne pourrez pas enregistrer le fichier modifié, il faudra l'enregistrer sous un autre nom et un autre format. |
| + | *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. |
| | | |
− | REMARQUE : Vous ne pourrez pas enregistrer le fichier, il faudra l'enregistrer sous un autre nom et un autre format.
| + | ===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. |