Stick analogiques
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 offre 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