IMA4 2019/2020 P1

De Wiki de Projets IMA


Présentation générale

  • Projet : Robot Régulé
  • Etudiant : Guillaume Declerck
  • Encadrant de projet : Xavier Redon, Alexandre Boé, Thomas Vantroys
  • Objectif : Afin de valider le module projet de 4ème année, il m'a été donné la possibilité de travailler sur un deuxième projet, j'ai donc choisi le robot régulé.

Description

Ce projet consiste à créer un robot complètement régulé de manière angulaire. En effet, à l'école aucun projet n'a réellement abouti à un système régulé de cette manière. Par conséquent, ce robot sera régulé de deux manières, tout d'abord de manière manuelle en angle d'abord puis la gestion des déplacements) mais également un système de sécurité pour ne pas entrer en collision avec les murs par exemple.


L'objectif de la commande manuelle sera que le système soit entièrement commander avec une nunchuk (télécommande de la console Wii de chez Nintendo). Ses avantages sont qu'elle comporte déjà différents composants intéressants pour la commande du robot. En effet cette télécommande comporte :

  • deux boutons distincts
  • un joystick
  • un accéléromètre 3 axes
    Nunchuk : controleur de Wii

Objectifs

L'objectif de ce projet est dans un premier temps de visualiser les erreurs commises par mon prédécesseur et la plupart de ses causes d'échecs afin de ne pas retomber dans ses torts. Ainsi, le robot se doit d'être parfaitement régulé que ce soit dans sa posture ou dans son maintient de trajectoire.

Par la suite, je prévois donc de travailler différents aspects :

  • Les différentes cartes du projet :
    • le shield de gestion des 2 moteurs
    • le shield qui sera le centre de récupération des différents capteurs du robot ( gyroscope, accéléromètre, laser)
    • les différentes cartes permettant la communication à distance avec la Nunchuk (type de communication encore à définir)
  • Automatisation du projet

Je compte réguler au mieux les moteurs, pour cela je vais gérer leur commande en utilisant des fonctions de transfert qui récupéreront les valeurs des différents capteurs placés sur le robot. (un capteur gyroscopique pour sur). J J'ai également l'idée de placer des lasers sous le robot afin d'évaluer la distance sous le robot (M. Delbroucq avait mis cette idée mais ne l'avait pas installé sur le robot).

Analyse du projet

Suite à mon entretien avec mes tuteurs M. Redon et M. Vantroys, j'ai donc changé d'objectif de projet, en effet il n'était pas spécifié de faire un système de robot de type balancing robot, mais de créer un robot qui soit régulé parfaitement lors ses rotations.

Préparation du projet

Cahier des charges

Le projet sera abordé sous différents aspects :

  • une étude du capteur gyroscopique
  • la commande
  • le contrôleur moteur et déplacement du robot
  • l'alimentation
  • les différents capteurs du robot

Le capteur gyroscopique

En général lorsque l'on souhaite commander un robot, par exemple avec un arduino, on tente de modifier la durée de rotation des roues du robot afin d'évaluer la distance parcourue par celle-ci. Ainsi lorsque l'on a un système avec un minimum de 2 roues, on arrive à se faire une idée approximative de la position angulaire du robot. Par contre suite à différents projets que j'ai pu apprécier lors de mes études, j'ai pu remarquer par exemple que lorsqu'on utilise un tel système, il arrive très souvent, lorsque la batterie diminue, de perdre en précision, ainsi la position dans laquelle on se trouve n'est pas celle qui était prévu à l'origine.

Voici donc la raison de l'utilisation d'un capteur gyroscopique qui sera utilisé uniquement autour de l'axe z pour gérer la position autour de l'axe normal du robot par rapport au sol.

Commande

Afin de commander l'ensemble de mon système, j'ai besoin d'un composant me permettant d'entrer un programme permettant de gérer l'ensemble. Je vais faire quelque chose qui se rapproche du système de commande arduino. Je vais donc utiliser le même microprocesseur que celui installé sur les Arduino Uno, le ATMega328. Il est suffisant pour commander le système que je compte fabriquer.

