L'objectif est de tester :
Les câblages sont réalisés avec :
Réaliser le montage ci-dessous pour allumer ou éteindre une ou plusieurs DEL.
Elle est constituée de trous, reliés électriquement entre eux selon les rangées montrées en rouge ci-dessous.
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 programme | Description |
---|---|
void | Dé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 |
Modifier le programme pour :
void setup() { int i; for (i=2; i<7; i++) { pinMode(i, OUTPUT); } } void loop() { ... }
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); }
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=2;i<7; 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); } }
Modifier le programme pour qu'une DEL s'allume lorsque le doigt reste au-dessus de la photorésistance.
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 programme | Description |
---|---|
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 :
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 :