2013-01-19 Détecter et contrôler l’environnement physique avec les microcontrôleurs

Steve Jobs pensait que la révolution de l’informatique avait laissé la plupart des gens derrière lorsqu’il cofonda Apple Computer et s’engagea à construire des ordinateurs « pour les personnes ordinaires ». L’interface graphique pour utilisateur (GUI – Graphical User Interface) popularisée par Apple fut (et demeure encore) un succès retentissant, largement copiée par les autres fabricants, au point d’être aujourd’hui la norme pour la quasi-totalité des ordinateurs personnels.

Mais quand on parle d’ordinateur, la plupart des gens voient un stéréotype fait d’un écran, un clavier, une souris et parfois une unité centrale. Cet ordinateur reçoit de son utilisateur des données via des frappes au clavier, ou sous forme stockées dans une unité fixe ou amovible (disque dur, flash disk, CD, DVD, etc.), via un réseau informatique, etc. Il les traite ensuite selon un jeu d’instructions avant de donner un résultat, une réponse, en général a l’écran.

On distingue dans ce processus les trois grandes étapes du traitement informatique : l’entrée, le traitement et la sortie.

fig1b

Figure  1 – Flux informatique

Entrée et Sortie

Dans les applications traditionnelles, l’entrée (Input) est faite via le clavier et la souris. Mais il n’y a aucune raison de se limiter à cela. Parlons un peu des transducteurs.

Un transducteur est une pièce d’équipement, un système, qui convertit une forme d’énergie en une autre. Par exemple un microphone : il convertit l’énergie de la pression d’ondes sonores en une tension électrique. Les haut-parleurs sont aussi des transducteurs : ils effectuent la transformation inverse en convertissant une tension électrique en un train d’ondes acoustiques.

Le challenge pour permettre à un système informatique de détecter le monde physique devient dès lors celui de trouver les transducteurs adéquats pour convertir les différentes formes d’énergie : lumière, pression, chaleur, mouvement, contact, etc. en énergie électronique que l’ordinateur peut comprendre. Ces transducteurs d’entrée sont appelés senseurs. Ce sont des elements contrôlés par ordinateurs qui mesurent ou détectent des évènements dans le monde réel.

Pareillement, si l’on veut que les résultats du traitement de l’ordinateur servent à contrôler l’environnement physique, il faut pouvoir convertir les signaux électriques produits en une autre forme d’énergie. On utilise à cette fin des transducteurs de sortie également appelés actuateurs.

Ordinateur à usage général et microcontrôleurs

Lorsqu’il s’agit de détecter ou de contrôler l’environnement physique, on a tendance à utiliser des ordinateurs dédiés à la tâche et uniquement à elle, contrairement aux ordinateurs à usage général employés dans les activités de tous les jours. Un microcontrôleur est un tout petit ordinateur (plus petit en général que la paume de la main) contenant une unité de traitement, de la mémoire, et des ports d’entrée et de sortie qui lui permettent de recevoir des informations de senseurs et de contrôler des actuateurs.

Les dispositifs informatiques à microcontrôleurs sont en général conçus pour une fonction spécifique avant d’être « embarqués » dans un système physique plus large. On parle ainsi aussi couramment de « Systèmes embarqués » ou de dispositifs d’ « informatique physique ». Exemple : le système de contrôle du mélange air/carburant dans la plupart des voitures modernes. Les systèmes embarques peuvent aussi être utilisés pour développer des systèmes électroniques dans lesquels une partie importante de composants « discrets » est remplacée par du code embarque dans le microcontrôleur. On parle alors d’ « électronique programmable ».

Comme dans le monde des ordinateurs multimédias, il existe plusieurs types de microcontrôleurs développés par différents fabricants. Nous pouvons notamment citer les microcontrôleurs BasicX BX-24 de Netmedia, BASIC Stamp 2 de Parallax, Basic Atom Pro24 de Basic Micro. Ces microcontrôleurs, comme leurs noms l’indiquent, supportent un langage de programmation de haut niveau apparentée au BASIC. On peut aussi citer la famille de microcontrôleurs PIC de la firme Microchip. Ces derniers ont tendance à être plus chers que les premiers cite mais sont très appréciés dans les applications professionnelles.