La partie algorithmique sera la dernière chose que je vais effectuer sur ce projet, en effet il est nécessaire que tout le reste soit installer et fonctionnel. Lorsque le système sera OK, je ferais un programme simple afin de voir si toutes les données transites de la bonne manière dans la carte. Enfin je vais terminer un implantant le bon algorithme de gestion du système.

Déplacement du robot

Afin de gérer efficacement le déplacement du robot, il va falloir gérer les différents moteur des roues du robot, c'est pourquoi j'ai besoin de créer une carte qui permet de gérer les différents moteurs que je souhaite utiliser.

Je dois donc encore choisir quel type de moteur je souhaite et combien de roue motorisée mon robot a besoin.

Capteurs installés sur le robot

Afin de réguler au mieux le robot, s'il est en mode automatique (ou même manuel) il faudrait créer un système anti-collision. Tout d'abord avec des capteurs de distance, par la suite peut-être avec d'autres capteurs, c'est encore à définir à ce stade du projet.

Alimentation

Je dois m'occuper également de la partie alimentation du robot sur la carte. Par contre je ne peux définir la quantité d'énergie stockée que je peux avoir besoin sans au préalable avoir l'étude complète du système, c'est pourquoi je vais m'occuper de cette partie à la fin.

Choix techniques : matériel

Etude et choix du capteur gyroscopique

Tout d'abord, je dois ici résumer ce que j'ai besoin de faire avec ce capteur. Un capteur gyroscopique est un composant qui permet de mesurer des vitesses angulaires par rapport aux trois axes de rotation mais également des accélérations sur ces mêmes axes. Je ne souhaite pas prendre en compte tous ces axes mais uniquement une vitesse angulaire, c'est pourquoi je choisis un gyroscope qui ne mesure que la position angulaire.

Pour cela je choisis donc de travailler avec le gyroscope type A3G4250DTR :

orientation des angles du gyroscope
  • tension d'alimentation : 2.4V - 3.6V
  • il est nécessaire de filtrer le gyroscope sur plusieurs de ces pins(fortement sensible au bruit)

Afin de communiquer des données avec le microcontroleur, je vais utiliser un des deux modes disponibles avec le gyroscope : le I2C "Inter Integrated Circuit" afin de simplifier la communication entre les informations de la carte ainsi au besoin, je peux utiliser ce bus de données pour envoyer des informations entre les différents parties de ma carte. Ce type de bus permet de faire communiquer des informations lorsqu'il n'est pas nécessaire de les faire transiter de manière très rapide (100kBits/s jusque 400kBits/s en mode rapide). Ce système est également un système simple, en effet en utilisant uniquement 3 signaux (SDA : serial data line; SCL : serial clock line; et une masse commune à tous les esclaves) Chaque échange est uniquement lancé par un seul maître à un (ou plusieurs) esclaves.

Système de commande de l'ensemble

Comme énoncé précédent, pour la partie commande je souhaite utiliser le microprocesseur ATMega328p qui est un microprocesseur standard pour la gestion de ce genre de système. Après lecture de la datasheet, il est plus simple de placer ce composant sur la carte, en effet il est ainsi inscrit toutes les informations nécessaires pour son bon fonctionnement.

ATMega328p

Ce microprocesseur sera cadencé à une fréquence standard de 16MHz par un oscillateur externe.

