arduino et photo haute vitesse - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 49 sur 49

arduino et photo haute vitesse



  1. #31
    invite2d48487f

    Re : arduino et photo haute vitesse


    ------

    Bonjour,

    Après avoir été faire quelques courses, je reviens avec une diode d'emission IR L-7113F3BT et un phototransistor L-7113P3C. Le temps de réponse du phototransistor est connu pour être un peu long mais j'ai trouvé 0.00001 s et cela me parait largement assez bas pour moi. Pour le calcul de la résistance de la LED IR, je vais me débrouiller mais je n'ai, en revanche, aucune idée de la manière de brancher ce phototransistor. J'ai trouvé ces trois modes de branchements sur internet, un avis?

    D'autre part, comment calculer la valeur de la résistance et change t elle en fonction de l'emplacement de celle ci ?

    Enfin dans ce type de montage, sommes nous bien d'accord sur le fait que si le faisceau se coupe on mesurera une baisse de tension sur le pin de l'arduino et non pas une coupure net?


    Merci bien!!

    -----
    Images attachées Images attachées  

  2. #32
    invite2d48487f

    Re : arduino et photo haute vitesse

    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?
    Images attachées Images attachées  

  3. #33
    invite2d48487f

    Re : arduino et photo haute vitesse

    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...
    Images attachées Images attachées  

  4. #34
    indri

    Re : arduino et photo haute vitesse

    J'ai pas suivi tout le sujet mais la facon dont tu cable le phototransistor me parait suspect!

    Soit tu mets comme le schéma 1 de ta réponse #31 soit plutot en emetteur commun (inversant la position de R et du TR quoi)!
    Pour la valeur de R je vois ici courant nominal de 3mA (sous lumière) donc sous 5V un reistance de 1k8 par exemple devrait aller!
    Là où va le vent...

  5. #35
    invite5c0d525e

    Re : arduino et photo haute vitesse

    Citation Envoyé par minms Voir le message
    Certe, on a le droit de se compliquer la vie mais ce qui m interresse davantage c est qu on me suggère une solution qui me la simplifierait!!
    Serait ce plus malin de brancher la photodiode sur une entrée numérique??
    Bien sûr que c'est plus malin et on t'a suggéré une solution en debut de topic ! Ta barrière IR ne peut avoir que 2 états, soit elle est occultée, soit elle ne l'est pas. Tu rentres ça sur une entrée numérique (une entrée à trigger de schmitt de préférence si ta carte en possède une) et ton arduino n'a qu'à savoir reconnaitre un 1 ou un 0.
    En passant par une entrée analogique non seulement tu te compliques la vie mais de surcroit tu perds un temps précieux, la conversion analogique vers numérique te fait perdre en réactivité.

  6. #36
    invite2d48487f

    Re : arduino et photo haute vitesse

    Salut,

    Bien compris Gabuzo, je colle tout sur les numeriques.
    Indri, au final, j ai opté pour le cablage 2 du schema de la reponse #31 parce que c est celui que j ai le plus croisé... mais quel difference entre le 1 et le 2 (la place de la resistance mais que ca change t il au juste??)
    J ai egalement choisis une resistance de 20k car c est la valeur que donne l arduino en pull up mais peux tu m expliquer comment tu fais ce calcul, quelles valeurs, quelle formule??

    Marchi bien!!

  7. #37
    invite5c0d525e

    Re : arduino et photo haute vitesse

    Le schéma 2 de la réponse 31 ne fonctionnera pas car l'entrée est directement connectée à Vss et donc sera toujours à 0 quelque soit l'état du transistor. Il faut prélever le signal entre la resistance de tirage et le collecteur du transistor.

    Comme ça :

    Nom : branchementphototransistor.jpg
