Aller au contenu


Photo
- - - - -

Led RGB/Arduino avec E/S analogique

Led RGB Arduino E/S analogique

  • Veuillez vous connecter pour répondre
17 réponses à ce sujet

#1 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 03 juillet 2019 - 09:26

Salut les makers, petite question sur les sorties en analogique. 

 

Sur mon bipède j'avais une problématique à résoudre, celle de pouvoir mettre des leds pour voir la fin d'initialisation et les évènements (détection chute, détection distance, ...).

Donc je voulais plusieurs couleur, Orange pour en cours d'initialisation, Vert pour fin d'initialisation et prêt à marcher, Rouge pour les obstacles, Bleu pour les chutes et j'en voulais une autre genre violet ou rose pour capter les lignes noir/blanc. Donc 5 couleurs alors autant prendre de la led RGB pour économiser de la place sur ma Nano. 

 

Mais c'est la que vienne les problèmes, plus de place sur les entrées digital toutes prise par les servomoteurs les capteurs et autres. Donc en parcourant le net je trouve qu'il est possible de prendre des entrées analogiques pour s'en servir comme entrées digital avec la petite commande pinMode(A0,OUTPUT); Ce que je fais immédiatement et là le Rouge,Vert,Bleu marche mais pas moyen de pouvoir panaché en variant entre 0 et 255. 

 

Ce soir j'entame des tests pour essayer de comprendre si je n'ai pas fait d'erreur, je me mets en entrée digital je balance mon code, et j'obtient bien une nuance, je réitère avec cette fois ci en entrée analogique et là non ça ne panache pas, alors ma question es-ce que ces fameuses E/S analogique une fois passé en E/S digital ne prenne en compte que les 0 et 1 ? Parce que j'ai un peu l'impression de ça et je ne trouve pas de réponse sur le net.

 

J'ai enlevé la commande pinMode(A0,OUTPUT); en me disant que 0 et 255 ça reste de l'analogique mais non rien y fait mes 3 couleurs de RGB s'allume mais pas de nuance comme j'ai pu avoir en E/S digital.


1ère place Robot Warrior 2019 humanoïdes autonome

#2 levend

levend

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 5 572 messages
  • Gender:Male
  • Location:Vendée
  • Interests:Robotique, informatique, architecture et patrimoine...

Posté 03 juillet 2019 - 09:57

Je pense que tu veux parler de sorties pour brancher ta LED et non d'entrées :), et tu ton code tu déclares bien en sortie...

 

Ta sortie analogique, tu peux aussi la laisser en analogique si je ne me trompe pas et tu utilises les valeurs de 0 à 255 sur chaque pin et tu auras une tonne de nuances de couleur, une sortie digitale c'est soit 0 soit 1.


Imprimante 3D : Prusa i3 (MK1) + CR-10S + CR-10 S5 + Artillery Sidewinder X2 + CR-30 + Elegoo Mars + Anycubic Wash & cure 2 + Phrozen Sonic Mega 8K + Phrozen Cure Mega

#3 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 03 juillet 2019 - 10:09

Oui j'utilise pinMode(A0,OUTPUT); pour chaque pin de la RGB
Et je fais un analogWrite pour chaque pin.

En me branchant sur les pin D2,D3,D4 (digital) avec pinMode(D2, OUTPUT); etc...
Ensuite analogWrite pour chaque pin avec en ordre entre 0 et 255 ça marche sans problème mais dès que je me branche sur A2,A3,A4 en faisant pareil pinMode (A2, OUTPUT);etc la nuance ne se fait pas.

J'ai aussi essayé sans pinMode A2 OUTPUT et pareil j'ai relancé plusieurs fois rien n'y fait. Alors je me demande si c'est possible de faire nuancer une led RGB en sortie analogique, c'est bizarre.

Nuance en branchant sur pin digital et nuance pas en branchant sur pin analogique.