Dans cet article et ceux qui vont lui faire suite, nous allons exposer et utiliser un autre microcontrôleur : Arduino. Il s’agit d’un microcontrôleur Open Source. Cela n’implique pas que le matériel peut être obtenu gratuitement, mais plutôt que le schéma du microcontrôleur est dans le domaine public. L’absence de droit propriétaires sur le design et le logiciel rend également Arduino accessible à peu de frais.

Item Notes URL fabricant
Parallax Basic Stamp 2 Très courant, mais pas aussi riche en fonctionnalités que les autres www.parallax.com
NetMedia BX-24 Environnement et langage de programmation légèrement complexes ; riche en fonctionnalités www.basicx.com
Basic Micro Basic Atom Pro 24 Environnement et langage de programmation simples ; riche en fonctionnalités www.basicmicro.com
Microchip PIC 18F452 Microcontrôleur de bas niveau ; pas recommandé aux débutants mais utile pour des projets nombreux www.microchip.com
Arduino Plateforme open source ; environnement de programmation et langage de programmation simples ; riche en fonctionnalités ; bas cout www.arduino.cc

Rien de tel qu’un exemple concret pour introduire Arduino. Nous allons effectuer un montage dans lequel la tension aux bornes d’un potentiomètre est lue par Arduino et transmise à un ordinateur.

Un potentiomètre est une résistance variable, c’est à dire un dispositif opposant une opposition variable au passage de l’électricité. Les résistances variables sont un type de transducteurs fréquemment rencontres pour les entrées analogiques : les thermistors présentent une résistance électrique variable en fonction de la chaleur. Ils peuvent être utilisés pour mesurer la chaleur ou la température ; la résistance des photorésistances quant à elle change en fonction de la lumière ambiante ; les résistances sensibles à la force varient en fonction de la force qui leur est appliquée ; les senseurs Flex présentent une résistance qui change selon l’angle dans lequel ils sont plies. Tous ces exemples sont des résistances variables, présentant deux bornes non polarisées, c’est-à-dire interchangeables. S’ils peuvent tous être schématiquement représentés par le symbole électrique d’une résistance variable, ils peuvent prendre des aspects réels (physiques) totalement différents. A titre illustratif, Smartswitch (www.smartswitch.com) produit et vend entre autre des résistances sensibles à la force sous forme de tapis. Connecte comme potentiomètre au système que nous allons développer ici, ce senseur permettrait par exemple de détecter la présence et le poids d’une personne marchant sur le tapis !

Pour notre projet, commençons par télécharger du site officiel d’Arduino (www.arduino.cc) la dernière version de l’environnement de développement intégré Arduino (IDE : Integrated Development Environment). Nous utilisons la version 1.0.1 sur Windows 7. L’installation est directe et intuitive. Une fois faite, l’IDE peut être lance en double-cliquant le fichier arduino.exe dans le répertoire d’installation (pour notre cas C :\Arduino) :

fig2

Figure 2 – Environnement  de développement intégré (IDE) Arduino

Précisons quelques concepts dans le jargon Arduino :

–          Sketch : un programme en code source

–          Vérification : compilation, c’est-à-dire traduction du code source en langage machine

L’IDE étant installé, voyons le matériel utilise.

Nous allons utiliser un microcontrôleur Arduino Uno (Arduino vient en effet en plusieurs saveurs) qui peut être acheté auprès de divers vendeurs en ligne. Nous pouvons également fournir directement une carte Arduino aux personnes intéressées (région de l’Afrique Centrale uniquement) (nous envoyer une demande a spbutsana@yahoo.fr pour cotation).

fig3

Figure 3 – Une carte Arduino Uno

La figure ci-dessous précise les différentes parties de l’Arduino :

fig4

Figure 4 – Les principales parties de l’Arduino

A part l’Arduino Uno, les matériels suivants seront aussi utilisés : un potentiomètre de 10 kΩ, une platine d’essai, et des fils de connexion, comme indique sur la figure suivante, ainsi qu’un ordinateur muni d’un port USB libre sur lequel sera affichée la valeur de tension lue par Arduino et un câble USB (nous n’utiliserons pas d’actuateur dans cet exemple)

fig5

Figure 5 – Matériels

Le circuit

