| Les deux révisions précédentesRévision précédente | |
| issue107:python [2016/04/12 08:37] – erlevo | issue107:python [2016/04/12 19:05] (Version actuelle) – erlevo |
|---|
| Il vous faut un Raspberry Pi, une carte d'expérimentation, deux LED,une rouge et une blanche, deux résistances de 220 Ohms et 3 fils de raccordement. | Il vous faut un Raspberry Pi, une carte d'expérimentation, deux LED,une rouge et une blanche, deux résistances de 220 Ohms et 3 fils de raccordement. |
| |
| Pour cet exemple de câblage, j'utilise le Pi original. Si vous avez un Pi B+ ou 2B (ou encore le tout nouveau 3), les broches considérées sont exactement les mêmes. | Pour cet exemple de câblage, j'utilise le Pi original. Si vous avez un Pi B+ ou 2B (ou encore le tout nouveau 3), les broches concernées sont exactement les mêmes. |
| |
| Pour éviter de s'emmêler les pinceaux (de mon côté), les Cathodes (côté Négatif) des LED sont connectées aux résistances, qui sont connectées, elles, à la terre, et les Anodes (côté Positif) sont connectées par les fils de raccordement aux broches du Pi. Le côté positif de la LED est habituellement indiqué par la broche la plus longue et le côté négatif est celui qui a un méplat sur la base du LED. | Pour éviter de s'emmêler les pinceaux (de mon côté), les Cathodes (côté Négatif) des LED sont connectées aux résistances, qui sont connectées, elles, à la terre, et les Anodes (côté Positif) sont connectées par les fils de raccordement aux broches du Pi. Le côté positif de la LED est habituellement indiqué par la broche la plus longue et le côté négatif est celui qui a un méplat sur la base du LED. |
| Je n'expliquerai pas le code tout de suite. Il suffit de le copier tel quel dans l'éditeur. J'en parlerai après. | Je n'expliquerai pas le code tout de suite. Il suffit de le copier tel quel dans l'éditeur. J'en parlerai après. |
| |
| Une fois le code rentré correctement, lancez-le et regardez ce qui se passe. | Une fois le code entré correctement, lancez-le et regardez ce qui se passe. |
| |
| La révélation | La révélation |
| Si vous avez prêté attention aux articles depuis le début, vous avez sans doute compris ce que fait le code. Sinon, ne vous tracassez pas : une explication suivra. | Si vous avez prêté attention aux articles depuis le début, vous avez sans doute compris ce que fait le code. Sinon, ne vous tracassez pas : une explication suivra. |
| |
| Les LED ne sont ni allumées ni éteintes, mais, à la place, elles basculent rapidement entre On et Off. Puisque j'ai bien dit plus tôt que l'on ne peut émettre (ou lire) un voltage On/Off (ou 1/0 ou High/Low), comment est-ce possible ? | Les LED ne sont ni allumées ni éteintes, mais, à la place, elles basculent rapidement entre allumé et éteint. Puisque j'ai bien dit plus tôt que l'on ne peut émettre (ou lire) un voltage On/Off (ou 1/0 ou High/Low), comment est-ce possible ? |
| |
| Nous utilisons un truc appelé PWM ou Pulse Width Modulation (modulation de largeur d'impulsions). Nous respectons toujours les règles, mais nous les contournons un peu dans notre intérêt. Les images ci-dessous, de mon oscilloscope connecté au projet, devront vous aider à comprendre un peu mieux. À ce stade, nous nous occuperons d'une seule LED. | Nous utilisons un truc appelé PWM ou Pulse Width Modulation (modulation de largeur d'impulsions). Nous respectons toujours les règles, mais nous les contournons un peu dans notre intérêt. Les images ci-dessous, de mon oscilloscope connecté au projet, devront vous aider à comprendre un peu mieux. À ce stade, nous nous occuperons d'une seule LED. |
| In the picture above, we have a duty cycle of about 5%. In this case the LED is turned on for such a short time, that it is extremely dim and for all intents and purposes it is off.** | In the picture above, we have a duty cycle of about 5%. In this case the LED is turned on for such a short time, that it is extremely dim and for all intents and purposes it is off.** |
| |
| Si nous envoyons un Low au pin GPIO vers la LED, cela fait zéro volt. La LED ne reçoit rien sur l'Anode et elle est donc éteinte. Dans les deux derniers articles, nous avons allumé la LED en envoyant un High à l'Anode de la LED. Ainsi, dans la première instance, nous avons un zéro et, dans la seconde, un 1. Exactement ce que nous avons supposé... soit Off soit On. | Si nous envoyons un Low sur la sortie GPIO de la LED, cela fait zéro volt. La LED ne reçoit rien sur l'Anode et elle est donc éteinte. Dans les deux derniers articles, nous avons allumé la LED en envoyant un High à l'Anode de la LED. Ainsi, dans la première instance, nous avons un zéro et, dans la seconde, un 1. Comme prévu... soit Off soit On. |
| |
| Cette fois-ci, nous varions le laps de temps où le signal GPIO est High et Low. Si nous le faisons lentement, les LED clignoteraient en réponse au voltage. Dans le cas de cette version, nous basculons entre les deux états très rapidement, tout en changeant le laps de temps pendant lequel il est On comparé à Off, ce qui s'appelle le duty cycle (le cycle de service). | Cette fois-ci, nous varions le laps de temps où le signal GPIO est High et Low. Si nous le faisons lentement, les LED clignoteraient en réponse au voltage. Dans le cas de cette version, nous basculons entre les deux états très rapidement, tout en changeant le laps de temps pendant lequel il est On comparé à Off, ce qui s'appelle le rapport cyclique. |
| |
| Comme vous pouvez le voir, le signal est On pour environ 80 % du temps et Off pour environ 20 %, ce qui ferait un cycle de service de 80 %. En faisant cela rapidement, la LED réagit en s'assombrissant un peu en dessous du 100 % On sans cesse. Pendant la boucle du programme, le cycle de service change et le High est rendu plus long ou plus court, selon la partie précise de la boucle. Dans l'image ci-dessus, le cycle de service est à environ 5 %. Dans ce cas, la LED est allumée pendant si peu de temps qu'elle est extrêmement sombre et, pour ainsi dire, elle est Off. | Comme vous pouvez le voir, le signal est On pendant environ 80 % du temps et Off pendant 20 %, ce qui ferait un rapport cyclique de 80 %. En faisant cela rapidement, la LED réagit en s'assombrissant un peu en dessous du 100 % de manière continue. Durant la boucle du programme, le rapport cyclique change et le High est rendu plus long ou plus court, selon telle ou telle partie de la boucle. Dans l'image ci-dessus, le rapport cyclique est d'environ 5 %. Dans ce cas, la LED est allumée pendant si peu de temps qu'elle est extrêmement sombre et, pour ainsi dire, elle est Off. |
| |
| **Now, let’s start taking apart the code. | **Now, let’s start taking apart the code. |
| red = GPIO.PWM(24,100) | red = GPIO.PWM(24,100) |
| |
| Dans ces cinq lignes, nous avons réglé le mode GPIO sur BCM et configuré le pins GPIO 24 (pin physique 9) et 25 (pin physique 11) comme pins de sortie. Nous avons déjà fait cela. Maintenant, nous réglons les valeurs du PWM à un cycle de service de 100 %. | Dans ces cinq lignes, nous avons réglé le mode GPIO sur BCM et configuré le pins GPIO 24 (pin physique 9) et 25 (pin physique 11) comme pins de sortie. Nous avons déjà fait cela. Maintenant, nous réglons les valeurs du PWM à un rapport cyclique de 100 %. |
| |
| white.start(0) # start white led on 0 percent duty cycle (off) | white.start(0) # Démarrer la LED blanche avec un rapport cyclique de 0% (off) |
| |
| red.start(100) # red fully on (100%) | red.start(100) # La rouge allumée en permanence (100%) |
| |
| Ensuite, nous allumons la LED rouge (100%) et réglons la LED blanche à 0 volts. | Ensuite, nous allumons la LED rouge (100%) et réglons la LED blanche à 0 volts. |
| Nous réglons la variable pause_time à 0,05 seconde. Cela la rend assez rapide pour (je l'espère) ne pas permettre un scintillement. | Nous réglons la variable pause_time à 0,05 seconde. Cela la rend assez rapide pour (je l'espère) ne pas permettre un scintillement. |
| |
| Dans le segment de code suivant, nous faisons les boucles. L'objectif de la première boucle est de rendre la LED blanche plus « brillante » et la LED rouge plus « sombre ». Celui de la deuxième est d'inverser le processus. Prenons la première boucle comme exemple : nous utilisons une boucle FOR pour régler la valeur de i, puis mettons le cycle de service pour la LED blanche à i et celui de la LED rouge à 100-i. | Dans le segment de code suivant, nous faisons les boucles. L'objectif de la première boucle est de rendre la LED blanche plus « brillante » et la LED rouge plus « sombre ». Celui de la deuxième est d'inverser le processus. Prenons la première boucle comme exemple : nous utilisons une boucle FOR pour régler la valeur de i, puis mettons le rapport cyclique de la LED blanche à i et celui de la LED rouge à 100-i. |
| |
| Remarquez que nous l'avons entouré d'un ensemble TRY...EXCEPT, ce qui permet au programme de s'exécuter jusqu'à ce que l'utilisateur fasse CTRL+C. Quand cela arrive, nous quittons le côté TRY afin de pouvoir faire le code de nettoyage. | Remarquez que nous l'avons entouré d'un ensemble TRY...EXCEPT, ce qui permet au programme de s'exécuter jusqu'à ce que l'utilisateur fasse CTRL+C. Quand cela arrive, nous quittons le côté TRY afin de pouvoir faire le code de nettoyage. |