Es ce que le fait d'avoir un GND commun ou non y change quelque chose,. Je ne crois pas. En tout cas c'est un constat que j'ai fait et j'aimerais bien comprendre mais trouve pas d'explication
1ère place Robot Warrior 2019 humanoïdes autonome

#4 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 04 juillet 2019 - 07:11

Sauf erreur, les sorties que l'on peut utiliser en PWM sont marquées par un ~ .
Ce qui n'est pas le cas pour les sorties analogiques. En tout cas, sur une UNO.
Désolé.

#5 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 04 juillet 2019 - 08:30

Je ne pense pas que cela a avoir avec les sorties PWM puisque ma led RGB est branché sur les pin D2, D3,D4. Par contre j'ai lu que toutes les broches était des broches numérique en réalité sauf les broches A6 et A7, mais toujours rien sur mon problème je continue a chercher
1ère place Robot Warrior 2019 humanoïdes autonome

#6 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 04 juillet 2019 - 08:45

Allez réponse supplémentaires les broches de A0 jusqu'à A5 sont des broches numérique relier sur le convertisseur numérique/analogique pas comme les broches D2 à D13 qui ne sont pas sur le pas sur ce convertisseur.

En activant la commande analogWrite on fait passer le signal par le convertisseur analogique/numérique donc le signal devient automatique un signal analogique alors qu'avec une led RGB il faut un signal numérique.

Pour info la commande pinMode ne sert a rien puisque que la brochure est automatiquement mis en lecture ou écriture en fonction si c'est digitalRead ou digitalWrite.

Donc pour moi problème presque résolu ou résolu puisque en faisant un analogWrite sur un pin digital l'arduino doit transformer cela en signal numérique puisqu'il n'a pas le choix. Alors qu'un analogWrite sur un pin analogique il le laisse en signal analogique. C'est ce que j'en deduis. Donc je pense que pour mettre une led RGB sur un pin analogique avec une commande analogWrite il faudrait coder une chose similaires à ce qu'il reçoit en digital.

C'est ce que j'en déduis.
1ère place Robot Warrior 2019 humanoïdes autonome

#7 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 04 juillet 2019 - 10:59

J'ai continué a parcourir le net et fait plusieurs constat qui me permet de dire qu'une led RGB ne fera jamais de nuance sur des broches analogique.

La led RGB a besoin d'un signal en PWM d'où l'appel a la fonction analogWrite qui produit un signal en PWM.

Donc une led RGB se branche sur des broches digital en PWM qui produise un signal carré, suite de 0 et 1 avec un certain délai entre les deux.

L'appel de la fonction analogWrite fait une écriture en analogique sur la broche demander. Il n'y a pas besoin de faire un pinMode pour demander a écrire ou lire sur la broche demander.

Les broches analogiques sont des broches numérique qui passe par un convertisseur numérique/analogique suivant si c'est un digitalWrite ou un analogWrite qui est appelé. Dans le cas de brancher une led RGB sur des broches analogiques, en faisant un appel de la fonction analogWrite fait passer notre ordre dans le convertisseur numérique/analogique et ne permet pas de produire un signal PWM.

J'espère que tout cela est clair pour tout le monde.

Donc on peux mettre une led RGB sur des broches analogiques avec la fonction analogWrite mais on n'aura que les 3 couleurs de la led RGB et pas de nuance.
1ère place Robot Warrior 2019 humanoïdes autonome

#8 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 04 juillet 2019 - 11:07

Alors, je me suis posé le même genre de question (où mettre mes LEDs RGB) sur ma pauvre Arduino déjà bien remplie tout en gardant la variété d'illuminations possibles. La solution à laquelle je suis arrivé est de remplacer les LED par des rubans de LEDs adressables.
En gros, quelque soit le nombre de LED voulues, tu n'as besoin que de +Vcc, GND et SIG (donc au mieux, 3 pins, peut-être plus selon les modèles de ruban). Il faut dimensionner l'alimentation en conséquence, mais couper et souder un ruban avec le bon nombre de LED est facile.
Disclaimer : je parle en théorie, je n'ai pas fini de tester le setup moi-même, mais je n'ai rien vu qui s'oppose à cette idée jusqu'à présent dans mes recherches.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#9 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 04 juillet 2019 - 11:52

