Accueil > ARDUINO > Arduino & Python : tracer des courbes avec Matplotlib

Arduino & Python : tracer des courbes avec Matplotlib

vendredi 13 novembre 2015, par thebault

Le but de cet article est de réaliser un programme en python qui permette de tracer un signal (tension) dont l’acquisition se fait au niveau de la carte Arduino. On a donc une chaîne d’acquisition de la forme suivante :

SIGNAL -> CONVERTISSEUR ADC (CAN) _ CARTE ARDUINO -> PC ( programme python avec matplotlib)

Le programme Arduino

Il ouvre la liaison série et transmet toute les secondes la valeur mesurée sur l’entrée analogique A0.

  1. void setup() {
  2. Serial.begin(9600);
  3. while (!Serial){
  4. ; // attend la liaison serie - pour les cartes LEONARDO
  5. }
  6. }
  7.  
  8. void loop() {
  9. int valeur_capteur = analogRead(A0);
  10. Serial.println(valeur_capteur);
  11. delay(1000); // pause de 1s
  12. }

Télécharger

La bibliothèque matplotlib

La bibliothèque matlibplot permet de tracer des courbes.
Pour l’installation, voir ce lien http://matplotlib.org/users/installing.html

Cette bibliothèque permet de tracer des courbes à partir d’une liste pour les abscisses et d’une autre pour les ordonnées.

Exemple :

  1. import matplotlib.pyplot as plt
  2.  
  3. listex=[1,2,3,4] # liste des coordonnees sur l'axe des abscisses
  4. listey=[1,4,9,50] # liste des coordonnees sur l'axe des ordonnees
  5. plt.plot(listex,listey) # trace la courbe
  6. plt.xlabel('Abscisses') # nomme l'axe des Abscisses
  7. plt.ylabel('Ordonnees') # nomme l'axe des ordonnees
  8. plt.show() # affiche la courbe

Télécharger

Ainsi, on voit s’afficher la courbe suivante :

JPEG - 91.5 ko

Remarque : On peut modifier l’apparence avec plt.style.use(’ggplot’) (doc), faire apparaître les points ...

On peut être amené dans un programme à afficher les points au fur et à mesure qu’ils arrivent. Pour cela, on va utiliser le "mode interactif". C’est ce que l’on va voir maintenant.
La carte Arduino fournit des valeurs toute les secondes que l’on veut tracer sur une courbe en fonction du temps .

Le programme qui va permettre de tracer 100 points est le suivant :

  1. import serial
  2. import matplotlib.pyplot as plt
  3. import time
  4.  
  5. valeurs=[]
  6. temps=[]
  7.  
  8. serie=serial.Serial('/dev/ttyACM0',9600) # ouvre une liaison serie en 9600bps
  9. # adapter /dev/ttyACM0 au systeme et port serie
  10.  
  11. plt.style.use('bmh')
  12. plt.ylabel("valeur")
  13. plt.xlabel("temps en s")
  14.  
  15. plt.ion() # on entre en mode interactif
  16. start=time.time() # mesure de l'instant initial
  17.  
  18. i=0
  19. while (i<100):
  20. mesure= float(serie.readline()) # lit la donnee sur la laison serie
  21. valeurs.append(mesure) # ajout de mesure a la liste des valeurs
  22. instant=time.time()-start # calcul du temps ecoule depuis l'instant initial
  23. temps.append(instant) # ajout de instant a la liste des temps
  24. print mesure,instant # affiche dans la console les coordonnees du point
  25. plt.plot(temps,valeurs,marker='o') # trace la courbe
  26. plt.draw() # affiche la courbe en mode interactif
  27. i=i+1
  28.  
  29. plt.ioff() # on quitte le mode interactif pour rendre la main a l'utilisateur sur la courbe
  30. plt.show() # afficher la courbe
  31.  

Télécharger

On obtient une courbe comme celle ci :

JPEG - 61.1 ko
SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © digitalnature sous Licence GPL