Aller au contenu


Photo
- - - - -

Comment configurer mon robot vigibot pour piloter Moteurs, Relais et Leds?


2 réponses à ce sujet

#1 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 966 messages
  • Gender:Male
  • Location:Anglet

Posté 09 octobre 2020 - 12:07

Votre robot connecté à vigibot peut être configuré pour piloter de nombreux éléments directement depuis les GPIO de la raspberry pi ou derrière un module permettant "d'augmenter le nombre de GPIO" le PCA9685.
Peuvent ainsi être piloté des leds de manière tout ou rien ( valable aussi pour un relais par exemple )  ou avec plus ou moins de luminosité (valable aussi pour piloter un ventilateur plus ou moins vite en passant par un transistor) , des servomoteurs et différents drivers de moteurs CC.

Pour le faire vous devrez configurer la configuration " Hardware " de votre robot. 

Cliquez sur l'icone " Engrenage " . 
Si vous n'avez fait aucune modification vous allez arriver sur une fenêtre " vide " et c'est normal. 
Si vous avez déjà effectué des modifications vous verrez toutes les tables dans lesquels vous avez modifié quelque chose. 

Vous pouvez sélectionner l'onglet " Configuration effective " . 

Vous verrez alors la configuration actuellement appliquée à votre robot. ( Vous vous rendrez compte que vous pouvez configurer pas mal de choses, mais tout ne sera pas présenté ici ;) nous nous concentrons uniquement sur les " périphériques de sortie " : Leds, moteurs, etc ... )

 

Une des table Disponible est la table " OUTPUTS " . Cette table contient la configurations de tous vos périphériques de sortie. Led , moteurs etc... Pour chaque périphérique vous avez un OUTPUTS.  Votre configuration par défaut possède déjà de nombreux OUTPUTS. 

Un "Output" possède les différents paramètres suivant : 

NAME : Champs que vous pouvez remplir comme bon vous semble, ne sera pas affiché, c'est uniquement pour que vous vous rappeliez de quel outputs il s'agit. 

TYPE : Champs pour indiquer quel type de matériel on va piloter : Vous ne pouvez mettre que des type pré défini qui sont les suivants : 

 

