Question de vitesse d'aquisition

Bonjour à tous,

Je viens vous demander conseil pour m’aider à réaliser un chrony, qui est un appareil utilisé en Airsoft pour mesurer la vitesse et l’énergie d’une bille.
Je compte le réaliser avec 2 photodiodes et deux led IR, la bille traverse 2 faisceaux séparés d’une distance d, on mesure le temps t et on a la vitesse.

Par exemple, on va prendre une bille qui vole à 200m/s.
Le faisceau fait 0.5cm, donc la bille va mettre 25us pour traverser le faisceau.
Est-ce qu’une ombre aussi rapide est detectable?

Merci de votre aide.

moumilelion: Le faisceau fait 0.5cm, donc la bille va mettre 25us pour traverser le faisceau. Est-ce qu'une ombre aussi rapide est detectable?

bonjour oui c'est detectable , tout en gardant à l'esprit que la resolution "basique arduino" est de 4 µs

tout en gardant à l'esprit que la resolution "basique arduino" est de 4 µs

Je suppose que le "basique" dont tu parles correspond aux réglages faits dans Wiring/Arduino pour millis(). En tripatouillant les registres on doit faire mieux. Un cycle horloge, à 16 MHz d'horloge, c'est 62,5 ns. En lisant le registre TCNTx d'un timer (pour un atmega 328 X= {0,1,2} ) on peut lire au cycle horloge près.

68tjs: Je suppose que le "basique" dont tu parles correspond aux réglages faits dans Wiring/Arduino pour millis(). En tripatouillant les registres on doit faire mieux. Un cycle horloge, à 16 MHz d'horloge, c'est 62,5 ns. En lisant le registre TCNTx d'un timer (pour un atmega 328 X= {0,1,2} ) on peut lire au cycle horloge près.

bonsoir 68tjs oui , bien sur J'ai repondu en mode basique "arduino" J'ai deduis (peut etre à tort :grin: ) de la question que l'auteur est "plutôt vierge débutante" 8)

Justement j'ai fait la même conclusion et je me suis dit que si on ne lui indique pas cette possibilité comme il a tout à découvrir en même temps il aura du mal à la découvrir par lui même.

Tu as eu raison de rappeller que la fonction arduino pour mesurer des temps, c'est à dire millis(), est "par choix de son auteur" un pas de mesure limité à 4µs.. Ce qui est incompatible avec une mesure de 20 µs. Alors qu'il doit être possible d'obtenir un pas de mesure de 1µs et même de 62,5 ns.

Les mots "registre" et "timer" font peur mais en fait c'est ultra simple, bien plus simple que d'utiliser un boucle while --> il y a moins de piège il n'y en a même pas contrairement à while. Il faut juste démystifier les mots.

Il faut évaluer les temps (min , max), choisir le pas de mesure en jouant sur le préscaler du timer. Choisir un timer 8 bits (compte jusqu'à 255 avant de repasser à 0) ou 16 bits (compte jusqu'à 65535).

On défini deux variables : int detection_1 ; int detection_2 ;

On fait une raz du compteur du timer -> au bon endroit --> lancement de la bille ? TCNT0 = 1 ;// utilisation du timer 0 1ere détection detection_1 = TCNT0 ; 2eme détection detection_2 = TCNT0;

On peut aussi utiliser millis() en modifiant le prescaler du timer0 mais cela me parait énormément moins simple et casse-figure.

Sauf à avoir une autre meilleure idée je pense que la détection du faisceau coupé doit se gérer avec une interruption. Il y a de l'apprentissage a voir de ce coté également.