Afin de coder mon microprocesseur, je vais utiliser une carte arduino en mode arduinoISP. (l'arduino sera mis en parallèle afin de me permettre de coder simplement le système.) pour cela je vais prévoir un bornier sur ma carte afin de câbler l'arduino dessus.

Etude et choix des moteurs

En premier lieu, il faut savoir que le robot que je vais fabriquer se déplacera à l'aide de roues. Pour gérer son déplacement, je ne compte réguler que 2 roues et laisser une roue folle à l'arrière du robot. Ensuite, l'angle de rotation du robot, comme dit précédemment, sera gérée à l'aide du gyroscope, par conséquent il n'est pas forcément nécessaire d'utiliser des moteurs qui comptent le nombre de tour sur les roues. La question qui se pose est le manque de précision de ce genre de mesure (avec gyroscope) il serait donc nécessaire d'aider les mesures en prenant en compte la rotation des roues et comparer les 2 valeurs pour moyenner et ainsi obtenir un angle de rotation correcte. Ainsi j'hésite entre l'utilisation de moteurs pas à pas ou de servomoteurs. Je vais donc prendre en compte ici le facteur prix qui met le moteur pas à pas au dessus et sera donc mon choix définitif.

Mon choix se porte sur le moteur unipolaire qui nécessite moins de connections donc moins d'erreur lors de sa mise en place sur le système. Je choisis donc un NEMA 17 de type unipolaire.

Ce type de moteur nécessite d'être spécifiquement commandé, je vais donc compter le nombre d'impulsion envoyer au moteur (donc le nombre de pas du moteur) pour ainsi connaître la rotation qu'il a pu effectuer. Comme dit précédemment, il y aura 2 moteurs, je vais donc utiliser ces 2 valeurs pour que le robot soit repérer dans l'espace.

Capteur de distance

Afin de ne pas entrer en collision avec les murs sans contrôle manuel (et avec d'ailleurs) je souhaite installer des capteurs de distance autour de mon robot (entre 5 et 8). Je pourrais utiliser pour cela des capteurs à ultrason, comme ceux utiliser usuellement avec des cartes arduino par exemple. Je compte donc utiliser les capteurs ultrasons de type HC-SR041. .

Liste du matériel *non terminée*

  • Gyroscope MEMS (A3G4250DTR) (Farnell : [1] )(quantité 1)
  • oscillateur 16MHz (ECS-160-20-5PXDU-TR) : (Mouser : [2] (quantité 1)
  • réseau de transistor (ULN2803) (Lextronic : [3]) (quantité 1)


  • Capacité 10µF±10% 25V 1206 (GCM31CC71E106KA03L)(Farnell : [4] )(quantité 1)
  • Capacité 100nF±10% 250V 1206 (C3216X7R2E104K160AA)(Farnell : [5]) (quantité 1)
  • Capacité 15nF±10% 250VAC 1206 (GCM31CC71E106KA03L)(Farnell : [6]) (quantité 1)
  • Capacité 0.47µF±10% 50V 1206 (C0805C472K5RACTU) (Farnell : [7]) (quantité 1)
  • Capacité 22pF 50V 1206 (C1206C220J5GACTU) (Farnell : [8]) (quantité 2)
  • Résistance 10Kohm 1206 (ERJ8ENF1002V) (Farnell : [9]) (quantité 2)

Réalisation du Projet

Durant les premières semaines de projet, j'ai passé beaucoup de temps à essayer de comprendre le fonctionnement des différents composants de la carte (étude des différentes datasheet, afin de ne rien manquer lors de la conception du schéma) que je compte réaliser. J'ai donc commencé au même moment à réaliser le schéma du montage à effectuer. Au moment de la soutenance intermédiaire, j'en suis au stade suivant : soutenance intermediaire schematique.

On peut donc voir que j'ai actuellement 3 parties distinctes qui sont le gyroscope, le microcontroleur et le contrôleur moteur.


Afin de permettre un contrôle des moteurs pas à pas unipolaire, j'ai besoin de 2x4 broches digitales du ATMega328p, or pour garantir les bonnes mesures du gyroscope, il est également nécessaire d'utiliser une autre sortie digitale afin de gérer le CS (chipselect) du gyroscope. Chipselect.png.

Voici pourquoi il y a 4 pins du gyroscope qui sont encore en l'air.

Il faut également que je continue d'étudier fonctionnement des autres broches du gyroscope.

Il en est de même pour la commande, il faut que j'ajoute les capteurs à ultrason. Il faut également que je m'occupe de la partie alimentation de l'ensemble. En effet, les différentes sous parties de ma carte nécessitent chacune une alimentation distincte.

Documents Rendus