Modifications

Sauter à la navigation Sauter à la recherche
5 954 octets supprimés ,  20 février 2016 à 17:03
Contenu remplacé par « {{MicroPython-Hack-Prepare-NAV}} {{MicroPython-Hack-fading-core}} {{MicroPython-Hack-fading-TRAILER}} »
Ligne 1 : Ligne 1 :  
{{MicroPython-Hack-Prepare-NAV}}
 
{{MicroPython-Hack-Prepare-NAV}}
   −
{{traduction}}
+
{{MicroPython-Hack-fading-core}}
 
  −
== Contrôler la luminosité ==
  −
{{bloc-etroit|text=En plus de pouvoir allumer et éteindre une LED, il est également possible d'en contrôler la luminosité en utilisant un signal PWM (voir ci-dessous). L'utilisation d'un signal PWM est une technique très répandue pour obtenir une sortie ''variable'' sur une broche digital. Cela permet d'estomper la luminosité d'une LED:}}
  −
 
  −
[[Fichier:MicroPython-Hack-fading.jpg]]
  −
 
  −
== Composants nécessaires ==
  −
Vous aurez besoin:
  −
 
  −
* {{pl|66|LED standard 5mm}}
  −
* {{pl|45|Résistance de 100 Ohm}}
  −
* {{pl|34|Des fils}}
  −
* {{pl|53|Breadboard}} (optionnel mais facilite beaucoup les choses)
  −
 
  −
== C'est quoi PWM? ==
  −
PWM est l'acronyme anglais de "pulse width modulation" que l'on traduit par "modulation par largeur d'impulsions".
  −
 
  −
PWM est un terme fort répandu sur le net, Arduino et en hacking électronique... raison de laquelle nous allons le préserver tel quel.
  −
 
  −
La modulation par largeur d'impulsion (MLI en français) est une technique utilisée pour contrôler la puissance envoyée à un périphérique. Nous l'utiliserons dans [[Rasp-Hack-L293|ce tutoriel pour contrôler]] la quantité d'énergie alimentant le moteur et par conséquent sa vitesse de rotation.
  −
 
  −
Le graphique ci-dessous montre le signal PWM tel qu'il est envoyé par la broche PWM du Raspberry Pi
  −
 
  −
{{ADFImage|Rasp-Hack-L293-PWM-01.jpg|450px}}  
  −
 
  −
Chaque 1/500 ième de seconde, la sortie PWM produit une impulsion. La longueur de cette impulsion (dans le temps) contrôle la quantité d'énergie qui alimente le moteur. Comme vous pouvez le constater sur le graphique la longueur de l'impulsion peut varier de 0 à 100%.
  −
 
  −
Sans impulsion, le moteur ne fonctionne pas, une courte impulsion le fera tourner lentement. Si l'impulsion est active pendant cinquante pour cent du cycle, le moteur recevra la moitié de la puissance qu'il recevrait avec des impulsions maximales (constante dans le temps).
  −
 
  −
== Branchement ==
  −
Dans ce tutoriel, nous allons utiliser la broche {{fname|X1}}. Connectez un côté de la résistance de 100 Ohms sur {{fname|X1}} et l'autre bout sur l'anode de la LED (la broche + de la LED... la PLUS longue).
  −
 
  −
Connectez ensuite la cathode de la LED (la broche "-" de la LED... la MOINS longue broche) sur la masse/GND/ground.
  −
 
  −
{{MPImage|MicroPython-Hack-fading-01.png}}
  −
 
  −
== Le code ==
  −
En examinant le graphique de référence de la carte PyBoard (ci-dessous), nous pouvons constater que la broche X1 est est connectée sur le canal 1 ( dit ''channel 1'') du Timer 5. Regarder le graphique, vous noterez la terminologie ''TIM5 CH1'' pour X1.
  −
 
  −
{{MPImage|pybv10-pinout.jpg|800px}}
  −
 
  −
Par conséquent, nous allons d'abord créer un objet {{fname|Timer}} pour le timer 5 PUIS nous allons créer un objet {{fname|TimerChannel}} pour le canal 1:
  −
 
  −
<nowiki>from pyb import Timer
  −
from time import sleep
  −
 
  −
# Le timer 5 sera créer à une fréquence de 100 Hz
  −
tim = pyb.Timer(5, freq=100)
  −
tchannel = tim.channel(1, Timer.PWM, pin=pyb.Pin.board.X1, pulse_width=0)</nowiki>
  −
 
  −
La luminosité de la LED est contrôlée par la largeur d'impulsion du signal PWM, cela correspond à la quantité de temps durant laquelle la LED est allumée durant chaque cycle PWM.
  −
 
  −
Avec le timer à une fréquence de 100 Hz, chaque cycle est prends 0.01 seconde (ou 10 millisecondes).
  −
 
  −
Pour réaliser l'effet d'allumage progressif, nous avons besoin d'initialiser la largeur d'impulsion à une petite valeur, puis doucement accroitre la largeur d'impulsion pour augmenter la luminosité. Ensuite, nous recommençons le cycle lorsque nous aurons atteint un maximum de luminosité:
  −
 
  −
<nowiki># maximum et minimum de largeur d'impulsion, qui correspond
  −
# au maximum et minimum de luminosité
  −
max_width = 200000
  −
min_width = 20000
  −
 
  −
# De combien faut il augmenter la largeur d'impulsion
  −
# à chaque étape
  −
wstep = 1500
  −
 
  −
 
  −
cur_width = min_width
  −
while True:
  −
  # Appliquer la largeur d'implusion sur le Canal PWM
  −
  tchannel.pulse_width(cur_width)
  −
 
  −
  # Faire une pause de 0.01 seconde.
  −
  # Ceci détermine le fréquence de modification de la largeur d'impulsion.
  −
  # C'est assez analogue à la notion d'images-par-seconde (frames-per-second)
  −
  sleep(0.01)
  −
 
  −
  # Augmenter la largeur d'impulsion
  −
  cur_width += wstep
  −
 
  −
  if cur_width > max_width:
  −
    cur_width = min_width</nowiki>
  −
 
  −
== Effet de battement ==
  −
Nous allons nous pencher sur l'effet de battement. Effet où la LED s'éclaire progressivement jusqu'à son maximum de luminosité puis diminue progressivement jusqu'a son minimum et recommence le cycle.
  −
 
  −
Pour atteindre cet effet, nous avons besoin d'inverser le signe de {{fname|wstep}} lorsque la luminosité atteint son maximum, et ré-inverser une nouvelle fois au minimum de luminosité. Il suffit alors de modifier la boucle {{fname|while}} pour qu'elle ressemble à ceci:
  −
 
  −
<nowiki>while True:
  −
  tchannel.pulse_width(cur_width)
  −
 
  −
  sleep(0.01)
  −
 
  −
  cur_width += wstep
  −
 
  −
  if cur_width > max_width:
  −
    cur_width = max_width
  −
    # Si on atteint le maximum, on passe en pas
  −
    # négatif.
  −
    wstep *= -1
  −
  elif cur_width < min_width:
  −
    cur_width = min_width
  −
    # Si on atteint le minimum, on repasse en pas
  −
    # positif.
  −
    wstep *= -1</nowiki>
  −
 
  −
== Exercice avancé ==
  −
{{traduction}}
  −
 
  −
You may have noticed that the LED brightness seems to fade slowly, but increases quickly. This is because our eyes interprets brightness logarithmically ([http://www.telescope-optics.net/eye_intensity_response.htm la loi de Weber]), while the LED’s brightness changes linearly, that is by the same amount each time. How do you solve this problem? (Hint: what is the opposite of the logarithmic function?)
  −
 
  −
== Addendum ==
  −
We could have also used the digital-to-analog converter (DAC) to achieve the same effect. The PWM method has the advantage that it drives the LED with the same current each time, but for different lengths of time. This allows better control over the brightness, because LEDs do not necessarily exhibit a linear relationship between the driving current and brightness.
      
{{MicroPython-Hack-fading-TRAILER}}
 
{{MicroPython-Hack-fading-TRAILER}}
29 917

modifications

Menu de navigation