Go Down

Topic: Servomoteur 6 fils (Read 1 time) previous topic - next topic

Indox

Bonjour,
Je modifie une voiture rc de marque nikko.
Le servomoteur est composé de 6 fils.
Ma question : comment utiliser ce genre de servomoteur avec un motor shield?
Merci.

aligote

Je modifie une voiture rc de marque nikko.
Le servomoteur est composé de 6 fils.
Ma question : comment utiliser ce genre de servomoteur avec un motor shield?

Bonsoir,

Une question préalable : il s'agit bien d'un servomoteur ? avec "6fils" pour la commande électrique et un palonnier pour la commande mécanique ?

Serge .D

kamill

Bonjour,

Voir ici pour les servo Nikko

Indox

Bonjour,

Voir ici pour les servo Nikko
Merci Kamill. Mais je ne m'y connais pas trop en électronique je suis juste un bidouilleur...
Un peu plus d'explication svp. Merci.

aligote

#4
Oct 17, 2016, 07:56 pm Last Edit: Oct 17, 2016, 08:07 pm by aligote
Voir ici pour les servo Nikko
Bravo. Tout y est dit.
Dans un servo ordinaire(3 fils : le - le + et le signal de commande) le signal de commande est exploité par une platine électronique interne au servo qui se charge de piloter le moteur à partir de l'information de commande disponible sur le fil "signal".
Dans ce cas l'arduino n'a qu'a se charger d'élaborer le signal de commande. (PWM 1-2ms période vers 20 ms)

Visiblement pour un servo Nikko, il faudra  que l'arduino lise la position du potentiomètre et aussi pilote lui même le moteur.

Serge .D

Indox

Merci. Mais concrètement, comment le brancher sur ce motor shield:Motor-Shield?

kamill


Forthman

En fait c'est un servo sans toute la parti "intelligente" en fait ^^

Alain46

Attention !!!

Dans le lien Servo moteur Nikko piloté par Arduino

Il indique de connecter les 2 bornes du potentiomètre sur l'alimentation 6V du moteur et de connecteur le curseur du potentiomètre sur une entrée analogique.

Il y a un grand risque d'envoyer du 6V sur l'entrée analogique dans le cas où le potentiomètre serait en butée en fin de course. Et du 6V sur un entrée analogique, les cartes Arduino n'aiment pas du tout.

Il vaut mieux connecter les bornes du potentiomètre à l'alimentation 5V de la carte Arduino
Un programme qui se compile sans erreur n'est pas forcément un programme qui fonctionne.

Indox

Dsl je ne.comprends pas. Je vais essayer d'aller voir un prof de technologie...

Indox

Bonjour,

Alors voici où j'en suis avec ce servomoteur Nikko à 6 fils.

j'ai branché comme conseillé les extrémités du potentiomètre de ce servo sur le 5V et ground de l'Arduino. Ensuite j'ai branché le moteur du servo sur le "M1" du moteur shield (dk electronics).

Voici le code :
Code: [Select]
#include <AFMotor.h>

AF_DCMotor motor(1);
void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
  motor.setSpeed(80);
  motor.run(RELEASE);
}

/*fonction placement servomoteur*/
void roues(int pos_voulue)
  {
    int pos_act;
    pos_act=analogRead(A0);
   
    if (pos_act >pos_voulue)
    {
      do
      {
         motor.run(BACKWARD);
         pos_act=analogRead(A0);
      }while (pos_act!=pos_voulue);
     
    }
     
     else if  (pos_act < pos_voulue)
     {
       do
      {
         motor.run(FORWARD);
         pos_act=analogRead(A0);
      }while (pos_act!=pos_voulue);
     }
     pos_act=analogRead(A0);
     if (pos_act == pos_voulue)
     {
       motor.run(RELEASE);
       }
   
    }

void loop() {
  roues(800);
  Serial.println(analogRead(A0));

 
}


Problème: le servomoteur se déplace bien là où il faut (on peut lire la bonne position sur le Serial) mais le servo ne s'arrête pas complètement une fois arrivé. Il continue à faire des petits mouvements.

Merci pour votre aide.

aligote

............

Problème: le servomoteur se déplace bien là où il faut (on peut lire la bonne position sur le Serial) mais le servo ne s'arrête pas complètement une fois arrivé. Il continue à faire des petits mouvements.

............
Bonsoir,

Je pense que ce comportement est normal.

On teste la position pour savoir si elle est égale à la position souhaitée.
Le déplacement est engagé et la position atteinte puis légèrement dépassée à cause de l'inertie mécanique.
Un mouvement inverse (recul) est alors démarré et ainsi de suite.

Je pense qu'il faudrait prévoir une zone morte de petite taille autour de la position recherchée.

Serge .D

Indox

Bonsoir,

Je pense que ce comportement est normal.

On teste la position pour savoir si elle est égale à la position souhaitée.
Le déplacement est engagé et la position atteinte puis légèrement dépassée à cause de l'inertie mécanique.
Un mouvement inverse (recul) est alors démarré et ainsi de suite.

Je pense qu'il faudrait prévoir une zone morte de petite taille autour de la position recherchée.

Serge .D
Merci Serge

Indox

#13
Oct 26, 2016, 07:54 pm Last Edit: Oct 26, 2016, 08:02 pm by Indox
Bonsoir,

Pour clôturer ce sujet, voici le code permettant de faire l'asservissement avec le moteur du servomoteur de la voiture Nikko.
Source:Source
Code: [Select]
#include <AFMotor.h>

AF_DCMotor motor(1);// crée un moteur sur les pin #2 du shield moteur, fréquence (64KHzpwm)
int potpin = 0; //pin analogique A0 pour le potentiometre
int val; // variable pour la lecture de la valeur analogique
int val2;
int valeurcible; // variable a changer pour changer l'angle du moteur (peut se coupler a un autrepotar)
int hyseteris =10; // 1 donne des resultats tres precis et stoppe déjà les tremblement moteur
void setup()
{
motor.setSpeed(255); // vitesse du moteur de 1 a 255
valeurcible =22;
}
void loop()
{
val = analogRead(potpin); // lis la valeur du potentiometre entre 0 et 1023
val2 = map(val, 181, 860, 1, 180); // convertis en 0° a 280°
if (valeurcible < (val2 - hyseteris)) { motor.run(BACKWARD);} //moteur avance
else if (valeurcible > (val2 + hyseteris)) { motor.run(FORWARD);} //moteur recule
else {motor.run(RELEASE);}//moteur stoppe
}

Go Up