Atelier Capteurs

Atelier de découverte des capteurs sur arduino

1. Introduction

Le but de cet atelier est de faire découvrir comment interfacer efficacement plusieurs sortes de capteurs sur une carte compatible avec le Framework Arduino.

Les extensions Markdown All in One et Markdown PDF dans VSCode peuvent vous aider dans la rédaction et l’export au format PDF

Si possible, utilisez votre ordinateur pour développer, et/ou stockez vos données sur le réseau pour ne pas perdre vos infos. Assurez vous que votre binôme a toujours accès aux fichiers du TP.

Outils :

Ressources :

2. Initiation - Rappels

Dans cette première partie, on va s’attarder sur deux types de capteurs :

  • TOR - Bouton poussoir
  • Analogique - Joystick

Le but étant de reprendre quelques bases de fonctionnement de ces capteurs et de préciser la méthodologie avant d’être en autonomie sur le reste de la gamme des capteurs proposés.

Dans la suite, vous pourrez créer des programmes différents pour chaque parties. Vous pouvez aussi enregistrez vos blocs de captures d’information dans des fonctions.

Commencez par créer un programme vierge sous VSCode : Voir “Débuter avec VSCode et PlatformIO”

  Attention

Lors des montages, toujours débrancher l’alimentation de la carte via l’USB.
En raison de la fragilité des ports micro USB des cartes, toujours débrancher du coté PC !!

2.1 Bouton poussoir

Le bouton poussoir est l’un des capteurs les plus simples à interfacer. Cependant, même avec ce composant simple, il existe des subtilités qu’ils ne faut pas négliger.

  Question - Dessiner le schéma électronique d'un bouton poussoir

a. Introduction

Etape 1 :**

image

Branchez la platine du bouton poussoir comme suit :

  • S -> 2
  • - -> 5V

Pour lire une entrée digitale, nous allons utiliser le code suivant :

#include <Arduino.h>
const int pinButton = 2;

void setup() {
  pinMode(pinButton,INPUT);
}

void loop() {
  bool val = digitalRead(pinButton);
}

A quoi servent les lignes de code ci-dessous? Explicitez et commentez :

  • const int pinButton = 2;
  • pinMode(pinButton,INPUT);
  • bool val = digitalRead(pinButton); Explicitez le fonctionnement du code. Le code ci-dessus permet-il de visualiser l’état du bouton ? Aidez vous de la doc de référence du Framework Arduino

b. Visualisation de l’état du bouton

Pour visualiser l’état du bouton, nous allons utiliser le port série de la carte. Pour la suite, nous utiliserons l’extension TelePlot pour l’affichage des valeurs du port série et des courbes.

  • Réalisez les codes et testez le fonctionnement de l’extension TelePlot en vous aidant de la doc suivante: Introduction à l’utilisation du Port-série
  • Proposez une modification du programme du bouton afin de visualiser l’état du bouton.
  • Appuyez et relâchez le bouton. Que remarquez vous ? Expliquez le phénomène.

Pour visualiser plus en détail le phénomène observé précédemment, branchez maintenant le signal S du bouton sur le port A0 de la carte. Les ports Ax des cartes arduino sont des entrées analogiques. Pour lire ces entrées, on utilisera le fonction analogRead(pinAnalogique).

  • Expliquez le fonctionnement de analogRead(pinAnalogique) en vous aidant de doc de référence du Framework Arduino
  • Proposez une modification du code afin de lire l’entrée analogique A0 sur laquelle est branchée le capteur.
  • Qu’observez-vous ? Qu’en déduisez-vous ?

c. Mise en forme du signal

Le carte de prototypage du bouton possède une troisième connectique centrale.

  • A quoi est reliée cette connectique ?
  • Faire le schéma de la carte bouton

Branchez comme suit la carte au bouton :

  • S -> A0
  • centre -> 5V
  • - -> GND

  • Que se passe-t-il sur votre graphique ?
  • Expliquez le phénomène ? Comment s’appelle ce principe de circuit

