Au sommaire :
LED
Définition
Une diode électroluminescente (abrégé en DEL en français, ou LED, de l’anglais : light-emitting diode), est un dispositif opto-électronique capable d’émettre de la lumière lorsqu’il est parcouru par un courant électrique. Une diode électroluminescente ne laisse passer le courant électrique que dans un seul sens (le sens passant, comme une diode classique, l’inverse étant le sens bloquant) et produit un rayonnement monochromatique ou polychromatique non cohérent à partir de la conversion d’énergie électrique lorsqu’un courant la traverse. (Wikipedia)
Technologie
Le LED est une diode « comme les autres » qui ne laisse passer le courant que dans un seul sens. Elle est constituée de deux semiconducteurs, un de type N et un de type P. Dans une diode « normale » la recombinaison des paires électrons-trous provoque une émission faible de photons infrarouges. La diode LED est spécialement conçue pour que la recombinaison électron-trou provoque l’émission de photons nombreux et situés dans le « visible ».
La LED est incluse dans un boîtier transparent. La partie inférieure de la LED (appelée substrat = support) est fixée au fond d’une coupelle servant de réflecteur. On voit cette coupelle ci-dessus. Elle fait partie de la plaque large de connexion. C’est la cathode de la diode (reliée au pôle – de l’alimentation). On peut voir un fil qui descend dans la coupelle. ce fil est relié à l’autre patte de la diode LED : l’anode (reliée au pôle + de l’alimentation).
Quand on regarde la LED depuis le dessus, on voit la coupelle (cercle sombre et plusieurs cercles concentriques au centre), le petit carré au milieu de la coupelle est le cristal de la LED. Les deux électrodes apparaissent de chaque côté sous forme d’un rectangle et on voit le fil qui relie la patte droite de la LED à l’anode. Remarquez le côté gauche de la LED qui comporte un méplat. C’est un des moyens pour repérer la cathode (pôle – de la LED).
Sur cette image on voit le petit cube au centre de la coupelle et le fil de connexion à l’anode (côté + de la LED). Cette fois la cathode (le méplat) est sur la droite.
La coupelle est très réfléchissante, ce qui garantit qu’un maximum de lumière sera renvoyé dans la bonne direction. Le boîtier de la LED est fait d’une résine transparente ou translucide colorée. Dans le cas ci-dessus il s’agit d’une LED rouge super brillante sans lentille (le dessus du boîtier est plat) dont le boîtier est totalement transparent.
LED Monochrome
|
Les LED représentées ci-dessus sont toutes monochromes. Elles émettent une seule couleur pour laquelle elles ont été fabriquées. Certaines LED sont transparentes, d’autres sont fabriquées à partir d’une résine colorée en fonction de la couleur émise par la LED. Vous en apprendrez plus sur les LED en lisant, par exemple, cet article sur le site de Sonelec.
[stextbox id=’warning’ caption=’Moyen mnémotechnique’]
Comment repérer l’anode (côté +) et la cathode (côté –) d’une LED ?
Regardez la représentation de la diode… D’un côté vous avez une lettre A, de l’autre un K : le A représente l’Anode et le K… la Kathode.
Encore mieux ! La patte la plus Kourte, celle qui est Koupée, correspond aussi à la Kathode : K = Courte, coupée, cathode !
Et pour finir, le méplat (à gauche ci-dessus) est lui aussi KOUPÉ, c’est donc la Kathode de notre LED, la patte qui va rejoindre le pôle – de l’alimentation…
[/stextbox]
Photos de LED
Ci-dessus des images de LED réalisées pour la préparation des articles et du livre sur Scratch. Elles sont en CC-BY-NC-SA et vous pouvez les utiliser comme vous voulez. Merci de mettre un lien vers cette page 😉
Tester une LED
En la connectant au 5v
J’ai souvent été interpelé dans les ateliers par des participants qui m’appellent en me disant : « J’ai bien suivi le tuto, j’ai relu le programme mais… la LED ne s’allume pas !« . Je leur demande si « avant » ils avaient testé la LED et sa connexion… Du coup j’obtiens un regard interrogateur du genre « Mais qu’est-ce qu’il raconte ?« … Je vous explique : quand vous connectez une LED, rien de plus simple. Mais :
- est-ce que la LED fonctionne ?
- est-ce que les fils sont bons ?
- est-ce que la résistance a la valeur qu’il faut ?
- est ce qu’elle est connecté dans le bon trou de la breadboard ?
- est-ce que les fils sont connectés sur les bonnes broches du GPIO ?
Comme je le dis souvent, dépanner ce n’est pas de la voyance ! Il faut vérifier, être sûr et certain, tester, réfléchir. Sinon on suit le tuto et si on a un peu de bol, le montage « tombe en marche » 😀
[stextbox id=’info’ caption=’Connectez en premier !’]Il est préférable de connecter d’abord les différents fils, sans mettre le Raspberry Pi sous tension. Quand tous les fils sont connectés, les connexions vérifiées (plutôt deux fois qu’une), vous pouvez relier le Raspberry Pi à son alimentation.[/stextbox]
Prenons un exemple : vous souhaitez allumer une LED en passant un GPIO à 1. Il sortira du 3,3v. Avant de connecter la LED au GPIO, on va tester l’ensemble du montage avec une alimentation 3,3v du Raspberry Pi. Si ça fonctionne, si tout est correct, la LED va s’allumer. Il n’y aura plus qu’à déplacer le fil de la broche 3,3v du Raspberry Pi vers la sortie GPIO que vous lui avez attribuée.
A défaut, si la LED ne s’allume pas, en général, le réflexe est de se dire que le programme c’est de la m… ne fonctionne pas et de se lancer dans des recherches plus ou moins à tâtons pour essayer de trouver où ce @$*!! d’auteur a pu faire une erreur 😉 Rarement la personne qui a câblé le montage remet en cause SON câblage (je suis le meilleur, je ne peux pas me tromper!). Et pourtant… Dans 80% des cas, la panne se situe entre la chaise et le clavier.
On va donc procéder méthodiquement. Connectez votre LED comme ceci : La cathode reliée par un fil noir à une broche de masse du connecteur GPIO. L’anode connectée via la résistance que vous utiliserez « en vrai » à la borne 3,3v du Raspberry Pi. Mettez le Raspberry Pi sous tension. La LED s’allume ? Tout va bien. Vous pouvez passer à l’étape suivante.
Si elle ne s’allume pas, inutile de continuer. Votre programme n’allumera JAMAIS la LED. Cherchez la panne, l’erreur, le composant défectueux. Dites vous que c’est une chance si ça ne fonctionne pas ! si ça fonctionne, on n’apprend rien. On apprend en cherchant, en testant.
Connectez la LED au GPIO que vous avez prévu dans le programme. Maintenant si le programme fait passer la sortie GPIO à 1 (3,3v) la LED va s’allumer. Utilisez par exemple le programme Scratch du livre pour allumer la LED.
[stextbox id=’warning’ caption=’Testez la LED avec un script SHELL’]Si vous voulez tester la LED avec un script shell c’est également possible. Rendez vous sur cette page pour en savoir plus.[/stextbox]
Allumer une LED avec un bouton poussoir
Pour commencer on va allumer une LED avec un bouton poussoir. Le Raspberry Pi sert uniquement à alimenter la LED. Pas besoin de programme Python, C ou Scratch pour l’instant.
Reliez le + 3,3v à une broche de l’interrupteur par un fil rouge. L’autre broche de l’interrupteur est connectée à la résistance. La résistance rejoint ensuite l’anode de la LED. La cathode de la LED rejoint une broche de masse (fil noir) du connecteur GPIO. Mettez le Raspberry Pi sous tension. La LED est éteinte. Appuyez sur le bouton poussoir. La LED s’allume.
Si elle ne s’allume pas voyez ci-dessus…
Lorsque c’est testé, vous avez une LED qui s’allume et un bouton poussoir. Allez, on branche le poussoir sur un port GPIO et la LED sur un autre port. On va allumer la LED avec un programme Scratch (voir livre Scratch et Raspberry Pi page 232). Un appui sur le bouton poussoir va piloter la LED (allumage, extinction, clignotement etc.)
[stextbox id=’info’ caption=’Hello World !’]Les grognons vous diront que c’est bien compliqué puisqu’il suffirait de connecter la LED et le bouton poussoir directement. C’est vrai ! Pourquoi passer par le Raspberry Pi pour allumer une LED ? Bin… Quand on sait comment allumer une LED, rien n’empêche de remplacer la LED par autre chose (un radiateur, un volet roulant…) et le bouton poussoir par un détecteur de lumière, un détecteur de présence…) et voilà le tout début d’une installation domotique. Et puis un appui sur le bouton poussoir produit un contact momentané. Quand vous relâchez, le contact est interrompu. Pourtant la LED s’allumera, s’éteindra, clignotera (plus ou moins vite) en fonction de vos actions sur le seul bouton poussoir…
Quand un programmeur découvre un nouveau langage, il commence souvent par faire afficher à l’écran « Hello World« . Cela lui permet d’appréhender les bases du langages et d’envoyer un message visible sur l’écran, ce qui confirme le bon fonctionnement. Allumer une LED c’est le « Hello World » du maker. C’est le début d’une longue aventure au pays des composants électroniques ![/stextbox]
j’ai un peu de mal à comprendre
je ne suis pas anonyme, je m’appelle François MOCQ
et je suis daltonien depuis ma naissance, ce qui ne m’a pas empêché de conduire, et d’être électronicien puis informaticien… Quand je fais référence aux daltoniens je parle de quelque chose que je connais bien, avec tous les problèmes que ça peut engendrer. Je n’ai fait aucune allusion aux vies des gens de peu :-P, moi… car ce n’est pas ce que j’en pense
Bonsoir François,
Je suis vraiment débutant et j’aimerai si possible comprendre comment utiliser vos infos concernant python pour la gestion de l’allumage de leds https://www.framboise314.fr/variation-de-puissance-electrique-via-raspberry/
le branchement OK la bibliotheque OK mais après je ne sais pas où coller le code, le lancer pour tester…?
Merci par avance
Bonjour
l’article est de Nicolas
Pour exécuter des programmes python vous pouvez les « coller »
dans un fichier texte que vous nommerez par exemple prog.py
puis vous exécutez ce programme avec la commande
python3 prog.py
(il faut être dans le répertoire du programme quand vous le lancez
sinon utilisez Thonny qui est fourni dans le menu à la rubrique programmation
il faudra apprendre à vous en servir, mais il y a de nombreux tutos
comme ici par ex. : https://ww2.ac-poitiers.fr/math/spip.php?article943
cdt
francois
J’ai testé le montage, sur mon PI4 avec une led et un bouton poussoir, en langage C sous WiringPI et en micropython.
D’abord avec une boucle qui surveille l’appui sur le bouton et qui allume une led, puis la même chose avec une fonction interruption : (wiringPiISR(BOUTON_PIN,INT_EDGE_FALLING,&interruptGPIO_porte) ).
Ca marche bien, je décide d’installer mon montage à la cave en remplaçant le poussoir par un interrupteur magnétique NF (normalement fermé).
Ca marche super et puis … je regarde le fonctionnement sur la semaine avant de le brancher à un autre montage que j’ai également réalisé avec des buzzers actifs et un transistor NPN.
Et là, argh, je m’aperçois que le bidule se déclenche « aléatoirement ». Plutôt vers 5H du matin à vrai dire.
Après quelques tergiversations, j’arrive à la conclusion (assez empiriquement) que ca doit venir du basculement heures pleines/heures creuses. Bref Je remonte mon appareillage et je re-teste à la cuisine. Après avoir lu quelques articles sur les modifs logicielles pour le bouncing etc …blablabla
1led, 1resistance de 1KOhms, 3 fils Dupont et une mini table de montage, je rebranche mon interrupteur NF sur le GPIO du PI4, je teste ok ca marche. …
Puis je lance, pour en avoir le codeur net, le mixeur de cuisine sur la même prise que le pi4… et là badaboum.
Personne ne nous dit que les appareillages électriques vont déclencher mon interruption qui surveille mon GPIO14…. et qui se déclenche quand il y a une baisse de tension 5Va 0V ??? , M’enfin quoi.
Bref c’est quoi ce binz, ami électricien, … François, on le mets où le condensateur pour isoler l’ alimentation 14W du PI4. Est ce que ce sera suffisant ?Nous aurions besoin des lumières d’un professionnel sur ce point.
Faire un montage pour allumer une led avec un bête bouton poussoir c’est bien (il n’y a que ça sur internet), mais on peut rien faire de plus pratique et fonctionnel ? Moi, mon alarme de porte de cave se déclenche dés qu’un appareil électrique domestique tire sur mon compteur EDF….
bonjour Jean Baptiste
je dirai soit un condo sur l’alim du Pi 470µ ou 1000µ, soit un UPS il y en a pour le pi qui a une batterie pour prendre le relais…
ok, merci pour la réponse rapide.
le montage actuel :
3,3V—————- > fil-1 de l’inter a effet de HAll (MC38)
masse — R1 ——> fil2
gpio27 ————> fil2
sur internet on parle de 1uF sur le GPIO :
comme cela ? – C: pour condo – …
3,3V—————- > fil-1 de l’inter a effet de HAll (MC38)
masse — R1 ———- > fil2
gpio27 —— (C) —— > fil2
ps : cela me laisse dubitatif.
– Sur le pg1 qui marche parfaitement sans perturbations électriques .
– Sur le pg2 (avec 1 interruption), dès que le presse agrumes est en rotation sur la même prise, on passe dans la fonction d’interruption (static void interruptGPIO_porte) systématiquement…
le montage est le même, seul le pg est different.
Finalement c’est bien gentil les interruptions mais sous un linux pi zero à 1Ghz le système sait bien gérer le multitâche et les processus lancés.
Avec le pg2 si vous enlevez le delay(20) dans la boucle (for(;;)) le monoprocesseur part à 100% …
(Je testerai plus tard sur un contrôleur ESP32S3 en arduino) .
cf. les 2 pg en C en question. A compiler avec -lwiringPi -lc
../..
pg1 – programme basique :
#define BOUTON_PIN 27 // detecteur de porte magnétique NF (normalement fermé) MC38
#include
#include
#include
#include
static void alarm(etat)
char etat;
{
if(etat)
puts(« alarm »);
}
static void fin(int sig)
{
printf(« \nfin alarm\n »);
alarm(0);
pinMode(BOUTON_PIN, INPUT);
digitalWrite(BOUTON_PIN,LOW);
exit(0);
}
int main(void)
{
char button;
if(wiringPiSetup() == -1)
return(-1);
// initialisation
pinMode(BOUTON_PIN,INPUT); //le port GPIO du detecteur de porte est configuré en lecture
alarm(0);
signal(SIGTERM, fin);
signal(SIGINT, fin);
signal(SIGQUIT, fin);
for(;;) {
button = digitalRead(BOUTON_PIN);
if(button == LOW)
alarm(1);
delay(20);//on attend 20ms entre chaque lecture.
}
return(0);
}
pg2 (avec une interruption):
#define BOUTON_PIN 27 // detecteur de porte magnétique NF (normalement fermé) MC38
// idx dummy dans domotique de pi pour la requete POST HTTP en JASON
#define PORTE 8
#define SERVEURIP « 127.0.0.1 »
#define PORT « xxxxx »
#define ON « On »
#define OFF « Off »
#define MAILTO « /usr/bin/python3 /home/pi/private/pymail »
#include
#include
#include
#include
#include
#include
#include
static void alarm(etat,id_detecteur)
char etat;
int id_detecteur;
{
char buffer[200];
if(etat) {
sprintf(buffer, »%s%s:%s%s%d%s%s%s > /dev/null »,
« curl -s \ »http:// »,
SERVEURIP,
PORT,
« /json.htm?type=command¶m=switchlight&idx= »,
id_detecteur,
« &switchcmd= »,
ON,
« \ » »);
system(buffer);
puts(buffer);
// envoi un mail
sprintf(buffer, »%s%s%d »,
MAILTO,
» -m Raspberry_Picave_ALARME_cave: »,
id_detecteur);
//system(buffer);
}
else {
sprintf(buffer, »%s%s:%s%s%d%s%s%s > /dev/null »,
« curl -s \ »http:// »,
SERVEURIP,
PORT,
« /json.htm?type=command¶m=switchlight&idx= »,
id_detecteur,
« &switchcmd= »,
OFF,
« \ » »);
system(buffer);
puts(buffer);
}
}
static void interruptGPIO_porte(void) {
alarm(1,PORTE);
}
static void fin(int sig)
{
printf(« \nfin alarm\n »);
alarm(0,PORTE);
pinMode(BOUTON_PIN, INPUT);
digitalWrite(BOUTON_PIN,LOW);
exit(0);
}
int main(void)
{
if(wiringPiSetup() < 0) {
fprintf (stderr, "Unable to setup wiringPi: %s\n", strerror (errno));
return(-1);
}
signal(SIGTERM, fin);
signal(SIGINT, fin);
signal(SIGQUIT, fin);
// initialisation
pinMode(BOUTON_PIN,INPUT); //le port GPIO du detecteur de porte est configuré en lecture
//if(wiringPiISR(BOUTON_PIN,INT_EDGE_RISING,&interruptGPIO_porte) < 0) {
if(wiringPiISR(BOUTON_PIN,INT_EDGE_FALLING,&interruptGPIO_porte) < 0) {
fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno));
return(-1);
}
alarm(0,PORTE);
//la boucle principale
for(;;) {
delay(20); // ATTENTION a laisser sinon le proc est a 100% … et vous mettez le feu à la barraque …
}
return(0);
}
Merci Jean Baptiste
effectivement il faut toujours une boucle pour « calmer » le CPU sinon il tourne à fond !