=> Gpios : Pour tout ce qui est tout ou rien, 1 ou 0, On ou Off . Pilotage de Relais, de transistor , de leds ... 
=> Servos : Pour tout ce qui se commande avec les même signal que les servomoteurs ( servomoteur, drivers de moteur ou tout autre périphériques utilisant le même genre de signal qu'un servomoteur classique )
=> Pwms : Pour piloter la luminositer d'une led ou bien la vitesse d'un moteur piloter par un transistor . ( Ne pas utiliser Pwms avec un Relais! )

 

Il existe aussi des type un peu plus spécialisé pour les drivers de moteurs: 
=>PwmPwm : Driver de moteur avec deux fils par moteurs du genre du L9110 nécessitant deux pwm pour définir la vitesse et le sens de rotation d'un moteur 
=>PwmDir : Driver de moteur nécessitant deux fils par moteurs du genre du MD10C cytron  nécessitant un pin Pwm pour la vitesse et un pin Dir pour choisir le sens. 
=>PwmDirDir : Driver de moteur nécessitant trois fils par moteurs du genre du L298 avec un pin PWM ( enable ) et deux pins de direction ( In) 

 

ADRESSE : par défaut valeur à laisser à -1 utile que si vous souhaiter piloter un élément non pas avec les GPIO de la pi mais en passant par les GPIO sur un PCA. Dans ce cas précis remplacer -1 par le numéro de votre pca. 0 si vous n'avez qu'un seul PCA,  0 ou 1 si vous avez deux PCA etc ...  Pour plus d'info sur le pca9685 : https://www.robot-ma...-leds/?p=111711

 

GPIOS : Contient les GPIOS auxquels seront connecté vos périphérique. Nombre compris entre 0 et 27 pour les gpio de la pi et entre 0 et 15 pour un pca. 
Les type Gpios, Servos, Pwms, peuvent avoir plusieurs gpio si vous voulez " dupliquer un même signal " sur plusieurs GPIO, et à minima 1 gpio de défini.
Attention : les types spécifique PwmPwm et PwmDir, doivent absolument avoir deux GPIOS de spécifié, et le type PwmDirDir doit absolument avoir trois Gpios de spécifié. Pour les type PwmDir et PwmDirDir, le premier gpio est le pwm.
Attention bis : 
 évitez d'utiliser des Gpios qui sont déjà utilisé par un autre Output. La présence de conflits peut provoquer des comportement erratique ne fonctionnant pas du tout comme souhaité. 

SLEEPMODES : Défini dans quels états sont mis vos pins quand le robot est en mode sommeil. 
Vous devez avoir autant de sleepmode que de GPIO. 
4 valeurs de sleepmode possible : None High Low ou Floating. 
None = On ne change pas l'état du Gpio quand le robot passe en mode sommeil , le gpio reste dans l'état dans lequel il était. 
High Low ou floating  = Le gpio sera à dans l'état spécifié lorsque le robot est en mode sommeil 

INS : défini la plage d'entrée qui va commander votre système. Généralement à faire matcher avec les paramètres défini dans votre télécommande. 
Généralement les ins sont défini entre -180 et 180 pour les servo ( commande en degré )  et -100 à 100 pour les moteurs ( commande de pourcentage de vitesse )  mais peut être paramétrer différemment pour d'autres unités si souhaité .
Attention, toujours respecter l'ordre croissant lorsque vous spécifiez vos "ins". 
Il doit toujours y avoir à minima 2 Ins de paramétré mais vous pouvez en mettre plus en respectant toujours l'ordre croissant.


OUTS : défini la plage de valeur de sortie que va piloter votre système. 

Pour le type Servos la plage des valeurs des OUTS est entre 500 ( µs ) et 2500  (µs )
Pour le type Gpios la plage des valeurs est 0 ou 1. ( traduit High ou Low )
Pour les autre types la plage de valeur est -100 à 100. ( pourcentage de pwm -100% à 100%  , le signe servant pour les pins de direction )

Attention, Il doit absolument y avoir autant de OUTS que de INS ! Les tableaux INS OUTS servant à definir le comportement de sortie de votre périphérique en fonction de l'entré qu'il reçoit. 

 

if ( INS[X] <= in  && in <= INS[X+1] ) 
out = map (in, INS[X], INS[X+1], OUTS[X], OUTS[X+1] ) 

 

pour plus de détails vous pouvez regarder la fonction computeOut dans clientrobotpi.js

 

La configuration des INS et des Outs vous permet de faire des courbes de comportements de l'entré par rapport à la sortie " linéaire par morceaux ". 

Vous pouvez par exemple pré calculer une approximation du comportement " au carré " avec la config suivante : 

INS :     -10   -7   -4   -2   0   2    4   7     10 

OUTS: -100 -49 -16  -4   0   4   16  49  100

 

 

 

 

BACKSLASH : Valeur de rattrapage de jeu, utile uniquement pour corriger des servomoteurs ayant du jeu.

 

0 par défaut  = pas de rattrapage.
Valeur assez faible à mettre entre 0 et 10 en général.
C'est une valeur en delta de PWM servo en µs ...   
Pour ceux qui s'intéressent à son fonctionnement : cette valeur "s'ajoute ou se soustrait" a la sortie " out" avec changeant de signe en fonction de la dérivée de la consigne. 

Pour plus de détails voir la fonction writeOutputs() dans clientrobotpi.js


 

 

Pour finir : 

 

COMMANDS16

GAINS16

 

COMMANDS8

GAINS8

 

COMMANDS1

GAINS1

Cette triplette de paire, permet de définir quelles sont les commandes ( parmi les commandes définie dans votre télécommande) qui vont avoir un impacte sur votre périphérique avec quels gains. 
in = Somme ( Commandes16[i] * Gains16[i] ) + Somme ( Commandes8[j] * Gains8[j] ) + Somme ( Commandes1[k] * Gains1[k] ) 

 

Pour plus de détails voir la fonction writeOutputs() dans clientrobotpi.js

Attention :Toujours mettre un numéro de commandes qui existe dans votre télécommande. 
Pour le moment il y n'y a que  8 commandes1 N° 0 à 7 et 3 commandes 8 disponible n° 0 à 2  ( Vitesse en x = translation gauche droite , vitesse en y ) avance recule, et vitesse en z = rotation gauche droite )
Le nombre de commandes16 lui est paramétrables dans votre télécommandes. 
 

C'est grâce à cette triplette de paire de configuration que vous pouvez mixer plusieurs commandes ensemble pour piloter un actionneur. C'est très utile pour le contrôle des moteurs de propulsions d'un robot par exemple, et permet de configurer aussi bien un déplacement différentiel en jouant avec les commandes8 1 et 2 que de configurer la commande de robots omnidirectionnel du type mecanum, omniwheel et même drone volant!

 

 

 

Cas d'application

 

Exemple concret : 
Si j'ai un robot qui utilise un driver de moteurs de type L298 pour se déplacer (au lieu d'un driver de moteur qui se pilote comme un servomoteur, ce qui est configuré par défaut )

