- Arduino commandé par Joystick - - Page 2
Répondre à la discussion
Page 2 sur 8 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 225

- Arduino commandé par Joystick -



  1. #31
    Antoane
    Responsable technique

    Re : - Arduino commandé par Joystick -


    ------

    Bonjour,
    la transil comme protection contre les surtensions générées par un moteur, c'est pas l'idéal lorsque le moteur est piloté en PWM : la puissance dissipée dans la diode est alors égale à Vf*Imoteur*(1-dc) (dc le rapport cyclique). C'est beaucoup d'un point de vue rendement, et potentiellement également refroidissement et pour le composant en lui-même, spécifié pour moins de 2W (en continu).

    Le TIP42, un composant lent, n'est pas l'idéal pour un PWM (même si le montage en collecteur commun aide). Un darlington monté en collecteur commun, c'est pas l'idéal (drop-out >1,4V). Un NPN en collecteur commun commutant du 12V demande une commande en 0/12V, ce qui implique l'usage d'un étage de commande du TIP42...
    Pas besoin de résistance de base en montage collecteur commun (au contraire : ca accroît le drop-out et ralenti le circuit).
    Un petit NMOS logic semble bien plus indiqué.

    -----
    Dernière modification par Antoane ; 25/10/2014 à 11h49.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  2. #32
    arsene de gallium

    Re : - Arduino commandé par Joystick -

    Je ne voudrais pas trop insister, mais le vinvin69 est en train de vous promener.
    Non seulement il ne lit pas les liens qu'on lui donne, mais en plus il pose des questions simples que l'on trouve sur ces 2 sites:
    http://www.sonelec-musique.com/elect...lisations.html
    et
    http://fr.openclassrooms.com/science...-programmation
    Le deuxième site à déjà été donné en #5
    De simple recherche par le quidam sur "montages électroniques" suffit à trouver le site de SONELEC et bien d'autres.
    S'il faut à chaque nouveau demandeur réexpliquer tout, on va vite lasser les poilus de ce forum, à juste raison.
    Doit on se substituer aux moteurs de recherche comme gogole ou autre ?
    Doit on faire les montages nous mêmes et donner toutes les références et schémas ?
    Aider c'est bien, assister est le mal.

  3. #33
    jiherve

    Re : - Arduino commandé par Joystick -

    Bonjour,
    Doit on se substituer aux moteurs de recherche comme gogole ou autre ?
    Ben oui car nous sommes beaucoup plus intelligents qu'un moteur de recherche pour juger de la pertinence d'un lien et en plus, pour la plupart, nous maitrisons au moins l'anglais technique ce qui ne semble pas êtte le cas de la plupart des demandeurs.
    Pour la PWM il faut un MOS en source commune, les solution à base de bipolaires sont inefficaces.
    JR
    l'électronique c'est pas du vaudou!

  4. #34
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Hello Antoane et merci pour tes indications

    Citation Envoyé par Antoane Voir le message
    Bonjour,
    la transil comme protection contre les surtensions générées par un moteur, c'est pas l'idéal lorsque le moteur est piloté en PWM : la puissance dissipée dans la diode est alors égale à Vf*Imoteur*(1-dc) (dc le rapport cyclique). C'est beaucoup d'un point de vue rendement, et potentiellement également refroidissement et pour le composant en lui-même, spécifié pour moins de 2W (en continu).
    Je n'aurais pas cru que ça dissiperait autant...
    Est-ce qu'on le remplace par un snubber? disons 10 Ohms en série avec 0,1 uF?
    En laissant quand même le transil en parallèle pour écrêter ce qui dépasse?

    Le TIP42, un composant lent, n'est pas l'idéal pour un PWM (même si le montage en collecteur commun aide). Un darlington monté en collecteur commun, c'est pas l'idéal (drop-out >1,4V). Un NPN en collecteur commun commutant du 12V demande une commande en 0/12V, ce qui implique l'usage d'un étage de commande du TIP42...
    Pas besoin de résistance de base en montage collecteur commun (au contraire : ca accroît le drop-out et ralenti le circuit).
    Un petit NMOS logic semble bien plus indiqué.
    OK pour la lenteur, mais ici j'imaginais un PWM à environ 10 Hz. Inutile d'aller plus haut, cela augmenterait les pertes pour rien. Non?

    Et en émetteur commun? ça irait mieux?AMP2.jpg

    En remplaçant le transistor par un IRLZ44N, disponible ici:

    http://www.ebay.com/itm/5x-IRLZ44N-P...item1c33e73785

    et de caractéristique:

    IRLZ44N.jpg

    On aurait:

    AMP3.jpg

    J'ai assez souvent vu qu'on prévoyait une résistance en série avec le gate d'un MOSFET. Serait-ce indiqué ici?

    Amicalement,

    Yvan
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  5. #35
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    J'ai essayé de me représenter les commandes des moteurs en fonction de ce qui est demandé, typique d'un robot à 2 roues motrices indépendantes.

    Selon le message #9:

    Joystick arrière à fond : les deux moteurs tournent en arrière à Vmax
    Position intermédiaire : les deux moteurs tournent en arrière à une vitesse intermédiaire
    Joystick au neutre : Aucun moteur activé
    Position intermédiaire : les deux moteurs tournent en avant à une vitesse intermédiaire
    Joystick avant à fond : les deux moteurs tourne en avant à Vmax

    Joystick à droite à fond : le moteur droit tourne en avant à Vmax et le moteur gauche en arrière à Vmax
    Position intermédiaire (droite) : le moteur droit tourne (avant) à une vitesse intermédiaire et le moteur gauche aussi (arrière)
    Joystick au neutre : Aucun moteur activé
    Position intermediaire (gauche) : le moteur gauche tourne (arrière) à une vitesse intermédiaire et le moteur gauche aussi (avant)
    Position à fond à gauche : le moteur droit tourne en arrière à Vmax, et le moteur gauche en avant à Vmax


    Si on essaie de mettre tout ça sous forme de tableau:

    Nom : COMMANDE.jpg
