ARDUINO UNO
INFORMATIQUE EMBARQUEE

Objectif

Le but est de mettre en oœuvre un microcontrôleur pour de l'informatique embarquée. Il s'agit ici de l'ATMega328P, présent sur la carte Arduino UNO, programmé dans un dérivé du C++. On utilisera :

Caractéristiques de la carte Arduino UNO

Caractéristiques des DEL

Comprendre

Test préliminaire

Avant de commencer un projet, on vérifie que tout fonctionne.

void setup() {
  pinMode(13, OUTPUT);
}
void loop() {
  // la DEL clignote
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

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(13, OUTPUT);Connecteur 13 défini en sortie
digitalWrite(13, HIGH);Connecteur 13 délivrant 5 V, la DEL s'allume
digitalWrite(13, LOW);Connecteur 13 délivrant 0 V, la DEL s'éteint
delay(1000);Programme mis en pause pendant 1000 ms soit 1 s
//Commentaire destiné au programmeur

Exemple de réalisation

Câblage

Réaliser le montage ci-dessous, qui associe plusieurs DEL aux connecteurs repérés 2 à 6.

Programme

Tester le programme suivant :

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
}
void loop() {
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  delay(1000);
  digitalWrite(3, HIGH);
  digitalWrite(2, LOW);
  delay(1000);  
}

Pratiquer

Signal de détresse

SOS est l'interprétation en code Morse du signal de détresse • • • ➖ ➖ ➖ • • •, signé à la convention radiotélégraphique internationale de Berlin le 3 novembre 1906.

Emettre un SOS lumineux répétitif avec la DEL de votre choix. On convient qu'un • dure 200 ms et qu'un ➖ dure 3 fois plus longtemps.

Feu tricolore

Simuler le fonctionnement d'un feu tricolore avec trois DEL de couleurs vert, orange et rouge  :

Chenillard

Un chenillard est une rangée de DEL qui s'allument et s'éteignent les unes à la suite des autres, de manière à créer un effet lumineux.

Réaliser un chenillard avec les cinq DEL alignées, en complétant le code ci-dessous.

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

void loop() {
  ...
}

Approfondir

Clignottement aléatoire

Plus difficile maintenant : A l'aide de la fonction random(), faire clignoter les cinq DEL de manière aléatoire, toutes les demi-secondes.

Faire varier la luminosité d'une DEL

Nous utilisons une sortie pseudo-analogique repérée avec le caractère ~ (tilde) sur la carte. Un nombre compris entre 0 et 255 affecté à la sortie engendre sur celle-ci une tension moyenne allant de 0 à 5 V : 0 pour 0 V, 255 pour 5 V, 127 pour 2.5 V etc.

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.1) {
    analogWrite(3, 127.5+127.5*sin(t*2*PI/periode));
    delay(100);
  }
}

Explications :

Elément de programmeDescription
float periode=2; La variable globale periode contient un nombre à virgule de valeur 2
for Pour mettre en place une boucle
analogWrite(); Cette fonction prend deux paramètres : Le numéro du connecteur et un nombre allant de 0 à 255
analogWrite(3, 127+...); La tension moyenne sur le connecteur 3 varie de 0 à 5 V selon la valeur du deuxième paramètre

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

En conséquence :

Simuler 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. Testez le programme ci-dessous. La période de 2 s équivaut à une fréquence de 0,5 Hz.

int phase1=3;
int phase2=5;
int phase3=6;
float periode=2.0;

void setup() {
  pinMode(phase1, OUTPUT);
  pinMode(phase2, OUTPUT);
  pinMode(phase3, OUTPUT);
}

void loop() {
  for (float t=0; t<periode; t=t+0.1) {
    analogWrite(phase1, 127.5+127.5*sin(t*2*PI/periode));
    analogWrite(phase2, 127.5+127.5*sin(t*2*PI/periode+2*PI/3));
    analogWrite(phase3, 127.5+127.5*sin(t*2*PI/periode+4*PI/3));
    delay(100);
  }
}