IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Cours complet pour apprendre à programmer un Arduino


précédentsommairesuivant

XX. Oscilloscope

Ce projet va vous permettre de réaliser un oscilloscope minimaliste et d'expérimenter la communication série avec un autre logiciel que celui d'Arduino, en l'occurrence, Processing. Un oscilloscope permet de visualiser les variations d'une tension dans le temps, sous forme d'une courbe. Le principe de fonctionnement de ce projet est le suivant :

  • l'Arduino mesure une tension sur une entrée analogique ;
  • il transmet la valeur de cette entrée à l'ordinateur via la communication série à travers le port USB ;
  • le programme Processing récupère la donnée transmise et l'affiche sous forme de courbe.
Image non disponible

XX-A. Précautions

L'oscilloscope ainsi réalisé ne sera capable de mesurer que des tensions comprises entre 0 et 5 V. Pour mesurer des tensions plus importantes, ou des courants, il sera nécessaire d'ajouter des circuits supplémentaires comme un pont diviseur de tension, ou une résistance (voir chapitre « Les bases de l'électroniqueLes bases de l'électronique »).

XX-A-1. Éléments nécessaires

  • une carte Arduino ;
  • deux fils.
  • Le logiciel Processing(17), logiciel libre de programmation graphique, sera nécessaire pour créer l'interface de visualisation. Vous pouvez parcourir le flossmanual(18) de ce logiciel. Toutefois, vous serez guidé pour réaliser ce projet sans avoir besoin de l'étudier.

XX-A-2. Montage électronique

Comme expliqué ci-dessus, le montage se résume à deux fils connectés à l'Arduino, qui vont servir à mesurer un autre montage soumis à une tension variable. Un des fils sera connecté a la pin « GND », qui correspond au 0 V. Le second sera connecté à la pin Analog in 0. Les extrémités libres vont servir à faire les contacts avec le circuit à mesurer.

XX-B. Première étape

Copiez le programme suivant dans Arduino.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
/*
Ce programme consiste simplement à mesurer l'entrée analogique 0, et à transmettre le résultat via une communication série.
Il ressemble beaucoup au programme décrit dans la première étape du projet "la petite bête qui a peur".
*/
//déclaration des variables
//stockage du numéro de pin où sera branché l'entrée de la mesure 
int PinDeMesure=0;
//conteneur pour stocker la mesure
int tension=0;
// délai entre deux mesures
int periodeDeMesure=20;

void setup(){ // Initialisation du programme
    // établir la connection série à 19200 baud
    Serial.begin(19200);
    // définir le PinDeMesure comme une entrée
    pinMode(PinDeMesure, INPUT);
}

void loop() { //boucle principale
    tension = analogRead(PinDeMesure); // Lit la tension du pin DeMesure et stocke le résultat dans la variable tension
    Serial.println(tension); // communique la valeur de la tension au port série
    delay(periodeDeMesure); //attendre jusqu'à la prochaine mesure
}

Après avoir compilé et téléchargé ce programme dans la carte Arduino, en ouvrant le moniteur sériel, on pourra voir apparaître les mesures successives défiler. Les valeurs varient entre 0 et 1023 quand la tension aux pointes de touches varie entre 0 et 5 V.

XX-C. Deuxième étape

Après avoir téléchargé et installé Processing, copiez le programme suivant dans Processing. Vous ne devriez être pas trop dépaysé par l'interface, car Processing et Arduino sont des programmes frères.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
/*
oscilloscope minimaliste avec un Arduino
récupère les valeurs via une liaison série
*/
import processing.serial.*; // importation de la bibliothèque de communication séerie
//variables
Serial maConnection; // Crée un objet de communication série
int tension=0; // variable ou sera stockée la valeur de la tension
//affichage
int fenetreTemps=12000; // temps pour parcourir la largeur de l'écran en millisecondes
int x=0;
int y=0;

void setup() {
    size(650, 400); // taille de l'écran
    String NomDuPort = Serial.list()[0]; // récupère la première interface série trouvée
    println("connection a "+NomDuPort);
    maConnection = new Serial(this, NomDuPort, 19200); // création de la connexion série
    background(255); // fond d'écran blanc
    smooth(); // lisser les dessins
    strokeWeight(2); // largeur de trait
    stroke(40); // couleur du trait gris
}

void draw() { //boucle de dessin principale
    //détermination du X actuel 
    int oldx = x;
    x = (millis() % fenetreTemps) * width/fenetreTemps; 
    if (oldx > x) { 
        // reprise au début de l'écran 
        oldx = 0; background(255); 
        // fond d'écran blanc 
    } 
    //determination de la valeur de Y 
    int oldy = y;
    y = int(map(tension, 0, 1023, 380, 20)); // mise à l'échelle de la tension pour entrer dans l'écran 
    line(oldx, oldy, x, y); // dessine le trait
}

void serialEvent (Serial maConnection) { // si des données arrivent par la connexion série
    String retour=maConnection.readStringUntil('\n'); // lit la donnée jusqu'à la fin de ligne
    if (retour != null) { //si le retour n'est pas vide
        retour = trim(retour); // enlever les espaces
        tension = int(retour); // converti le texte en nombre entier
    }
}

Pour exécuter le programme, il suffit de cliquer sur le bouton « play ». Vérifiez auparavant que le moniteur sériel du programme Arduino est bien fermé, sans quoi la communication avec Processing ne voudra pas s'initialiser. En effet, la communication sérielle avec l'Arduino est exclusive, ce qui signifie qu'un seul programme à la fois peut ouvrir et communiquer sur un port sériel avec l'Arduino. En fermant le moniteur sériel, la connexion sérielle est fermée et ainsi libre pour une autre application. Il est possible d'utiliser plusieurs ports sériels différents (notamment avec les pins digitales de l'Arduino) pour établir plusieurs connexions avec différents logiciels.

Le programme, en s'exécutant affichera la fenêtre suivante :

Image non disponible

La courbe affichée dépend du circuit que vous mesurez avec l'oscilloscope. Si vous n'avez rien de spécial à mesurer, vous pouvez essayer avec un potentiomètre, en prenant la mesure sur sa patte du milieu, et en reliant les deux autres bornes respectivement au GND et au 5 V.

XX-D. Pour aller plus loin

Dans ce projet, vous avez compris comment transmettre une information de l'Arduino à un programme quelconque sur l'ordinateur. Vous avez réalisé un magnifique oscilloscope. On peut imaginer compliquer ce programme pour avoir :

  • accès à plus d'entrées simultanément ;
  • mémoriser les enregistrements de courbes ;
  • faire des pauses ;
  • changer les échelles d'affichage ;
  • etc.

Ces améliorations peuvent prendre du temps. En fait, grâce à la magie du logiciel libre, une âme charitable a déjà effectué tout ce travail, et l'a partagé. Il s'agit du projet arduinoscope : http://code.google.com/p/arduinoscope/. Peut-être êtes vous déçu d'avoir travaillé pour rien ? En fait, cet exemple nous montre également qu'avant d'entamer un projet, il est toujours utile de se documenter sur Internet pour voir les réalisations déjà existantes autour de la même problématique ; inutile de réinventer la roue !


précédentsommairesuivant

Ce cours est publié sous licence GPLv2, peut être lu et copié librement.