Aller au contenu


Photo
- - - - -

Problème temps de réaction Hc-sr04 (résolu!)


  • Veuillez vous connecter pour répondre
15 réponses à ce sujet

#1 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 09 août 2013 - 01:43

J'ai des problèmes de temps de réaction sur mon robot et après des recherches, il s'agit des capteurs ultrason. J'en ai 3 à l'avant et chacun prend 200ms d'exécution, c'est beaucoup trop long, sachant que le datasheet annonce 38ms de temps de réaction sans obstacle. J'utilise la librairie ultrason mais pas moyen de trouver la solution...
Auriez vous une idée à me soumettre? Bon week-end @tous!

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 09 août 2013 - 06:23

Hum regarde ce que fait la librairie ... peut être que pour avoir une mesure plus fiable elle ordonne plusieurs prise de mesures consécutives et te ressort une moyenne ou un truc du genre ...

Sinon c'est peut être le temps de traitement des données qui est long ... trop de switch case avec les cas t'intéressant pour la réactivité à la fin ... Je ne peux pas te dire grand chose de plus ...

Bon courage !

Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 09 août 2013 - 10:41

Ah ui pas faux! Il faut que j'arrive à décortiquer la librairie pour savoir ce qu'elle contient!

J'ai une autre hypothese que je vais vérifier, c'est la consomation au sein de l'arduino! Si elle est trop élevé, peut être que si les sensor ultrasonic sont sous alimentés leur temps de réaction augmente... Pourquoi pas... À tester....

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#4 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 11 août 2013 - 05:46

alors je suis allé voir la librairie...

/*
  Ultrasonic.h - Library for HR-SC04 Ultrasonic Ranging Module.
  Created by ITead studio. Alex, Apr 20, 2010.
  iteadstudio.com
*/


#ifndef Ultrasonic_h
#define Ultrasonic_h

#include "arduino.h"

#define CM 1
#define INC 0

class Ultrasonic
{
  public:
    Ultrasonic(int TP, int EP);
    long Timing();
    long Ranging(int sys);

    private:
    int Trig_pin;
    int Echo_pin;
    long  duration,distacne_cm,distance_inc;
    
};

#endif

et

/*
  Ultrasonic.cpp - Library for HC-SR04 Ultrasonic Ranging Module.library

  Created by ITead studio. Apr 20, 2010.
  iteadstudio.com
*/

#include "arduino.h"
#include "Ultrasonic.h"

Ultrasonic::Ultrasonic(int TP, int EP)
{
   pinMode(TP,OUTPUT);
   pinMode(EP,INPUT);
   Trig_pin=TP;
   Echo_pin=EP;
}

long Ultrasonic::Timing()
{
  digitalWrite(Trig_pin, LOW);
  delayMicroseconds(2);
  digitalWrite(Trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig_pin, LOW);
  duration = pulseIn(Echo_pin,HIGH);
  return duration;
}

long Ultrasonic::Ranging(int sys)
{
  Timing();
  distacne_cm = duration /29 / 2 ;
  distance_inc = duration / 74 / 2;
  if (sys)
  return distacne_cm;
  else
  return distance_inc;
}


avec le code pour le programme suivant...

#include "Ultrasonic.h"

#define  TRIG_PIN  8
#define  ECHO_PIN  9

Ultrasonic OurModule(TRIG_PIN, ECHO_PIN);



void setup()  
{
  Serial.begin(9600);


}


void loop()   
{
  Serial.println(millis());			//pour tester le temps de la loop
  
  Serial.print(OurModule.Ranging(CM));		//lecture distance
}


Le problème de temps de réaction est au moment où il n'y a pas d'obstacle devant le sonar...
Il met 200ms à acquérir la distance...

Peut on modifier la librairie pour que le capteur ne mesure pas jusque 5mètres, j'ai juste besoin de 50cm de mesure, ou est ce que c'est propre au capteur.? dans la datasheet, ils disent que le temps de retour d'info en cas de non obstacle est de 38ms... j'en suis loin...

J'ai 3 capteurs en façade du robot, donc 200ms x 3 = 600ms c'est beaucoup trop long comme temps de réaction...

Auriez vous une idée à me proposer.???

Merci!!

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#5 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 11 août 2013 - 05:56

Tu es certain que ça n'est pas le "serial" qui ralentit ton programme? Surtout à un débit aussi faible (9600bds).

Sinon, est-ce que tu obtiens bien des informations cohérentes en terme de distance mesurée par le sonar, en faisant tourner ton programme? Parce que dans l'opération "pulseIn" dans la librairie, je ne vois pas de "timeout". Donc si l'impulsion dure trop longtemps, ou alors qu'il n'y a pas du tout d'impulsion retour (capteur mal branché ou grillé), ton programme va attendre inutilement.

Pour finir, si tu as accès à un oscilloscope (ou un analyseur logique), tu pourras voir ce qu'il se passe réellement.

Leon.

BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#6 lordcuty

lordcuty

    Habitué

  • Membres
  • PipPip
  • 298 messages

Posté 11 août 2013 - 09:14

regarde cette librairie:
http://code.google.com/p/arduino-new-ping/

#7 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 12 août 2013 - 08:43

Tu es certain que ça n'est pas le "serial" qui ralentit ton programme? Surtout à un débit aussi faible (9600bds).

Sinon, est-ce que tu obtiens bien des informations cohérentes en terme de distance mesurée par le sonar, en faisant tourner ton programme?



bonjour, j'ai pensé à Serial qui "prendrai" du temps. mais comment mesurer le temps de réaction sans retour d'information avec Serial.?

Coté cohérence, le capteur marche très bien!...

creusage de tête !! hi hi hi !!

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#8 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 12 août 2013 - 08:49

