vendredi 7 mars 2014

Capacitive Touch BoosterPack et Energia


Aujourd'hui, on s'amuse avec le Capacitive Touch BoosterPack de Texas Instrument.  Un boosterpack, c'est l'équivalent d'un shield Arduino, mais conçu pour le MSP430 Launchpad.  Ce boosterpack en particulier permet de remplacer des boutons conventionnels par une espèce de trackpad sensible au toucher.

Ça fonctionne sur le même principe qu'un écran tactile: lorsque vous mettez un de vos doigts en contact avec la surface du boosterpack, vous augmentez sa capacité (votre corps devient un condensateur relié en parallèle avec la surface tactile).

Programme de démonstration

Le boosterpack est accompagné d'un microcontrôleur MSP430G2452IN20 pré-programmé qu'on peut insérer dans le Launchpad (à la place du microcontrôleur initial) pour obtenir une démonstration immédiate de ses possibilité.


Après avoir inséré ce circuit intégré dans le Launchpad, il faut retirer les deux jumpers J5 (ils sont situés à côté du bouton, dans le coin inférieur gauche de la carte), puis s'assurer que les jumpers J3 Rx et Tx sont en position verticale et non en position horizontale (contrairement à la photo ci-dessus).

Le programme de démonstration peut alors être utilisé de façon autonome (les 9 LEDs du boosterpack s'allument tour à tour en fonction de la position de notre doigt) ou en liaison avec un logiciel Windows qu'on peut télécharger sur le site de Texas Instrument:  CapTouch_BoosterPack_UserExperience_GUI.exe reproduit à l'écran de l'ordinateur la surface du boosterpack et indique graphiquement les endroits qu'on touche, alors que 430Boost_CapTouchMediaPad.exe permet de contrôler Windows Media Player  au moyen de la surface tactile du boosterpack.

Programmer pour le boosterpack avec Energia

Ces démonstrations sont bien jolies mais bien entendu, ce qui nous intéresse surtout, c'est la possibilité d'utiliser le Capacitive Touch BoosterPack à l'intérieur de nos propres programme.  À cause de ma violente allergie à Code Composer Studio, j'ai ignoré la bibliothèque et les exemples fournis par Texas Instruments et je me suis plutôt tourné vers Energia et la biblothèque CapTouch mise au point par Robert Wessels.

Quelques exemples accompagnent cette bibliothèque, mais voici un petit sketch de mon cru, qui affiche dans le Moniteur Série d'Energia le nom de la zone qu'on touche du doigts sur la surface tactile du boosterpack (centre, haut, bas, gauche ou droite).  Avant d'utiliser ce sketch, il faut avoir installé la bibliothèque CapTouch (en la plaçant dans le répertoire energia\hardware\msp430\libraries) et placer les jumpers J3 Rx et Tx du Launchpad en position horizontale, comme sur la photo ci-haut (sinon rien ne s'affichera dans le Moniteur Série).  De plus, vous désirerez peut-être réinstaller le microcontrôleur qui se trouvait initialement dans le Launchpad, pour ne pas effacer le programme de démonstration fourni par Texas Instruments.

