Problème avec servo 9G

Bonjour les amis,
je viens vous faire-part d’un problème constaté avec l’utilisation de PulseIn()
j’ai essayé ce sketch sur deux Uno différents et aussi avec deux microservos 9g différents ,à chaque fois il y a la même anomalie :
le servo avance par à-coups , par contre si je mets le doigt sur la broche 11 ou même d’autres broches non loin , tout rentre dans l’ordre ! Il suffit même d’approcher le doigt.
Si on met duration =0 ; aux ligne 30 et 48 çà va bien aussi.
Je précise que pour l’instant je n’ai rien installé d’autre que le Uno et le servo, pas de HC-SR04.

Je suis sûr que ce n’est pas un mauvais contact , j’ai aussi essayé de mettre un petit condensateur entre le Pin 11 et la masse( ou le 5v) .

merci d’avance de votre aide.

Preformatted text#include <Servo.h>

const int trigPin = 9;
const int echoPin = 10;

long duration;
int distinCM;

Servo radarServo;

void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
radarServo.attach(11);
}
void loop()
{
for (int i = 0; i <= 180; i++)
{
radarServo.write(i);
delay(50);

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distinCM = duration * 0.034 / 2;

Serial.print(i);
Serial.print("*");
Serial.print(distinCM);
Serial.print("#");
}

for (int i = 180; i >= 0; i--)
{
radarServo.write(i);
delay(50);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration =pulseIn(echoPin, HIGH);
distinCM = duration * 0.034 / 2;

Serial.print(i);
Serial.print("*");
Serial.print(distinCM);
Serial.print("#");

}
}Preformatted text
Je viens de remarquer que la led RX clignote plus ou moins selon que le servo tourne ou s'arrête .

post qui n'est pas dans la bonne section - on écrit en anglais dans les forum généraux ➜ déplacé en français


:warning: La rédaction de votre message ne répond pas aux critères attendus. Il n'aura sans doute pas ou peu de réponses tant que vous n'aurez pas pris en compte et mis en application les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

Salut, J'ai testé ton code et tout fonctionne bien. Soit vous n'avez pas connecté le module à ultrasons, soit le câblage est instable.
Salutations.

bonjour gonpezzi,
merci de l'intérêt porté à mon sujet,
effectivement je n'ai pas encore branché le module ultra-son , je voulais d'abord testé le servo seul
il suffit d'approcher la main des broches digitales sans rien toucher vraiment et ça fonctionne parfaitement !

Normalement, lorsque vous touchez la statique de votre doigt, elle fusionne avec la fonction pulsein (), et lorsque vous supprimez les lignes qui l'appellent, le servo le servo fonctionne bien.
La fonction pulsein () a un long délai d'impulsion entrante, votre doigt émet plusieurs impulsions lorsqu'il touche la broche.

Bonjour gonpezzi,
merci de m'aider mais je n'ai rien compris dans vos explications , je suis désolé.
Je ne comprends pas pourquoi l'utilisation de pulsIn() entraine le besoin de la proximité mon doigt
pour fonctionner !
Comment corriger ce problème ?

Bonjour,

Si tu laisses une pin en entrée en l'air tu récoltes n'importe quoi sur la pin car elle est en haute impédance.
Solution: relier la pin echoPin (10) au GND.

bonjour kamill,
je viens d'essayer çà ne va pas mieux .

C'est surtout que s'il n'y a pas d'impulsions sur la pin 10, pulseIn() attend et sort sur timeout (1 seconde par défaut) ou alors moins s'il y a des parasites (néon, téléphone portable, ...) qui font déclencher avant l'expiration du timeout.
Si tu ne connectes rien à l'entrée, le mieux serait de mettre les lignes avec pulseIn() en commentaire.

bonjour fdufnews,
effectivement , si je mets duration =0 ;et en commentaire le reste de la ligne ,çà va.

je viens d'avoir le HC-SR04 et tout est branché , il n'y a plus de problème.

merci à vous tous , je continue mes essais

Super.

Au passage, tu sembles vouloir faire une espèce de radar. S'il n'y a rien devant ton capteur, pulseIn() va toujours sortir sur timeout. Ce qui veut dire que ta boucle va s'exécuter en 2 x 180 secondes (soit 6 minutes).
On peut passer un 3ème argument a pulseIn qui spécifie justement le timeout. Cela permettrait de raccourcir la durée d'exécution de ta boucle en spécifiant une durée légèrement supérieure à la distance que tu penses ne pas vouloir dépasser.
La doc du HC-SR04 préconise 60ms entre 2 salves. pour éviter d'être perturbé par des échos parasites.
Avec un timeout de 60ms tu passerais de 6 minutes à moins d'une trentaine de secondes.