Affichages : 169
Taille : 64,2 Ko

    en position à droite toute il faut que le moteur de droite tourne en arrière et inversément.

    Est-ce que tout le monde est d'accord?

    Amicalement,

    Yvan
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  6. #36
    Antoane
    Responsable technique

    Re : - Arduino commandé par Joystick -

    Bonsoir,
    Citation Envoyé par Yvan_Delaserge Voir le message
    Est-ce qu'on le remplace par un snubber? disons 10 Ohms en série avec 0,1 uF?
    En laissant quand même le transil en parallèle pour écrêter ce qui dépasse?
    Lorsqu'on commande un moteur en PWM, on cherche généralement à ce que toute la mécanique ne voit que l'effort moyen apporté par le moteur, ce qui impose que le courant dans le rotor soit relativement lisse (couple constant). Lorsque le transistor de découpage est bloqué, le courant circulant dans le moteur continue à circuler, que ce soit dans la (les) diode de roue-libre, dans la transil, dans le snubber... Utiliser un snubber n'est pas impossible, mais :
    - sa valeur doit être fonction de la fréquence de découpage (ou plutôt du t_off, temps pendant lequel on charge le condensateur) et du courant absorbé par le moteur. En effet, la tension dans le condensateur en fin de période s'exprime : Uc=Vcc+T(1-dc)*Imot/Csnubber (Vcc la tension d'alimentation). Tu voudras avoir cette tension inférieure à la tension de transil. Accessoirement, il faut aussi que : Rsnubber*Csnubber << dc*T (retour à l'état normal pendant le t_on). Partie de l'énergie envoyée vers le Csnubber n'y sera pas stockée (car pedue dans les résistrances parasite) et partie de celle qui le sera sera perdue.
    - globalement, on va essayer de prélever un minimum d'énergie au rotor pendant le t_off, de manière à minimiser l'ondulation du courant (couple constant et pertes minimales). C'est aisément faisable avec des diodes, bien moins avec un snubber (il faut un "gros" condensateur).
    Bref : pas une bonne idée.


    OK pour la lenteur, mais ici j'imaginais un PWM à environ 10 Hz. Inutile d'aller plus haut, cela augmenterait les pertes pour rien. Non?
    Difficile de se prononcer sans connaitre les caractéristiques du moteur, mais 10Hz, c'est bas, très bas. On préfère généralement travailler à qq kHz, voir au-delà de 20kHz pour sortir de la bande audio.
    Il convient ici de comparer la constante de temps mécanique du montage (ou la constante électrique, c'est selon) avec la période de découpage.

    En remplaçant le transistor par un IRLZ44N
    [...]
    J'ai assez souvent vu qu'on prévoyait une résistance en série avec le gate d'un MOSFET. Serait-ce indiqué ici?
    Le bon lien pour le IRFZ44n : http://www.irf.com/product-info/data...ta/irlz44n.pdf Sans connaitre le courant demandé par le moteur... difficile de se prononcer.

    La résistance de gate est quasi-toujours indispensable, sauf (souvent) lorsque le mos est utilisé en linéaire et dans certains design très particuliers. A priori, mieux vaut la mettre. Elle a plusieurs objectifs :
    - éviter les oscillations entre l'inductance parasite du circuit et la capa de gate du MOSFET ;
    - protéger la sortie du driver ;
    - limiter la vitesse de commutation : une transition trop rapide engendre des parasites en tous sens, il est parfois bon de ne pas aller trop vite -- quitte à accroitre les pertes par commutation :
    Citation Envoyé par Bobfuck
    à propos des di/dt, je m'étais fait avoir : sur un buck synchrone, le chip (LTC38machin) du DC-DC avait 5mm de trace d'alim en commun avec le MOS du haut, jusqu'aux capas de découplage... la commutation de celui-ci suffisait pour provoquer sur l'inductance de la piste une chute de tension suffisante pour rebooter le DC-DC (il y a un circuit dedans qui surveille l'alim pour se mettre en marche et s'éteindre proprement). Un coup de cutter a réglé le problème (en coupant la trace dans le sens de la longueur). Sur un oscillo 100MHz, c'était quasiment indécelable
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  7. #37
    gabuzo

    Re : - Arduino commandé par Joystick -

    J'espère que ce sujet finira mieux que celui-là http://forums.futura-sciences.com/el...oystick-3.html
    Je suis Charlie

  8. #38
    vinvin69

    Re : - Arduino commandé par Joystick -

    Bonjour, ou re à tous !

    Concernant les résistances des joystick, n'ayant pas le matériel sur moi (pour l'instant, c'est un projet), je ne peux pas donner les valeurs des résistances. Est-ce indispensable que je me procure le matériel pour continuer ? Ne peut-on pas utiliser des valeurs "inventés" pour pouvoir avoir un "model" de code ?
    Merci pour le schéma des sorties pour commander les moteurs.

    Concernant les transistor, cela me semble être une bonne solution, mais quel model ?

    @arsene de galium : J'ai bien lu les liens, mais, si je viens sur ce forum, c'est en aucun cas pour être "assisté" mais c'est que je préfère amplement discuter avec des personnes comme vous que de galèrer seul devant des cours théoriques.

    Concernant les moteurs, ce serra ces caractéristiques :
    Réduction : 50:1
    Tension nominale : 12V
    Tension de service : 6,0 à 15,0V
    Vitesse à vide : 250t/mn
    Courant à vide : 0,2A
    Vitesse max : 200t/mn
    Courant max : 1A
    Couple max théorique : 38,5N.cm
    Puissance max : 8W
    Rendement max : 0,66%
    Couple disponible : 25N.cm

    Encore merci beaucoup à tous !

    Cordialement,

    Vincent A.

  9. #39
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Merci de nouveau Antoane pour tes indications.
    Exit donc snubber et Transil. En fait, il suffirait d'utiliser une diode de roue libre.

    Nom : AMP4.jpg
Affichages : 172
Taille : 50,9 Ko

    La 1N5822 est une Schottky 3 A 40 V, disponible ici:

    http://www.ebay.com/itm/5-x-1N5822-S...item3a6969ae96
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  10. #40
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Citation Envoyé par vinvin69 Voir le message
    Bonjour, ou re à tous !

    Concernant les résistances des joystick, n'ayant pas le matériel sur moi (pour l'instant, c'est un projet), je ne peux pas donner les valeurs des résistances. Est-ce indispensable que je me procure le matériel pour continuer ? Ne peut-on pas utiliser des valeurs "inventés" pour pouvoir avoir un "model" de code ?
    Merci pour le schéma des sorties pour commander les moteurs.
    Personnellement, j'avais constaté que dans un joystick, il y a des potentiomètres de type standard.
    Seulement, le manche du Joystick ne peut se déplacer que de 20 degrés de part et d'autre. Dans un potentiomètre normal, l'axe peut pivoter de 3/4 de tour. C'est-à-dire 270 degrés.
    40 degrés /270 degrés = 15 pour cent. Avec le pot. branché entre 0 et 5 V, sur le curseur, au lieu d'avoir une tension comprise entre 0 et 5 V, on a une tension comprise entre 0 et 0,75 V!

    Puisque l'on dispose d'une alim 12 V pour le moteur, utilisons-la aussi pour le joystick. On aura une tension variable entre 0 et 1,8 V. Il faudra prévoir un bon découplage par condensateurs aux bornes des potentiomètres du joystick.

    Il faudra voir quelle est le comportement de l'ADC de l'arduino. Est-il préférable d'avoir des pot. alimentés avec du 12 V, ou bien peut-on se contenter de 5 V? Dans ce dernier cas, on pourrait le récupérer après le régulateur déjà présent sur la platine de l'Arduino.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  11. #41
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Citation Envoyé par Yvan_Delaserge Voir le message
    J'ai essayé de me représenter les commandes des moteurs en fonction de ce qui est demandé, typique d'un robot à 2 roues motrices indépendantes.

    Selon le message #9:

    Joystick arrière à fond : les deux moteurs tournent en arrière à Vmax
    Position intermédiaire : les deux moteurs tournent en arrière à une vitesse intermédiaire
    Joystick au neutre : Aucun moteur activé
    Position intermédiaire : les deux moteurs tournent en avant à une vitesse intermédiaire
    Joystick avant à fond : les deux moteurs tourne en avant à Vmax

    Joystick à droite à fond : le moteur droit tourne en avant à Vmax et le moteur gauche en arrière à Vmax
    Position intermédiaire (droite) : le moteur droit tourne (avant) à une vitesse intermédiaire et le moteur gauche aussi (arrière)
    Joystick au neutre : Aucun moteur activé
    Position intermediaire (gauche) : le moteur gauche tourne (arrière) à une vitesse intermédiaire et le moteur gauche aussi (avant)
    Position à fond à gauche : le moteur droit tourne en arrière à Vmax, et le moteur gauche en avant à Vmax

    ça ne va pas être évident à coder ça. Ce n'est pas comme si chaque potentiomètre contrôlait un seul moteur.
    Chaque potentiomètre contrôle les 2 moteurs! Et les 2 relais!

    Où est mon tube d'aspirine?
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  12. #42
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    sur ce tableau, j'ai essayé de représenter l'état des 2 moteurs et des 2 relais en fonction de la position du joystick.Nom : COMMAND2.jpg
Affichages : 171
Taille : 109,3 Ko

    en vert: le relais commute pour que le moteur tourne en avant
    en rouge: le relais commute pour que le moteur tourne en arrière.

    On voit que la zone de transition n'est pas toujours définie par une position centrale du potentiomètre avant/arrière.

    Est-ce que quelqu'un a une idée?
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  13. #43
    jiherve

    Re : - Arduino commandé par Joystick -

    Bonsoir,
    Sur un joystick bien conçu le curseur explore la plage du potentiomètre situé autour de sa valeur centrale, cela ne présente aucune difficulté particulière pour l'exploiter. L'astuce est de prévoir une séquence de calibration où les valeurs minimum et maximum seront codées et mémorisées et serviront ensuite à normaliser les valeurs courantes, c'est une chose qui est faite dans le code que j'ai fourni.
    Ensuite pour commander les deux moteurs ce n'est pas trop difficile, il suffit de mixer les valeurs obtenues, ce qui ne nécessite que des additions et soustractions assez facile à faire avec un µC.
    Si vous êtes sages et que je suis dans un jour altruiste, je vous donnerai un code qui fonctionne, mais sur mon projet.
    JR
    l'électronique c'est pas du vaudou!

  14. #44
    Antoane
    Responsable technique

    Re : - Arduino commandé par Joystick -

    Citation Envoyé par Yvan_Delaserge Voir le message
    Avec le pot. branché entre 0 et 5 V, sur le curseur, au lieu d'avoir une tension comprise entre 0 et 5 V, on a une tension comprise entre 0 et 0,75 V!

    Puisque l'on dispose d'une alim 12 V pour le moteur, utilisons-la aussi pour le joystick. On aura une tension variable entre 0 et 1,8 V. Il faudra prévoir un bon découplage par condensateurs aux bornes des potentiomètres du joystick.

    Il faudra voir quelle est le comportement de l'ADC de l'arduino. Est-il préférable d'avoir des pot. alimentés avec du 12 V, ou bien peut-on se contenter de 5 V? Dans ce dernier cas, on pourrait le récupérer après le régulateur déjà présent sur la platine de l'Arduino.
    La tension sur l'axe est comprise entre 0 et 15% de l'alim, ou entre 42 et 58% de l'alim ?

    Il est peut-être possible de paramétrer les tensions de références de l'ADC (c'est possible sur les PIC, ca devrait l'être ici au moins pour la référence haute, dans le cas ou l'utilisateur voudrait utiliser une référence de tension externe).
    Sinon, 15%*256~38, il reste donc 38 paliers pour le réglage de la vitesse de rotation du moteur. C'est pas si mal.




    Concernant le cahier des charges fourni en post 9, il me semble que des équations correctes sont :
    G=y+x
    D=y-x
    Avec :
    - D (G) : vitesse de rotation du moteur droit (gauche), positive dans un sens, négative dans l'autre ;
    - x : position du potentiomètre horizontal (-1 à gauche, 0 au centre et 1 à droite) ;
    - y : position du potentiomètre horizontal (-1 en bas, 0 au centre et 1 en haut).
    C'est simpliste, il faut ajouter à cela une zone morte (ou, une échelle non linéaire sur toute la gamme).

    Avantage de ces équations : elles sont simplissimes. Inconvénient : ou bien on suppose que la vitesse de rotation max du moteur est |D|=|G|=2 et alors on ne peut se déplacer en ligne droite qu'à la moitié de la vitesse max, ou bien on suppose que |D|=|G|=1 (on sature donc G et D) et la vitesse de rotation du mobile dépend de y.
    Le PWM à envoyer à chaque moteur est la valeur absolue de G et D, le sens est fonction du signe de G et D.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  15. #45
    vinvin69

    Re : - Arduino commandé par Joystick -

    Re Yvan ! (Si je peux me permettre cette familiarité !)

    Pour l'histoire de la diode, elle devrait se placer où ? Et pour quelle raison ? J'avoue que j'ai pas tout compris...

    Pour l'instant, les tableaux sont en attente de validation.

    Par contre. Concernant les joysticks, si seulement 15% sont utilisés, ils sont repartit de part et d'autre du neutre. Donc, le courant ne serra pas entre 0 et 0,75 ; mais plutôt entre 2,125v et 2,875 ? 2,5v étant le neutre ?

    Pour le code, je pense que ça risque d'être assez complexe ! C'est pour ça que je demande votre aide !

    Ensuite, là, on a "organisé" que si le joystick, est déplacé uniquement soit strictement horizontalement soit strictement verticalement. Donc étant donné que je vois mal comment l'Arduino va réagir si l'on met le joystick en position intermédiaire. Par exemple si on le met en haut à droite ou en bas à gauche.. Etc. Le plus simple serait, je pense de bloquer le joystick pour qu'il puisse se déplacer physiquement qu'horizontalement ou verticalement.

    Cordialement.

    Vincent A.

  16. #46
    vinvin69

    Re : - Arduino commandé par Joystick -

    Je viens de voir les tableaux, merci !

  17. #47
    Antoane
    Responsable technique

    Re : - Arduino commandé par Joystick -

    Avec une unique diode de roue-libre, il faut être sûr de ne commuter le relais que lorsque le moteur est à l'arrêt. Ajouter une protection supplémentaire (3 diodes ou une transil) ne serait à mon avis pas un luxe.
    La résistance de gate est généralement prise entre 22 et 100Ohm. Mais pour une commutation à 10Hz (ce qui, je me repète semble assez lent), 1k ne devrait pas poser trop de pb.


    Un exemple d'algorithme pour les équations proposées en post 44.
    Code:
    	//init
    	resolution_pwm=1024; // pour un PWM 10 bits
    
    	// calibration
    	xmin= // valeur minimale atteignable par x
    	xmax= // valeur maximale atteignable par x
    	xmed=// valeur de x au neutre
    
    	ymin=
    	ymax=
    	ymed=	
    
    	xblanc=(xmax-xmin)/32; // zone neutre de part et d'autre de l'axe x
    	yblanc=(xmax-xmin)/32; // zone neutre de part et d'autre de l'axe y
    
    
    
    while 1
    	// read input
    	read y ; // ADC input read 
    	read x ; // ADC input read 
    
    	//détermine sens de rotation de chaque moteur
    	if (y+x) > 0 then 	//calcul sur 9bits signés
    		Gsens = 1 ; // alimentation du relais gauche
    	else 	Gsens = 0 ;
    	end;
    	if (y-x) > 0 then 	//calcul sur 9bits signés
    		Dsens = 1 ; // alimentation du relais droit
    	else 	Dsens = 0 ;
    	end;
    
    	// mise à l'echelle input
    	if x > (xmed+xblanc) then x=x-xmed-xblanc ;
    	else if x > (xmed-xblanc) then x=0 ; //dans la zone neutre
    	// else on fait rien
    	end ;
    
    	if y > (ymed+yblanc) then y=y-ymed-yblanc ;
    	else if y > (ymed-yblanc) then y=0 ; //dans la zone neutre
    	end ;
    
    	// calcul PWM
    	Gpwm = resolution_pwm*(y+x)/(ymax-ymin) ;
    	Dpwm = resolution_pwm*(y-x)/(ymax-ymin) ;
    	
    end;
    Pour la calibration, par exemple du minimum de x (identique pour les autres) :
    Code:
    	// calibration minimum x
    relais = 1
    delay 50 ms
    relais = 0 // le relais claque, pour prévenir l'opérateur que la calibration commence
    delay 500 ms
    
    somme_temp = 0; // initialisation de variable, somme_x doit être sur 3 bits de plus (au moins) que la résolution de l'ADC
    for n=1 to 8 // une boucle pour du moyennage, ici sur 8 valeurs
    	read x ; // ADC input read
    	somme_temp=somme_temp+x;
    	delay 100 ms ;
    end ;
    xmin=somme_temp/8 ; // calcul de la moyenne
    
    relais = 1  // le relais claque, pour prévenir l'opérateur de passer à la calibration suivante
    delay 50 ms
    relais = 0
    delay 500 ms
    
    somme_temp=0
    ...

    Je code peu et pas sur µC (et il est tard), donc à revérifier
    Dernière modification par Antoane ; 25/10/2014 à 20h35.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  18. #48
    jiherve

    Re : - Arduino commandé par Joystick -

    Re
    comme il faudra prévoir une zone morte pour assurer l’arrêt des moteurs, la commutation des relais aura lieu durant cette zone morte et donc les moteurs étant stoppés il n'y a pas de précaution particulières à prendre sauf éventuellement un petit snubber aux bornes des relais.
    JR
    l'électronique c'est pas du vaudou!

  19. #49
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Citation Envoyé par jiherve Voir le message
    Bonsoir,
    Sur un joystick bien conçu le curseur explore la plage du potentiomètre situé autour de sa valeur centrale, cela ne présente aucune difficulté particulière pour l'exploiter.
    En fait, il y a deux roulettes placées au pied du manche à balai, qui permettent de faire pivoter les deux potentiomètres de manière à déplacer le curseur en direction du centre de sa piste. Mais lorsque l'on actionne le manche à balai, l'excursion du curseur reste dans tous les cas de + ou - 20 degrés autour de la position centrale.
    Personnellement, j'ai réalisé un montage en analogique, qui fonctionne très bien, parce que j'amplifie la tension avec un ampli op. J'ai donc une excursion de 10 V. Mais je me demandais comment se comporterait le CAN de l'Arduino face à un delta de tension aussi faible.
    L'astuce est de prévoir une séquence de calibration où les valeurs minimum et maximum seront codées et mémorisées et serviront ensuite à normaliser les valeurs courantes, c'est une chose qui est faite dans le code que j'ai fourni.
    Oui, j'ai vu, et c'est génial, parce que cela permet un étalonnage avant chaque utilisation, et même un changement de joystick si on veut. Ce qui serait bien, ce serait une procédure complémentaire, permettant d'étalonner le point central du joystick (plutôt que de l'interpoler), parce que la linéarité des potentiomètres que l'on trouve dans les joysticks n'est pas parfaite. Cela permettrait de définir une "zone morte" centrale aussi réduite que possible. C'est ce que permet de faire l'utilitaire de réglage du joystick de Windows.
    Ensuite pour commander les deux moteurs ce n'est pas trop difficile, il suffit de mixer les valeurs obtenues, ce qui ne nécessite que des additions et soustractions assez facile à faire avec un µC.
    Si vous êtes sages et que je suis dans un jour altruiste, je vous donnerai un code qui fonctionne, mais sur mon projet.
    JR
    Oui, ce serait sympa de partager ça avec nous, surtout que tu l'as déjà testé sur ta vedette lance-torpilles à 2 moteurs, non?

    Amicalement,

    Yvan
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  20. #50
    vinvin69

    Re : - Arduino commandé par Joystick -

    Salut à tous !
    Merci Antoane pour le code, et aussi jherve et Yvan_Delaserge.
    Par contre ? C'est quoi l'ADC ? Et à quoi correspond "xblanc" ? Sinon, j'ai compris le reste !
    Merci à vous tous !

    Cordialement,

    Vincent A.

  21. #51
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Je continue de réfléchir au problème et je me demande si pour avoir une maniabilité aussi bonne que possible, il faudrait commander les moteurs comme ceci:COMMAND3.jpg

    La différence c'est qu'avec le manche à balai tout à gauche ou tout à droite, les moteurs tournent dans des directions opposées, afin d'avoir le virage le plus serré possible.

    Si on interpole les valeurs dans les cases intermédiaires, on obtient:
    COMMAND4.jpg
    Là, j'ai interpolé selon le carré et les axes vertical et horizontal.

    Mais si maintenant je remplis les 4 cases vides en interpolant selon les 2 diagonales, j'obtiens:
    COMMAND5.jpg

    Ce qui me semble peu homogène, c'est le moins que l'on puisse dire!
    Et alors pour ce qui est de la commutation avant-arrière, bonjour les dégâts!
    COMMAND6.jpg

    Où est mon tube d'aspirine?
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  22. #52
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Citation Envoyé par Antoane Voir le message
    Concernant le cahier des charges fourni en post 9, il me semble que des équations correctes sont :
    G=y+x
    D=y-x
    Avec :
    - D (G) : vitesse de rotation du moteur droit (gauche), positive dans un sens, négative dans l'autre ;
    - x : position du potentiomètre horizontal (-1 à gauche, 0 au centre et 1 à droite) ;
    - y : position du potentiomètre horizontal (-1 en bas, 0 au centre et 1 en haut).
    C'est simpliste, il faut ajouter à cela une zone morte (ou, une échelle non linéaire sur toute la gamme).

    Avantage de ces équations : elles sont simplissimes. Inconvénient : ou bien on suppose que la vitesse de rotation max du moteur est |D|=|G|=2 et alors on ne peut se déplacer en ligne droite qu'à la moitié de la vitesse max, ou bien on suppose que |D|=|G|=1 (on sature donc G et D) et la vitesse de rotation du mobile dépend de y.
    Le PWM à envoyer à chaque moteur est la valeur absolue de G et D, le sens est fonction du signe de G et D.
    Hello Antoane,

    J'ai fait un tableau avec ces équations, mais cela n'a pas l'air de fonctionner comme prévu (ou alors, j'ai zappé quelque chose).

    ALGOANTO.jpg

    On a des valeurs >1 ou < -1

    A part ça, pour ce qui est des moteurs tournant en sens opposés pour un virage serré je ne vois pas comment le mettre en équations. ça s'annonce plus compliqué que prévu...

    Amicalement,

    Yvan
    Images attachées Images attachées  
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  23. #53
    Antoane
    Responsable technique

    Re : - Arduino commandé par Joystick -

    Bonjour,
    l'ADC est le composant (inclu dans le microcontroleur utilisé dans l'arduino) assurant la conversion analogique/numérique. La tension analogique appliquée au µC est numérisée et la valeur mesurée est stockée dan la variation idoine (x, y ou somme_temp).

    Lorsque le joystick est au repos, on veut que les moteurs soient arrêtés. Il suffit donc à priori de savoir que si on mesure 2,512V (tension obtenue par calibrage), le joystick est au repos. Si on mesure 2,530V, il faut faire tourner le moteur (un peu).
    Ca, c'est pour la théorie de base. Le problème, c'est qu'en raison des frottements secs et du jeu dans le montage, il est tout à fait possible que le retour en position neutre du joystick ne se fasse pas à 2,512V, mais à 2,550V. C'est le neutre, donc on veut pas que ca tourne, mais en vrai, c'est au-dessus de 2,512V, donc on va (un peu) alimenter les moteur. xblanc, comme yblanc, permettent d'ajouter une zone morte : si la tension mesurée est située à une distance inférieure à xblanc du neutre tel que calibré, on considère qu'il ne faut pas faire tourner le moteur. C'est à dire que si, par exemple, xblanc=100mV et que la tension issue du calibrage du neutre est xmed=2,512V, le moteur ne commencera à tourner que pour une tension mesurée supérieure à 2,612V ou inférieure à 2,412V.

    Citation Envoyé par Yvan
    On a des valeurs >1 ou < -1
    Oui, la réponse est donnée :
    Citation Envoyé par Toinou
    ou bien on suppose que la vitesse de rotation max du moteur est |D|=|G|=2 et alors on ne peut se déplacer en ligne droite qu'à la moitié de la vitesse max, ou bien on suppose que |D|=|G|=1 (on sature donc G et D) et la vitesse de rotation du mobile dépend de y.
    Autrement dit : ou bien on dit que le domaine d'évolution de G et D est [-2;2], ou bien on ajoute une saturation ramenant l'ensemble dans [-1;1].
    Les deux solutions ont leur inconvénients, la première me semble meilleure.
    Dernière modification par Antoane ; 26/10/2014 à 10h06.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  24. #54
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    OK, donc disons qu'on sature. On obtient ceci.
    Nom : ALGOANT2.jpg