Débranchez maintenant l’alimentation 5V sur la carte du bouton et branchez votre bouton sur la pin 2 (premier circuit) et reprenez votre code associé à ce montage.

  • Regardez la documentation de pinMode() dans la référence du Framework Arduino
  • A quoi correspond l’instruction INPUT_PULLUP ?
  • Modifiez votre code pour utiliser cette instruction
  • Visualisez la sortie et commentez

d. Rebond

Zoomez sur le front montant du signal et repérez un “rebond”. Pour cela, commentez la ligne de delay(); si vous en avez une afin d’augmenter un maximum la fréquence d’envois. Vous pouvez effectuer le test en analogique ou numérique.

  • Visualisez et capturez ce rebond
  • A quoi est-il du ?
  • Quel soucis cela peut-il poser ?
  • Comment l’éviter ? Proposer quelques idées (logiciel, matériel)

**Ressources - ** Ultimate Guide to Switch Debounce : Part 1 - Part 2 - Part 3 - Part 4 - Part 5- Part 6- Part 7- Part 8- Part 9

2.2 Joystick

  En cours de rédaction

Dans cette partie, afin d’initier et d’utiliser les entrées analogiques, nous allons étudier le fonctionnement et l’utilisation d’un capteur analogique : le joystick.

a. Visualisation de la valeur

  • Expliquer le fonctionnement d’un joystick et les éléments qui le composent (voir cours)

Branchez un seul axe du joystick sur votre platine arduino :

  • GND -> GND
  • +5V -> 5V
  • VRx -> A0

  • Le joystick étant branché sur une entrée analogique, proposez un code de lecture d’un axe.
  • Observez la valeur et donnez :
    • La valeur au repos
    • La valeur min
    • La valeur max
  • En utilisant la documentation de analogRead(), expliquez ces valeurs

b. Plages de fonctionnement

Bien souvent, les valeurs min et max ne sont pas utilisables directement. Il faut transformer les plages de fonctionnement afin qu’elles aient un sens pour votre application.

Dans notre cas, on va estimer que votre joystick doit piloter un gouvernail de bateau. La variation d’angle doit donc se faire ainsi :
-90° <-> <-> +90°

  • Etudiez la fonction map() dans la référence arduino et expliquez son fonctionnement.
  • Utilisez la fonction map() pour résoudre le soucis de plage de données.
  • Visualisez le changement

Le joystick dispose également d’un second axe.

  • Branchez le second axe et proposez un code qui :
    • transpose les deux axes entre -100 et +100
    • affiche les deux axes du joystick sur le moniteur série

Bonus - Mixage des valeurs pour pilotage d’un robot

A ce stade vous avez un capteur (le joystick) vous permettant de détecter une position sur deux axes. Cette position peut servir, par exemple, au pilotage à distance d’un robot. Généralement, les robots utilisent une motorisation différentielle, à savoir :

  • Un moteur pilotant la traction droite
  • Un moteur pilotant la traction gauche

En utilisant ces deux moteurs et en combinant les vitesses, il est alors possible de piloter un robot et de le déplacer dans n’importe qu’elle direction.

Pour réaliser ce pilotage, il est nécessaire de modifier un peu la commande des joysticks. En effet, plutôt que d’attribuer à chaque commande de moteur un axe du joystick, il est parfois plus intéressant de faire l’attribution suivante :

  • Axe verticale = déplacement en avant, ou en arrière
  • Axe horizontal = rotation

C’est ce que l’on appel le mixage :

  • Proposez une méthode simple pour effectuer ce mixage
  • Afficher sur trois graphes séparés
    • Les données brutes des joysticks
    • Les données recentrée des joysticks
    • Les données mixées

3. Aller plus loin

Tester plusieurs capteurs et dispositifs. Pour chaque capteur choisi et étudié :

  • Description du capteur
  • Schéma de la carte + explication de fonctionnement
  • Schéma d’implantation + explications de fonctionnement
  • Code de test unitaire du capteur avec commentaires
  • Courbes d’essais + mesures et explications
  • Fonctions de capture de l’information en non-bloquant avec commentaires