Oui en adressable ça ne te prends qu'une E/S digital mais dans mon cas je n'en avais plus aucune de dispo et je comprenais pas pourquoi ça ne marchait pas en mettant les pin analogique en digital mais maintenant je comprends mieux tu peux faire de l'adressable avec certaines pin analogique j'avais trouver durant mes recherches.
1ère place Robot Warrior 2019 humanoïdes autonome

#10 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 04 juillet 2019 - 11:54

Et je n'avais pas vraiment le temps de me pencher sur de la led RGB adressable puisque je n'avais que très peu de temps avant le concours de MACHINE GONES, et perdre du temps là dessus ça vaut pas le coup. Don j'ai fait avec les 3 couleurs dispo et ça a été sans problème mais juste je ne comprenais pas ça ne marchait pas et je voulais en savoir plus a tête reposé.
1ère place Robot Warrior 2019 humanoïdes autonome

#11 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 04 juillet 2019 - 06:43

Bon je tien à préciser qu'Oracid a parfaitement raison sur sa remarque : 

AnalogWrite ne marche que sur les pins PWM d'une arduino. 

Sur une nano les pins analogique sont les même que sur une uno : 3 5 6 9 10 11. 

Les pins analogique de A0 à A5 fonctionnent de la même façon que les pins digitaux standard en tout ou rien. 
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#12 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 04 juillet 2019 - 06:46

Oui Oracid avait raison, j'étais septique mais effectivement il avait raison. Mais au moins cela m'a permis d'apprendre beaucoup plus de choses sur Arduino et d'avoir une nouvelle approche pour mes futurs montage
1ère place Robot Warrior 2019 humanoïdes autonome

#13 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 04 juillet 2019 - 06:52

Par contre avec une RGB et 3 pins en tout ou rien tu pouvais avoir plus que 3 couleurs ;) 

 

Couleur : RGB
Blanc : 111 
Rouge : 100
Vert : 010
Bleu : 001
Orange : 110 
Turquoise : 011

Violet : 101

(Noir / éteint : 000)
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#14 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 04 juillet 2019 - 06:57

J'aurais dû poser ma question avant le concours mais bon faudrait que j'essaie ce soir en binaire effectivement j'y avais pas pensé en même temps je ne comprenais pas pourquoi ça n'allait pas.
1ère place Robot Warrior 2019 humanoïdes autonome

#15 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 04 juillet 2019 - 08:17

@Mike j'ai essayé ta solution qui marche sauf qu'il ne veux que du 0 ou 255 le 1 comme paramètre il n'en veux pas mais oui on obtient plus de couleur quand même, c'est une solution ça fait toujours un gain de place et plus de possibilité que juste 3 led après les couleurs sont pas top. Mais toutes ces recherches m'ont permis d'en découvrir un peu sur Arduino et les choses plus ou moins caché, à l'avenir je ferai mes montages différemment ça peux ouvrir des possibilité supplémentaire. 

 

En tout cas merci à tous pour votre aide et j'espère que d'autres en auront aussi appris !!


1ère place Robot Warrior 2019 humanoïdes autonome

#16 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 04 juillet 2019 - 09:48

on ne fait pas de analogWrite sur n'importe quel pin ... 

Je ne disais pas de mettre 1 en paramètre ...
Ma remarque c'était d'utiliser allumé ou éteint sur tes 3 pins ... les 1 ou 0 indiquaient les pins allumé ou éteint ... 
En utilisant digitalWrite(pin, HIGH);  // 1 ou LOW pour 0 ... 



 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#17 Amhnemus

Amhnemus

    Membre passionné

  • Membres
  • PipPipPip
  • 593 messages
  • Gender:Male
  • Location:Montigny-le-bretonneux

Posté 04 juillet 2019 - 09:51

Ok oui je l'avais pas compris comme ça bon j'ai pu voir que ça marchait quand même, mdr le boulet noob en tout cas merci Mike
1ère place Robot Warrior 2019 humanoïdes autonome

#18 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 259 messages
  • Gender:Male

Posté 06 juillet 2019 - 04:03

Bonjour,

je voudrais compléter quelques points :

- les entrées A0, A1, ... ne sont que des ENTRÉES analogiques (ie on peut LIRE une entrée analogique). Si on les utilise en tant que telle, la pin est reliée à un convertisseur analogique vers numérique

- aucun des arduinos classiques (Uno, Méga, Nano, ...) ne possède PAS de SORTIE analogique. Il existe d'autres microcontroleurs qui ont ont, mais pas les arduinos (sauf peut être des versions plus exotiques, celles là je ne les connais pas toutes)

- en revanche, l'arduino possède 3 timers, qui permèttent de générer des créneaux sur certaines pins (les pins avec "~", ie les pins PWM). Ces créneaux ne peuvent prendre que 2 tensions à un instant donné : 0V ou 5V. Il existe deux modes de créneaux "classiques" implémentés par la librairie arduino : la bibliothèque servo (si mes souvenirs sont bon, la période est 20ms, et le temps passé à l'état haut est entre 1 et 2ms), et analogWrite, qui crée un PWM (la période est fixée, et la proportion passé à l'état haut (5V) varie de 0% (0) à 100% (255). D'autres variantes sont possible (vous pouvez choisir presque n'importe quelle période et presque n'importe quelle durée passée à l'état haut), mais ça oblige à aller écrire dans les registres directement, du coup c'est beaucoup plus compliqué à utiliser

- les PWM et autres créneaux ne sont PAS des signaux analogiques : si vous regardez à l'oscilloscope, vous verrez un créneau qui est toujours soit à 0V, soit à 5V. En revanche, vu que la fréquence est assez élevée, il y a beaucoup de composants qui se comporte COMME s'il s'agissait d'un signal analogique égal à la moyenne du signal. Par exemple une LED va en réalité clignoter très vite, tellement vite que l’œil n'arrive pas à voir les clignotements et voit la moyenne. Un moteur à courant continue est bassé sur des bobines, qui ont un effet passe bas : du coup il voit la moyenne du signal (c'est pour ça qu'on peut facilement le commander en vitesse avec un PWM). Attention, dans le cas du moteur, si on le branche direct sur une pin il y a un risque de cramer l'arduino. En revanche, d'autres composants ne supporteront pas un créneau à la place d'une tension continue : par exemple si vous avez un circuit intégré prévu pour fonctionner en 1.8V, n’essayez surtout pas d'utiliser un PWM pour créer l'alim 1.8V : il y a de fortes chances que les pics à 5V le crament (et même dans le cas contraire il ferra probablement du n'importe quoi)

- si vous avez besoin d'un vrai signal analogique, il est possible d'utiliser un PWM suivit d'un filtre passe bas (dans la version la plus simple un filtre RC, composé d'une résistance et d'un condensateur), qui permet de "lisser" le signal. A noter que dans le monde arduino il est plutôt rare d'avoir besoin d'une vraie valeur analogique. Si vous en avez besoin, alors vous êtes probablement familier des filtrages, sinon n'hésitez pas à demandez pour trouver un filtre pqsse bas adapté à votre besoin. Une autre alternative est d'utiliser un convertisseur numérique vers analogique externe, qui communiquera avec l'arduino par exemple en I2C
- si vous avez besoin de plus de PWM que disponible, il est possible de créer un "soft PWM", c'est à dire que c'est le programme qui se charge de changer la valeur des pins (il me semble qu'il y a des librairies pour ça, sinon ça se fait très bien à partir d'une interruption sur un des timers)

 

Bonne journée

Sandro


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.






Aussi étiqueté avec au moins un de ces mots-clés : Led RGB, Arduino, E/S analogique

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users