Affichages : 207
Taille : 241,1 Ko

    on reste toujours <1 et >-1
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  25. #55
    vinvin69

    Re : - Arduino commandé par Joystick -

    Re à vous,
    Donc, l'ADC, c'est comme le CAN ?
    Concernant les tableaux, le #54 me semble être le bon. Non ? Mais comment va-t-on gérer au niveau du code, les relais et le PWM envoyé ?
    Merci bien,

    Vincent A.

  26. #56
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Citation Envoyé par vinvin69 Voir le message
    Re à vous,
    Donc, l'ADC, c'est comme le CAN ?
    oui, le premier acronyme c'est en anglais. Le second, en français.
    Concernant les tableaux, le #54 me semble être le bon. Non ? Mais comment va-t-on gérer au niveau du code, les relais et le PWM envoyé ?
    Merci bien,

    Vincent A.
    Oui, l'algorithme d'Antoane me paraît excellent.
    En position avant et arrière toute, les 2 moteurs sont à fond
    En position à gauche ou à droite toute, les 2 moteurs sont à fond, dans des directions opposées.
    Avec le manche à balai à fond en diagonale, sur les 4 points, c'est aussi ce qu'on recherchait.
    Avec le manche en position neutre, on a bien zéro.

    Au niveau du code, il faut:
    1) convertir la tension des deux potentiomètres en valeurs numériques.
    2) calculer y + x. Saturer à 1.
    3) Utiliser la valeur trouvée pour déterminer le duty cycle du PWM destinée au moteur G
    4)Si la valeur trouvée est positive, mettre la sortie qui contrôle le relais G à 1
    Si la valeur trouvée est négative, mettre la sortie qui contrôle le relais G à 0
    5) calculer y - x. Saturer à 1.
    6) Utiliser la valeur trouvée pour déterminer le duty cycle du PWM destinée au moteur D
    7) Si la valeur trouvée est positive, mettre la sortie qui contrôle le relais D à 1
    Si la valeur trouvée est négative, mettre la sortie qui contrôle le relais D à 0
    8) retour à 1)

    A part ça, je lis sur la page:
    http://fr.openclassrooms.com/science...s-de-l-arduino
    que le convertisseur analogique de l'Arduino ne peut recevoir à son entrée que des tensions comprises entre 0V et +5V.
    Et que sa précision est de 4.883mV

    Donc comme on a vu que si le joystick est alimenté en 5V, on a une excursion de tension de 750 mV, on aura 153 pas, moitié à gauche, moitié à droite. 76 pas de chaque côté, ça me semble pas mal. Presque 4 pas par degré de rotation.
    On va donc pouvoir alimenter le joystick avec le 5 V stabilisé fourni par l'Arduino. ça simplifie.

    Je retourne à la lecture des pages de cet excellent tuto sur l'Arduino. Et je les enregistre sur mon disque dur comme référence future.
    Merci à Arsène de Gallium. Si tu as d'autres références de cette qualité, merci de nous en faire profiter!

    Bonne soirée, amicalement,

    Yvan
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  27. #57
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    J'ai dû m'absenter une bonne partie de la journéeet je viens enfin de trouver le temps de lire le code d'Antoane. Magistral, ça devrait être assez directement adaptable à l'Arduino.
    Bien trouvé, l'astuce du claquement du relais pour avertir l'utilisateur de ce qui se passe!

    Je vais me plonger dans l'étude du tuto et m'acheter un clone d'Arduino. A bientôt et merci à tous.

    Amicalement,

    Yvan
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  28. #58
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Alors voilà comment on convertit une tension d'entrée en un nombre utilisable par l'Arduino:

    http://fr.openclassrooms.com/science...s-de-l-arduino

    Lire la tension sur une broche analogique avec la fonction analogRead(pin)

    Cette fonction va nous permettre de lire la valeur lue sur une entrée analogique de l'Arduino. Elle prend un argument et retourne la valeur lue :

    L'argument est le numéro de l'entrée analogique à lire (explication ci-dessous)
    La valeur retournée (un int) sera le résultat de la conversion analogique->numérique
    Sur une carte Arduino Uno, on retrouve 6 CAN. Ils se trouvent tous du même côté de la carte, là où est écrit "Analog IN" :

    La fonction retourne une valeur entre 0 et 1023. Cette valeur est l'image de la tension mesurée, elle-même comprise entre 0V et +5V. Nous avons ensuite déterminé que le pas du convertisseur était de 4.88mV par unité.

    En multipliant le nombre retourné par 4,88, on obtient la tension en mV présente sur l'entrée.


    Et voici comment générer la PWM:

    http://fr.openclassrooms.com/science...-enfin-presque

    La fréquence de la PWM est fixe, elle ne varie pas au cours du temps. Pour votre carte Arduino elle est de environ 490Hz.

    la fonction permettant de réaliser le signal PWM : analogWrite(). Elle prend deux arguments :

    Le premier est le numéro de la broche où l'on veut générer la PWM. Il peut s'agir de D3, D5, D6, D9, D10, D11.

    Le second argument représente la valeur du rapport cyclique à appliquer. Malheureusement on n'exprime pas cette valeur en pourcentage, mais avec un nombre entier compris entre 0 et 255
    Si le premier argument va de soi, le second mérite quelques précisions. Le rapport cyclique s'exprime de 0 à 100 % en temps normal. Cependant, dans cette fonction il s'exprimera de 0 à 255 (sur 8 bits). Ainsi, pour un rapport cyclique de 0% nous enverrons la valeur 0, pour un rapport de 50% on enverra 127 et pour 100% ce sera 255. Les autres valeurs sont bien entendu considérées de manière proportionnelle entre les deux. Il vous faudra faire un petit calcul pour savoir quel est le pourcentage du rapport cyclique plutôt que l'argument passé dans la fonction.

    Bon, je m'aperçois que le tuto fait 326 pages, mais qu'il n'est pas complet. Il manque notamment la partie où l'on est censé commander des moteurs. Mais ça ne fait rien, on a déjà tout ce qu'i faut plus haut dans ce fil.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  29. #59
    Antoane
    Responsable technique

    Re : - Arduino commandé par Joystick -

    Bonjour,
    Deux détails :
    - le µC ne contient qu'un unique CAN, précédé d'un multiplexeur analogique, ce qui lui permet de numériser les 6 entrée analogiques l'une après l'autre.
    - la fréquence du PWM peut être modifiée, en modifiant la avleur du prédiviseur (prescaler). Il y a une limite basse (fixée par la dimension physique du compteur (=diviseur de fréquence) servant à générer le signal) et une limite haute (fixée par la résolution voulue pour le PWM et la fréquence d'horloge).
    http://www.atmel.com/Images/doc8161.pdf
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  30. #60
    Yvan_Delaserge

    Re : - Arduino commandé par Joystick -

    Hello Antoane.

    Tu veux dire le system clock prescaler? (page 35 de la datasheet)
    Nom : PRESCALE.gif
Affichages : 143
Taille : 15,6 Ko

    Donc si on veut accélérer la fréquence du signal MLI, il faudrait réduire la valeur du prédiviseur...Je me demande si le soft de programmation de l'Arduino le permet.

    Cela veut dire qu'il faut accélerer le cadencement de tout le ucontrôleur, alors?
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

Page 2 sur 8 PremièrePremière 2 DernièreDernière

Discussions similaires

  1. Projet 2 moteurs cc 1 joystick arduino rev3
    Par Tranber72 dans le forum Électronique
    Réponses: 45
    Dernier message: 11/12/2014, 18h20
  2. [URGENT !!!] Programmation d'un robot M3Pi et un Joystick via Arduino
    Par invitebb4a2db9 dans le forum Électronique
    Réponses: 5
    Dernier message: 10/04/2013, 16h22
  3. Moteur pas à pas commandé par un joystick
    Par invite4fbd11ae dans le forum Électronique
    Réponses: 19
    Dernier message: 05/05/2008, 16h39
  4. Commande par Joystick
    Par invitec82136c4 dans le forum Électronique
    Réponses: 1
    Dernier message: 27/04/2006, 20h59
  5. commande de 2 moteurs par joystick
    Par invite9fce355b dans le forum Électronique
    Réponses: 3
    Dernier message: 17/09/2005, 10h49
Découvrez nos comparatifs produits sur l'informatique et les technologies.