arduino et photo haute vitesse

le code du photoduino fait tout ça... il pourrait t'intéresser :slight_smile:

Que veux tu dire par la cassiope34?

De fait mon idée de timer par impulsions successives tombe à l'eau... Alors quelle solution pour retarder l'action de l'opto coupleur sans avoir recours au LCD qui complique le câblage et surtout la programmation...
Je pensais à un système genre potentiomètres multitours (genre 25 tours ce qui donne 9° pour 1/1000eme ou 40/1000eme au tour) mais je n'ai aucune idée de son mode de câblage et quand à la programmation...(et c'est assez cher en plus). Sinon pourquoi pas 2 monotours, un qui divise au 50eme de seconde et l'autre qui, redivisant ce 0.02s en 50 à son tour permet un accès relativement précis au 4/1000eme (6° par unité pour un monotour 300°)...
Après réflexion, il me semble que l'idée des potentiomètres multitours tombe à l'eau car je ne pense pas que l'arduino puisse mesurer une différence de résistance... Reste la solution des commutateurs mécanique mais je n'en trouve qu'a 12 positions alors qu'il en faudrait 50 (et autant de positions, autant de soudure...)
Bref je sèche un peu...

Hop-hop, bien content d'avoir peut être trouvé une solution ,l'encodeur à rotation infini lumineux RVB avec sortie "code Gray" COM-10982 !!! Quels poètes ces électronitiens... 24 impulsions / tour 41 tours pour une seconde avec un incrément d'1/1000eme mais divisible par 2 en réglant la babaz à 500/1000eme par défaut... Schéma dès demain...

minms:
Que veux tu dire par la cassiope34?

Je voulais juste te montrer ce projet de photoduino dont tu peux trouver le schéma et le code, et où tu trouveras les réponses à toutes tes questions.
Je précise que je n'ai aucun intérêt dans ce projet Photoduino, mais je l'ai trouvé particulièrement bien pensé et construit.

Bon courage dans ton projet.

Hop-hop, bien content d'avoir peut être trouvé une solution ,l'encodeur à rotation infini

Le problème c'est que comme il n'y a pas de butée (rotation infinie) tu n'as aucun repère de la position et donc de fait il te faut un affichage.

sans avoir recours au LCD qui complique le câblage et surtout la programmation...

Oui et non. Si tu prends un LCD "standard" il est supporté par les librairies arduino et la programmation n'est pas très compliqué (envoyé des commandes d'effacement, et des chaines à afficher). Je peux me tromper mais je pense que tu vas rapidement avoir besoin d'un afficheur dès que ton montage va se compliquer un peu.

minms:
Après réflexion, il me semble que l'idée des potentiomètres multitours tombe à l'eau car je ne pense pas que l'arduino puisse mesurer une différence de résistance... Reste la solution des commutateurs mécanique mais je n'en trouve qu'a 12 positions alors qu'il en faudrait 50 (et autant de positions, autant de soudure...)
Bref je sèche un peu...

bonjour
si si, on peut vérifier la position du curseur et donc mesurer la résistance d'un potentiomètre en utilisant une entrée analogique de l'arduino

l'echelle de mesure est de 1024 points, avec un 25 tours ça fait en gros 40 points par tour, mais d'une maniere ou d'une autre il faut lire/connaitre le positionnement

Alors,

D'abord un bon merci à tous.
Artouste tu m'offre une information qui aurait pu m’empêcher de me creuser la tête une bonne partie de la nuit... Je garde dans un coin de ma tête mais le fameux encodeur évoqué hier à quelques qualités intéressantes à savoir le poussoir et la Led.
J'ai donc modifié mon schéma pour y coller cette bébête. Pas simple...
J'ai donc chopé les datasheet ici : Rotary Encoder - Illuminated (RGB) - COM-15141 - SparkFun Electronics? et me suis inspiré de ceci : http://bildr.org/2012/08/rotary-encoder-arduino/
A,C,B pour l'encodeur et 1,2,4,5 pour la LED RGB (voir le Dimensional Drawing sur le site de sparkfun)
Je n'ai cependant pas bien compris ou se plugait le poussoir, le 3? Mais ou est le Gray code alors?
Dernière questions, est il nécessaire de filtrer A et B comme indiqué sur le schéma 2 ou les pull up de l'arduino permettent il de faire cela?