regarde cette librairie:
http://code.google.com/p/arduino-new-ping/



AH merci!! ça m'a l'air d’être en plein dans le sujet!! mais comment à tu trouvé cette page, j'ai passé des heures à chercher sur le net avant de poster!! Dommage, je pars en vacance dans 2 h et je n'ai pas de place pour emmené l'arduino dans mes valises!!! Il va falloir que je patiente !!! ou alors il faut que j'arrive à m'éclipter 15 minutes ni vu ni connu!!! lol

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#9 Liquidhuk

Liquidhuk

    Membre

  • Membres
  • 15 messages

Posté 15 août 2013 - 10:05

bonjour, j'ai pensé à Serial qui "prendrai" du temps. mais comment mesurer le temps de réaction sans retour d'information avec Serial.?


Tu pourrais relier Rx et Tx et voir le temps qui passe entre l'émission et la réception. Je doute quand même que le baudrate ralentisse tant que ça la communication.

#10 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 15 août 2013 - 10:27

Tu pourrais relier Rx et Tx et voir le temps qui passe entre l'émission et la réception. Je doute quand même que le baudrate ralentisse tant que ça la communication.


J'ai essayé à 115200 bauds est cela n'a rien changé au temps de bouclage du prog.

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................


#11 hmnrobots

hmnrobots

    Membre passionné

  • Membres
  • PipPipPip
  • 316 messages
  • Gender:Male
  • Location:Périphérie Nantes

Posté 15 août 2013 - 11:05

J'ai essayé à 115200 bauds est cela n'a rien changé au temps de bouclage du prog.

En fait la fonction Pulse IN attend la retombée du signal capteur, il faudrait une fonction Pulse IN avec un TIME OUT beaucoup plus faible, le délai est là il me semble
Pardon l'option est dispo :
timeout (optional): the number of microseconds to wait for the pulse to start; default is one second (unsigned long)
avec 20ms ça devrait suffire
Faire simple, c'est déjà bien assez compliqué!
http://hmnrobots.blogspot.fr/

#12 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 15 août 2013 - 11:59

avec 20ms ça devrait suffire

20ms me semble beaucoup trop faible. Il faut regarder la doc du capteur. 20ms pour l'aller-retour, c'est 10ms aller, soit ~3m, sachant que les capteurs peuvent mesurer 2 fois plus. De plus, dans la doc des capteurs US que je connais, ils préconisent (à raison) de ne pas déclencher de nouveau pulse moins de 50 ou 60ms après le précédent. Dans les pièces fermées d'un logement, le pulse du sonar peut subir des échos multiples, donc il faut lui laisser le temps de se disperser complètement avant la nouvelle mesure. 20ms n'est clairement pas assez.

Leon.

BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)


#13 hmnrobots

hmnrobots

    Membre passionné

  • Membres
  • PipPipPip
  • 316 messages
  • Gender:Male
  • Location:Périphérie Nantes

Posté 15 août 2013 - 02:17

3 m devant, à moins que son robot ne soit hyper rapide, ça suffit amplement non ? je descendrai même encore à 1m50) donc inutile d'attendre plus.

mais effectivement il ne faut pas aller lire un autre capteur tout de suite qui pourrait être perturbé par les "restes" du précédent.

Je viens de vérifier la définition de la function PulseIn de l'Arduino (que je ne pratique pas)et du paramètre TimeOut :
timeout (optional): the number of microseconds to wait for the pulse to start; default is one second (unsigned long), donc ce TimeOut ne s'applique qu'au départ de l'impulsion pas à sa durée. Il faut donc ré-écrire une fonction (basée sur millis() je pense) avec un TimeOut sur la durée max de l'impulsion qui fait que au bout de 20ms on abandonne l'écoute en considérant que l'obstacle est trop éloigné
Faire simple, c'est déjà bien assez compliqué!
http://hmnrobots.blogspot.fr/

#14 hmnrobots

hmnrobots

    Membre passionné

  • Membres
  • PipPipPip
  • 316 messages
  • Gender:Male
  • Location:Périphérie Nantes

Posté 15 août 2013 - 02:23

J'ai des problèmes de temps de réaction sur mon robot et après des recherches, il s'agit des capteurs ultrason. J'en ai 3 à l'avant et chacun prend 200ms d'exécution, c'est beaucoup trop long, sachant que le datasheet annonce 38ms de temps de réaction sans obstacle. J'utilise la librairie ultrason mais pas moyen de trouver la solution...
Auriez vous une idée à me soumettre? Bon week-end @tous!

sur la datasheet combien de temps entre la fin de l'implusion de commande et le début de l'impulsion echo?
Faire simple, c'est déjà bien assez compliqué!
http://hmnrobots.blogspot.fr/

#15 hmnrobots

hmnrobots

    Membre passionné

  • Membres
  • PipPipPip
  • 316 messages
  • Gender:Male
  • Location:Périphérie Nantes

Posté 15 août 2013 - 02:27

Désolé Léon je n'avais pas lu que tu avais déjà évoqué la question de la fonction PulseIn et des TimeOut
Faire simple, c'est déjà bien assez compliqué!
http://hmnrobots.blogspot.fr/

#16 bennurre

bennurre

    Habitué

  • Membres
  • PipPip
  • 160 messages
  • Gender:Male

Posté 09 septembre 2013 - 11:55

regarde cette librairie:
http://code.google.com/p/arduino-new-ping/



suite...

alors j'ai fais des tests avec cette nouvelle librairie et effectivement ça marche nikel ! résolution de mon problème !!!
le loop bouclé en 0.6 / 0.8s et là avec cette librairie seulement en 0.15s !!!

Merci encore à tous pour vos commentaires !!!

;-)

...................................................

Mon premier projet arduino...

Blog de ma Tondeuse RC...

...................................................





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users