A ) Je regarde quelles sont les Outputs qui sont actuellements configuré dans la configuration effective, et je repère les OUTPUTS[4] et OUTPUTS[5] dont les noms sont  "Left wheels" et "Right wheels". Ce sont donc uniquement ces deux outputs que nous allons modifier. 

B ) Je choisis le type correspondant ( L298 => PwmDirDir ) 

C ) J'ajoute deux gpios dans la table GPIOS pour avoir les 3 gpio requis pour le type PwmDirDir , et je choisis les GPIOS parmis les gpios disponibles : 
pour une config standard les Gpio disponible sont 0 , 1, 4   9 10  11 12 13 24 25 26 27.  ( 26 et 27 sont utilisé pour les moteurs mais vous êtes en train de travailler sur les moteurs , donc ces deux Gpios sont aussi disponible ... )
Rappel : 2 et 3 sont utilisé par l'I2C, 14 et 15 sont pour l'UART 16 à 23 sont les 8 Gpio des interrupteurs, 5 à 8 sont utilisé pour la tête et la pince ) 
(Note :Pour ajouter des paramètre choisir le mode d'édition texte code ou  encore le mode tree. )


D ) J'ajoute 2 sleepmode pour avoir autant de sleepmode que de gpios. Pour un driver de moteur mettre tous les sleepMode à Low est une bonne idée. ( Surtout ne pas mettre le PWM en sleepmode à High un de pins de direction à High et l'autre à Low sinon votre robot va se mettre à se déplacer en veille ! )

E ) Je modifie les valeurs de outs pour correspondre à la plage de -100 à 100 du mode PwmDirDir et je met autant de outs que de in. 
Par default  4 ins sont configuré : -100 -1 1 100, c'est pour cela que j'ai 4 outs
En générale les deux extrémités des outs vous pourrez les mettre à -100 et à 100 pour aller à la vitesse max.
Et les deux valeurs centrales sont à régler pour que votre robot avance dès que vous envoyez une petite impulsion pour avancer. 
Exemple de outs valable : -100 -10 10 100   mais -100 -1 1 100 est valable aussi, ça dépend de votre robot.
Si mon robot ne roule pas bien droit  je peux ajuster les outs du moteur qui va trop vite pour corriger le défaut observer en réduisant la vitesse max par exemple..

 

Ce que ça donne comme configuration modifiée : 

pwmdirdir.JPG

 