/************************************************************************
Programme de démonstration Energia pour le MSP430 Launchpad et le Capacitive
Touch BoosterPack. Lorsqu'on touche la surface du boosterpack, le moniteur
série indique la partie touchée (centre, haut, bas, gauche, droite).
Utilise la CapTouch library par Robert Wessels.
http://electroniqueamateur.blogspot.com/2014/03/capacitive-touch-boosterpack-et-energia.html
************************************************************************/
#include <CapTouch.h> // bibliothèque CapTouch
// définition des pins de LEDs
#define LED_SELECT P1_3
#define MIDDLE_LED P1_0
// LED1, LED2, LED3 and LED4 s'allument quand leur pin est haute et que P1.3 est bas
// LED4, LED5, LED6 and LED7 s'allume quand leur pine est basse et que P1.3 est haut
#define LED1_OR_5 P1_4
#define LED2_OR_6 P1_5
#define LED3_OR_7 P1_6
#define LED4_OR_8 P1_7
// les pins des boutons
CapTouch left = CapTouch(P2_1, TOUCH_BUTTON);
CapTouch down = CapTouch(P2_2, TOUCH_BUTTON);
CapTouch right = CapTouch(P2_3, TOUCH_BUTTON);
CapTouch up = CapTouch(P2_4, TOUCH_BUTTON);
CapTouch center = CapTouch(P2_5, TOUCH_BUTTON);
void setup() {
pinMode(MIDDLE_LED, OUTPUT);
pinMode(LED_SELECT, OUTPUT);
pinMode(LED1_OR_5, OUTPUT);
pinMode(LED2_OR_6, OUTPUT);
pinMode(LED3_OR_7, OUTPUT);
pinMode(LED4_OR_8, OUTPUT);
Serial.begin(9600);
LEDshow(); // on allume les LEDs une par une, dans le sens horaire pour faire joli.
}
void loop() {
int touch = 0; // deviendra 1 si on touche à la surface
if (center.isTouched()){
touch = 1;
Serial.println("Centre");
}
else {
if (left.isTouched()){
touch = 1;
Serial.println("Gauche");
}
if (right.isTouched()){
touch = 1;
Serial.println("Droite");
}
if (up.isTouched()){
touch = 1;
Serial.println("Haut");
}
if (down.isTouched()){
touch = 1;
Serial.println("Bas");
}
}
digitalWrite(MIDDLE_LED, touch); // on allume la LED centrale s'il y a contact
}
void LEDshow(void){
// allumage de la LED 1
digitalWrite(LED1_OR_5, HIGH); // 1 allumée
digitalWrite(LED_SELECT, LOW);
// les autres éteintes
digitalWrite(LED2_OR_6, LOW);
digitalWrite(LED3_OR_7, LOW);
digitalWrite(LED4_OR_8, LOW);
delay(100);
//allumage de la LED 2
digitalWrite(LED1_OR_5, LOW);
digitalWrite(LED2_OR_6, HIGH);
delay(100);
// allumage de la LED 3
digitalWrite(LED2_OR_6, LOW);
digitalWrite(LED3_OR_7, HIGH);
// allumage de la LED 4
digitalWrite(LED4_OR_8, HIGH);
digitalWrite(LED3_OR_7, LOW);
// allumage de la LED 8
digitalWrite(LED4_OR_8, LOW); // 8 allumée
digitalWrite(LED_SELECT, HIGH);
// les autres éteintes
digitalWrite(LED1_OR_5, HIGH);
digitalWrite(LED2_OR_6, HIGH);
digitalWrite(LED3_OR_7, HIGH);
delay(100);
// allumage de la LED 7
digitalWrite(LED4_OR_8, HIGH);
digitalWrite(LED3_OR_7, LOW);
delay(100);
// allumage de la LED 6
digitalWrite(LED3_OR_7, HIGH);
digitalWrite(LED2_OR_6, LOW);
delay(100);
// allumage de la LED 5
digitalWrite(LED1_OR_5, LOW);
digitalWrite(LED2_OR_6, HIGH);
delay(100);
// et on éteint tout
digitalWrite(LED1_OR_5, HIGH);
}
view raw CapTouch.ino hosted with ❤ by GitHub

Un inconvénient du Capacitive Touch BoosterPack, c'est qu'il recouvre la totalité des pins GPIO du Launchpad:  il n'y a plus de pins disponibles pour ajouter d'autres capteurs, un afficheur, etc.  Je suppose que la solution la plus évidente consiste à transmettre les données du boosterpack vers un ordinateur ou  un autre microcontrôleur.  Autre possibilité:  quelqu'un qui ne désire pas utiliser les LEDs du boosterpack pourrait libérer 5 pins du Launchpad et y brancher autre chose.

Yves Pelletier (Twitter:  @ElectroAmateur)

(Le Capacitive Touch BoosterPack utilisé pour cet article a été fourni gratuitement par Farnell.fr.)

Aucun commentaire:

Enregistrer un commentaire