Bref, si rien ne vous choque, je reste la dessus.
Le principe est donc le suivant,

  • ON.
  • Détection IR en fonction, état de retardement par défaut à 500/1000eme (pour une goutte par exemple, cela correspond grosso modo à une chute de 45cm mais ce réglage peut évoluer simplement en changeant la valeur dans le programme...)
  • Si appui sur le poussoir, allumage de la Led (couleur rouge si 500/1000eme ou couleur du réglage précédent)
  • Réglage, + ou - 1/1000eme par impulsion, 20 tours pour 500/1000eme (1/1000eme de seconde permet à la dite goutte de parcourir moins d'un mm et me parait donc suffisamment précis). Par défaut la led s'allume en bleu (bleu = 500/1000eme) elle vire au rouge si l'on diminue (rouge = 0/1000eme) et se met au vert à 1000/1000eme)
  • Nouvel appuie sur le poussoir, enregistrement de la nouvelle valeur de retardement et extinction de la Led pour ne pas gêner la prise de vue.
  • Détection IR en fonction.
  • Coupure du faisceau et déclenchement.
  • Retour à l'état détection IR en fonction avec dernière valeur de retardement et attente d'un nouveau déclenchement ou d'un appui sur le poussoir.
    ... ou OFF (ou - Passe un coup d'éponge y'a de l'eau partout!!)

Une remarque ou un conseil pour le programme?

Schema2.jpg

minms:
J'ai donc chopé les datasheet ici : https://www.sparkfun.com/products/10982? et me suis inspiré de ceci : http://bildr.org/2012/08/rotary-encoder-arduino/
A,C,B pour l'encodeur et 1,2,4,5 pour la LED RGB (voir le Dimensional Drawing sur le site de sparkfun)
Je n'ai cependant pas bien compris ou se plugait le poussoir, le 3? Mais ou est le Gray code alors?
Dernière questions, est il nécessaire de filtrer A et B comme indiqué sur le schéma 2 ou les pull up de l'arduino permettent il de faire cela?

bonsoir
C'est de l'encodeur en quadrature classique dephasage de 90°entre voie A/B
d'apres ce que j'ai compris pour le push button c'est la sortie C qui delivre un potentiel doublé , ça doit être possible de tester A=B en numerique , attention a prendre en compte le delta T de detente.
les pull up de l'arduino sont à priori suffisants, voir le bout de code issu du lien sparkfun

Merci Artouste mais moi pas tout bien compris...
Dois je séparer C et 3 pour pouvoir exploiter le signal du BP? Genre le 3 sur le pin 11 de l arduino et décaler les branchements de la led sur les pins 8, 9 et 10? Qu' entends tu par tester A=B en numérique? Vaut t il mieux les mettre sur les analogiques? Et C aussi? Et donc perdre l avantage des pull up intégrés dans les pins num. ...
Qu' appels tu delta T de détente?

Aie aie aie que c est compliqué l électronique... Et dire que je n'ai pas commencé la prog...

Bonjour,

Quelqu'un aurait il une petite réponse à mon dernier post?

Sinon je post tout de même la dernière version en date du schéma qui prend en compte les remarques d'Artouste.
D’autre part, pour des questions de frais de ports, je cherche à remplacer les pièces de ce kit:
http://snootlab.com/composants/131-kit-de-communication-ir.html
Je l'avais choisit parce qu'il était complet,compatible et donc sécurisant pour moi...

Merci d'avance

Bonjour,

Alors changement de Système IR et tentative de calcul de la résistance, ce que je voulais éviter grâce au kit déjà dimensionné…

L’idée est prise ici Barrière infra-rouge - PoBot mais je souhaite pousser un peu plus les leds pour pouvoir travailler dans des conditions moins facile. Bon Calcul ?

La led IR sera une SFH415-U. Pour le calcul de la résistance je prends :

Forward voltage : 1.3V ou 2.3V

(Dans la datasheet je trouve ceci,
Forward voltage
If = 100 mA, tp = 20 ms --------Vf----------1.3 V
If = 1 A, tp = 100 µs-------------Vf-----------2.3 V
Que cela veut il dire ??? Tp serait le temps de réponse ? si je veux un meilleur temps de réponse je devrais choisir If=1A mais 1A me semble beaucoup pour mon arduino…)

Prenons donc (un peu au hasard) IF = 100 mA, tp = 20 ms --------Vf----------1.3 V
Ur serait donc égale à 5 - 1.3 soit 3.7V

Forward current------------If-------------100mA
Ce qui me donne donc R = 3.7 / 0.100 = 37 ?. Scandaleux ? Doublons pour être sur…
Le récepteur sera une photodiode BPV10NF branchée à l’envers soit l’anode à la masse et la cathode à l’entrée analogique en pull-up ce qui semble amplifier sensiblement le signal.
« On utilise le fait que la diode va bloquer la tension lorsqu’elle est éclairée (on aura donc le maximum correspondant à la pull-up, tandis que non excitée par la lumière IR, une tension plus faible mais clairement visible. » Barrière infra-rouge - PoBot
Seulement j’ai lu quelque part que le microcontrôleur préférait recevoir du courant plutôt que d’en émettre. Je pense donc brancher la cathode sur le pin Vin et l’anode sur un pin analogique en Pull down. On aura donc un signal bas quand la barrière sera active et un haut au moment du passage de l’objet. Mauvais calcul ?
En parlant de calcul selon la datasheet on a ?
Reverse Voltage --------------Vr------------60V Ici on est tranquille avec l’arduino…
Et Forward Voltage---------- If = 50 mA ---------- Vf------------- typ 1V-----------max 1.3V
Ur= 5 – 1.1 (entre 1 et 1.3)= 3.9 V
Et If= 50 mA puisque ce sont les test conditions indiqué par le la datasheet.
D’où R= 3.9 / 0.050 soit 78 ? Donnons 100 ? par sécurité.

On obtient donc le shéma suivant qui ne sera peut être pas définitif si l’on considère qu’il m’est un peu compliqué de trouver mon encodeur thermonucléaire rayonnant à rotation subatomique et allumage par pulsation digitale… Mais je me débrouillerai autrement…

If = 100 mA, tp = 20 ms --------Vf----------1.3 V
If = 1 A, tp = 100 µs-------------Vf-----------2.3 V

tp (pulse time) ce sont les conditions de mesure
pour une impulsion de commande de 20ms et avec un courant de 100mA la tension directe est de 1,3V
pour une impulsion de commande de 100µs et avec un courant de 1A la tension directe est de 2,3V

Maintenant ce qui est vraiment important c'est la courbe Permissible Pulse Handling Capability qui indique le courant max suivant le rapport cyclique de la commande.

Ce qui me donne donc R = 3.7 / 0.100 = 37 ?. Scandaleux ? Doublons pour être sur…

Pourquoi scandaleux??? il faut savoir ce que tu veux! si tu doubles la résistance tu vas diviser le courant par 2. Si tu as réellement besoin de 100mA il faudra bien mettre 37?.
Par contre 100mA c'est le maximum admissible et donc il est préférable d'être en-dessous. Surtout en continu (voir remarque au-dessus)

En parlant de calcul selon la datasheet on a ?
Reverse Voltage --------------Vr------------60V Ici on est tranquille avec l’arduino…
Et Forward Voltage---------- If = 50 mA ---------- Vf------------- typ 1V-----------max 1.3V
Ur= 5 – 1.1 (entre 1 et 1.3)= 3.9 V
Et If= 50 mA puisque ce sont les test conditions indiqué par le la datasheet.
D’où R= 3.9 / 0.050 soit 78 ? Donnons 100 ? par sécurité.

Oui mais là tu ne peux pas appliquer ces calculs puisque tu as expliqué 2 lignes plus haut que tu utilisais la diode en polarisation inverse.
En plus de ça, je ne pense pas qu'une photodiode délivre suffisamment de courant pour faire basculer un IO. Je pencherais plutôt pour un montage comme celui propos là: Sneak Thief

Merci fdufnews,

Si je comprend bien, cette notion de pulse time correspond á la durée minimale d alimentation de la led et ne me concerne donc pas vraiment puisque ma led sera alimentée en permanence dès la mise sous tensions de l ensemble...
En ce qui concerne la resistance de la led, je ne sais pas vraiment ce dont j ai besoin mais j ai cru comprendre qu'il etait possible d augmenter la puissance de la led par rapport au montage dont je donne le lien dans mon précédent post, ce qui me semble intéressant pour pouvoir me donner un peu de champ. Comme le calcul m oriente vers une resistance de 140 ohms de moins que celle du modele je voulais savoir si cette valeur semblait aberrante ou normal. D autre part, ayant bien conscience d avoir choisis des valeurs trés limite pour la led, je double cette valeur, ce qui me laisse toujours de la marge par rapport au modèle et fatiguera moins la led.

Reste la question de la photodiode. J ai bien conscience du soucis concernant le montage a l envers mais je ne trouve pas de valeur me permettant de faire ce calcul (reverse voltage= 60v ????)... Est il possible de m expliquer comment et avec quelle valeur faire ce calcul? D'autre part qu appelle tu IO? c est un Inter? Cela change t il quelque chose si je synchronise l'ensemble et que je connecte le pin de la photodiode sur une entrée numerique plutôt??

Merci du coup de main.

Si je comprend bien, cette notion de pulse time correspond á la durée minimale d alimentation de la led

Non c'est le contraire. C'est la durée maximale. Mais là c'est les conditions dans lesquelles les mesures ont été effectuées.
Pour l'utilisation c'est la courbe que je cite dans mon post précédent. D'après la datasheet, le courant ( en continu) ne doit pas excéder 100mA et la puissance maximale ne doit pas dépasser 165mW. Si on veut plus de puissance il faut augmenter le courant mais comme dans ce cas on dépasse le courant maximum permanent il faut travailler en mode pulsé et suivre les indications de la courbe Permissible Pulse Handling Capability et sans dépasser le courant maximum admissible impulsionnel de 3A.

Comme le calcul m oriente vers une resistance de 140 ohms de moins que celle du modele je voulais savoir si cette valeur semblait aberrante ou normal.

Toutes les valeurs sont bonnes pour autant qu'elles ne dépassent pas les limites données dans la doc du composant.

mais je ne trouve pas de valeur me permettant de faire ce calcul (reverse voltage= 60v ????)..

Ces 60V, c'est la tension inverse maximum admissible. Au delà on claque la jonction de la diode et le composant est détruit.
Tous les paramètres dans la partie Maximum Rating de la doc correspondent à des valeurs à ne pas dépasser sous peine de stresser fortement le composant et donc modifier ses caractéristiques voir le détruire.

D'autre part qu appelle tu IO?

Input/Outpu = Entrée/Sortie = broche du l'arduino

J ai bien conscience du soucis concernant le montage a l envers mais je ne trouve pas de valeur me permettant de faire ce calcul

Dans la doc du composant il est donné 60µA/1mW. Donc la photodiode délivre un courant très faible lorsqu'elle est éclairée.
Il faut faire 2 choses:

  1. Convertir ce courant en tension. Les entrées de l'arduino commute sur des franchissement de seuils en tension. Problème, les faibles courants même dans des résistances élevées ne donnent pas des volts d'où le deuxième point.
  2. Donner du gain pour avoir une sortie compatible d'une entrée logique avec des seuils de quelques volts.
    C'est le but du montage que je cite dans mon premier post. La diode débite son courant dans la résistance et le darlington (la paire de transistors) amplifie le signal pour le rendre compatible d'une entrée logique.

Bonjour, Bonjour,

Alors voila la dernière versions de mon schéma.
J'ai calculé la résistance pour ma LED IR et je trouve ceci :
Forward voltage : 1.2V pour If = 20 mA
Ur serait donc égale à 5 - 1.2 soit 3.8V
Forward current------------If-------------20mA
Ce qui me donne donc R = 3.8 / 0.020 = 190 ? . Tout le monde est OK?

La question que se pose en revanche pour le montage du phototransistor transparent...
Je trouve plusieurs montages sans n'y vraiment rien comprendre. J'ai choisit celui qui se trouve sur le schéma mais je ne sais comment calculer la résistance. Je trouve des montages avec 270 Ohms mais j'aimerai comprendre pourquoi...

Dans la configuration que j'ai choisit, lorsque le phototransistor reçoit de la lumière infrarouge provenant de la LED infrarouge, il laisse circuler le courant d'ou signal haut (1) et lorsqu'un obstacle opaque est placé entre la LED infrarouge et le phototransistor, celui-ci bloque le courant et le signal devient bas (0). Tout le monde est d'accord?

Merci à tous.

Bonjour,

voila le schéma dont je n'ose pas encore dire qu'il est définitif... Reste la question de la résistance pull up à 10 (comme vu habituellement) ou 20 K (comme ce que donne l arduino lorsque l'on met un de ses pin en Pull up)...

Un Avis?

Allez je me colle à la programmation...

Bonjour á tous,

Je suis en train de gragrammer ma bestiole mais j ai un petit souci pour le code de l encodeur rotatif... Je trouve des exemples a droite et a gauche mais toujours en lien avec de l export serial dont je n ai que faire... Ne sachant quoi virer dans ces codes, quelqu un aurait il une idee?

Sur le schéma précédemment proposé, le 3 (pin 11) semble être le grnd des leds et du bouton. Le but est donc:
Appui sur le poussoir = stop led et phototrans etc , allume led a la couleur correspondant a la derniere valeur de delai, incremente ou decremente le delai de 1 milliseconde selon le sens de rotation et fait changer la couleur de la led en fonction.
Nouvel appuie sur le poussoir = enregistre la nouvelle valeur du delai, coupe la led, et relance le programme ( relance led IR et photo transistor...) etc, etc...

Je cherche aussi á pulser la led ir mais la commande analogWrite me semble généré des impulsions bien trop lentes pour moi... Une idèe?

Merci a vous!!

Bonsoir,

Alors je cherche, je cherche et je ne trouve pas de librairie arduino pour l encodeur rotatif (dont on trouve la reference ici Rotary Encoder - Illuminated (RGB) - COM-15141 - SparkFun Electronics). J avoue que cela me pose problème et que si le reste fonctionne correctement, cette partie du programme me donne quelques inquiétudes... Serait il intéressant d ouvrir un nouveau topic?
En ce qui concerne le pulsage de la led Ir, je vais faire un essai sans pour voir si cela est necessaire...

minms:
Bonsoir,

Alors je cherche, je cherche et je ne trouve pas de librairie arduino pour l encodeur rotatif (dont on trouve la reference ici Rotary Encoder - Illuminated (RGB) - COM-15141 - SparkFun Electronics). J avoue que cela me pose problème et que si le reste fonctionne correctement, cette partie du programme me donne quelques inquiétudes... Serait il intéressant d ouvrir un nouveau topic?
En ce qui concerne le pulsage de la led Ir, je vais faire un essai sans pour voir si cela est necessaire...

bonjour
il y a 2 methodes pour lire les encodeurs : en polling ou par interuption
un bon debut avec lib et exemples ici
http://www.arduino.cc/playground/Main/RotaryEncoders#Example14

Bonsoir,

Ok Artouste mais quelle différence entre les deux méthode? Laquelle choisir sur la page que tu as envoyée??

Sinon, petit frisson en soudant mon phototransistor, la branche la plus courte, appelé collecteur, est bien celle qui doit etre reliée directement à la masse??? (au pin 6 de l arduino sur mon schéma)???

A bientot et merci!!