ARDUINO UNO
INFORMATIQUE EMBARQUEE

Introduction

Il s'agit ici d'une introduction à l'informatique embarquée basé sur une carte Arduino Uno. On utilisera :

Caractéristiques d'une carte Arduino Uno

Caractéristiques des DEL

Expérimenter

Test préliminaire

Avant de commencer à programmer, on vérifie que tout fonctionne.

void setup() {
  pinMode(13, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);  // la DEL émet de la lumière
  delay(1000);             // on attend une seconde
  digitalWrite(13, LOW);   // la DEL cesse d'émettre de la lumière
  delay(1000);             // on attend une seconde
}

Explications sur le programme

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);Le connecteur 13 est défini en sortie
digitalWrite(13, HIGH);Le connecteur 13 délivre une tension de 5 V
digitalWrite(13, LOW);Le connecteur 13 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

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);  
}

Programmer

Signal de détresse

Envoyer de manière répétée le signal de détresse SOS en code Morse. La DEL de votre choix doit clignoter :

Conventions de cadence :

Feu tricolore

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

Chenillard

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() {
  ...
}

Clignottement aléatoire

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

Pour aller plus loin

Faire varier la luminosité d'une DEL

Nous utilisons une des sorties pseudo-analogiques, nommées 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 :

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. Dans le code ci-dessous, la fréquence est de 0,5 Hz.

#define phase1 3
#define phase2 5
#define 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.01) {
    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(10);
  }
}