Cours:ArduinoPlaqueEssais : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m ({{Vert|Correspondance mesure, valeur de résistance}})
m ({{Bleu|Valeur normalisé}})
Ligne 162 : Ligne 162 :
  
 
=={{Bleu|Valeur normalisé}}==
 
=={{Bleu|Valeur normalisé}}==
 +
On désire maintenant améliorer le programme précédent pour qu'il soit capable de retrouver quelques valeurs normalisées et donc le code des couleurs correspondant. Pour simplifier on va d'abord se contenter des valeurs [10k,100k] (bornes comprises).
 +
 +
==={{Vert|Valeur de la série E12 associée}}===
 +
On vous demande de chercher (sur internet) les 12 valeurs de la série E12. Vous allez ensuite précalculer les valeurs CAN pour cette série et les ranger dans un tableau de 13 cases (puisque 100k fait partie de ce qui est demandé).
 +
  
 
==={{Vert|Recherche de l'exposant}}===
 
==={{Vert|Recherche de l'exposant}}===
Ligne 167 : Ligne 172 :
 
==={{Vert|Affichage avec 2 chiffres significatifs}}===
 
==={{Vert|Affichage avec 2 chiffres significatifs}}===
  
==={{Vert|Valeur de la série E12 associée}}===
+
 
  
 
==={{Vert|Affichage du code des couleurs}}===
 
==={{Vert|Affichage du code des couleurs}}===

Version du 10 octobre 2015 à 15:54

Retour à la liste des Tps

Éléments de correction


Quelques leds

CommandeLed.png

Nous utiliserons lors de ce TP 2 leds (verte et rouge) qui resteront donc connectées jusqu'à la fin.

Question.jpg Calculer la valeur de la résistance avec les données suivantes :

  • On prendra Vf = 2 V (tension directe (Forward) aux bornes de la led : lorsqu'elle s'éclaire)
  • On souhaite If = 10 mA (intensité du courant dans la led)
  • On rappelle que la tension d'alimentation arduino UNO est de 5V => cette tension représente donc un niveau logique '1'

Todo.jpg Câbler alors ces leds sur la carte de la façon suivante :

Couleur Pin arduino
Rouge 8
Verte 9

Question.jpg Écrire (et vérifier !) un programme tel que :

  • les leds sont allumées en alternance
  • chaque led reste allumée pendant 500ms


Grandeur analogique

Dans le premier tp, nous avons utilisé uniquement des entrées/sorties binaires. Nous allons découvrir ici les mesures analogiques.

Une explication du monde analogique peut se trouver sur wikipedia au besoin.

Affichage sur liaison série

Afin de pouvoir afficher les valeurs lues, mais également pour écrire des programmes plus complexes, nous allons utiliser la liaison série.

Vous allez découvrir le principe de la liaison série sur le site ladyada.

Todo.jpg Lire/comprendre/exécuter les programmes jusqu'à la partie Pythagore.

Rque : Il convient de terminer la lecture de la page pour les prochains TPs

Mesure analogique, principe

Commandeldr.png

La page dédiée du site arduino donne quelques détails sur l'utilisation et les caractéristiques du convertisseur analogique-numérique de la carte arduino UNO.

Syntaxe val = analogRead(arduinoPin)
Paramètres
arduinoPin numéro de la patte dont on souhaite lire la valeur de tension
val valeur renvoyée par le convertisseur dans la plage [0 1023]

Le code suivant donne la structure minimum permettant d'utiliser le Convertisseur Analogique Numérique

const char analogPin = A0;
unsigned int analogVal;

void setup()
{

}

void loop()
{
  // lecture de la tension sur la patte "analogPin"
  analogVal = analogRead(analogPin);
  // utilisation de cette valeur
}

Mesure de luminosité

Vérification du fonctionnement

Todo.jpg Connecter la photorésistance (LDR) tel qu'indiqué sur la figure. Vous utiliserez l'entrée analogique A5.

Question.jpg Écrire un programme qui lit la valeur de la tension aux bornes de la LDR et affiche la valeur convertie sur la liaison série

Extremums

Sachant que les capteurs ne peuvent être strictement identiques, ils donneront tous des valeurs (normalement légèrement) différentes pour un même éclairement.

Le programme doit donc être capable de s'adapter automatiquement au capteur. Pour se faire, il est nécessaire de trouver les valeurs maximum et minimum renvoyées.

Question.jpg Réaliser un programme permettant de trouver ces extrêmes, en vous appuyant sur l'algorithme suivant :

  • initialiser maxi à la plus petite valeur possible (ici 0)
  • initialiser mini à la plus grande valeur possible (ici 1023)
  • répéter
    • lire la valeur du capteur => val
    • si val > maxi
      • changer la valeur de maxi
    • si val < mini
      • changer la valeur de mini

Jour, nuit ?

Utilisons maintenant les leds à disposition de la façon suivant :

  • s'il fait jour, allumer la led verte
  • s'il fait nuit, allumer la led rouge

Question.jpg Écrire un programme répondant au cahier des charges, en utilisant les valeurs extrêmes.

Luminosité en %

L'objectif est d'afficher la valeur mesurée en pourcentage de la valeur maximum d'éclairement mesurée.

Si la valeur actuellement mesurée est

  • la valeur min, on affichera 0%.
  • la valeur max, on affichera 100%.

Une valeur en pourcentage ne dépend que des valeurs minimum, maximum et de la mesure. On peut donc écrire le prototype de la foncion comme suit :

// les paramètres sont des "int" car : 0 < val,min,max < 1024 (car conversion sur 10 bits)
// par contre on retourne unsigned char car entre 0 et 100
unsigned char valPourcent(int val, int min, int max);

Question.jpg Modifier votre programme pour utiliser la fonction valPourcent(), que vous implémenterez.

Mesure d'une résistance

MesureR.png

Principe .... le pont diviseur !?

Soit le schéma ci contre, vous allez dans cette partie écrire un programme permettant de trouver la valeur de la résistance inconnue.

Vous constatez qu'il s'agit d'un simple montage appelé communément "pont diviseur".

On notera Vm la tension de mesure, soit la tension aux bornes de la résistance (Rm) à mesurer.

Question.jpg Donner l'expression de la tension Vm en fonction de R1, Vcc et Rm.

Question.jpg Donner ensuite l'expression de la valeur numérique donnée par le convertisseur (tension de référence 5v).

Mesure de la résistance

Présence de la résistance ?

  • allumer led rouge si pas de résistance
  • allumer led vert sinon

Correspondance mesure, valeur de résistance

Comme déjà indiqué dans ce TP, la valeur numérique mesurée est un nombre entre 0 et 1023 (valeur sur 10 bits). 0 correspond à une tension de 0V et 1023 correspond à une tension de 5V.

Il vous est donc possible de modifier la formule du pont diviseur pour prendre en compte ces valeurs sur 10 bits. On notera désormais CAN la valeur retournée par le convertisseur analogique numérique.

Question.jpg Donner l'expression de la valeur de CAN (avec donc CAN entre 0 et 1023) en fonction de R1, 1023 et Rm. En déduire la valeur de l'expression de Rm en fonction des autres paramètres.

Question.jpg Réaliser un programme qui lit la valeur analogique correspondant à la résistance à mesurer, la convertit en une valeur en Ohms et envoie cette valeur sur la liaison série.

Valeur normalisé

On désire maintenant améliorer le programme précédent pour qu'il soit capable de retrouver quelques valeurs normalisées et donc le code des couleurs correspondant. Pour simplifier on va d'abord se contenter des valeurs [10k,100k] (bornes comprises).

Valeur de la série E12 associée

On vous demande de chercher (sur internet) les 12 valeurs de la série E12. Vous allez ensuite précalculer les valeurs CAN pour cette série et les ranger dans un tableau de 13 cases (puisque 100k fait partie de ce qui est demandé).


Recherche de l'exposant

Affichage avec 2 chiffres significatifs

Affichage du code des couleurs