je n’arrive pas à commander ce servo moteur à rotation continue comme je le voudrais
voici mon code
#include <Servo.h>
Servo myservo;
void setup()
{
myservo.attach(9); //pin du servo moteur
myservo.write(10); //Vitesse lente
delay(5000); //attente rotation du moteur pendant 5s
myservo.detach(); //arret du moteur pendant 10s
delay(10000);
myservo.write(100); //Changement de vitesse
myservo.attach(9); //re démarrage du moteur pendant 3s
delay(3000);
myservo.detach(); //arret du moteur
}
//Par défaut le SM-S4303R est paramétré pour une vitesse de 1.5 ms par pas.
void loop() {
}
je n’arrive pas à bien contrôler la vitesse du moteur
et encore moins à lui faire changer de sens
je n’arrive pas changer le fréquence d’impulsion pour le faire tourner dans le sens inverse des aiguilles d’une montre
j’ai essayé d’utiliser la commande analogWrite(9,127) mais sans succès
j’utilise un Nano et le moteur est connecté sur la pin 9
mon but est de le faire tourner 5 secondes en marche avant avec vitesse contrôlée
une pause
puis mon but est de le faire tourner 5 secondes en marche arrière avec vitesse contrôlée
Bonjour
non ce moteur ne fonctionne pas comme cela
en fait,
si la fréquence des impulsions est supérieur à 2mls il tourne dans un sens
inférieur, dans l'autre
le .write sert pour la vitesse
je pensais que pour changer la fréquence, je devais utiliser la commande analogWrite, mais cela ne change rien
et de plus, je ne gère pas la vitesse aussi finement que je le souhaiterais
existe t-il d'autre moteur ?
je recherche à faire
le moteur tourne dans un sens pendant x secondes, puis après un calcul, il doit retourner à sa position initiale
donc tourner dans l'autre sens pendant le même temps
il me faut un moteur puissant, avec une force de 4-5 Kg, comme celui-ci
Salut,
Comment a tu fait le choix de ce servo moteur ??, car il semble être sous dimensionné pour le besoin, li faudrait savoir quel couple mini doit avoir ton moteur pour ensuite faire un choix de composant.
Tu parles d'une force de 4 à 5 kg, mais elle s'applique à quelle distance de l'axe de rotation du moteur, cela va permettre de déterminer le couple mini à fournir , un couple ou momment s'exprime en m.N, il traduit le produit d'une distance par une force.
Donc il faur que tu calcul ce couple et ensuite tu pourras choisir ton moteur.
Bonjour
le couple est bon
il va devoir faire coulisser une plaque d'alu de 500-600Gr sur un raille, donc pas de problème
le hic est que je n'arrive pas à le faire tourner en sens inverse >:(
Bonjour à tous et merci pour vos réponses
mais j'avoue que je seiche
j'utilise la biblio servo, mais dans sa doc je ne trouve pas comment changer la largeur d’impulsion
je pensais que c'était avec analogWrite, mais cela ne change rien (je suis sur la pin 9)
j'ai fait un nombre incalculable d'essais et il tourne toujours dans le même sens
en suivant vos conseils, j'ai fait ce bout de code
void setup() {
// put your setup code here, to run once:
pinMode(9,OUTPUT);
analogWrite(9,10); //Activer une modulation a 50% (127/255) sur la broche 9
delay(3000); //attente rotation du moteur pendant 3s
digitalWrite(9,LOW); //Arreter du moteur
delay(5000); //attente 5s
analogWrite(9,150); //Activer une modulation a 50% (127/255) sur la broche 9
delay(3000); //attente rotation du moteur pendant 3s
digitalWrite(9,LOW); //Arreter du moteur
}
void loop() {
// put your main code here, to run repeatedly:
}
et ca marche
il va bien dans les deux sens, c'est super je m'approche du but
par contre, je ne maitrise plus la vitesse
mais j'avance
Bonjour
grâce à votre aide, ça marche
il fallait que je regle le point 0 du servo moteur avec le potentiomètre (il est à fond en bas)
puis que je joue avec les valeurs pour la vitesse
voici le petit bout de code de test
boolean Nuit = 0;
boolean Jour = 0;
void setup() {
Serial.begin(9600);
pinMode(9,OUTPUT);
}
void loop() {
int Lum = analogRead(A0);
Serial.println(Lum);
if (Lum > 1000)
{
if (Nuit == 0)
{
//On est de nuit et on ferme
analogWrite(9,121); //Activer une modulation ce qui ajuste le sens et la vitesse point 0 - 127
delay(4000); //attente rotation du moteur pendant 4s
analogWrite(9,LOW); //Arreter le moteur
Serial.println("Fermeture de la porte");
Nuit = 1;
}
else
{
//On est de nuit porte déjà fermée
Serial.println("Nuit sans action");
}
Jour = 0;
}
else
{
if (Jour ==0)
{
//On est de jour et on ouvre
analogWrite(9,167); //Activer une modulation ce qui ajuste le sens et la vitesse point 127 - 255
delay(4000); //attente rotation du moteur pendant 4s
analogWrite(9,LOW); //Arreter la modulation
Serial.println("Ouverture de la porte");
Jour = 1;
}
else
{
//On est de jour et porte déjà ouverte
Serial.println("Jour sans action");
}
Nuit = 0;
}
delay(500);
}