Envoyé par
SosoManess
Le capteur prend des mesures toutes les ms (en théorie) et les envoie sur le port série, je récupère ensuite ces valeurs sur python sauf que en 1 seconde je n'ai que 1000 valeurs environ au lieu des ~10 000 théoriques,
vous avez à la fin de votre loop() la commande donc vous demandez une distance toute les 10ms ==> 100 fois par seconde.
donc je ne vois pas trop pourquoi vous en recevez 1000 par seconde ou en espérez 10,000
pour en avoir 1000 par seconde, il faudrait une lecture toutes les millisecondes
pour en avoir 10,000 par seconde, il faudrait une lecture toutes les 100 microsecondes...
Mais votre communication série ne se fait qu'à 115200 bauds. ça veut dire environ 11520 caractères par seconde. Vous pensez afficher la distance en mm suivie de CR/LF puisque vous faites un println(), sous forme d'un float avec 2 chiffre après la virgule. pour un distance moyenne de l'ordre du mètre ça fait 9 caractères par affichage, donc à 115200 bauds vous ne pourrez pas envoyer plus de 1 280 lectures... et comme il faut un peu de temps pour les calculs ce sera sans doute moins que cela.
--> si vous parlez à un PC de l'autre côté, mettez le débit à 500,000 ou 1 million de bauds ça sera toujours mieux si vraiment vous avez bcp de données à envoyer (si le buffer d'émission est plein et que vous appelez print, la fonction devient bloquante en attendant que le buffer ait de la place)
il faut aussi regarder votre formule.
float distance_mm = measure / 2.0 * SOUND_SPEED;
vérifiez la priorité des opérateurs (il serait sans doute bon de prendre l'habitude de mettre des parenthèses si vous ne savez pas)
Enfin quand vous envoyez vos ultra-sons une partie revient au capteur et c'est ce que vous mesurez mais les autres vont continuer à rebondir sur les murs (faire de l'echo) et si vous re-balancez un train d'onde tout va finir pas se mélanger... ==> On recommande généralement d'attendre environ 60ms avant de lancer une nouvelle lecture de distance, le temps que les ondes précédentes et l'echo se soient atténués
donc en pratique vous pourrez faire environ 16 lecture par seconde avec ce composant.
-----
il existe d'autres composants, comme le VL53L0X de ST Microelectronics, c'est un module laser dit de "temps de vol" (Time of Flight) qui utilise un petit laser VCSEL (Vertical Cavity Surface Emitting Laser) à 940 nm et qui fonctionne jusqu'à 2m max. il a un grand frère, le VL53L1X permet de mesurer de 40mm à 4m. il existe aussi le VL6180 si vous travaillez avec des distances de l'ordre de 10/15 cm
On lit les données en I2C qui devrait permettre d'échantillonner sans trop de souci toutes les 20ms voire en travaillant la spec et en utilisant le mode continu peut-être descendre vers 8ms entre 2 échantillons.
enfin en mettant plus de budget (plus de 150€) il existe le "LIDAR-Lite v3HP" qui mesure de 1m à 40m et est capable d'échantillonner à 1KHz. (il y a aussi le "TF03 Long-Distance LiDAR" qui mesure de 10cm à 180m (lire la notice) mais qui ne fait que 100Hz)
certains de ces modules ont une version directement avec une interface série donc si votre arduino ne fait rien d'autre que copier la distance pour l'envoyer sur le port série, avec ce genre de module vous n'auriez plus besoin de l'arduino
Partager