Affichages : 144
Taille : 47,3 Ko

  8. #38
    invite2d48487f

    Re : arduino et photo haute vitesse

    Bonjour á tous,

    Je suis en train de gragrammer ma bestiole mais j ai un petit souci pour le code de l encodeur rotatif...Je cherche, je cherche et je ne trouve pas de librairie arduino pour l encodeur (dont on trouve la reference ici https://www.sparkfun.com/products/10982). 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?

    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...

    En ce qui concerne le pulsage de la led Ir,je vais faire un essai sans pour voir si cela est necessaire...

    Merci bien!!

  9. #39
    invite5c0d525e

    Re : arduino et photo haute vitesse

    Je ne vois pas bien ou se trouve ton soucis, il suffit de lire la data-sheet de ton codeur. Tu as deux voies (A et B) qui fournissent deux signaux carrés décalés.
    Si l'entrée de ton µ-contrôleur détecte un front montant (provenant d'une des voie) alors que l'autre voie est à 0 tu décrementes, si l'entrée détecte un front montant alors que l'autre voie est à 1 tu incrémentes.
    Enfin le front montant (rising edge) c'est un exemple, tu peux aussi travailler sur un front descendant (falling edge) et incrémenter quand tu as un 0, c'est plus qu'une question de soft.

  10. #40
    invite2d48487f

    Re : arduino et photo haute vitesse

    Bonsoir,

    Ok Gabuzo, on est d accord sur le principe mais le probleme est bien d ecrire le code, notement pour l identification d un front montant ou descendant...

    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 pour moi)???

    A bientot et merci!!

  11. #41
    invite2d48487f

    Re : arduino et photo haute vitesse

    Bonsoir,

    Ok Gabuzo, on est d'accord sur le principe mais le problème est bien d'écrire cette partie du code, notamment pour l identification d un front montant ou descendant...

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

    A bientot et merci!!

  12. #42
    invite5c0d525e

    Re : arduino et photo haute vitesse

    Je ne connais pas du tout l'Arduino je suis donc bien incapable de te pondre le moindre bout de code, par contre je te laisse une piste de recherche : http://arduino103.blogspot.fr/2012/0...r-arduino.html

    Pour ton phototransistor c'est l'emetteur qui doit être relié à la masse. Le signal est prélevé sur le collecteur qui est relié au 5V via une resitance de tirage, il suffit de suivre le schéma...#37

  13. #43
    invite2d48487f

    Re : arduino et photo haute vitesse

    Salutatouss,

    Donc, le collecteur du phototransistor va au 5v et c'est la patte la plus longue qui part à la masse... L'inverse d'une LED, logique... J'aurais fait une connerie, merci Gabuzo!!

    Sinon je vous propose les premières lignes de code, elle ne prennent pas du tout en compte l'encodeur (qui me pose encore bien des problèmes) mais assurent les fonctions de base du détecteur. Y voyez vous une boulette?

    D'autre part, j'ai déjà des connecteurs implantés dans les pins de l'arduino (ceux qui recevront l'encodeur) et qui ne sont pas encore reliés à quelque chose, est il nécessaire de configurer ces pins d'une manière quelconque (genre mise en pull up) ?


    int retard=500; // variable pour mémoriser Le temps de retardement
    const int opto_coupl = 13; //définition de la broche 13 de la carte en tant que variable
    const int led_IR = 7; //définition de la broche 7 de la carte en tant que variable, masse Led IR
    const int phototransmass = 6; //définition de la broche 6 de la carte en tant que variable, masse phototransistor
    const int phototrans = 4; //définition de la broche 4 de la carte en tant que variable, phototrans

    void setup() //fonction d'initialisation de la carte
    {
    pinMode(opto_coupl,OUTPUT); //initialisation de la broche 13 comme étant une sortie
    pinMode(led_IR, OUTPUT); //initialisation de la broche 7 comme étant une sortie
    pinMode(phototransmass, OUTPUT); //initialisation de la broche 6 comme étant une sortie
    pinMode(phototrans, INPUT); //initialisation de la broche 4 comme étant une entrée
    }

    void loop() //fonction principale, elle se répète à l'infini
    {
    digitalWrite(led_IR, LOW); //allume LED IR
    digitalWrite(phototransmass, LOW); //allume phototrans
    phototransState=digitalRead(ph ototrans); //lit la valeur de l'état du phototrans

    if(phototransState !=1) //test si le faisceau est coupé
    {
    delay(retard); // fait une pause de la valeur de retard
    digitalWrite(led_IR, HIGH); // coupe LED IR
    digitalWrite(phototransmass, HIGH); // coupe phototrans
    digitalWrite(opto_coupl, HIGH); // déclenche optocoupleur
    delay(50) ; //durée d'impulsion vers flash
    digitalWrite(opto_coupl, LOW); // coupe optocoupleur
    delay(15000); // fait une pause de 15000 milli-seconde avant reprise du programme
    }
    }

    Marchi!

  14. #44
    invite5c0d525e

    Re : arduino et photo haute vitesse

    A vue de nez et en vrac.

    Comment peux-tu mettre en route/arrêter la led IR et le phototransistor qui sont branchés entre le 5V et la masse ?
    Chez Monsieur Arduino on ne met pas de end if après un if ?

    Tu n'as pas essayé ton code in situ et si oui ça donne quoi ?

    Pour les pin inutilisées il est préférable de les configurer en sortie

  15. #45
    invite2d48487f

    Re : arduino et photo haute vitesse

    Rebonjour,

    Sur le schéma que je repost ci dessous, la Led IR et le photo trans sont branché entre le 5V et les pins 7 et 6 qui sont commandable. Les instructions digitalWrite(led_IR, LOW); & digitalWrite(phototransmass, LOW); crée une différence de potentiel qui permet le passage du courant et allume donc les bestioles. Enfin si j'ai tout bien compris... Je les branches de cette façon pour pouvoir les commuter puisque j'ai lu que des led IR sous tension en permanence chauffent et perdent de la puissance... (d'ou ma question sur le pulsage).

    Sinon pas de end if en vue sur Arduino mais je vais potasser pour voir si je ne suis pas passer à coté d'un truc...

    Et avant d'essayé ce code je voulais être sur de ne pas tout faire exploser...lol

    Merci et à bientôt.

  16. #46
    invite5c0d525e

    Re : arduino et photo haute vitesse

    Désolé, je ne peux pas deviner les modifs sur les schémas que tu n'as pas posté

    {
    digitalWrite(led_IR, LOW); //allume LED IR
    digitalWrite(phototransmass, LOW); //allume phototrans

    Là il faut mettre un delai, le pt a un temps de réponse à la mise sous tension qu'il ne faut pas négliger. Sans le delai ta carte va lire la valeur du pt pas vraiment hors tension mais pas vraiment sous tension non plus...

    phototransState=digitalRead(ph ototrans); //lit la valeur de l'état du phototrans
    if(phototransState !=1) //test si le faisceau est coupé
    {

  17. #47
    invite2d48487f

    Re : arduino et photo haute vitesse

    OUPS...

    Effectivement, j'ai zoublié de poster le schéma...
    Images attachées Images attachées  

  18. #48
    invite2d48487f

    Re : arduino et photo haute vitesse

    bonjour,

    Après relecture, j'ai oublié de déclaré la variable permettant la mémorisation de l'état du phototrans (ligne 2), voici donc le code qui se compile correctement dans la fenêtre du programme arduino.

    Code:
    int retard=500; // variable pour mémoriser le temps de retardement int phototransState = 1; //variable pour mémoriser l'état du phototrans const int opto_coupl = 13; //définition de la broche 13 de la carte en tant que variable const int led_IR = 7; //définition de la broche 7 de la carte en tant que variable, masse Led IR const int phototransmass = 6; //définition de la broche 6 de la carte en tant que variable, masse phototransistor const int phototrans = 4; //définition de la broche 4 de la carte en tant que variable, phototrans void setup() //fonction d'initialisation de la carte { pinMode(opto_coupl,OUTPUT); //initialisation de la broche 13 comme étant une sortie pinMode(led_IR, OUTPUT); //initialisation de la broche 7 comme étant une sortie pinMode(phototransmass, OUTPUT); //initialisation de la broche 6 comme étant une sortie pinMode(phototrans, INPUT); //initialisation de la broche 4 comme étant une entrée } * void loop() //fonction principale, elle se répète à l'infini { digitalWrite(led_IR, LOW); //allume LED IR digitalWrite(phototransmass, LOW); //allume phototrans phototransState=digitalRead(phototrans); //lit la valeur de l'état du phototrans if(phototransState!=1) //teste si le faisceau est coupé { delay(retard); // fait une pause de la valeur de retard digitalWrite(led_IR, HIGH); // coupe LED IR digitalWrite(phototransmass, HIGH); // coupe phototrans digitalWrite(opto_coupl, HIGH); // déclenche optocoupleur delay(50) ; //durée d'impulsion vers flash digitalWrite(opto_coupl, LOW); // coupe optocoupleur delay(15000); // fait une pause de 15000 milli-seconde avant reprise du programme } }
    En ce qui concerne le délai avant la lecture de l'état du phototrans, j'ai bien entendu la remarque mais j'ai peur que cela produise un délai à chaque tour du programme et par conséquent me fasse rater un passage devant la barrière... Je verrai à l'usage.

    Pour terminer sur end if, il existe la commande break sur arduino. L'instruction break est utilisée pour sortir d'une boucle do, for ou while, en passant outre le déroulement normal de la boucle. Cette instruction est également utilisée pour sortir d'une instruction switch. Rien pour IF à priori.

    Bonne journée.

  19. #49
    invite2d48487f

    Re : arduino et photo haute vitesse

    AOURF...

    J'ai l'immense plaisir de vous fournir ci dessous un code qui se compilationne à merveille...
    La cacouille sur attachInterrupt(0, updateEncodeur, CHANGE); venait du fait que void updateEncoder() était inclue dans void loop() ... Une connerie de } en somme...

    Le nouveau schéma du montage suit, nouveauté:
    encodeur C part maintenant directement à la masse, et le BP de l'encodeur reçoit un pull down. Quelques changements de pin en plus pour que ce soit plus clair.

    Quote
    const int opto_coupl = 13; //définition de la broche 13 de la carte en tant que variable, optocoupl

    const int encod_1 = 10; //définition de la broche 10 de la carte en tant que variable, led rouge
    const int encod_2 = 9; //définition de la broche 9 de la carte en tant que variable, led verte
    const int encod_4 = 8; //définition de la broche 8 de la carte en tant que variable, led bleue

    const int led_IR = 7; //définition de la broche 7 de la carte en tant que variable, masse Led IR
    const int phototransmass = 6; //définition de la broche 6 de la carte en tant que variable, masse phototrans
    const int phototrans = 5; //définition de la broche 5 de la carte en tant que variable, phototrans
    int phototransstate = 1; // memorise état du phototrans

    int encodeurbouton = 4; //définition de la broche 4 de la carte en tant que variable,BP encodeur
    int encodeurboutonstate = 0; // memorise état du BP
    int encodeurB = 3; //définition de la broche 3 de la carte en tant que variable, encodeur B
    int encodeurA= 2; //définition de la broche 2 de la carte en tant que variable, encodeur A

    volatile int lastEncoded = 0; //je sais pas ce que c’est mais ça doit être important
    volatile long encoderValue = 0; //je sais pas ce que c’est mais ça doit être important
    long lastencoderValue = 0; //je sais pas ce que c’est mais ça doit être important

    int lastMSB = 0; //je sais pas ce que c’est mais ça doit être important
    int lastLSB = 0; //je sais pas ce que c’est mais ça doit être important


    void setup()
    {
    pinMode(opto_coupl, OUTPUT); //initialisation de la broche 13 comme étant une sortie

    pinMode(encod_1, OUTPUT); //initialisation de la broche 10 comme étant une sortie
    pinMode(encod_2, OUTPUT); //initialisation de la broche 9 comme étant une sortie
    pinMode(encod_4, OUTPUT); //initialisation de la broche 8 comme étant une sortie

    pinMode(led_IR, OUTPUT); //initialisation de la broche 7 comme étant une sortie
    pinMode(phototransmass, OUTPUT); //initialisation de la broche 6 comme étant une sortie
    pinMode(phototrans, INPUT); //initialisation de la broche 5 comme étant une entrée

    pinMode(encodeurbouton, INPUT); //initialisation de la broche 4 comme étant une entrée
    pinMode(encodeurB, INPUT); //initialisation de la broche 3 comme étant une entrée
    digitalWrite(encodeurB, HIGH);
    pinMode(encodeurA, INPUT); //initialisation de la broche 2 comme étant une entrée
    digitalWrite(encodeurA, HIGH);
    digitalWrite(encodeurB, HIGH);

    attachInterrupt (0, updateEncoder, CHANGE);
    attachInterrupt (1, updateEncoder, CHANGE);
    //appelle updateEncodeur() quand un changement Haut ou Bas est détécté sur les broches
    //interrupt 0 (broche 2) ou interrupt 1 (broche 3)
    }

    void loop() //fonction principale, elle se répète à l'infini
    {
    encodeurboutonstate = digitalRead(encodeurbouton); //lit la valeur de l'état du bouton
    if (encodeurboutonstate==0) ; //teste si le bouton est laché
    {
    noInterrupts(); // désactivation des interruptions
    digitalWrite(led_IR, LOW); //allume Led IR
    digitalWrite(phototransmass, LOW); //allume phototrans
    phototransstate=digitalRead(ph ototrans); //lit la valeur de l'état du phototrans
    if(phototransstate==0); //teste si le faisceau IR est coupé
    {
    delay(lastEncoded); //fait une pause de la valeur de retard
    digitalWrite(led_IR, HIGH); //coupe LED IR
    digitalWrite(phototransmass, HIGH); //coupe phototrans
    digitalWrite(opto_coupl, HIGH); //déclenche optocoupleur
    delay(100); //durée d'impulsion vers flash
    digitalWrite(opto_coupl, LOW); //coupe optocoupleur
    delay(10000); //fait une pause de 10000 milli-seconde avant reprise du programme
    }
    }

    if(encodeurboutonstate==1) ; //teste si le bouton est poussé
    {
    interrupts(); // réactivation des interruptions
    if(lastEncoded == 500); //si retard = 500 milli-seconde
    {
    digitalWrite(encod_1, LOW); //allume Led rouge
    }
    if(lastEncoded >500); //si retard > 500 milli-seconde
    {
    digitalWrite(encod_2, LOW); //allume Led verte
    }
    if(lastEncoded <500); //si retard < 500 milli-seconde
    {
    digitalWrite (encod_4, LOW); //allume Led Bleu
    }
    }
    }
    void updateEncoder()
    {
    int MSB = digitalRead(encodeurA);
    int LSB = digitalRead(encodeurB);

    int encoded = (MSB << 1) |LSB;
    int sum = (lastEncoded << 2) | encoded;

    if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
    if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --;

    lastEncoded = encoded;
    }



    Une petite question tout de même, lastEncoded est bien la valeur retard qui servira à commander la fonction delay dans
    Quote
    delay(lastEncoded); //fait une pause de la valeur de retard

    ??

    Back to the bread board...
    Images attachées Images attachées  

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Image haute vitesse
    Par invite7d811809 dans le forum Technologies
    Réponses: 4
    Dernier message: 25/08/2012, 01h38
  2. USB Haute vitesse PIC24
    Par inviteadb2df5e dans le forum Électronique
    Réponses: 8
    Dernier message: 08/12/2011, 15h17
  3. Monostable haute vitesse
    Par joseph20480 dans le forum Électronique
    Réponses: 13
    Dernier message: 20/05/2011, 15h16
  4. Fluide à haute vitesse
    Par invite816e3e41 dans le forum Physique
    Réponses: 1
    Dernier message: 08/08/2007, 19h07
  5. Photo : lien entre vitesse d'obturation et vitesse du sujet
    Par invitedf5f39b5 dans le forum TPE / TIPE et autres travaux
    Réponses: 1
    Dernier message: 18/05/2006, 14h58
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...