Parlons Arduino > Composants
à-coup servomoteur
PhB22:
--- Citation de: Patrice59 le janvier 09, 2017, 09:36:14 pm ---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+
--- Fin de citation ---
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.
Dominique:
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 :
--- Code: --- void InitServo() {
objetServo.writeMicroseconds(posInitiatle); // position initiale
objetServo.attach(pinServo);
}
--- Fin du code ---
Mais n'étant pas sur place, je vous donnerai les résultats à mon retour.
Pour ceux que cela interesse, voici la classe complète
--- Code: ---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
--- Fin du code ---
PhB22:
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
Jean-Luc:
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)
Patrice59:
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
Navigation
[*] Page précédente
Utiliser la version classique