ARDUINO
DEL ET PHOTORESISTANCES

Introduction

L'objectif est de tester :

Les câblages sont réalisés avec :

Caractéristiques d'une DEL

Caractéristiques d'une photorésistance

Sorties logiques

Câblage

Réaliser le montage ci-dessous pour allumer ou éteindre une ou plusieurs DEL.

Platine d'essai

Elle est constituée de trous, reliés électriquement entre eux selon les rangées montrées en rouge ci-dessous.

Programme

Le programme ci-dessous permet à la DEL verte de clignoter.

void setup() {
  pinMode(3, OUTPUT);
}

void loop() {
  digitalWrite(3, HIGH);
  delay(1000); // Attendre 1000 millisecondes
  digitalWrite(3, LOW);
  delay(1000); // Attendre 1000 millisecondes
}

Explications :

Elément de programmeDescription
voidDéfinit une fonction ne retournant aucune valeur
setup()Fonction exécutée une seule fois
loop()Fonction exécutée en boucle
pinMode(3, OUTPUT);Le connecteur 3 est défini en sortie
digitalWrite(3, HIGH);Le connecteur 3 délivre une tension de 5 V
digitalWrite(3, LOW);Le connecteur 3 délivre une tension de 0 V
delay(1000);Le programme se met en pause pendant 1000 ms soit 1 s
//Il s'agit d'un commentaire destiné au programmeur

Exercices

Modifier le programme pour :

void setup() {
  int i;
  for (i=1; i<6; i++) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  ...
}

Entrées analogiques

Câblage

Réaliser le montage ci-dessous. Le point de jonction entre la résistance et la photorésistance est relié à l'entrée analogique A0. Sa tension varie de 0 V à 5 V, selon la luminosité reçue par la photorésistance. Selon cette tension, la fonction analogRead(0) retourne un nombre compris entre 0 et 1023 :

Le programme basique ci-desssous permet de tester le fonctionnement.

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println(analogRead(A0));
  delay(1000);
}

Programme

Il s'agit ici de réaliser un dé numérique. On utilise cinq DEL, à chaque DEL correspond un nombre. Une DEL est allumée au hasard lorsque l'utilisateur passe la main au-dessus de la photorésistance.

void setup() {
  randomSeed(analogRead(1)); // initialise le générateur aléatoire avec une valeur au hasard
  for(int i=1;i<6;i++) {
    pinMode(i,OUTPUT);
  } 
}

void loop() {
  int luminosite1=analogRead(0);
  delay(100);
  int luminosite2=analogRead(0);
  if (luminosite2-luminosite1>100) {
    int nombre=random(1,6));
    digitalWrite(nombre,HIGH);
    delay(2000);
    digitalWrite(nombre,LOW);
  }
}

Exercices

Modifier le programme pour qu'une DEL s'allume lorsque le doigt reste au-dessus de la photorésistance.

Sorties pseudo-analogiques

Faire varier la luminosité d'une DEL

Nous utilisons une des sorties MLI (Modulation de Largeur d'Impulsions) ou PWM (Pulse Width Modulation). Elles sont repérées avec le caractère ~ (tilde) sur la carte. On envoie sur la sortie un nombre compris entre 0 et 255, converti en une tension de moyenne comprise entre 0 V et 5 V.

Testez le programme ci-dessous. Constatez que la DEL s'allume et éteint progressivement.

float periode=2.0;

void setup() {
  pinMode(3, OUTPUT);
}

void loop() {
  for (float t=0; t<periode; t=t+0.01) {
    analogWrite(3, 127.5+127.5*sin(t*2*PI/periode));
    delay(10);
  }
}

Explications :

Elément de programmeDescription
float periode=2; Le contenu de la variable globale "periode" est un nombre à virgule, auquel on affecte la valeur 2
for Pour mettre en place une boucle
analogWrite(); Cette fonction prend deux paramètres. Le numéro du connecteur et un nombre compris entre 0 et 255. 0 pour 0 V, 255 pour 5 V, 127.5 pour 2.5 V etc.
analogWrite(3, 127.5+...); Le connecteur 3 délivre une tension dont la moyenne est comprise entre 0 et 5 V selon le deuxième paramètre compris entre 0 et 255.

En mathématique, la fonction sin(x) :

En conséquence :

Générer un courant triphasé

Il s'agit de générer trois tensions sinusoïdales, déphasées de 120° les unes par rapport aux autres. Dans le code ci-dessous, la fréquence de départ est de 5 Hz. Elle est augmentée ou diminuée, en envoyant les caractères a ou d sur la liaison série.

#define ph1 3
#define ph2 5
#define ph3 6
float i=0.0;
int nb=200;

void setup() {
  pinMode(ph1,OUTPUT);
  pinMode(ph2,OUTPUT);
  pinMode(ph3,OUTPUT);
  Serial.begin(115200);
}

void loop() {
  if (Serial.available()) {
    char caractere = Serial.read();
    if (caractere == 'a') { if (nb>50) { nb = nb-40; } }
    if (caractere == 'd') { if (nb<400) { nb = nb+40; } }
    Serial.println(nb);
  }
  analogWrite(ph1, sin(i)*127.5+127.5);
  analogWrite(ph2, sin(i+2*PI/3)*127.5+127.5);
  analogWrite(ph3, sin(i+4*PI/3)*127.5+127.5);
  i=i+PI*2/nb;
  delay(1);
}

Ce code peut être utilisé pour piloter un moteur triphasé. Toutefois :