Détection par photorésistance

Bonjour,

Dans le cadre de mes TPE, je souhaite détecter le passage d'une bille à deux endroits différents (pour calculer sa vitesse moyenne entre ces deux capteurs) je connais la distance les séparant, et le temps qu'elle met pour faire cette distance.
Jusque là, pas de souci, c'est tres simple. :slight_smile:

Voilà où j'ai mon problème. J'utilise des photorésistances et un laser braqué dessus pour capter les variations lumineuses, sauf que j'ai peur que la bille aille trop vite pour être détectée ! :o

On m'a donc conseillé de : Pour faire bien, il faudrait que tu ajoutes un comparateur sur la sortie de ta diode et que ce soit la sortie de ce comparateur que tu connectes à une pin d'interruption de l'arduino.

Ainsi, même si le passage est extrêmement court, il n'y a aucun risque de louper l'interruption.

Très bonne idée en effet ! Si je savais ce que c'est un comparateur !
J'aimerai avoir votre avis sur ce système (code plus bas) et avoir des exemples d'utilisation de ces fameux comparateurs car après recherches, je n'ai rien trouvé.

Merci.

Voilà le code fait actuellement :

#include <LiquidCrystal.h> // on importe la bibliothèque
LiquidCrystal monEcran(12,11,5,4,3,2); // on crée l'objet écran
 
 
//Constants
const int pResistor = A0; // Photoresistor at Arduino analog pin A0
const int phResistor = A1; //Photorésistance 2
  
//Chrono
unsigned long MS;
unsigned long start;
unsigned long stop1;
  
//Variables
int value;          // Stockage de la valeur photoresitance 1
int value2;         //Stockage de la valeur photoresitance 2
int valeurlaser = 900;    //Valeur produite par le laser
float vitesse1;
float distance = 0.159; //Distance en m
  
void setup()
{
  monEcran.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes
  monEcran.clear(); // on efface l'écran
  pinMode(pResistor, INPUT);
  pinMode(phResistor, INPUT);
  //INITIALISATION
  value = analogRead(pResistor);
  value2 = analogRead(phResistor);
  monEcran.print("Vitesse bille:");
  monEcran.setCursor(4,1);
  monEcran.print("m/s");
  monEcran.setCursor(12,1);
  monEcran.print("km/h");
}
  
void loop()
{
  //debut de la boucle
  value = analogRead(pResistor); //on attribue en boucle à value la valeur de la photoresistance
  value2 = analogRead(phResistor);  //on attribue en boucle à value2 la valeur de la photoresistance2
   
  if (value < valeurlaser)  //Si la valeur 1 est inferieur a celle du laser
  {
    start=millis(); //Lancement du chrono
     
    while (value2 >= valeurlaser)
    {
      value2 = analogRead(phResistor);  //on attribue en boucle à value2 la valeur de la photoresistance2
    }
 
    stop1=millis();
    MS = stop1-start;
    vitesse1 = distance / (((MS / 1000) % 60) + ((MS % 1000)*0.001));
    monEcran.setCursor(0,1);
    monEcran.print(vitesse1);
    monEcran.setCursor(8,1);
    monEcran.print(vitesse1*3.6);
  }
  else  //Sinon
  {
  }
}

Cordialement. :slight_smile:

hello :slight_smile:
attention au temps de montée des photorésistances.
je ne vois pas ce qu'un comparateur fera pour palier à ce temps de montée relativement lent.
perso j'aurais opté pour des photodiodes.

attends un peu, les copains vont passer te donner leurs avis ou retours d'expérience. :slight_smile:

Quelle est la différence entre des photorésistance et des photodiodes ?? La photodiode est elle fait essentiellement pour les mesures de luminosité alors que la photo résistance varie sa résistance ?
Merci de ta réponse :slight_smile:

la variation de résistance d'une photorésistance est très lente.... beaucoup d'inertie
exemples :

une occultation brève du faisceau laser risque de ne pas produire de variation de résistance.

Dans une photodiode les variation de coutant/tension sont beaucoup plus rapides

Salut
Parmi les photodiodes les plus lentes on trouve facilement la BPW34 chez GOTRONIC ou ALIEXPRESS.
Elles ont un temps de réponse de 100nS, contrairement à une LDR qui se situe aux alentours de 20ms voire plus.
Mais on trouve des modèles allant jusqu'à 10 nS.

Comparateur : voir ICI.

@+

J'utilise en effet les valeurs produite par la photorésistance.
Donc, selon vous l'achat de photodiode pour remplacer simplement les photorésistance (ça doit être le même fonctionnement je pense), devrais rendre le système plus réactif aux variations brève de luminosité ? :wink:
Édit
Ah ouais ! Donc si je comprend bien, mettre des photodiodes augmente la détection en permettant la variation de passer de 20ms à 10/100 ns !

Donc en remplaçant "intelligemment" mes photorésistances en diode, mon système captera beaucoup plus rapidement la variation. Ça permettra alors de détecter le passage d'une bille plus rapide !

Tout à fait.

