IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Calcul automatique du nombre de Leds


Sujet :

Arduino

  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    914
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 914
    Par défaut Calcul automatique du nombre de Leds
    Bonjour à tous ,

    Je suis sur un petit projet à base de bande de Leds WS2812B
    Le principe est de découper ces rubans de Leds et de les fixer sur des "rails" de longueurs différentes
    pour former ainsi une sorte de circuit un peu à l'image des rails pour voies ferrées

    chaque rails comporterait un nombre fixe de Leds, le problème est que la bibliothèque Neopixel (<Adafruit_NeoPixel.h> ) que j'utilise
    impose la programmation du nombre exact de Leds du circuit concerné ( par ex : mon ruban fait 5 m de longueur avec 30leds/m donc au total je dois programmer 150 leds )
    or le but final est de constituer un circuit à l'aide de rails dont le nombre de Leds final ne peut qu'être défini qu'après la réalisation du circuit

    Ma question est donc :
    Y aurai-il un moyen de connaître de façon automatique le nombre de leds utilisées au moment l'initialisation du programme
    afin de déterminer le nombre final de leds utilisées à mettre dasn une variable pour l'incorporer au programme ?

    J'espère avoir été clair dans l'exposé de mon petit souci

    merci encore d'avoir pris la peine de me lire

    bien cordialement
    pascal

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    Salut,

    La communication se fait par un protocole série sur un seul fil (voir ici pour le protocole). Chaque Led reçoit une information RVB, et lorsqu'elle reçoit une autre information RVB dans la foulée, elle la présente sur sa sortie pour la Led suivante, mais il n'y a pas de retour d'information prévu par le protocole, pas d'accusé de réception ou d'acquittement... Donc je ne pense pas que cela soit possible.

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    914
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 914
    Par défaut
    merci f-leb

    je ne vois donc pas comment m'en sortir à part mettre manuellement le nombre de leds par roue codeuse (par ex )
    avant de lancer le programme

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    914
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 914
    Par défaut
    ou ...
    compter le nombre de rails ....

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 882
    Par défaut
    Oui, au premier lancement du programme il faudrait pouvoir fournir le nombre de rails et le nombres de LEDs sur chaque rail (ou le nombre total). Ensuite on sauve ça en EEPROM ou Flash et les fois suivantes il n'y a plus besoin de fournir l'information.

    Cela nécessitera de ne pas fait l'instanciation du bandeau en variable globale, mais dans le setup() au run time.

  6. #6
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    914
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 914
    Par défaut
    Salut Jay M

    L'idée est donc de raccorder les rails et le programme déterminerai le nombre de LEDs automatiquement
    Hypothèse :
    1)chaque rail possède le même nombre de LED par construction ( ex : 10 )
    2) tous les rails sont connectés par des connecteurs magnétiques en entrée et en sortie à 4 pins ( +,-,data,pin)
    3) une résistance ( ex 100K ) est branchée en T entre Pin (reliée en entrée et sortie du rail) et le (-)


    en connectant tous les rails et donc les toutes résistances en // , on devrait aboutir par lecture d'une tension sur une entrée de l'Arduino image du nombre de rails raccordé

  7. #7
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 242
    Par défaut
    Bonjour,
    Si tu trouves un moyen de mesurer le courant du bandeau de LED alors à l'initialisation, en les allumant, tu devrais pouvoir estimer leur nombre.

    A l'initialisation ton programme allume la 1er led, puis 2eme, puis la 3ème etc en laissant toutes celles d'avant allumées. Chaque led qui s'allume (avec la même couleur) fera augmenter le courant jusqu'à la dernière LED ensuite le courant n'augmentera plus car le bandeau sera coupé.

    J'ai regardé cette doc https://cdn.sparkfun.com/datasheets/...ds/WS2812B.pdf mais j'ai pas trouvé la conso d'une LED... Ce qui est aussi bizarre que d'oublier de préciser la motorisation dans la doc d'une voiture
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    914
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 914
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Bonjour,
    Si tu trouves un moyen de mesurer le courant du bandeau de LED alors à l'initialisation, en les allumant, tu devrais pouvoir estimer leur nombre.

    A l'initialisation ton programme allume la 1er led, puis 2eme, puis la 3ème etc en laissant toutes celles d'avant allumées. Chaque led qui s'allume (avec la même couleur) fera augmenter le courant jusqu'à la dernière LED ensuite le courant n'augmentera plus car le bandeau sera coupé.

    J'ai regardé cette doc https://cdn.sparkfun.com/datasheets/...ds/WS2812B.pdf mais j'ai pas trouvé la conso d'une LED... Ce qui est aussi bizarre que d'oublier de préciser la motorisation dans la doc d'une voiture
    Bonsoir Vincent

    L'idée serait de passer par un INA219 pour mesurer le courant sur la ligne des 5V des Leds
    la question que je me pose c'est :
    Doit-on obligatoirement passer par Neopixel pour allumer les Leds car sauf erreur la bibliothèque oblige à donner le nombre de LEDs câblées pour fonctionner ?
    c'est la raison pour laquelle je pensais à une autre méthode mais je garde çà comme idée
    merci bien

  9. #9
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 581
    Par défaut
    Bonjour,

    Il y a une possibilité qui consisterait à envoyer le dernier Dout sur une entrée E du microcontrôleur. Par un test dichotomique (chaine de n couleurs puis n = n + n/2 ou n = n/2 selon résultat etc.), on peut trouver le nombre exact N de leds (N couleurs : pas d'entrée sur E, N+1 couleurs : une (ou des) entrée(s) sur E).

    On peut aussi envoyer des couleurs qui représentent des valeurs (0x000001, 0x00002 etc) En envoyant une assez longue séquence, le premier code apparaissant sur E sera N+1. C'est plus rapide mais demande de décoder les séquences qui se présentent en E.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    Citation Envoyé par cobra38 Voir le message
    Doit-on obligatoirement passer par Neopixel pour allumer les Leds car sauf erreur la bibliothèque oblige à donner le nombre de LEDs câblées pour fonctionner ?
    Avec l'opérateur new, tu peux différer le dimensionnement, voir l'exemple : Adafruit_NeoPixel/examples/simple_new_operator/simple_new_operator.ino.

    Tu déclares un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Adafruit_NeoPixel *pixels;
    Puis tu instancies un premier ruban avec un nombre maximal de leds :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pixels = new Adafruit_NeoPixel(MAX_PIXELS, pin, pixelFormat);

    Plus tard, quand tu connais le nombre de pixels vraiment connectés, tu supprimes l'objet en mémoire et tu en reconstruis un à la bonne taille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete pixels;
    pixels = new Adafruit_NeoPixel(num_pixels, pin, pixelFormat);

  11. #11
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Il y a une possibilité qui consisterait à envoyer le dernier Dout sur une entrée E du microcontrôleur.
    Ah oui, c'est une idée à creuser

  12. #12
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 242
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Il y a une possibilité qui consisterait à envoyer le dernier Dout sur une entrée E du microcontrôleur.
    Salut,
    Mais ça implique de savoir qu'elle est la dernière LED ? Je crois que c'est l'objet de la question ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  13. #13
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    914
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 914
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Bonjour,

    Il y a une possibilité qui consisterait à envoyer le dernier Dout sur une entrée E du microcontrôleur. Par un test dichotomique (chaine de n couleurs puis n = n + n/2 ou n = n/2 selon résultat etc.), on peut trouver le nombre exact N de leds (N couleurs : pas d'entrée sur E, N+1 couleurs : une (ou des) entrée(s) sur E).

    On peut aussi envoyer des couleurs qui représentent des valeurs (0x000001, 0x00002 etc) En envoyant une assez longue séquence, le premier code apparaissant sur E sera N+1. C'est plus rapide mais demande de décoder les séquences qui se présentent en E.

    Salutations
    Salut Guesset
    je suis très intéressé mais concrètement je ne vois pas comment mettre en œuvre ta proposition :
    1) s'il faut envoyer des couleurs pour détermine le nb de Leds comment fait-on pour détecter le N+1 puisque c'est précisément ce que l'on recherche
    2) Quelle est la nature du signal recueilli sur l'entrée du contrôleur

    merci en tout cas pour ta proposition

    pascal

  14. #14
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 242
    Par défaut
    Citation Envoyé par cobra38 Voir le message
    L'idée serait de passer par un INA219 pour mesurer le courant sur la ligne des 5V des Leds
    la question que je me pose c'est :
    Doit-on obligatoirement passer par Neopixel pour allumer les Leds car sauf erreur la bibliothèque oblige à donner le nombre de LEDs câblées pour fonctionner ?
    c'est la raison pour laquelle je pensais à une autre méthode mais je garde çà comme idée
    Salut,
    Tu pourrais en effet passer un INA219.

    Tu peux très bien mettre un nombre énorme de LED dans la bibliothèque Neopixel, une fois que le courant donné par l'INA219 cesse d'augmenter c'est que tu es arrivé à la dernière LED. Si tu as incrémenté une variable à chaque fois que tu as allumée une LED alors tu sauras combien il y en avait.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  15. #15
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 581
    Par défaut
    Bonjour,

    Le principe de ces bandes est :
    • le premier élément prend les 3 premiers octets (donc la première couleur) et laisse passer le reste.
    • le second élément prend les 3 premiers octets (donc la 2e couleur) et laisse passer le reste.
    • le troisième élément prend les 3 premiers octets (donc la 3e couleur) et laisse passer le reste.
    • le quatrième ...

    S'il y a plus de couleurs que de Leds, la dernière émet en pure perte les couleurs non attribuées. Elles apparaissent sur Dout de la dernière Led effective.
    S'il y a moins ou autant de couleurs que de Leds, la dernière n'émet rien car la liste est épuisée.

    Suposons que N = 67 (je ne le sais pas encore ). Je fixe un maximum arbitraire à 256.
    • Je balance les 256 couleur. Ca déborde et le dernier Dout émet un flux. Je sais que N est inférieur à 256.
    • Je balance les 256/2 soit 128 couleurs. Ca déborde et le dernier Dout émet un flux. Je sais que N est inférieur à 128.
    • Je balance les 128/2 soit 64 couleurs. Ca ne déborde pas et le dernier Dout n'émet rien. Je sais que N est >= à 64.
    • Je balance les 64 + 64/2 soit 64+32 = 96 couleurs. Ca déborde et le dernier Dout émet un flux. Je sais que N est inférieur à 96.
    • Je balance les 64 + 32/2 soit 64+16 = 80 couleurs. Ca déborde et le dernier Dout émet un flux. Je sais que N est inférieur à 80.
    • Je balance les 64 + 16/2 soit 64+8 = 72 couleurs. Ca déborde et le dernier Dout émet un flux. Je sais que N est inférieur à 72.
    • Je balance les 64 + 8/2 soit 64+4 = 68 couleurs. Ca déborde et le dernier Dout émet un flux. Je sais que N est inférieur à 68.
    • Je balance les 64 + 4/2 soit 64+2 = 66 couleurs. Ca ne déborde pas et le dernier Dout n'émet rien. Je sais que N est >= à 66.
    • Je balance les 66 + 2/2 soit 66+1 = 67 couleurs. Ca ne déborde pas et le dernier Dout n'émet rien. Je sais que N est >= à 67.
    • 1/2 = 0 donc c'est fini et N = 67.

    Variante plus rapide car n'utilisant qu'une seule émission : on compte les impulsions sortant du dernier Dout (24 par couleur en trop) sur une entrée en interruption sur front montant. Toutes les 24 j'augmente de 1 le nombre Nc de couleurs en trop. A la fin (prévoir un temps d'attente > 256 couleurs) N = 256 - Nc.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  16. #16
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    914
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 914
    Par défaut
    Merci Guesset pour ces explications
    çà me parait maintenant plus clair
    c'est une bonne idée en effet

    Cordialement
    pascal

  17. #17
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 581
    Par défaut
    Bonjour Pascal,

    Citation Envoyé par cobra38 Voir le message
    ...Quelle est la nature du signal recueilli sur l'entrée du contrôleurl
    Le flux est constitué de bits qui s'étalent chacun sur une période fixe mais avec un rapport cyclique variable : 0 - 1/3 haut et 2/3 bas, 1 - 2/3 haut et 1/3 bas. Il y a un timing assez précis mais qui n'a pas, me semble-t-il, d'importance ici. Nous avons donc un front montant à fréquence fixe (800 kHz environ).

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  18. #18
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 581
    Par défaut
    Bonjour Vincent,

    Citation Envoyé par Vincent PETIT Voir le message
    Mais ça implique de savoir qu'elle est la dernière LED ? Je crois que c'est l'objet de la question ?
    La dernière LED est celle qui a le Dout en l'air. Il n'est pas nécessaire de compter les LEDs pour la repérer. Utiliser cette sortie pour déterminer le nombre est possible même s'il faut se méfier de la distance entre cette extrémité et l'entrée du MPU.

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  19. #19
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    914
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 914
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Bonjour Vincent,



    La dernière LED est celle qui a le Dout en l'air. Il n'est pas nécessaire de compter les LEDs pour la repérer. Utiliser cette sortie pour déterminer le nombre est possible même s'il faut se méfier de la distance entre cette extrémité et l'entrée du MPU.

    Salut
    Bonjour Guesset

    Juste une question :
    Pourquoi l'entrée "E" de DOut sur l'arduino et pas une autre ?

  20. #20
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 581
    Par défaut
    Bonjour Pascal,
    Citation Envoyé par cobra38 Voir le message
    ...Pourquoi l'entrée "E" de DOut sur l'arduino et pas une autre ?
    E pour Entrée, autrement dit n'importe laquelle, sauf si on veut travailler sur interruption.

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  2. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo