Modifications

Sauter à la navigation Sauter à la recherche
10 281 octets supprimés ,  20 février 2016 à 17:25
Contenu remplacé par « {{MicroPython-Hack-Prepare-NAV}} {{MicroPython-Hack-led-RGB-core}} {{MicroPython-Hack-Prepare-TRAILER}} »
Ligne 1 : Ligne 1 :  
{{MicroPython-Hack-Prepare-NAV}}
 
{{MicroPython-Hack-Prepare-NAV}}
   −
{{traduction}}
+
{{MicroPython-Hack-led-RGB-core}}
== Ce que nous faisons ==
  −
{{bloc-etroit|text='''.: Lumière colorée :.'''
  −
 
  −
'''.: LED RGB :.'''
  −
 
  −
Nous avons fait clignoter une LED et aussi contrôlé une séquence de huit LEDs. Maintenant, il est temps d'en contrôler la couleur.
  −
 
  −
En utilisant une LED RGB (Red Green Blue ou RVB pour Rouge Vert Bleu) qui est en fait 3 LEDs dans un seul boîtier, nous pouvons générer n'importe laquelle des couleurs que vous souhaitez. Nous y arrivons en faisant un mélange de couleur.
  −
 
  −
Ce qui nécessite de faire un petit retour en arrière sur nos premiers cours d'éducation artistique, ces jours durant lesquels nous expérimentions les mélanges de couleurs à partir de feuilles de cellophane colorées.
  −
 
  −
Pas de panique si vous ne vous en souvenez pas, vous trouverez ci-joint une roue des couleurs pour vous aider.
  −
}}
  −
 
  −
[[Fichier:ARDX-Montages-CIRC12-table-couleur.png|480px]]
  −
 
  −
[[Fichier:ARDX-Montages-CIRC12-roue-couleur.png|480px]]
  −
 
  −
== Le montage ==
  −
=== Le matériel nécessaire ===
  −
{{ARDX-composant-begin}}
  −
 
  −
{{ARDX-composant
  −
  |label=Fils
  −
  |label2=
  −
  |img=ARDX-fils.png
  −
  |pl=34
  −
}}
  −
 
  −
{{ARDX-composant
  −
  |label=Résistance de 330 Ohms (orange-orange-brun)
  −
  |label2=x3
  −
  |img=ARDX-R330.png
  −
  |pl=43
  −
}}
  −
 
  −
{{ARDX-composant
  −
  |label=LED RGB
  −
  |label2=x1
  −
  |img=ARDX-LED-RGB.png
  −
  |pl=31
  −
}}
  −
 
  −
{{ARDX-composant-end}}
  −
Tous ces éléments sont disponibles sur [http://shop.mchobby.be shop.mchobby.be].
  −
 
  −
=== Schéma ===
  −
Bien la la LED RGB soit habituellement utilisée sur Arduino (5V), nous pouvons fort bien l'utiliser avec une tension d'alimentation de 3.3v.
  −
 
  −
Nous allons brancher:
  −
* La LED rouge sur Y10
  −
* La LED verte sur Y11
  −
* La LED bleu sur Y12
  −
 
  −
[[Fichier:MicroPython-Hack-led-RGB-schema.png|360px]]
  −
 
  −
=== Montage ===
  −
[[Fichier:MicroPython-Hack-led-RGB-montage.jpg|800px]]
  −
 
  −
== Le code ==
  −
{{underline|Attention, logique inversée:}}
  −
 
  −
Pour allumer la LED rouge, il faut que le courant puisse passer du +3.3V vers la masse.
  −
 
  −
Comme la LED est déjà branchée sur le +3.3v, la seule marge de manoeuvre se trouve sur l'autre broche qu'il fait soit placer à la masse (niveau bas, ''low''), soit à +3.3v (niveau haut, ''high'').
  −
 
  −
Lorsque la broche du pyboard est au niveau bas, le courant peut circuler de +3.3v vers la masse (au travers de la LED et de la résistance) --ET-- la LED s'illuminera.
  −
 
  −
Cela signifie que pour avoir du rouge, il faut placer la broche de la LED rouge au niveau bas (à la masse, ''low'') mais {{underline|surtout}} il faut que les LEDs verte et bleue soient éteintes et leur broche respective à +3.3v (niveau haut, ''high'', ce qui empêche un courant de circuler dans ces LEDs).
  −
 
  −
<nowiki>RED_PIN = pyb.Pin.board.Y10    # Led rouge
  −
GREEN_PIN = pyb.Pin.board.Y11  # Led verte
  −
BLUE_PIN = pyb.Pin.board.Y12  # Led bleue
  −
 
  −
# Déclaration des broches
  −
pRed = pyb.Pin( RED_PIN, pyb.Pin.OUT_PP )
  −
pGreen = pyb.Pin( GREEN_PIN, pyb.Pin.OUT_PP )
  −
pBlue = pyb.Pin( BLUE_PIN, pyb.Pin.OUT_PP )
  −
 
  −
# Eteindre la LED
  −
pRed.high()
  −
pGreen.high()
  −
pBlue.high()
  −
 
  −
# Allumer la led ROUGE
  −
pRed.low()
  −
pGreen.high()
  −
pBlue.high()
  −
 
  −
# Attendre 1 secondes
  −
pyb.delay( 1000 )
  −
  −
# Allumer la led BLEUE
  −
pRed.high()
  −
pGreen.high()
  −
pBlue.low()
  −
 
  −
# Attendre 1 secondes
  −
pyb.delay( 1000 )   
  −
 
  −
# Allumer la led VERTE
  −
pRed.high()
  −
pGreen.low()
  −
pBlue.high()
  −
 
  −
# Attendre 1 secondes
  −
pyb.delay( 1000 )   
  −
 
  −
# Allumer en BLANC (toutes les LEDs allumées)
  −
pRed.low()
  −
pGreen.low()
  −
pBlue.low()
  −
 
  −
# Attendre 1 secondes
  −
pyb.delay( 1000 )   
  −
 
  −
# Allumer en BLANC (toutes les LEDs allumées)
  −
pRed.high()
  −
pGreen.high()
  −
pBlue.high()
  −
</nowiki>
  −
 
  −
== Cela ne fonctionne pas? ==
  −
Voici 3 choses à essayer.
  −
=== La LED reste noire ou affiche une couleur incorrecte? ===
  −
Il est facile de faire une erreur avec les quatre broches de la LED si proches les unes des autres.
  −
 
  −
Essayez de vérifier si chacune des broches est bien à sa place.
  −
 
  −
{{underline|Attention, logique inversée:}} Pour allumer la LED rouge, il faut que le courant puisse passer du +3.3V vers la masse. Vous devez donc placer la broche de la LED rouge à l'état BAS pour qu'elle s'allume. Cela signifie aussi que les broches des LEDs bleue et verte doivent être au niveau haut (+3.3V, et donc pas courant dans ces LEDs là, donc elles sont éteintes).
  −
 
  −
=== c'est trop "rouge"! ===
  −
La diode rouge de la LED RGB pourrait être plus brillante que les deux autres.
  −
 
  −
Pour ajuster la balance des couleurs, essayez d'utiliser une résistance plus grande (ou deux résistances montées en série).
  −
 
  −
En effet, la LED rouge de la LED RGB consomme un courant de 4.30mA là où les LEDs Verte et Bleue consomme environ 1.90mA.
  −
== Faire encore mieux ==
  −
=== Plus de couleurs ===
  −
J'imagine que vous êtes moins qu'impressionné par l'affichage des trois couleurs de base. Nous allons donc rendre le jouet un peu plus intéressant en élaborant d'autres couleurs (''en les mélangeant''), en définissant une séquence de couleur et en automatisant l'affichage de celles-ci.
  −
 
  −
<nowiki>RED_PIN = pyb.Pin.board.Y10    # Led rouge
  −
GREEN_PIN = pyb.Pin.board.Y11  # Led verte
  −
BLUE_PIN = pyb.Pin.board.Y12  # Led bleue
  −
 
  −
# Déclaration des broches
  −
pRed = pyb.Pin( RED_PIN, pyb.Pin.OUT_PP )
  −
pGreen = pyb.Pin( GREEN_PIN, pyb.Pin.OUT_PP )
  −
pBlue = pyb.Pin( BLUE_PIN, pyb.Pin.OUT_PP )
  −
 
  −
# Déclaration des 3 broches la LED RGB
  −
pRGB = (pRed,pGreen,pBlue)
  −
 
  −
# Assigne l'etat des broches rouge,vert,bleu à partir d'un tuple de
  −
# 3 éléments tels que  (True,True,True)
  −
def set_led( p_rgb, state_tuple ):
  −
for i in range(0,3):
  −
# Note: Une led est activée si l'on met la broche correspondante
  −
#      a GND.
  −
    p_rgb[i].value( not( state_tuple[i] ) )
  −
 
  −
# Faire un mix de deux états RGB pour en composer un troisième.
  −
# Rouge (True,False,False) + Bleu (False,False,True) = Magenta (True,False,True)
  −
def mix_color( color1, color2 ):
  −
    return (color1[0] | color2[0], color1[1] | color2[1], color1[2] | color2[2] )
  −
 
  −
# Désactivation des LEDs
  −
set_led( pRGB, (False, False, False) )
  −
 
  −
# Sequences d'allumage des LEDs R,G,B
  −
noir  = (False,False,False)
  −
rouge = (True,False,False)
  −
vert  = (False,True,False)
  −
bleu  = (False,False,True) 
  −
jaune = mix_color( rouge, vert )
  −
cyan  = mix_color( vert, bleu )
  −
magenta = mix_color( bleu, rouge )
  −
  −
sequences = [
  −
    rouge, vert, bleu, noir, # Couleurs de base
  −
    rouge, jaune, vert, cyan, bleu, magenta # Suivre la rouge des couleurs
  −
    ]
  −
   
  −
# Initialiser la LED à toutes les séquences
  −
for seq in sequences:
  −
set_led( pRGB, seq )
  −
# Attendre 2 secondes
  −
pyb.delay( 2000 )
  −
  −
set_led( pRGB, noir )</nowiki>
  −
 
  −
=== Afficher les couleurs aléatoirement ===
  −
Nous allons modifier le programme pour qu'il sélectionne aléatoirement un couleur parmi celles que nous avons définie et active la LED en fonction de cette couleur aléatoire.
  −
 
  −
Le programme ainsi modifier répétera l'opération une centaine de fois avec un délai de 1/4 seconde entre chaque changement.
  −
 
  −
{{underline|'''Quelques explications:'''}}
  −
 
  −
Nous allons commencer par créer une liste des couleurs disponibles que nous allons stocker dans la variable {{fname|COLORS}}.
  −
 
  −
<nowiki>COLORS = [ rouge, vert, bleu, jaune, cyan, magenta ]</nowiki>
  −
 
  −
Nous avons donc un tableau dont d'une taille de {{fname|len(COLORS)}}, soit 6 éléments.
  −
 
  −
Nous allons ensuite générer un nombre aléatoire avec {{fname|pyb.rng()}} qui génère une valeur entière sur 30  bits.
  −
 
  −
Nous allons prendre [http://www.france-ioi.org/algo/course.php?idChapter=650&idCourse=0&iOrder=22 le reste de la division entière] par 6 (la longueur du tableau) pour obtenir une valeur bornée entre 0 et 5... soit l'index d'une couleur dans le tableau {{fname|COLORS}}.
  −
 
  −
La sélection d'une couleur aléatoire peut se résumer dans les deux lignes suivantes:
  −
 
  −
<nowiki>couleur_index = pyb.rng() % len( COLORS )
  −
couleur = COLORS[couleur_index]</nowiki>
  −
  −
{{underline|'''Le programme modifié'''}}
  −
 
  −
<nowiki>RED_PIN = pyb.Pin.board.Y10    # Led rouge
  −
GREEN_PIN = pyb.Pin.board.Y11  # Led verte
  −
BLUE_PIN = pyb.Pin.board.Y12  # Led bleue
  −
 
  −
# Déclaration des broches
  −
pRed = pyb.Pin( RED_PIN, pyb.Pin.OUT_PP )
  −
pGreen = pyb.Pin( GREEN_PIN, pyb.Pin.OUT_PP )
  −
pBlue = pyb.Pin( BLUE_PIN, pyb.Pin.OUT_PP )
  −
 
  −
# Déclaration des 3 broches la LED RGB
  −
pRGB = (pRed,pGreen,pBlue)
  −
 
  −
# Assigne l'etat des broches rouge,vert,bleu à partir d'un tuple de
  −
# 3 éléments tels que  (True,True,True)
  −
def set_led( p_rgb, state_tuple ):
  −
for i in range(0,3):
  −
# Note: Une led est activée si l'on met la broche correspondante
  −
#      a GND.
  −
    p_rgb[i].value( not( state_tuple[i] ) )
  −
 
  −
# Faire un mix de deux états RGB pour en composer un troisième.
  −
# Rouge (True,False,False) + Bleu (False,False,True) = Magenta (True,False,True)
  −
def mix_color( color1, color2 ):
  −
    return (color1[0] | color2[0], color1[1] | color2[1], color1[2] | color2[2] )
  −
 
  −
# Désactivation des LEDs
  −
set_led( pRGB, (False, False, False) )
  −
 
  −
# Sequences d'allumage des LEDs R,G,B
  −
noir  = (False,False,False)
  −
rouge = (True,False,False)
  −
vert  = (False,True,False)
  −
bleu  = (False,False,True) 
  −
jaune = mix_color( rouge, vert )
  −
cyan  = mix_color( vert, bleu )
  −
magenta = mix_color( bleu, rouge )
  −
  −
COLORS = [ rouge, vert, bleu, jaune, cyan, magenta ]
  −
   
  −
# Afficher 100 couleurs aléatoirement
  −
for i in range( 100 ):
  −
# Choisir un index aléatoirement pour COLORS
  −
rnd = pyb.rng() % len( COLORS )
  −
couleur = COLORS[rnd]
  −
set_led( pRGB, couleur )
  −
  −
# Attendre 1/4 secondes
  −
pyb.delay( 250 )
  −
  −
# Tout éteindre
  −
set_led( pRGB, noir )</nowiki>
  −
 
  −
=== Contrôle analogique des couleurs ===
  −
{{traduction}}
  −
Passer d'une couleur à l'autre est amusant. Mais les LEDs RGBs ne montrent tout leur potentiel que lorsque l'on fait des mélanges de couleurs à l'aide du contrôle analogique.
  −
 
  −
En utilisant la modulation de largeur d'impulsion (PWM) il est possible de produire presque n'importe quelle couleur et de faire des fondus d'une couleur à l'autre.
  −
 
  −
Nous avons appris dans le tutoriel "[[MicroPython-Hack-fading|Led et luminosité]]" comment identifier les ''Timer'' et le ''Channel'' associé à la sortie.
  −
 
  −
Nous allons également réutiliser la fonction {{fname|arduino_map}} découvert dans le tutoriel dédié à la "[[MicroPython-Hack-Analogique|lecture analogique]]".
  −
 
  −
Voici un programme qui fait évoluer constamment la couleur de la LED.
  −
*
  −
 
  −
== Plus, plus et encore plus ==
  −
Plus d'information, où poser vos autres questions:
  −
 
  −
 
  −
== Internet ==
  −
=== .:téléchargement:. ===
  −
xxxx
      
{{MicroPython-Hack-Prepare-TRAILER}}
 
{{MicroPython-Hack-Prepare-TRAILER}}
29 836

modifications

Menu de navigation