LOCODUINO
Parlons Arduino => Composants => Discussion démarrée par: Patrice59 le janvier 08, 2017, 05:22:21 pm
-
Bonjour a tous
Je n'arrive pas a régler le problème suivant: Des la mise sous tension le servomoteur donne un accoup avec ou sans le fil de commande branché que ce soit avec un servo faller 180726 ou reely S-0403 c'est pareille . Par contre j'ai essaye un tower pro sg90 et là pas de problème sauf qu'il est trop gros. Les servos sont commandés par une UNO et le tout pilote un PN qui n'apprecie pas ces accoups .Quelque soit la position du servo le problème est là.
Y a t-il un moyen de parer au probleme ??? ou faut il passer impérativement par le module faller 180725 ??
-
Bonjour,
Je pense que la solution existe et elle est logicielle à priori.
Mais je ne suis pas chez moi et transmettrai dans 2 semaines environ ce que j'ai trouvé si ça marche de façon concluante.
En attendant je pense que d'autres modélistes pourront relever le défi !
Amicalement
-
Bonsoir Patrice,
J'ai eu ce cas et l'ai résolu, tu peux le voir dans "vos projets" et dans "Commande de signaux mécaniques - Servomoteurs".
Bonne soirée
Philippe
-
Bonsoir phB22560
J' ai essayé ton prog +resistance pulldown 10k
Les servos s'initialisent et bagottes mais c'est toujours pareil
j'ai essayé avec une alim externe sans arduino, dés que je branche + et - mon copain accoup est là !!!!!
la seul différence entre le reely et le tower pro et que l'un est analogique et l'autre digital(le faller je sais pas)
est-ce important ???
A+
-
Bonjour à tous,
Ce sujet est très intéressant car on y est tous confrontés un jour ou l'autre.
J'ai l'impression que certains servos bougent dès que l'alim 5v est appliquée même en l'absence de signal PWM.
Comme ce signal PWM n'arrive qu'après l'initialisation du bootloader jusqu'au SETUP, il s'écoule une bonne seconde voire plus avant que le servo prenne sa place.
Quelqu'un a-t-il regardé si l'ordre des séquences d'initialisation du servo à de l'importance ?
Merci d'avance.
-
Bonsoir phB22560
J' ai essayé ton prog +resistance pulldown 10k
Les servos s'initialisent et bagottes mais c'est toujours pareil
j'ai essayé avec une alim externe sans arduino, dés que je branche + et - mon copain accoup est là !!!!!
la seul différence entre le reely et le tower pro et que l'un est analogique et l'autre digital(le faller je sais pas)
est-ce important ???
A+
Dans le setup, tu fais varier les valeurs d'angle max et mini.
Au lieu de 900, tu places 700.
Au lieu de +800, tu places +500.
Suivant les servos, on n'a pas le même résultat.
-
J'utilise la bibliothèque Servo intégrée.
Comme il y a beaucoup d'aiguilles (ce n'est pas mon réseau), j'ai créé des objets intégrant le servo, les 2 leds qui affichent sa position et l'inter de commande. Comme cela va au delà du sujet, j'ai mis cette classe à la fin.
Mais revenons à nos moutons !
J'ai essayé d'attacher l'objet servo à sa pin après l'initialisation de sa position :
void InitServo() {
objetServo.writeMicroseconds(posInitiatle); // position initiale
objetServo.attach(pinServo);
}
Mais n'étant pas sur place, je vous donnerai les résultats à mon retour.
Pour ceux que cela interesse, voici la classe complète
class CommandeAiguille {
Servo objetServo;
Bounce objetInter;
byte etatAutomate; // 0 fixe, 1 bouge
int etatInter; // O directe, 1 dévié
int taillePlage; // pas utilisé pour le moment
int posMin; // position droite
int posMax; // position déviée
int posCourante; // posotion courante
int delta; // saut de position = pas
int pinServo;
int pinInter;
int pinLedDirecte;
int pinLedDeviee;
unsigned long tempo; // pour l'automate
public:
CommandeAiguille() { // constructeur
etatAutomate = 0;
}
void SetpinServo(int p) { // définir la pin Servo
pinServo = p;
}
void SetpinInter(int p) { // définir la pin Inter
pinInter = p;
}
void SetpinLedDirecte(int p) { // définir la pin led
pinLedDirecte = p;
}
void SetpinLedDeviee(int p) { // définir la pin led
pinLedDeviee = p;
}
void SetPosMinMax (int pm, int PM) { //définir les butées
posMin = pm;
posMax = PM;
}
void InitCommandeAiguille() { // initialisations
pinMode(pinInter,INPUT_PULLUP);
pinMode(pinLedDirecte,OUTPUT);
pinMode(pinLedDeviee,OUTPUT);
objetInter.attach(pinInter);
objetInter.interval(50);
etatInter = digitalRead(pinInter);
digitalWrite(pinLedDirecte, !etatInter);
digitalWrite(pinLedDeviee, etatInter);
if (etatInter) posCourante = posMin; else posCourante = posMax;
objetServo.writeMicroseconds(posCourante); // position initiale en fonction de l'inter
objetServo.attach(pinServo); // attaches the servo on servo_pin to the servo object
}
void InterUpdate() { // test de l'inter
if (objetInter.update( )) { // 1 si changement sinon 0
objetServo.attach(pinServo);
etatInter = objetInter.read();
digitalWrite(pinLedDirecte, !etatInter);
digitalWrite(pinLedDeviee, etatInter);
//objetServo.attach(pinServo);
if (etatInter==HIGH) {
delta = -5; // position passe à droite
} else {
delta = +5; // position passe à devié
}
etatAutomate = 1; // en mouvement
tempo = millis();
}
}
void ServoUpdate() { // mouvement du servo
if (etatAutomate == 1) {
if ((tempo+pas) < millis()) { // fin du pas de tempo
posCourante = posCourante + delta;
objetServo.writeMicroseconds(posCourante);
if ((posCourante <= posMin) || (posCourante >= posMax)) { // arret
etatAutomate = 0;
//objetServo.detach();
} else {
tempo = millis();
}
}
}
}
}; // fin de la classe CommandeAiguille
-
Je viens de reprendre le sketch.
Tout fonctionne et pas d'accoup.
Je n'ai même pas mis de résistance de 10k entre le fil blanc de commande du servo et la masse.
J'ai ajouté quelques commentaires et je te redonne le point ino
-
Bonjour,
Il faut mettre une résistance de 10kΩ entre le signal de PWM du servo et l'alimentation du servo (pas la masse, le +5V)
-
Bonsoir à tous
Ca y est :D
ca va beaucoup mieux avec la resistance au +5v
La solution à Jean-Luc est nikel .
un grand merci de partager vos connaissances
Amicalement