Des sketchs à ajouter à ArdPyLog (suite)


19. Chute d’une bille
(Déterminer la durée de chute d’une bille – Catégorie: Mécanique)

 

L’objectif du montage est de mesurer la durée en ms de la chute d’une bille à l’aide d’un dispositif de détection constitué d’un laser et d’une photodiode associée à un circuit convertisseur courant – tension.

A t = 0, la bille initialement maintenue par l’électroaimant est libérée, un chronomètre est alors déclenché

Au cours de sa chute, la bille coupe le faisceau laser, provoquant une chute du potentiel mesuré sur la broche analogique A0 de l’Arduino Uno, car la photodiode n’est à ce moment plus éclairée

Quand la chute de potentiel est détectée, Le chronomètre est arrêté et la durée de la chute est affichée dans le moniteur série.

 

Module électroaimant Grove

Le module électroaimant Grove, pouvant maintenir une masse métallique jusqu’à 1 kg, se raccorde sur une sortie digitale de l’Arduino Uno :

– Sortie digitale à niveau haut, l’électroaimant fonctionne,
– Sortie digitale à niveau bas, l’électroaimant ne fonctionne pas.

Caractéristiques :

Interface : compatible Grove
Alimentation : 5 Vcc
Consommation : 200μA (au repos) et 400 mA (au travail)


Photodiode – Montage convertisseur courant / Tension

La photodiode utilisée dans cette application est le modèle BPW21.

Une photodiode est un composant semi-conducteur ayant la capacité de capter un rayonnement du domaine optique et de le transformer en signal électrique.


Sensibilité relative spectrale en fonction de la longueur d’onde :

En pointillé : sensibilité de l’oeil
En noir : sensibilité de la photodiode

 

L’intensité du courant délivré par la photodiode est proportionnelle à l’éclairement :

On utilise un montage à amplificateur opérationnel convertisseur courant – tension pour mesurer une tension proportionnelle à l’éclairement de la photodiode :

Le courant généré par la photodiode en fonction de l’éclairement circule à travers la résistance R.
La tension de sortie de ce montage vaut :

US = R.I

Or l’intensité du courant est proportionnelle à l’éclairement, donc la tension de sortie est de la forme :

US = k.Eclairement

 

Le programme

Voici le code de l’activité :

const int LEDR = 8;
const int LEDV = 7;
const int LEDB = 2;
const int BUTTON = 12;
const int EM = 4;
const int MAX = 200;

int val=0;
int ValPhotoD = 0;
unsigned long StartTime = 0;
unsigned long DeltaTime = 0;


void setup() {
Serial.begin(9600);
pinMode (LEDR, OUTPUT);
pinMode (LEDV, OUTPUT);
pinMode (LEDB, OUTPUT);
pinMode (BUTTON, INPUT);
digitalWrite(LEDR, HIGH);
digitalWrite(EM, HIGH);
digitalWrite(LEDV, LOW);
digitalWrite(LEDB, LOW);
}

void loop() {
val = digitalRead(BUTTON);
ValPhotoD = analogRead(A0);
if (val == HIGH) {
StartTime= millis();
digitalWrite(LEDR, LOW);
digitalWrite(LEDV, HIGH);
digitalWrite(EM, LOW);
}
else {
digitalWrite(LEDR, HIGH);
digitalWrite(LEDV, LOW);
digitalWrite(EM, HIGH);
}
if ((ValPhotoD < MAX) and (StartTime !=0)) {
digitalWrite(LEDB, HIGH);
DeltaTime = millis() – StartTime;
Serial.print(« Dt = « );
Serial.print(DeltaTime);
Serial.println( » mS »);
StartTime = 0;
}
else {
digitalWrite(LEDB, LOW);
}
delay(100);
}

 

Déroulement du programme :

– 1. Déclaration des constantes et variables :

. const int LEDR = 8 (constante nombre entier correspondant à la broche de la DEL rouge)

. const int LEDV = 7 (constante nombre entier correspondant à la broche de la DEL verte)

. const int LEDB = 2 (constante nombre entier correspondant à la broche de la DEL bleue)

. const int BUTTON = 12 (constante nombre entier correspondant à la broche du bouton poussoir)

. const int EM = 4 (constante nombre entier correspondant à la broche de l’électro-aimant)

. const int MAX = 200 (constante nombre entier correspondant à la valeur de la tension de détection du passage de la bille devant la photodiode)

. int val = 0 (variable nombre entier pour stocker la valeur du potentiel de la broche du bouton poussoir)

. int ValPhotoD = 0 (variable nombre entier pour stocker la valeur du potentiel en sortie du montage convertisseur courant tension de la photodiode)

. unsigned long StartTime = 0 (variable nombre entier long positif pour stocker l’heure à laquelle la chute de la bille a été déclenchée)

. unsigned long DeltaTime = 1000 (variable nombre entier long positif pour le calcul de la durée en ms de la chute de la bille)

 

– 2. Initialisation des entrées et sorties :

. Initialisation de la liaison série à un débit de 9600 bauds,
. Initialisation des broches des DELs en sortie,
. Initialisation de la broche du bouton poussoir en entrée,
. La DEL rouge est allumée et les autres DELs sont éteintes,
. L’électro-aimant est activé.

 

– 3. Fonction principale en boucle :

–> Lecture de la valeur de la broche du bouton poussoir,

–> Lecture de la valeur de la broche analogique A0 (broche en sortie du convertisseur courant-tension),

–> Si le bouton poussoir est appuyé :

– L’électro-aimant est désactivé (la bille est libérée),
– La DEL rouge est éteinte et la DEL verte est allumée,
– L’heure à laquelle la chute de la bille a été déclenchée est stockée dans la variable « StartTime ».

–> Si le bouton poussoir est relâché :

– L’électro-aimant est réactivé,
– La DEL rouge est allumée et la DEL verte est éteinte,

–> Si la bille a été libérée (variable « StartTime » !=0) et que la bille passe devant la photodiode (ValPhotoD < MAX) :

– La DEL bleue est allumée,
– La durée de la chute est calculée et affichée dans le moniteur série,
– la variable « StartTime » est réinitialisée.