Aide pour Chronographe Airsoft

Bonjour à tous,
Je viens ici pour un peu d'aide étant débutant avec l'arduino.
Donc le projet est de fabriquer un chronographe pouvant mesurer la vitesse des billes sortant d'une réplique d'airsoft.

Le principe est assez simple: la bille passe successivement devant 2 capteurs infrarouges espacé de Xcm. Les capteurs qui ne reçoivent plus de rayon IR envoi une donnée. le temps de passage entre les deux capteurs est enregistrée puis utilisée pour obtenir la vitesse du projectiles.

Cependant j'ai quelques soucis.

J'ai mis le schéma de montage en pièce jointe. Pour les détails j'utilise des LED IR classiques, la résistance placée avant celles-ci est de 10ohms. les recepteurs IR sont des VS 1838B.

et voici pour le code (que j'ai récupéré sur un site d'airsoft pour ne pas partir de zéro, merci à son créateur)

/* création d'un chronographe pour mesurer la puissance des répliques d'airsoft
 *  matériel: arduino, led IR, recepteur IR, ecran lcd 16:2, fil, resistance, resistance variable
 *  
 *  ______________________________________________
 *  
 *  Parametres ecran
 *  
 *   The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
*/

// ajout de la librairie pour l'écran
#include <LiquidCrystal.h>


 //intialisation des Pin pour l'ecran
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

 //declaration des variables- capteur infrarouge 1&2
 #define CIr1 6
 #define CIr2 7

 long startTime ; // Temps au passage devant le 1er capteur
 long endTime ; // Temps au passage devant le deuxieme capteur
 long deltaTime ; // Temps de passage entre les deux capteurs
 

 
void setup() {
  
Serial.begin(9600);
pinMode(CIr1, INPUT);
pinMode(CIr2, INPUT);
}

void loop() {

  Serial.println("OK");
  
while ( digitalRead(CIr1)) // attendre le passage devant le 1er capteur
{ } startTime = micros(); // enregistrer le temps au passage du 1er capteur

do{ }while(digitalRead(CIr2)); // attendre le passage devant le 2em capteur
endTime= micros(); // enregistrer le temps au passage du 2em capteur
deltaTime = endTime - startTime; // calculer le temps de passage entre les 2 capteurs

Serial.println(deltaTime); // affichage sur le port série
Serial.println(196000L/(deltaTime)); // 196000 représente la distance entre les 2 capteurs en pieds x 1000000 (à ajuster)
Serial.println("fps");

}

Si il y a des paramètres écran c'est parce que je souhaite en mettre un pour la suite, mais c'est autre chose !

Le probleme plus exact et que quand je branche tout selon se que j'ai défini et selon l'utilisation des capteurs, j'ai n'est aucune donnée quand j'ouvre mon port série. J'ai seulement le "OK" du départ qui s'affiche.

Si vous aviez un bout de solution ça serait sympathique

hello

ton code
#define CIr1 6
#define CIr2 7

ton schéma
CIr1 16
CIr2 17

edit: 1pied = 30.48cm==> voir ta formule et son commentaire

ton code revu, mais pas revu ta formule

/* création d'un chronographe pour mesurer la puissance des répliques d'airsoft
 *  matériel: arduino, led IR, recepteur IR, ecran lcd 16:2, fil, resistance, resistance variable
 * 
 *  ______________________________________________
 * 
 *  Parametres ecran
 * 
 *   The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
*/

// ajout de la librairie pour l'écran
#include <LiquidCrystal.h>


 //intialisation des Pin pour l'ecran
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

 //declaration des variables- capteur infrarouge 1&2
 #define CIr1 A2
 #define CIr2 A3

 long startTime ; // Temps au passage devant le 1er capteur
 long endTime ; // Temps au passage devant le deuxieme capteur
 long deltaTime ; // Temps de passage entre les deux capteurs
 

 
void setup() {
 
Serial.begin(9600);
pinMode(CIr1, INPUT);
pinMode(CIr2, INPUT);
}

