Prise en main d’un microcontrôleur

, par David Latouche

Cet article est une synthèse des notions de base à maîtriser afin d’utiliser une carte à microcontrôleur de type ARDUINO TM. A la fin de cet article, à travers des tutoriels vidéos, nous vous proposons une prise en main progressive du codage d’un microcontrôleur à travers l’exemple d’une carte de type ARDUINO TM dans la perspective de son utilisation dans le cadre des nouveaux programmes de Physique-Chimie du lycée.

TraAM 2018 - 2019
« Le codage et l’algorithmique pour l’enseignement de la physique-chimie »


Carte à microcontrôleur de type ARDUINO TM

ARDUINO TM

Un microcontrôleur est un circuit intégré de faible dimension qui rassemble les éléments essentiels nécessaires au fonctionnement d’un ordinateur : processeur, mémoires (ROM et RAM), unités périphériques et interfaces d’entrées-sorties.

Les microcontrôleurs sont fréquemment utilisés dans des systèmes embarqués, en robotique et en domotique. Relié à différents types de capteurs, un microcontrôleur peut être programmé afin de produire des signaux électriques ou acquérir des mesures de grandeurs physiques afin de mieux comprendre les lois régissant un phénomène. Les cartes à microcontrôleur de type ARDUINO TM sont les plus populaires en raison de leur robustesse et de leur faible coût.

Exemple : la carte ARDUINO TM modèle UNO

Un micro-contrôleur permet, à partir d’événements détectés par des capteurs, de programmer et commander des actionneurs. Une carte Arduino TM est donc une interface programmable.

PNG - 79.2 ko
Un exemple de chaîne incorporant un microcontrôleur
Entrées / sorties d’un microcontrôleur

Dans le cadre des nouveaux programmes de Physique-Chimie du lycée c’est la première partie de cette chaîne (capteurs - entrées) qui sera principalement mobilisée.

L’une des cartes la plus utilisée est la carte Arduino TM modèle UNO. La conception matérielle (schémas électroniques et typons) est distribuée sous licence Creative Commons (attribution Share-Alike 2.5). Le code source de l’environnement de programmation et les bibliothèques embarquées sont disponibles sous licence LGPL. Une grande communauté d’amateurs et de passionnés contribuent à développer des applications et à les partager sur le net.

De nombreux autres modèles de cartes à microcontrôleur, compatibles ou pas avec ARDUINOTM, existent sur le marché.

Carte ARDUINO TM modèle UNO

  • Les entrées / sorties numériques (ports D0 à D13)
    • Chacun des ports D2 à D13 (ces ports sont repérés de 2 à 13 sur la carte ARDUINO TM) peut être configuré, via une interface de programmation, en entrée ou en sortie. Les signaux acheminés par ces connecteurs sont des signaux logiques, c’est-à-dire qu’ils ne peuvent prendre que deux états possibles : HIGH (HAUT ; 5,0 V) ou LOW (BAS ; 0 V), par rapport au connecteur de masse GND, qui, quant à lui, est toujours par définition à 0 V.
    • Remarques : les ports D0 et D1 sont réservés à la communication série, il ne faut donc pas les utiliser pour autre chose. Le port D13 est relié à la LED de test « L » sur la carte : quand cette sortie est dans l’état HIGH, la LED de test s’allume, dans l’état LOW elle s’éteint.
    • Attention : ces connecteurs ne peuvent pas fournir en sortie un courant supérieur à 40 mA, ce qui interdit par exemple, de brancher directement un moteur sur une sortie numérique.
    • PWM (Pulse Width Modulation) : la technique de modulation à largeur d’impulsion, permet de simuler un signal analogique (entre 0 V et 5 V) à partir d’un signal numérique possédant seulement deux états possibles (HIGH : 5 V et LOW : 0 V). Pour cela, on joue sur le rapport cyclique du signal numérique produit. En contrôlant le rapport du temps passé dans l’état HIGH par rapport au temps passé dans l’état LOW, on peut faire varier la valeur moyenne de la tension sur ces ports entre 0 et 5 V. Le schéma ci-dessous illustre ce principe en représentant la variation au cours du temps de la tension du port numérique 3 utilisé en sortie PWM pour différentes tensions.