bonsoir

ATTENTION :le couple laser / photodiode peu dans certains cas ne pas fonctionner

sois longueur d'onde différente soit présence d' un filtre optique infrarouge .

Bonjour,

Donc en remplacant bêtement mes photorésistances en diode, mon système captera beaucoup plus rapidement la variation. Ça permettra alors de détecter le passage d'une bille plus rapide !

Oui mais s'il te plaît retire le terme "bêtement" et remplace par "intelligemment" car rien n'est simple.

Une photodiode s'utilise en série avec une résistance.
Les photons qui frappent la zone active de la photodiode génèrent un courant qui traverse la résistance. Ce courant développe une tension aux bornes de la résistance (U=RI).
C'est cette tension qui sera l'information utile.
A retenir : la diode est montée en inverse.
cap2013_2018_12_24_17_54_55.png

Attention aux longueurs d'onde : il faut que la diode émettrice (ou le laser) et la diode de réception soient prévues pour fonctionner dans la même gamme de longueur d'onde , déjà signalé mais je rajoute une couche.

Il existe aussi des ensembles émetteur/récepteur à fourche comme ceci :


Voir s'il en existe compatibles avec la taille de la bille.

D'accord merci pour ces précisions, en attendant, je vous souhaite une joyeux réveillon !
Merci :slight_smile:

Bonjour, je voudrais savoir si en remplaçant mes photorésistance par des photodiodes BPW34, le système fonctionnera toujours ?
Les photorésistance sont alimentées en 5v avec une résistance de 10k ohm. J'ai cherché sur internet les caractéristiques techniques des BPW34 et je n'ai rien trouvé a propos de sa tension pour fonctionner.
De plus, mon code actuel fait-il l'affaire pour mesurer mes valeurs ? En plus de ça, les BPW34 sont des sortes de petit panneaux solaire, es-ce que cela ne détecte que les uv ? ou bien si j'éclaire avec un laser (650nm) des valeurs seront émises ? Sur ce lien : https://www.gotronic.fr/pj-348.pdf on renseigne que les longueurs d'onde sont comprise entre 430 et 1100nm.

#include <LiquidCrystal.h> // on importe la bibliothèque
LiquidCrystal monEcran(12,11,5,4,3,2); // on crée l'objet écran
 
 
//Constants
const int pResistor = A0; // Photoresistor at Arduino analog pin A0
const int phResistor = A1; //Photorésistance 2
  
//Chrono
unsigned long MS;
unsigned long start;
unsigned long stop1;
  
//Variables
int value;          // Stockage de la valeur photoresitance 1
int value2;         //Stockage de la valeur photoresitance 2
int valeurlaser = 900;    //Valeur produite par le laser
float vitesse1;
float distance = 0.159; //Distance en m
  
void setup()
{
  monEcran.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes
  monEcran.clear(); // on efface l'écran
  pinMode(pResistor, INPUT);
  pinMode(phResistor, INPUT);
  //INITIALISATION
  value = analogRead(pResistor);
  value2 = analogRead(phResistor);
  monEcran.print("Vitesse bille:");
  monEcran.setCursor(4,1);
  monEcran.print("m/s");
  monEcran.setCursor(12,1);
  monEcran.print("km/h");
}
  
void loop()
{
  //debut de la boucle
  value = analogRead(pResistor); //on attribue en boucle à value la valeur de la photoresistance
  value2 = analogRead(phResistor);  //on attribue en boucle à value2 la valeur de la photoresistance2
   
  if (value < valeurlaser)  //Si la valeur 1 est inferieur a celle du laser
  {
    start=millis(); //Lancement du chrono
     
    while (value2 >= valeurlaser)
    {
      value2 = analogRead(phResistor);  //on attribue en boucle à value2 la valeur de la photoresistance2
    }
 
    stop1=millis();
    MS = stop1-start;
    vitesse1 = distance / (((MS / 1000) % 60) + ((MS % 1000)*0.001));
    monEcran.setCursor(0,1);
    monEcran.print(vitesse1);
    monEcran.setCursor(8,1);
    monEcran.print(vitesse1*3.6);
  }
  else  //Sinon
  {
  }
}

Merci pour vos futur réponses.
:smiley:

La datasheet d'une LDR GL-55 donne une longueur d'onde pic de 540nm.
La datasheet de la BPW34 situe le pic aux alentours de 900nm, Comme tu le vois sur la courbe en cloche les 650nM devraient passer sans problème. une sensibilité de 60% devrait suffire.

D'accord merci, ça y es j'ai commandé les photodiodes. A présent il faut attendre. Y a t-il des changement dans le code à faire en attendant ? :slight_smile:

Avec le schéma proposé pas 68tjs au #8 tu devrais récupérer un niveau de tension supérieur à zéro avec un éclairage important, zéro dans l'obscurité.
Si la résistance est élevée, le niveau de tension peut être important, peut-être même suffisant pour être lu comme un niveau 1.
A toi de faire des essais de mesure quand tu recevras les photodiodes.

@+