IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Le blog de f-leb

PSoC 4 : capteur de proximité

Noter ce billet
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é :
Nom : Image14.jpeg
Affichages : 2588
Taille : 17,0 Ko
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 :

Nom : design1.PNG
Affichages : 278
Taille : 32,1 Ko

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 :

Nom : config-capsense.png
Affichages : 230
Taille : 39,0 Ko

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 :
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
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
    }
}

Envoyer le billet « PSoC 4 : capteur de proximité » dans le blog Viadeo Envoyer le billet « PSoC 4 : capteur de proximité » dans le blog Twitter Envoyer le billet « PSoC 4 : capteur de proximité » dans le blog Google Envoyer le billet « PSoC 4 : capteur de proximité » dans le blog Facebook Envoyer le billet « PSoC 4 : capteur de proximité » dans le blog Digg Envoyer le billet « PSoC 4 : capteur de proximité » dans le blog Delicious Envoyer le billet « PSoC 4 : capteur de proximité » dans le blog MySpace Envoyer le billet « PSoC 4 : capteur de proximité » dans le blog Yahoo

Mis à jour 24/05/2023 à 17h38 par f-leb

Tags: cypress psoc
Catégories
Programmation , C , Infineon/Cypress PSoC

Commentaires