XVI. Premier contact▲
Dans ce projet, nous allons utiliser un capteur piézoélectrique afin de faire varier l'intensité lumineuse d'une LED.Ce projet est simple et permet d'aborder les premiers concepts du système de programmation Arduino.
XVI-A. Matériel nécessaire à la réalisation du projet▲
|
|
XVI-B. Première partie▲
Les capteurs piézoélectriques sont des composants qui créent un courant électrique lorsque qu'ils sont sollicités par des vibrations ou déformations. Collés sur une surface, ce capteur peut détecter des vibrations. C'est pourquoi dans cet exemple, la pastille piézoélectrique devra être nue et non pas encapsulée dans un boîtier plastique. Nous allons donc voir dans cette première partie, comment connecter un tel capteur à notre carte Arduino et afficher les valeurs captées.
XVI-B-1. Schéma de montage▲
Afin de réaliser ce montage, nous allons connecter la patte négative de notre capteur piézoélectrique à la masse de notre carte Arduino soit une des pins Gnd. Puis, nous connecterons l'autre patte sur la pin Analog In 0 de la carte. Branchez ensuite la résistance, une patte dans une pin Gnd et l'autre dans Analog In 0. et pour finir, scotchez fermement votre capteur sur votre bouteille plastique.
XVI-B-2. Programme▲
Vous pouvez maintenant copier le programme suivant dans la fenêtre du programme Arduino.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// Variable pour désigner quelle pin est utilisée pour le capteur
int
capteurPiezo =
A0; // pin Analog 0
// Variable pour contenir la valeur du capteur
int
valeurPiezo;
void
setup()
{
// Établit la connexion sérielle à 9600 bauds
Serial.begin(9600
);
}
void
loop()
{
// Lit la pin du capteur et l'assigne à la variable valeurPiezo
valeurPiezo =
analogRead(capteurPiezo);
// Affiche au moniteur sériel la valeur de valeurPiezo
Serial.println(valeurPiezo);
// Laisse un court délai afin que l'utilisateur puisse lire les valeurs correctement
delay(100
);
}
Sauvegardez maintenant votre programme et vérifiez-le en cliquant sur le bouton Verify. En cas d'erreur un message rouge s'affiche dans la console. Vérifiez alors la syntaxe et l'orthographe du code (voir chapitre « Bien structurer son codeBien coder »). Si vous ne rencontrez pas d'erreurs, vous pouvez maintenant téléverser votre programme sur la carte en cliquant sur Upload.
Une fois le téléversement terminé, vous pouvez faire apparaître la fenêtre du moniteur sériel en cliquant sur le bouton Serial Monitor. Assurez-vous que la vitesse de transfert des informations (baudrate) du moniteur sériel est identique à celle spécifiée dans le programme soit dans notre cas, 9600. Ce paramètre peut être changé en bas à droite de la fenêtre.
Après quelques instants, vous devriez voir défiler des chiffres sur le moniteur sériel. Il s'agit de la valeur renvoyée par le capteur piézoélectrique. Vous pouvez maintenant prendre la bouteille dans vos main et la déformer pour faire changer la valeur qui s'affiche dans votre terminal. La valeur doit changer proportionnellement et simultanément à la déformation de la bouteille.
XVI-C. Deuxième partie : LED et variation de luminosité▲
Dans cette partie, nous allons ajouter une LED à notre montage afin d'illustrer les vibrations enregistrée par le capteur piézoélectrique pour faire varier l'intensité lumineuse d'une LED.
XVI-C-1. Schéma de montage▲
Afin de compléter ce montage, il nous suffit de connecter la patte (+) de la LED à la pin 13 et la patte (-) qui est la plus courte, à la masse de votre Arduino, soit à l'une des pins Gnd.
XVI-C-2. Programme▲
Copiez maintenant le programme suivant dans la fenêtre de programmation Arduino.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
// Variable pour désigner quelle pin est utilisée pour le capteur
int
capteurPiezo =
A0; // pin Analog 0
// Variable pour contenir la valeur du capteur
int
valeurPiezo;
// Variable pour désigner quelle pin de l'Arduino est utilisée pour la LED
int
ledPin =
13
;
void
setup()
{
// Définit la pin 13 comme une sortie
pinMode(ledPin, OUTPUT);
// Établit la connexion sérielle à 9600 baud
Serial.begin(9600
);
}
void
loop()
{
// Lit la pin du capteur et l'assigne à la variable valeurPiezo
valeurPiezo =
analogRead(capteurPiezo);
// Convertit la valeur du capteur en valeur pour la LED
valeurPiezo =
map(valeurPiezo, 0
, 1023
, 0
, 255
);
// Affecte la valeur de puissanceLed à la pin 13
analogWrite(ledPin, valeurPiezo);
// Affiche au moniteur sériel la valeur de valeurPiezo
Serial.println(valeurPiezo);
}
Pour contrôler la luminosité de la LED proportionnellement à la valeur du capteur, nous devons réaliser un conversion. En effet la fonction analogWrite(); prend comme argument une variable dont la plage est de 0 à 255. De son coté la fonction analogRead(); nous donne une valeur entre 0 et 1024. Nous devons donc ramener l'échelle de la fonction analogRead(); à une plage plus petite (0 à 255), c'est pourquoi nous devons utiliser la fonction map ci-dessous.
map (val origine, val origine min, val origine max, val sortie min, val sortie max);
Pour convertir une variable dont la plage est de 0 à 1023 en une variable dont la plage est de 0 à 255, cela donne la fonction suivante
map (valeurPiezo, 0
, 1023
, 0
, 255
);
XVI-D. Pour aller plus loin▲
Afin d'aller plus loin, nous pourrions imaginer de remplacer le capteur piézoélectrique par tout autre capteur analogique comme un capteur de lumière ou encore un détecteur de proximité.