PNG - 76.6 ko
Principe du PWM
Extrait de la "La physique autrement", université de Paris-Saclay
  • Côté programmation, la fonction permettant de fixer le rapport cyclique de la PWM est la fonction analogWrite(pinPWM, rapportCyclique) ou le premier paramètre désigne l’un des 6 ports numériques (3, 5, 6, 9, 10, 11) pouvant fonctionner en PWM (repérés par un tilde). Le deuxième argument désigne la valeur du rapport cyclique dont la valeur peut varier entre 0 (0 %) et 255 (100 %).
  • Exemple : si rapportCyclique = 191 (soit environ 75% de 255), la valeur moyenne de la tension de sortie sera de 75 % de 5,0 V soit 3,75 V.
  • Les entrées analogiques (ports A0 à A5)
  • Une entrée analogique se comporte comme un voltmètre : la carte lit la tension qui est appliquée sur le port correspondant. Cependant les entrées analogiques d’un microcontrôleur codent les tensions (5,0 V max) qui leurs sont appliquées sous la forme d’un nombre entier compris entre 0 et 1023. Le microcontrôleur transforme donc la valeur réelle de la tension appliquée en sa valeur numérique (0 à 1023). C’est le travail du convertisseur analogique/numérique (CAN).
    • Contrairement aux entrées/sorties numériques qui ne peuvent prendre que deux états possibles HIGH et LOW, ces six entrées (ports A0 à A5) peuvent admettre 1024 valeurs analogiques comprises entre 0 V (0) et 5,0 V (1023).
    • La précision de ces entrées a donc pour ordre de grandeur environ 5 mV (5 V / 1024).
  • La "breadboard"
    • Les composants électroniques (dipôles passifs ou actifs, capteurs...) utilisés par la carte à microcontrôleur sont disposés sur une platine électronique appelée "breadboard".
    • Les caractéristiques pour connecter des composants électroniques sur la "breadboard" sont rappelées ci-dessous.

Breadboard

Le principe du codage d’une carte de type ARDUINO TM

IDE ARDUINO TM

Sur la page d’accueil officielle du projet ARDUINO TM, vous trouverez toutes les informations utiles au codage de ce type de carte. Vous pouvez télécharger sur votre machine depuis cette page, l’environnement de développement intégré (IDE) qui vous permettra de créer vos programmes afin de piloter votre carte ARDUINO TM. Le site propose également un IDE en ligne ne nécessitant aucune installation sur votre machine.

Structure de base d’un programme ARDUINO TM :

Le langage ARDUINO TM s’appuie sur le langage de programmation C++. La structure minimale de tout programme ARDUINO TM a la forme rappelée ci-dessous :

PNG - 69.2 ko
Structure de base
Programme ARDUINO TM

Voici un exemple concret de programme ARDUINO TM :

  • (1) : déclaration des variables (optionnelle)
  • (2) : initialisation / configuration des entrées sorties via la fonction setup()
  • (3) : programme principal qui s’exécute en boucle via la fonction loop()

Les variables :

  • En raison de la faible quantité de mémoire embarquée sur ce type de carte à microcontrôleur, la gestion du type associé à chaque variable (ou constante) doit être rigoureuse.
  • Chaque variable (ou constante) devra être déclarée préalablement dans le programme ARDUINO TM avec le type compatible avec les valeurs qu’elle est susceptible de prendre.
Quelques types de variables ARDUINO TM
Type de variableTaille en bitsTaille en octetsValeurs stockées
boolean
1
1
True ou False
unsigned char
8
1
0 à 255
char
8
1
-128 à 127
unsigned int
16
2
0 à 65535
int
16
2
-32768 à 37767
float
32
4
-3.4E-38 à 3.4E38

Les fonctions

Une fonction est un bloc d’instructions que l’on peut appeler à tout endroit du programme. Le langage Arduino est constitué d’un certain nombre de fonctions natives, par exemple analogRead(), digitalWrite() ou delay(). ll est possible de déclarer ses propres fonctions dans un programme. Par exemple :

Pour exécuter cette fonction dans le programme, il suffira de taper la commande : clignote() ;

On peut également faire intervenir un ou des paramètres d’entrée dans une fonction :

Il suffira d’indiquer leurs valeurs lors de l’appel de la fonction : clignote(5,1)

Les structures de contrôle

Les structures de contrôle sont des blocs d’instructions qui s’exécutent en fonction du respect d’un certain nombre de conditions.

  • if...else : exécute un code si certaines conditions sont remplies et éventuellement exécutera un autre code avec l’instruction sinon. Exemple.

  • while : exécute un code tant que certaines conditions sont remplies. Exemple :

  • for : exécute un code pour un certain nombre de fois. Exemple :

  • switch/case : fait un choix entre plusieurs codes parmi une liste de possibilités. Exemple :

Base documentaire du langage :

Le langage de programmation ARDUINO, peut être subdivisé en trois grandes parties : structure, valeurs (variables et constantes) et fonctions. Vous pouvez accéder à la base documentaire officielle.

A la découverte du codage d’une carte ARDUINO TM

Les vidéos suivantes réalisées par David LATOUCHE (Lycée Saint-Exupéry, Mantes-la-Jolie) vous permettront d’acquérir progressivement les bases nécessaires à la programmation d’une carte de type ARDUINO TM dans le cadre des nouveaux programmes de Physique-Chimie du lycée. Bonne découverte !