Notation : /20


10 questions notées sur 20 points soit 2 points par question


Matériels nécessaires :


1 stick analogique

1 platine Arduino

2 leds grove supplémentaires


Pré-requis :


Prendre connaissance de la partie théorique sur la lecture analogique.

 

Activités pratiques :   Stick analogique


La manette de jeu de la playstation 2 dispose de sticks analogique. Nous allons ici en utiliser un pour piloter deux leds.


Le module utilisé ici dispose de 5 pins : VCC, Ground, X, Y, Key. Les noms affectés aux pins peuvent légèrement varier en fonction de la provenance des modules. Le joystick est analogique, ce qui permet une lecture précise de la position et ore beaucoup plus de possibilité qu'un simple joystick tactile. En plus, il est possible d'appuyer sur le joystick pour faire une fonction « select ».





5 connexions sont donc nécessaire pour le joystick. Les connexions sont : Key, Y, X, Voltage et Ground.

"X" et "Y" sont analogiques, key est digitale. Le branchement de la pin pour la fonction "select" n'est pas obligatoire mais nous allons l'utiliser dans le projet.

Code

Après avoir réalisé le câblage, et téléverser le programme suivant :


#define MIN_VAL 0

#define MAX_VAL 1023


int analogPinX = A0; // potentiometer wiper (middle terminal) connected to analog pin 3

int analogPinY = A1; // outside leads to ground and +5V

const int joyBtn  = 2;                  

const int joyOffset  = 0;


int valX = 0;  // variable to store the value read

int valY = 0;  // variable to store the value read


void setup() {

   Serial.begin(57600);           //  setup serial

   pinMode(2, INPUT_PULLUP);

}


int joyRawToPhys(int raw) { /* function joyRawToPhys */

  ////Joystick conversion rule

  float phys = map(raw, MIN_VAL, MAX_VAL, -100 + joyOffset, 100 + joyOffset) - joyOffset; //

  return phys;

}


void loop() {

  

  valX = analogRead(analogPinX);  // read the input pin

  Serial.print(F("Lecture X"));

  Serial.print(F(" : "));

  Serial.println(valX);          // debug value


  valY = analogRead(analogPinY);  // read the input pin

  Serial.print(F("Lecture Y"));

  Serial.print(F(" : "));

  Serial.println(valY);          // debug value


  if (!digitalRead(joyBtn)) {

    Serial.println(F("Bouton stick appuyé"));

  }

  

  delay(200);

}




Le joystick fonctionne comme un potentiomètre.


Il va retourner une valeur entre 0 et 1023, sachant qu'en position centrale la valeur n'est pas constante. 


Exemple de sortie sur le moniteur série :



La plage de valeurs va de 0 à 1023.


analogRead() [E/S Analogique]

Description


Lit la valeur à partir du pin analogique spécifié. Les cartes Arduino contiennent un convertisseur analogique-numérique multicanal de 10 bits. Cela signifie qu'il convertit les tensions d'entrée comprises entre 0 et la tension de fonctionnement (5V ou 3,3V) en valeurs entières comprises entre 0 et 1023. Sur un Arduino UNO, par exemple, cela donne une résolution entre les lectures de : 5 volts / 1024 unités

soit 0,0049 volts (4,9 mV) par unité. 

Voir le tableau ci-dessous pour les pins utilisables, la tension de fonctionnement et la résolution maximale pour certaines cartes Arduino.



La plage d'entrée peut être changée en utilisant analogReference(), tandis que la résolution peut être modifiée (uniquement pour les cartes Zero, Due et MKR) en utilisant analogReadResolution().


Sur les cartes basées sur ATmega (UNO, Nano, Mini, Mega), il faut environ 100 microsecondes (0.0001 s) pour lire une entrée analogique, le taux de lecture maximum est donc d'environ 10 000 lectures par seconde.


* : A0 à A5 sont étiquetés sur la carte, A6 à A11 sont respectivement disponibles sur les pins 4, 6, 8, 9, 10 et 12

**La résolution par défaut de analogRead() pour ces cartes est de 10 bits, pour des raisons de compatibilité. Vous devez utiliser analogReadResolution() pour la changer en 12 bits.



Q1 : Expliquez pourquoi cette plage va de 0 à 1023 pour un arduino UNO.


Q2 : Expliquez pourquoi X et Y sont analogique ? Pourquoi l'appui sur le bouton est digital ? Comment vas-t-on lire la valeur du switch (quelle instruction arduino utilise-t-on) ?

 


analogRead(pin)

Parameters

pin: the name of the analog input pin to read from (A0 to A5 on most boards, A0 to A6 on MKR boards, A0 to A7 on the Mini and Nano, A0 to A15 on the Mega).

Returns

The analog reading on the pin. Although it is limited to the resolution of the analog to digital converter (0-1023 for 10 bits or 0-4095 for 12 bits). Data type: int.


Q3 : Sachant que la valeur 0 correspond à 0 volt et que la valeur 1023 correspond à la valeur 5v. Que vaut la valeur centrale en volt ? Peut-on compenser la valeur si oui comment faire ? compenser = avoir la valeur 0 au centre -512 à une extrémité et +512 à une autre extrémité.


Q4 : Modifier le programme pour que l'on puisse visualiser la valeur en volt à côté de la valeur de 0 à 1023.


Q5: Proposez un schéma de branchement pour visualiser l'image de la tension (voie X et voie Y du stick) sur un oscilloscope. Utiliser le logiciel Fritzing pour faire cela (présent sur votre poste).


Pour l'oscilloscope sur Fritzing, utiliser un header et une zone de texte pour représenter l'oscilloscope.


Q6: Faites une série de mesure en indiquant la tension en volt et la valeur de la sortie analogique correspondante. Présentez vos résultats sous forme de graphique.


Q7: On ajoute une LED verte et rouge avec leur résistance respective. Modifier le programme pour satisfaire l'exigence suivante :


Valeur prise sur l'axe X

entre 0 et 2.4 volt inclus

entre 2.4 exclus et 5v

LED allumée

Rouge

Verte


Expliquez ce que vous avez fait. Vérifier toutes vos mesures en utilisant un voltmètre aux bornes de l'entrée X.


Q8: On ajoute une LED jaune avec sa résistance, une led orange. Modifier le programme pour satisfaire l'exigence suivante :


Valeur prise sur l'axeY

entre 0 et 728 inclus

entre 728 exclus et 1024

LED allumée

jaune

orange


Expliquez ce que vous avez fait. Vérifier avec le moniteur série.


Q9 : Branchez le switch du stick, on allume toute les leds.


Q10: Il existe une fonction qui permet de ne pas avoir à faire le calcul pour retrouver la valeur en volt de la sortie analogique. Faites des recherches internet et expliquer son fonctionnement et mettez la en œuvre.



Pour aller plus loin :


Q11: Proposer une variante d'affichage des LED en fonction de l'appui sur les sticks et de votre imagination. Plus on appuie fort d'un coté et plus la led s'illumine.

Créé avec HelpNDoc Personal Edition: Créez des fichiers d'aide CHM professionnels avec l'outil facile à utiliser de HelpNDoc