void loop() {

  Serial.println("OK");
 
while ( digitalRead(CIr1)) // attendre le passage devant le 1er capteur
{  
startTime = micros(); // enregistrer le temps au passage du 1er capteur
}

while(digitalRead(CIr2)); // attendre le passage devant le 2em capteur
{
  endTime= micros(); // enregistrer le temps au passage du 2em capteur
}
deltaTime = endTime - startTime; // calculer le temps de passage entre les 2 capteurs

Serial.println(deltaTime); // affichage sur le port série
Serial.println(196000L/(deltaTime)); // 196000 représente la distance entre les 2 capteurs en pieds x 1000000 (à ajuster)
Serial.println("fps");

}

du coup j'ai repris ton code en effectuant les modifications sur le montages en mettant le capteur 1 sur l'entrée A2 et le capteur 2 sur l'entrée A3.
Mais du coup j'ai des valeurs en continu sur mon port série qui défile à vive allure !

Pour ma formule je vérifie ! mais j'ai espacé de 6cm mes capteurs soit environ 0.1960 pied et ensuite c'est la différence avec les millisecondes (temps de bases de l'arduino pour "micros")

Je vois un gros probleme dans ton "schema"
A priori les capteurs utilisés sont des capteurs IR 38KHz et l'illumination est continue.
sauf à ce que je me plante , ça ne doit pas pouvoir bien fonctionner.

l'ideal serait simplement 2 phototransistors et 2 diodes , monté sur un pin en interruption

dans les déclarations, tu peux remettre tes entrées, moi je n'avais que les A1 et A2 de libre

le code attends si les entrées sont à 1
j'ai supposé que lorsque tes cellules sont coupées elles renvoient "0"
il semble que ce soit l'inverse

modifie les deux "while" comme ça: while ( !digitalRead(CIr1))

je ne sais pas pour tes capteurs, mais +1 avec artouste pour utiliser les entrées interruptibles

dfgh:
je ne sais pas pour tes capteurs, mais +1 avec artouste pour utiliser les entrées interruptibles

avec 2 phototransistors , une seule interruption suffit
dans la mesure où la bille n'ira que de T1 vers T2
il suffit juste de recuperer T1 et ensuite T2 et de faire une simple soustraction

ça peut paraitre inutile de discuter de brancher sur une entrée interruptible ou deux entrées interruptibles ( puisqu'il y en a deux) , mais cela peut servir à "récupérér une entrée/sortie .

@ Artouste
tu montes tes retours de cellules en "ou cablé" avec des diodes en anti retours ?

Ok Ok, il est possible que met capteur ne soient pas adaptés ! (j'ai commandé plus ou moins les premiers venus sans connaitre les différents sortes de capteurs)

Du coup les phototransistors doivent être spécifiques IR ou des normaux font l'affaire ? j'avais choisi l'IR pour éviter la lumière ambiante parasite.

Pour les entrées "inteructibles", ça correspond à quoi exactement ? parce que je comprends le principe, mais ne suis pas encore capable de tout bien replacer dans le cadre de l'arduino.

va voir ici

colonne des fonctions

Interrupts()
noInterrupts()
attachInterrupt()
detachInterrupt()

Odonn:
Ok Ok, il est possible que met capteur ne soient pas adaptés ! (j'ai commandé plus ou moins les premiers venus sans connaitre les différents sortes de capteurs)

Du coup les phototransistors doivent être spécifiques IR ou des normaux font l'affaire ? j'avais choisi l'IR pour éviter la lumière ambiante parasite.

Pour les entrées "inteructibles", ça correspond à quoi exactement ? parce que je comprends le principe, mais ne suis pas encore capable de tout bien replacer dans le cadre de l'arduino.

le 1er test a faire est de voir si tu a un changement du signal de sortie en illuminant/occultant ton capteur avec une led IR, mais je suis quasi sur que c'est inexploitable là.

l'idée de l'interruption c'est simplement d'enregistrer le temps sur le front montant (ou descendant) de chacun des 2 phototransistors et de faire la soustraction T2-T1(en microsecondes) pour avoir la durée de parcours et donc en deduire la vitesse moyenne sur la portion.
Fais une recherche avec phototransistor IR , tu verras que ce n'est pas ce qui manque.

Je vais du coup essayer de me trouver des phototransistor adapter au projet !
merci pour l'aide !