par , 14/05/2020 à 23h55 (1814 Affichages)
Il y a quelque temps, je vous présentais un article sur la programmation d'une glissière sensitive sur une carte PSoC 4.
La technologie CapSense a fait du fabricant Infineon/Cypress un leader mondial dans le domaine des capteurs sensitifs à détection capacitive. Et parmi les nombreux Widgets sensitifs possibles, tels les boutons, matrices de boutons, touchpads, glissières axiales ou radiales, j'avais aussi évoqué un Widget particulier pour la détection de proximité :
Image Cypress
La configuration dans l'environnement graphique de l'EDI PSoC Creator et le routage des entrées-sorties se fait en quelques clics :
Le but de cette démonstration (vidéo ci-dessous) est d'allumer la LED verte en surface de la carte lorsque la proximité de ma main est détectée (avec une portée de 4 à 5 cm au-dessus de la boucle formée par un simple fil relié au port). Le bloc de communication EzI2C permettra de monitorer le fonctionnement du capteur de proximité sur le PC de développement via le port USB.
Ci-dessous, on peut voir les paramètres principaux du bloc CapSense :
La méthode 'Manual with run-time tuning' permet de régler les paramètres du Widget manuellement mais aussi de les affiner en mode Tuning sur le PC en visualisant l'état du capteur sous forme de graphiques tracés en temps réel comme on peut le voir sur la vidéo :
La vidéo suivante montre la fenêtre de Tuning du capteur. Le grahique du haut montre le signal brut (Raw signal) quand j'approche ou éloigne ma main du capteur. Sur ce même graphique, la courbe en rouge est la ligne de référence en l'absence de proximité (Baseline), ligne de référence qui s'ajuste en fonction du bruit de l'environnement du capteur. Le graphique en dessous est le signal résultant après traitement avec le calcul de la différence Raw signal - Baseline. C'est ce signal qui permettra d'interpréter la proximité ou non :
Sur la droite de la fenêtre, les différents seuils (seuil de bruit, de déclenchement avec hysteresis) peuvent être ajustés en fonction de la sensibilité du capteur afin de maximiser le rapport Signal-Bruit (Signal Noise Ratio ou SNR). L'outil est tout simplement génial pour la mise au point, on se sert d'abord du mode Automatique (mode "Auto (SmartSense)") et on ajuste...
Ci-dessous le code pour la démonstration avec la LED verte. Si on n'a plus besoin du mode Tuning, on met la ligne 3 avec #define ENABLE_TUNER en commentaire :
1 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include "project.h"
#define ENABLE_TUNER
int main(void)
{
CyGlobalIntEnable; /* Autoriser interruptions globales */
CapSense_1_EnableWidget(CapSense_1_PROXIMITYSENSOR0__PROX);
#ifdef ENABLE_TUNER
CapSense_1_TunerStart();
#else
/* Démarrage, initialisation des baselines, et lancement du scan Widget */
CapSense_1_Start();
CapSense_1_InitializeAllBaselines();
CapSense_1_ScanEnabledWidgets();
#endif
while(1) {
#ifdef ENABLE_TUNER
CapSense_1_TunerComm();
#else
if (!CapSense_1_IsBusy()) /* scan terminé ? */
{
/* Détection de proximité */
uint8 proximity = CapSense_1_CheckIsSensorActive(CapSense_1_PROXIMITYSENSOR0__PROX);
if (proximity) /* si proximité détectée */
{
Pin_GreenLed_Write(0); /* Allumer la LED verte si proximité */
}
else /* Sinon */
{
Pin_GreenLed_Write(1); /* Eteindre la LED verte */
}
/* Mise à jour Baselines, relance du scan des Widgets */
CapSense_1_UpdateEnabledBaselines();
CapSense_1_ScanEnabledWidgets();
}
#endif
}
} |