Capteurs ultrasons et Pulsein()

Bonjour à tous,

Alors voilà le topo : je souhaite utiliser des capteurs ultrasons pour mesurer la vitesse d'un objet à l'aide de l'effet Doppler (principe du radar automobile en fin de compte). J'utilise ces petits capteurs http://www.robot-electronics.co.uk/htm/srf05tech.htm avec une Arduino UNO.

Et le hic c'est que je n'arrive pas à me servir correctement de la fonction Pulsein(). D'après ce que j'ai lu, cette dernière mesure en milliseconde la durée d'un état haut. Le capteur d'après la doc émet 8 créneaux à la fréquence 40kHz. Donc théoriquement si je mesure la durée de l'état haut en réception je peux en déduire la fréquence du signal émis. Si je ne m'abuse vu que Pulsein() mesure la durée d'un seul état haut, cette durée est égale à T/2 et donc on a f facilement.

Cependant ça ne marche pas... (on s'y attendait pas vrai ;) ). Je ne sais pas ce que ne va pas mais si j'émets le signal, que celui-ci est réfléchi sur un objet parfaitement plan et fixe, la fréquence que je mesure n'est pas celle annoncée par le constructeur. Théoriquement elle devrait être de 40kHz car une onde réfléchie conserve sa fréquence mais j'observe qu'elle dépend de la distance de l'objet donc il y a un couac.

Merci d'avoir pris le temps de lire ce topic, En attendant avec impatience vos réactions !! Bonne soirée,

Pour info, voici le programme que j'utilise :

int trig2 = 7;
int echo2 = 6;
long lecture_echo2;
long frequence;

void setup() {
  
  pinMode(trig2, OUTPUT); 
  digitalWrite(trig2, LOW); 
  pinMode(echo2, INPUT);
  Serial.begin(9600);
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(trig2, HIGH); 
  delayMicroseconds(10); 
  digitalWrite(trig2, LOW); 
  lecture_echo2 = pulseIn(echo2, HIGH); 
  frequence = 1/(2*lecture_echo2); 
  delay(500);
  Serial.println(frequence);
}

la fréquence que je mesure n'est pas celle annoncée par le constructeur.

Cela aurait été plus constructif si tu avais donné le résultat de ta mesure :grin: Parce que pour le moment il n'y a que la boule de cristal mais elle est en panne.

Pour info il existe deux fréquences usuelles pour les ultrasons. La plus répandue est le 40 kHz mais il existe anecdotiquement du 20 kHz. Si tu avait un module tournant à 20 kHz je pense que tu l'aurais entendu.

j'avais une "fréquence" oscillant entre 1000 et 100Hz mais ce que je cherche à faire n'est apparemment pas réalisable.

en fait, en continuant mes recherches j'ai compris pourquoi j'ai des mesures mauvaises, le capteur est à l'état haut jusqu'à ce qu'il réceptionne le signal et alors passe à l'état bas Donc je ne peux pas mesurer la fréquence avec ce type de capteurs

Il me faudrait un capteur qui me retourne le signal réellement reçu mais apparemment le mien ne le fait pas car il est pas assez précis. Donc si je résume il me faudrait un capteur bcp plus performant et donc plus cher ^^

Je pense que c'est le principe même du capteur qui est en cause. Il travaille en mode "burst" (en français mode rafale). Le mode rafale oblige à avoir des temps de réaction extrêmement rapide --> avec seulement 10 impulsions émises, en réception tu ne peux pas te permettre d'en perdre dans les périodes transitoires d'établissement du signal.

A condition qu'on puisse mettre en évidence un effet doppler avec du 40 kHz (je n'en sais strictement rien) il faudrait travailler en émission continue et utiliser un discrimininateur comme en fabrique "Mini Circuit Laboratories" mais c'est de l'analogique pur, et pas du plus simple, et cela commence à devenir lourd.

L'information retournée par ces capteurs n'a pas de rapport avec la fréquence du signal émis. C'est une image du temps que met l'onde à parcourir un aller retour entre l'émetteur et la surface réfléchissante. Tu ne peux donc par faire de mesure de vitesse.

On peut ignorer l'information que renvoi ce capteur.

Il y a moyen de prélever le signal de réception en sortie de la chaîne d'amplification là où elle entre dans le micro-contrôleur et de tenter de l'exploiter.

En plus de mes remarques précédentes sur le mode burst, c'est assez chaud parce que le modèle le plus courant (deux gros pavés : un quadruple ampli op et un max232) est à la limite de l'accrochage. Conne***rie : le filtre d'entrée est un coupé coller d'un filtre à 20 kHz d'où le gain monumental pour compenser le manque de niveau et l'instabilité du produit.

Il existe un autre modèle plus cher, avec moins de composant, et sans doute mieux étudié et beaucoup plus stable mais je ne l'ai pas testé.

c'est bien ce qui me semblait, merci à tous !

hum ça se complique alors, mes capteurs sont trop bas de gamme, ils ont un gain presque nul en dehors de leur plage de fonctionnement. Du coup une solution serait d'investir mais le prix est bien plus élevé...

Je vais donc chercher une autre solution pour obtenir ma vitesse ^^ Encore merci

Tout dépend de la vitesse du mobile en question. Connaitre la distance à 2 instants différents permet d'en déduire la vitesse.

j’ai déjà la position mais le problème c’est que je mesure la position d’un objet qui se déplace donc obtenir la vitesse à l’aide des mesures de position, ce n’est pas exceptionnel. ça a plutôt tendance à amplifier l’erreur commise.

Initialement je souhaitais obtenir la vitesse dans le but de pouvoir appliquer un algorithme de prédiction-correction des ces mesures. J’avais donc besoin de mesures qui sont reliées mathématiquement mais qui ne dépendent pas l’une de l’autre.

Donc pour pouvoir calculer la vitesse de l’objet “précisément” il faut d’abord que je regarde comment obtenir la position de l’objet plus précisément (algo de corrections je pense)