Ignorer la navigation

Gestion d'une entrée analogique

Lecture d'un potentiomètre et calcul de la valeur de la tension correspondante.
Lecture de la valeur d'un capteur analogique (température)

  

I. Quelques notions sur la carte DangerShield et le moniteur série

Nous allons utiliser le module DangerShield (ci-dessous, à droite)

 

Demandez au professeur de mettre la carte DangerShield sur la carte Arduino.

 

Cette carte se compose de capteurs : En gras les entrées/sorties Arduino utilisées :
  • 3 potentiomètres linéaires (slider) – entrées analogiques A0, A1, and A2.
  • 1 capteur de lumière – entrée analogique A3
  • 1 capteur de température - entrée analogique A4
  • 3 boutons poussoirs – entrées numériques (TOR) D10, D11, and D12.

Et d’afficheurs :
  • 2 LEDs classiques - pins 5 and 6 (sorties digitales (TOR) D5 et D6).
  • 1 afficheur 7 segments (An 8-bit shift register set up to control a blue 7-segment LED).
  • 1 buzzer et  capteur de clap (bruit court et sec) : One is used as a speaker, the other is connected to analog pin A5 and can be used as a knock sensor



                          
Le moniteur série

Arduino possède un outil très pratique pour déboguer un programme (déboguer = trouver les erreurs ou contrôler un programme). Il s'agit d'une liaison série qui peut envoyer les informations que l'on veut et que l'on peut lire ensuite à l'aide du logiciel Arduino sur notre ordinateur.

Comment ça fonctionne :

Paramétrage dans un programme arduino :

Dans le setup il faut mettre:

  Serial.begin(9600);   // mise en route de la liaison série à 9600 bauds//

  9600 correspond à la vitesse de communication. 9600 bauds est une vitesse rapide fiable

Dans le void loop :

Pour afficher le texte "le contenu de ma variable est : "
  Serial.print("le contenu de ma variable est : ");

Pour afficher le contenu d'une variable (par exemple ici elle s'appelle var1)
  Serial.print(var1);

Pour aller à la ligne (sinon chaque "Serial.print" affiche les données les unes à côté des autres) :
  Serial.println(var1);

Pour ouvrir le moniteur série (il faut une carte arduino raccordée bien sûr!) :

soit on clique sur l’icône: 


soit sur le menu Outils :



Si le contenu de la variable var1 est 26, on obtiendra dans le moniteur série :






 
II. Lecture d'un signal analogique (potentiomètres)


Ouvrir le fichier « dangershield_potards.txt », récupérer le programme contenu dans le fichier et testez le.

Une fois le programme compilé et téléchargé, ouvrir le moniteur série (menu « outils » puis « moniteur série »).


1. Relever les valeurs minimum et maximum. Combien cela fait-il de valeurs différentes ?

2. A partir du programme Arduino, donner le nom de la fonction qui permet de « lire » une entrée analogique.

3. A l'aide de la documentation Arduino, trouver sur combien de bit les variables de type « entier » (int) sont-elles codées ?

4. En déduire le nombre de valeurs différentes disponibles pour ce type de variable.

5. A partir des valeurs minimum et maximum relevées précédemment, dire sur combien de bits travaille le convertisseur analogique/numérique de la carte Arduino ?

 
III. Modification du programme
 

Objectif : on va essayer d'afficher non plus le nombre entier issu du convertisseur mais la valeur réelle de la tension (pour le curseur 1 seulement).
Comme on va faire des calculs on va utiliser une variable permettant d'avoir des chiffres avec virgule. On va choisir le type « float ».

1. A l'aide de la documentation Arduino, donner les caractéristiques des variables de type « float »
 
2. Calculer la constante du convertisseur de telle sorte que la valeur issue du convertisseur multipliée par cette constante nous donne la tension présente sur l'entrée (la tension peut varier entre 0V et 5V) : const_can * entrée analogique = tension.

Remarques :

  • vous pouvez vérifier si votre constante est juste en calculant avec la valeur intermédiaire de 512 qui correspond à 2,5V.
  • vous pouvez aussi vous aider de la documentation arduino:
    
     

Extrait de la documentation Arduino:

analogRead()

Description

Reads the value from the specified analog pin. The Arduino board contains a 6 channel (8 channels on the Mini and Nano, 16 on the Mega), 10-bit analog to digital converter. This means that it will map input voltages between 0 and 5 volts into integer values between 0 and 1023. This yields a resolution between readings of: 5 volts / 1024 units or, .0049 volts (4.9 mV) per unit. The input range and resolution can be changed using analogReference().

It takes about 100 microseconds (0.0001 s) to read an analog input, so the maximum reading rate is about 10,000 times a second.

Syntax
analogRead(pin)

Parameters
pin: the number of the analog input pin to read from (0 to 5 on most boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega)

Returns
int (0 to 1023)

....


Modifiez le programme :

  • définissez 2 variables flottantes (tension1 et const_cna et en même temps affecter 0 à tension1 et  la valeur calculée précédemment à const_can)
  • ajouter la ligne du calcul de la tension (du genre : variable 1 = variable 2 * variable 3).
  • envoyer le résultat sur la liaison série à la place de la valeur « potentiom1 »
  • Ne pas oublier le point virgule à la fin des lignes


3. Essayer le programme. Faites valider par le professeur

 




IV. Lecture de la température (capteur TMP36 de la carte DangerShield)

Sur la carte « danger shield » il y a un capteur de température TMP36. Ce capteur rentre sur le port 4 (PIN 4) de la carte Arduino (entrée analogique au fonctionnement identique à celle utilisée par le programme précédent).

1. En vous inspirant du programme précédent, faire le programme permettant d'envoyer sur la liaison série la valeur analogique reçue par la carte arduino (sur un nombre de type « entier »). Le programme doit être clair et bien commenté. Faites valider par le professeur


2. Modifier maintenant le programme pour afficher dans le « moniteur série » la valeur en °C.  (la température en °C est donnée par la formule suivante : Temp = ( mesure en mV – 500)/10. Faites valider par le professeur

Créé avec eXeLearning (Nouvelle fenêtre)