jeudi 31 mars 2016

Faire clignoter une DEL avec Arduino

Ce qui est sympa avec les cartes Arduino, c'est qu'il ne s'écoule que très peu de temps entre le déballage de la carte et les premiers montages, mais ça peut également être problématique si l'on ne prend pas le temps de faire les choses correctement !

Pour ma part, je suis en 4ème année d'école d'informatique et je n'ai pas étudié d'électronique depuis ma première année de classe préparatoire PCSI en 2010, donc autant dire que mes souvenirs sont plutôt flous... Heureusement que j'ai un ami ingénieur en génie électrique patient et prêt à m'aider. :)

Du coup reprise des bases avec loi d'Ohm, loi des mailles, etc. pour me remettre au point et éviter de détruire une nouvelle carte, et je propose ici une petite mise en application calculée et détaillée pour faire clignoter une DEL avec une Arduino Nano.

  • Caractéristiques de la carte :
Le site officiel Arduino nous indique que les broches digitales de la Nano délivrent une tension de 5 V et peuvent fournir du courant jusqu'à 40 mA.

  • Caractéristiques de la DEL :
Une DEL verte de 5 mm de diamètre récupérée dans mon bazar dont je ne connais pas les propriétés... Toutefois, si je me renseigne un peu sur ce type de DEL, on devine une tension de seuil entre 2,2 et 2,5 V, et une intensité minimale nécessaire de 10 mA

  • Calcul de la résistance à utiliser :
En choisissant une tension de seuil pour la DEL à 2,3 V et sachant que les broches de la Nano délivrent 5 V, on applique une petite méthode des mailles :

UNano = UDEL + Urésistance ⇔ Urésistance = UNano - UDEL = 5 - 2,3 = 2,7 V

On applique maintenant la loi d'Ohm :

Urésistance = R * I ⇔ R = Urésistance / I = 2,7 / 0,010 = 270 Ω

On sait donc que pour que la DEL soit traversée par un courant de 5 V et 10 mA, il faut placer une résistance de 270 Ω avec elle en série.

  • Mise en œuvre :
N'ayant à disposition que des résistances de 560 Ω pour l'instant, je vais en utiliser une à la place de celle de 270 Ω. L'intensité du courant sera alors réduite et la DEL clignotera plus faiblement.

Ceci peut également être vérifié par le calcul avec la loi d'Ohm :

Urésistance = R * I ⇔ I = Urésistance / R = 2,7 / 560 = 0,005 A = 5 mA

En utilisant une résistance de 560 Ω, l'intensité du courant vaudra 5 mA, une valeur bien inférieure aux 40 mA que peuvent fournir les broches, et donc sans danger pour la Nano.

Schéma du montage :


Photo du montage en action :


  • Code Arduino :
#define pinLed 2 // Constante préprocesseur.

void setup()

{
  
  pinMode(pinLed, OUTPUT); // Broche pinLed fixée en sortie.

}


void loop()

{
  
  digitalWrite(pinLed, HIGH); // La DEL s'allume...
  
  delay(500);                 // Pendant 500 ms...
  
  digitalWrite(pinLed, LOW);  // Puis s'éteint...
  
  delay(500);                 // Pendant 500 ms..

}

Rien d'exceptionnel pour ce code : déclaration d'une constante préprocesseur pinLed valant 2 correspondant à la broche digitale 2, déclaration de cette broche en sortie, puis clignotement avec délai.

Enfin voilà, si tout va bien la DEL clignote maintenant !

Cet exemple a été fait et refait un bon paquet de fois sur Internet, mais là c'était mon tour, et je tenais à faire ça calculs à l'appui et non pas en prenant des valeurs au hasard.


  • Mise à jour du 13/07/2016 :
C'est avec le temps qu'on apprend, et comme du temps s'est écoulé depuis la publication de cet article, je peux y apporter une légère modification : les deux digitalWrite(pin, state) de la fonction loop() peuvent être remplacés par une même ligne comme dans le morceau de code suivant.

void loop()
{

  digitalWrite(pinLed, !digitalRead(pinLed));

  delay(500);

}

Pour apporter quelques explications : on garde la fonction digitalWrite(pin, state) ainsi que notre pinLed, mais le state est remplacé par ce !digitalRead(pinLed). Ce dernier terme permet de prendre l'inverse (!) de l'état actuel (digitalRead(pin)) de la broche indiquée (pinLed), ce qui en langage humain devient "change l'état actuel de la broche pour son opposé", ce qui effectue le travail demandé pour moitié moins d'expressions !

Aucun commentaire:

Enregistrer un commentaire