pwmdirdir2.JPG

 

voilà!


  • Melmet et Microrupteurman aiment ceci

Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#2 Snyp54

Snyp54

    Membre

  • Membres
  • 32 messages

Posté 17 novembre 2020 - 09:41

Qu'est ce qu'un PCA9685  ? 

Un pca9685 est un composant assez répandu permettant de fournir 16 sorties PWM supplémentaire qui se branche en I2C ( GPIO 2 et 3  de votre raspberry pi = SDA et SCL ) . 

 

 

Comment configurer un PCA9685 sur Vigibot ?:
 

 

0) Branchez votre PCA à votre raspberry pi sur les broches I2C  2 et 3 ( SDA et SCL )

 

1) Connaître l'adresse I2C de votre pca9685 (en décimal) 

 

Méthode 1 :  lire la documentation de votre carte
Méthode 2 : lancer un scan I2C sur votre raspberry pi vous allez voir l'ensemble des périphérique I2C présent. ( recherchez " raspberry pi 
i2cdetect " )

=> Attention souvent les adresse I2C sont affichées en héxadécimal et pas en décimal ...
Dans ce cas il faudra conversion de l'adresse I2C hexadécimal en décimal )

Exemple pour un PCA9685 avec l'I2C par défaut à 0x70, la valeur décimal est 112.  

2) Ajouter l'adresse de Votre PCA dans votre configuration matérielle. 

 

Allez dans Configuration Matérielle, recherchez PCA9685ADDRESSESet ajoutez y votre adresse I2C (en décimal!) puis enregistrez votre configuration. 

=> Si vous avez rentré une adresse I2C valide, avec un pca branché votre robot robot devrait toujours fonctionné comme si rien n'avait changé. 
=> Si vous avez rentré une adresse I2C invalide, ou que votre PCA n'est plus branché, votre robot n'arrivera plus à se connecter et deviendra rouge sur vigibot. ( Supprimer l'adresse invalide ou la corriger avec l'adresse valide corrigera le problème . 


 

3) Configurer les sorties que vous souhaitez utiliser avec un PCA

 

Dans Configuration Matérielle, modifiez le OUTPUTS que vous souhaitez utiliser avec le PCA9685 et dans la case " adresse" remplacer le -1 par 0 pour l'attribuer au premier PCA9685 que dont vous avez enregistré l'adresse dans  PCA9685ADDRESSES.  

Dans GPIOS, vérifiez aussi que les numéro de sortie que vous désirez sont bien entre 0 et 15! 
Enregistrez votre configuration, si pas d'erreur de configuration normalement votre robot devrait fonctionner comme souhaité et la sortie de votre PCA être pilotée.

4) Bonus, brancher plusieurs PCA  : 

Ajoutez autant d'adresse  que de 
PCA9685 que vous avez dans le tableau PCA9685ADDRESSES.
Pour sélectionner le PCA dans OUTPUTS, changez le -1 dans adresse par  0 pour sélectionner votre premier pca, par 1 pour sélectionner le deuxième 1 etc...


Exemple de carte avec PCA9685 :

https://www.robot-ma...rvomoteurs.html

driver-i2c-pour-16-servomoteurs.jpg


  • Melmet aime ceci

#3 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 966 messages
  • Gender:Male
  • Location:Anglet

Posté 13 janvier 2022 - 07:09

Quelques exemples un peu plus spécifiques concernant les différents mode de pilotage  :

 

