Tâches:
Structure
1. Axe (dimensions, maintien, matériel, conception)
2. Perforation du moulin
3. Positionnement et maintien du laser et de la photodiode
4. Achat d'un recipient a volume connu et délivrant un débit réglable
5. Réglage avec un volume d'eau connu
Hardware et Software
5. Codage arduino, affichage
6. Réalisation du circuit
Sur chacune des parois figure une ouverture carrée ainsi qu’une plate-forme rectangulaire accolée à la base de l’ouverture. Ceci permet d’y poser simplement le laser ou la photodiode. Quant aux ouvertures carrées, elles jouent le rôle de communication entre laser et photodiode, puisque nous souhaitons illuminer cette dernière.
Technique utilisée pour la fixation des parois :
La paroi de la lampe et celle de la photodiode s’imbriquent l’une dans l’autre par un système de tenons et de mortaises. Aux deux extrémités de la paroi de la photodiode se trouvent deux “protusions” appelées tenons. Sur celles de la paroi de la photodiode figurent des renfoncements appelés “mortaises” et dont le volume est “complémentaire” à celui des tenons. Nous avons cependant appliqué une différence de diamètre de 1mm entre tenons et mortaises afin de faciliter l’imbrication.
Ainsi, les deux parois font s’aligner les fenêtres carrées et permettent la “communication” du laser et de la photodiode ; le faisceau laser traverse toute la cavité d’une fenêtre à l’autre.
Détails sur la modélisation du plan incliné :
Le plan incliné joue un double rôle : réception et évacuation de l’eau écoulée. Sa technique de conception repose toujours sur un principe de soustraction booléenne. Cependant, quelques étapes supplémentaires sont à prendre en compte.
Notre objectif est d’obtenir un trapèze en 3D dont les faces latérales superposables. Ces Chacune constitue un triangle rectangle, dont la hauteur vaut “h”, et la base “L”. Deux angles sont d’intérêt : L’angle droit qui se trouve au sol, et l’angle “alpha” qui se trouve être le plus éloigné.
Avec l’outil de soustraction booléenne, il nous faut partir de deux pavés d’égales dimensions, l’un rouge et l’autre noir, et orienter l’un des deux d’un angle “alpha”. Or, ce dernier ne peut pas être choisi au hasard, mais vaut précisément : “alpha” = arctan(h/L). Nous comprenons donc qu’il faut orienter le cylindre noir (par exemple) d’un angle arctan(h/L). Enfin, nous procédons à la soustraction : Pavé rouge - Pavé gris, afin de ne se retrouver qu’avec le trapèze 3D décrivant le plan incliné.
Rappel du fonctionnement: Avec les pièces que l’on a construites, on veut faire arriver un signal sur un capteur, ce signal correspondant aux variations d’intensité lumineuse de la lumière produite par un laser. Ces variations d’intensité lumineuses sont directement liées à la vitesse de rotation de la roue, et donc au débit. Un débit grand produira plus de variations en moins de temps, un débit faible en produira moins. Si l’on décide d’un débit de référence connu, et qu’on mesure quelle est la vitesse de rotation de la roue qu’il engendre (et en faisant l’hypothèse que la variation du débit en fonction de la vitesse de rotation est linéaire) on pourra trouver n’importe quel débit en utilisant ce débit de référence et une vitesse de rotation mesurée avec notre instrument.
Sélection du capteur adapté: D’après ce que nous avons décrit précédemment, nous avons besoin d’un capteur très sensible aux variations d’intensités lumineuses. Après avoir fait quelque tests, nous avons décidé de choisir une photo-résistance (à la lumière ambiante la valeur de sa résistance vaut environ 30kohm, à la lumière artificielle elle vaut environ 20kohm, et quand on la cache de la lumière elle vaut près de 100kohm). Nous nous sommes rendus compte que notre montage, tenant compte de tous les supports, cachait assez bien la photo-résistance de la lumière ambiante, donc le mode “lampe” de notre pointeur laser suffirait pour produire des variations mesurables. Par ailleurs, on évite comme cela d’avoir à aligner parfaitement la photorésistance et le laser.
Circuit: L’arduino est capable de lire des tensions. Il nous faudrait donc alimenter notre photo-résistance en courant, puis lire la tensions à ses bornes: d’après la loi d’Ohm, la tension est proportionnelle à la valeur de la résistance (donc haute tension si obscurité → blocage de la lumière par la roue, tension faible si lumière → passage de la lumière par un trou de la roue). Cependant, on décide d’utiliser l’Arduino comme générateur aussi, et elle sert uniquement comme générateur de tension. Désormais, il ne nous suffit plus d’alimenter la photorésistance en tension puis juste lire la tension à ses bornes: on va toujours lire ce qu’est produit par l’Arduino et on ne va pas avoir de variation de tension. C’est pour cette raison que l’on fait appel à un montage pont diviseur de tension, avec une première résistance de valeur 10kohm (valeur standard, pas de choix particulier).
De toute façon, la tension lue par l’Arduino évolue de la même façon qu’avant en fonction des variations de résistances: elle va augmenter quand la résistance est forte, diminuer quand elle est faible.
Signal produit en sortie du montage: Notre but est de faire interpréter à notre programme que quand la photorésistance est éclairée, il doit mesurer un temps, et quand elle ne l’est pas, la mesure doit s’arrêter. Avec cela, on saura combien de temps dure le passage de la lumière dans un trou (temps court → rotation rapide, débit fort / temps long → rotation lente, débit faible). Le problème se pose alors de comment faire pour que l’Arduino interprète les notions “photorésistance éclairée” et “photorésistance non éclairée”. Notre première idée est d’utiliser un montage comparateur: on compare la valeur de la tension aux bornes de la photorésistance et une tension de référence créée avec un montage pont diviseur et des résistances connues grâce à un AOP. Cette tension de référence serait inférieure à la tension aux bornes de la photorésistance quand elle est éclairée, mais inférieure à la tension aux bornes de la photorésistance quand elle ne l’est pas. De cette façon, en sortie de l’AOP, on a un signal binaire au lieu d’une suite de valeurs continues: soit il y a de la tension, soit non. On peut alors utiliser une fonction sur Arduino qui déclenche un compteur de temps quand elle reçoit une tension, et qui l'arrête quand elle n’en reçoit plus. On voit bien maintenant que cette idée aurait marché, mais elle était loin d’être efficace. Toutefois, c’était la seule manière que l’on connaissait pour procéder: on s’était beaucoup formés en électronique au premier semestre, et beaucoup moins en numérique, et cela explique pourquoi on était plus à l’aise. Mais avec une introduction rapide au fonctionnement du codage en C, faite par notre enseignant, on a vu qu’on pouvait régler notre problème avec juste quelques lignes de codes, sans avoir à faire appel à un montage comparateur.
Code:
Initialisation et partie voidloop(): On décide premièrement de voir comment se fait la lecture des valeurs de la tension sur l’Arduino. On fera cela grâce à la fonction Serial.print(), qui nous sera très utile. On lit la tension aux bornes de la photorésistance et on voit que l’Arduino affiche 400 quand la photorésistance n’est pas éclairée, et 200 quand elle l’est. Il nous faut donc une tension de seuil d’environ 300. On fait le choix arbitraire de mesurer un temps quand la lumière passe à travers le trou (on aurait pu mesurer le temps d’obscurité, au lieu du temps d’éclairement). On fait cela grâce à la fonction millis(), qui donne le temps à la milliseconde près depuis que le programme a commencé à s’exécuter, en utilisant l’horloge de l’ordinateur. On va mesurer ce temps plusieurs fois, c’est-à-dire pour plusieurs trous. On définit alors une variable temps_20_trous qui sera la différence de temps entre la fin et le début d’une boucle, et cette boucle sera simplement un compteur de 20 trous, c'est-à-dire de 20 fois un passage de lumière.
Maintenant il nous faut relier ce temps_20_trous au débit correspondant. Pour cela, on fait l’hypothèse de proportionnalité, comme on l’a dit auparavant. On affiche plusieurs fois le temps_20_trous d’un débit connu, qu’on a créé avec une jarre disposant d’un robinet. Alors, on a un temps_20_trous_ref qui correspond à un debit_ref. Si ensuite on mesure un autre le temps_20_trous d’une autre écoulement, quel qu’il soit, avec une règle de 3 on pourra le relier à la valeur de son débit, et l’afficher.
Partie voidsetup(): Pour finir, il nous faut une façon de déclencher notre boucle: on veut commencer à la faire tourner qu’au moment qui nous intéresse. On décide qu’au début, quand on ne veut pas faire de mesure, la lumière n’est pas allumée: de cette façon, la tension est toujours supérieure à la tension de seuil, on reste dans la boucle du voidsetup() et on affiche “Pas de débit”. Quand on veut faire une mesure, on allume la lumière, mais on la positionne la roue de telle sorte que la lumière soit cachée: on ne sort toujours pas de la boucle, mais on est prêts. Quand on commence à verser de l’eau, la photorésistance reçoit une première fois une lumière intense, la tension passe en dessous de la tension de seuil et on sort de cette boucle, on reste désormais dans la boucle du voidloop() jusqu’à la fin, et on affiche un débit.