Le pin d’alimentation +5V de l’Arduino doit être connecte au point + de la platine d’essai. Le pin d’alimentation GND de l’Arduino sera quant à lui connecte au point – de la platine.

Une des bornes d’extrémités du potentiomètre sera connectée a 5V sur la platine, tandis que l’autre sera connecte à la masse. Le point de sortie du potentiomètre (la patte du milieu) sera connecté à l’entrée analogique 0 (ANALOG IN 0) sur la carte Arduino.

fig6

Figure 6 – Schéma de montage

fig7

Figure 7 – Schéma de principe

fig8

Figure 8 – Montage physique

En tournant l’axe du potentiomètre, la tension à la patte du milieu change de manière continue (c’est-à-dire sans saut) de 5V à 0V. Cette tension analogique est lue comme entrée analogique par la carte Arduino au niveau de la patte 2. L’Arduino contient un convertisseur analogique a digital (ADC : Analog to Digital Converter) qui lit cette tension variable et la convertit a un nombre compris entre 0 et 1023. Une tension de sortie du potentiomètre correspond à une valeur ADC de 0 tandis que 5V correspond à 1023. Entre les deux extrêmes, la fonction analogRead() renvoie une valeur entre 0 et 1023 proportionnelle a la tension présentée par le potentiomètre.

Le code

La première chose à faire dans le programme est de démarrer les communications séries avec l’ordinateur, a 9600 baud, entre la carte Arduino et l’ordinateur, avec la ligne

Serial.begin(9600) ;

Ensuite, dans la boucle principale du code, on établit une variable du type int pour stocker la valeur de la tension venant du potentiomètre :

int sensorValue = analogRead(A0) ;

Pour convertir les lectures de 0 à 1023 en tension de 0V a 5V, on effectue un changement d’échelle linéaire avec une variable du type float :

float voltage = sensorvalue * (5.0/1023.0) ;

Enfin, le résultat de la détection doit être imprime sur la console serie avec la commande Serial.println() :

Serial.println(voltage)

Voici le listing complet du code :

/* Lecture d’une tension analogique
La tension analogique au pin 0 est lue puis imprimée sur le moniteur série
La patte du milieu du potentiomètre est attachee a ANALOG 0 tandis que les deux autres vont respectivement a +5V et à la masse
Cet exemple vient de la librairie Arduino
*/

// La section setup n’est exécutée qu’une fois quand on appuie reset
void setup() {
// initialiser les communications série a 9600 bits par seconde
Serial.begin(9600) ;
}

// la routine loop tourne sans arrêt tant que la carte reste alimentée
void loop() {
// lire l’entrée analogique sue pin ANALOG 0
int sensorValue = analogRead(A0) ;
// convertir la lecture analogique 0 – 1023 en tension 0V – 5V
float voltage = sensorValue*(5.0/1023.0) ;
// imprimer le résultat sur la console série
Serial.println(voltage) ;
}

Compilation, Chargement et Visualisation du programme

fig9

Figure 9 – Le code dans l’IDE Arduino

Une fois le code saisi dans l’IDE Arduino, cliquer sur le bouton Verify pour compiler le sketch :

fig10

Figure 10 – Verification (compilation) en cours

fig11

Figure 11 – Compilation terminée

Si – comme c’est le cas ci-dessus – la compilation se termine sans erreur, il reste à présent à charger le code compile dans l’Arduino en cliquant sur le bouton Téléverser :

fig12

Figure 12 – Téléverser

On peut à present jouer avec le potentiomètre ; les valeurs de tensions lues par Arduino et transmises à l’ordinateur peuvent être affichées en lançant le moniteur série (menu Outils -> Moniteur Série ou CTRL-MAJ-M) :

fig13

Figure 13 – Moniteur série

Des logiciels tierce partie d’émulation de terminal (par exemple HyperTerminal) peuvent également être utilisés pour visualiser ces résultats.

Note sur le chargement des pilotes lors de la première connexion de la carte Arduino a l’ordinateur

Lorsqu’on connecte une carte Arduino pour la première fois à un ordinateur multimédia, il peut être nécessaire de charger préalablement les pilotes du système d’exploitation. La procédure pour ce faire est documentée sur le site officiel d’Arduino : http://arduino.cc/en/Guide/HomePage

Laisser un commentaire