Bonjours/soir il y a quelques jours j'ai fais l'acquisition d'un kit d'arduino, après avoir appris à faire clignoter des LED j'ai voulut faire fonctionné le petit servo SG90 fournit dans le kit.
Mais après des 3 heures d'essais rien à faire le servo ne bouge toujours pas.
Pourtant le montage est simple, le Marron avec Masse, le Rouge avec le +5V et le Orange avec le pin choisi.
J'ai vérifié et je possède bien la bibliothèque Servo, ma carte est une UNO R3.
J'ai essayé moult codes trouvé sur différents sites, des exemples d'arduino mais rien, le moteur bourdonne juste faiblement quand il est alimenté mais il reste immobile.
//boucle principale
void loop() {
for (int angle=0;angle<=180;angle+=20){
setAngle(angle);
}
}
void setAngle(int a){
int duree=map(a,0,179,1000,2000);
digitalWrite(pinServo,LOW);
for (int t=0;t<300;t++){
digitalWrite(pinServo,HIGH);
delayMicroseconds(duree);
digitalWrite(pinServo,LOW);
delayMicroseconds(periode-duree);
}
}
Le servo émet un petit bruit qui suis la période l'impulsion mais ne bouge pas.
J'ai essayé avec un alim externe et le résultat est malheureusement le même.
Si je comprend bien tu veux créer un signal pwm en manuel?
const unsigned int _PERIODE=20000;
const unsigned char _PIN_SERVO=8;
void setup()
{
pinMode(_PIN_SERVO,OUTPUT);
digitalWrite(_PIN_SERVO,LOW);
}
//boucle principale
void loop()
{
for (unsigned char angle=0;angle<=180;angle+=20)
{
setAngle(angle);
}
}
void setAngle(unsigned char a)
{
unsigned int duree=map(a,0,179,1000,2000);
digitalWrite(_PIN_SERVO,LOW);
for (unsigned int t=0;t<300;t++)
{
digitalWrite(_PIN_SERVO,HIGH);
delayMicroseconds(duree);
digitalWrite(_PIN_SERVO,LOW);
delayMicroseconds(_PERIODE-duree);
}
}
Ou bien tu veux créer des délais pour faire une "animation de servo"?
Dans tous les cas tu n'utilises pas la bibliothèque servo que tu as ajouté à ton projet.
Le pin est le 8 j'ai bien changé par rapport au montage
Le but de mon projet est juste de faire fonctionner le servo, j'ai essayé plusieurs codes différents et aucuns ne fait bouger le servo d'un poil. C'est pour cela que j'ai créer ce post.
Merci pour la correction Pierre, j'ai remplacé mais rien a faire le servo bourdonne toujours mais ne bouge pas
Si vous avez une idée de petit code qui serai censé le faire fonctionner n'hésitez pas j'essayerai
J'ai pris conscience de votre problème en le téléchargeant et en l’exécutant sur un UNO et en visualisant les signaux sur un oscillo. Avec votre programme, la période du signal était scotchée à 6.5 mS alors que le servo demande une période de 20 mS. Avec la modification que j'ai apportée, les signaux sont corrects ; la période est bien de 20 mS et le niveau haut varie bien, toutes les 6 secondes de 1 à 2 mS.
En conséquence, si cela ne fonctionne pas, le problème est sûrement matériel :
Alimentation trop faible : utiliser une alimentation extérieure,
sylvainmahe:
C'est normal que ça ne marche pas, dans ton code tu n'utilises pas la bibliothèque servo... ...que tu dis pourtant avoir ajouté à ton projet.
Il peut toujours essayer avec la bibliothèque "servo". Pour autant, je ne pense pas que cela solutionne le problème car, s'il a intégré la modif suggérée, le signal est correct et donc cela devrait tourner.