L9110 nécessite le mode  PwmPwm,  car ce driver possède uniquement deux broches d'entrées inA and inB, qu'on peut inverser pour changer le sens de rotation
L298 utilise le mode PwmDirDir, car ce driver presente 3 pins : PWM/enable  + inA + InB.  Il est possible d'utiliser le mode PwmPwm avec ce driver si la broche pwm est forcé à l'état haut.
Cytron utilise le mode PwmDir, car présente 2 entrées, Pwm ( vitesse)  et Dir (direction). Il est possible d'utiliser le mode Pwm seul si on a pas besoin de changer de sens de rotation.
Ce servo dc driver prend en entré un signal de servomoteur et permet de piloter un moteur cc avec un seul fil dans les deux direction et s'utilise donc avec le mode Servo.
PCA servo Carte pca exposant ses 16 sorties, peut être utilisée pour piloter des servomoteur ou n'importe lequel des autres drivers cités plus haut en définissant correctement les GPIO et l'adresse du PCA.

PCA with motor driver included  inclu une carte pca d'adresse 96 ( valeur décimale)  + 2  t6612fng en mode PwmDirDir pour contôler 4 moteurs avec 12 gpio.
Les broches pwm du pca connectés au tb6612fng  sont 8 13 2 et 7 . Les répartitions des gpio pour chaque moteur sont : 8 9 10; 11 12 13; 2 3 4 et 7 6 5

Un exemple de config pour ce driver : 
 

  {
      "NAME": "Front Right wheel",
      "TYPE": "PwmDirDir",
      "ADRESSE": 0,
      "GPIOS": [
        8,
        9,
        10
      ],
      "SLEEPMODES": [
        "Low",
        "Low",
        "Low"
      ],
      "INS": [
        -100,
        -1,
        1,
        100
      ],
      "OUTS": [
        -100,
        -1,
        1,
        100
      ],
      "BACKSLASH": 0,
      "COMMANDS16": [],
      "GAINS16": [],
      "COMMANDS8": [
        0,
        1,
        2
      ],
      "GAINS8": [
        1,
        -1,
        -1
      ],
      "COMMANDS1": [],
      "GAINS1": []
    },
    {
      "NAME": "Rear right wheel",
      "TYPE": "PwmDirDir",
      "ADRESSE": 0,
      "GPIOS": [
        13,
        12,
        11
      ],
      "SLEEPMODES": [
        "Low",
        "Low",
        "Low"
      ],
      "INS": [
        -100,
        -1,
        1,
        100
      ],
      "OUTS": [
        -100,
        -1,
        1,
        100
      ],
      "BACKSLASH": 0,
      "COMMANDS16": [],
      "GAINS16": [],
      "COMMANDS8": [
        0,
        1,
        2
      ],
      "GAINS8": [
        -1,
        -1,
        -1
      ],
      "COMMANDS1": [],
      "GAINS1": []
    },
    {
      "NAME": "Rear left wheel",
      "TYPE": "PwmDirDir",
      "ADRESSE": 0,
      "GPIOS": [
        2,
        3,
        4
      ],
      "SLEEPMODES": [
        "Low",
        "Low",
        "Low"
      ],
      "INS": [
        -100,
        -1,
        1,
        100
      ],
      "OUTS": [
        -100,
        -1,
        1,
        100
      ],
      "BACKSLASH": 0,
      "COMMANDS16": [],
      "GAINS16": [],
      "COMMANDS8": [
        0,
        1,
        2
      ],
      "GAINS8": [
        -1,
        1,
        -1
      ],
      "COMMANDS1": [],
      "GAINS1": []
    },
    {
      "NAME": "Front left wheel",
      "TYPE": "PwmDirDir",
      "ADRESSE": 0,
      "GPIOS": [
        7,
        6,
        5
      ],
      "SLEEPMODES": [
        "Low",
        "Low",
        "Low"
      ],
      "INS": [
        -100,
        -1,
        1,
        100
      ],
      "OUTS": [
        -100,
        -1,
        1,
        100
      ],
      "BACKSLASH": 0,
      "COMMANDS16": [],
      "GAINS16": [],
      "COMMANDS8": [
        0,
        1,
        2
      ],
      "GAINS8": [
        1,
        1,
        -1
      ],
      "COMMANDS1": [],
      "GAINS1": []
    },

Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 




Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users