Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Capteurs > Autres capteurs > Interrupteur fin de course

Interrupteur fin de course

description et utilisation des microrupteurs

mardi 10 janvier 2006, par Julien H.

Un microrupteur type "microswitch" ou "fin de course" est un interrupteur miniature utilisé pour les capteurs de contact, pour les fins de courses et autres ouvertures de portes.

D’un point de vue électronique, il est équivalent à un interrupteur à trois positions ou "toggle switch" dans les logiciels d’électroniques en anglais.

Définition et principe

On trouve généralement 3 dimensions :
 standard (30x20x10 mm)
 miniatures (20x10x6 mm)
 subminiature (13x6x6 mm)

Et de 3 sortes :
 avec levier (languette)
 sans levier (juste le poussoir)
 avec levier et roulette

D’autres capteurs peuvent s’apparenter à des interrupteurs, comme les fourches optiques.

On trouve ces composants en vente pour quelques euros dans les magasins d’électroniques, ou en ligne chez Gotronic par exemple

Conseils

Attention à ne pas confondre ces interrupteurs équipés d’une lamelle souple avec les ILS ou Interrupteurs à Lame Souple (ILS) qui fonctionnent grâce à un aimant (décrits ici).

La languette est une plaque de métal qui vient appuyer sur l’interrupteur proprement dit (petit bouton de quelques mm d’épaisseur). Si la languette est très longue, c’est qu’elle est généralement destinée à être repliée (pour gagner en ressort ou pour assurer le bon contact avec l’élément destiné à appuyer dessus.

L’absence de languette est utile pour une utilisation en fin de course où un élément (de taille imposante) va venir effleurer le poussoir pour déclencher l’interrupteur. Il faut le fixer tangentiellement. Très utile également pour l’utiliser dans les deux sens et éviter de tordre la languette.

La roulette est là... pour faire joli, je n’en ai jamais utilisé personnellement. En fait son intérêt doit être de permettre un contact plus doux et éviter que la languette soit arrachée (si on peut confirmer ou me révéler le mystère de la roulette du microswitch..)

Oui effectivement, la roulette est utile quand l’objet qui a fait contact dans un sens va devoir revenir dans l’autre sens (comme une porte qui se ferme doit se réouvrir).

Pas de mystère mais un cas qu’on ne rencontre pas trop en robotique où les micro-rupteurs sont utilisés en fin de course. Mais le principe de la roulette est largement utilisé dans les angles du chassis pour éviter toute prise au contact d’un bord ou de tout objet résistant.

Astuce : protection de la lame

Il est conseillé de ne pas mettre la lame souple de l’interrupteur au contact direct de l’objet que le robot va toucher et détecter mais d’utiliser un mécanisme peu couteux qu’on pourra remplacer en cas d’arrachage. Voici ce que cela donne quand le microswitch est bien utilisé : idée d’Henri brillamment mise en pratique sur le robot de la Coupe 2008.

Exemple de montage

Principe

Comme on dit dans les rédactions de collège, entrons maintenant dans le vif du sujet : un microswitch est généralement composé de 3 pattes (sauf quelques modèles économiques qui ne servent qu’à gâcher mon énoncé) et cet article est là pour vous aider à comprendre comment ça marche et comment l’utiliser concrètement.

Sur certains modèles, on peut lire le nom des pattes (pas forcément dans cet ordre, on y reviendra plus tard) :
 Com (pour Common ou Commun)
 NC ou NF (pour NClosed ou Normalement Fermé)
 NO (pour NOpened ou Normalement Ouvert)

La patte commune est utilisée dans tous les cas. On doit ensuite choisir une seconde patte pour avoir un circuit complet. En choisissant NO, vous aurez un circuit ouvert quand vous ne pressez pas sur le poussoir, et avec NC, le contraire : le circuit est fermé quand il n’y a pas contact.

Astuce

Comment déterminer quelle patte correspond à quelle fonction ? Soit vous trouvez des inscriptions et vous savez avec le principe ci-dessus à quoi vous en tenir, soit il va falloir tester notre interrupteur avec un ohmmètre ou un montage élémentaire pour déterminer s’il y a contact.

Munissez-vous de votre multimètre, ou un montage utilisant une ampoule, une pile à lampe de poche et quelques fils.

Première étape, test du microswitch sans appuyer dessus, vous devez trouver :
 un couple qui fait contact : COM + NC (mais on ne sait pas qui est qui)
 deux couples qui ne font pas contact : COM + NO et NO + NC

Seconde étape, test du microswitch en appuyant dessus (utilisez un bout de scotch). Vous devez trouver :
 un couple qui fait contact : COM + NO
 deux couples qui ne font pas contact : COM + NC et NO + NC

En croisant les résultats des deux expériences, vous pouvez déterminer les 3 pins, bravo !!

Montage électronique simple

Voici un schéma représentant l’interrupteur à trois états, deux leds et une pile permettant d’éclairer une led à la fois :

Schéma de principe d’un interrupteur

Pour mieux visualiser le schéma, voici l’équivalent avec des composants placés sur une plaque d’essai Labdec :

Platine de montage pour interrupteur

Ces schémas sont faits avec Fritzing, un outil open source. Les schémas sont libres d’utilisation dans des documents, mais pas sur un autre site web traitant spécifiquement des interrupteurs :)

La led blanche (Led 1) est connectée à la pile d’un côté, et à la sortie NC de l’interrupteur d’autre part. Comme c’est la patte "normalement connectée", le circuit est fermé lorsque l’interrupteur est au repos (non appuyé) donc la led 1 est éclairée en permanence.

Lorsqu’on appuie sur l’interrupteur, la led rouge (Led 2) s’allume et la blanche est éteinte, puisque la rouge est connectée à la patte NO ou "normalement ouvert", ce qui veut dire que le circuit se ferme quand on active / appuie / enfonce le bouton de l’interrupteur.

Connexion à un micro-contrôleur

Comme on dit dans les rédactions de lycée, entrons maintenant dans le vif du sujet (oui la pédagogie, c’est beaucoup de répétition). On va connecter notre micro-rupteur à un micro-contrôleur.

Comme vous l’avez vu précédemment, un microswitch a deux états (comme beaucoup d’interrupteurs) : ouvert ou fermé. En électronique numérique, on préfère parler de signaux (bas et haut), ou de tensions (masse, GND, 0 et Vcc, V+, 5V, 12V, ...).

Notre travail consiste donc maintenant à associer un signal à chaque état de notre interrupteur. Et là il faut faire attention, car il n’y a pas de correspondance entre un signal et un état, c’est un choix à faire : on peut dire que l’état ouvert correspond à 0 volts (masse) ou 5 volts (ou toute autre tension nominale) et inversement.

Choisissons le signal bas (0V) pour l’état ouvert et le signal haut (5V puisqu’on utilise un microcontrôleur en 5V) pour l’état fermé. Et pour rendre plus explicite cette notion d’état, on va choisir la patte NO pour que l’état ouvert corresponde à l’état "au repos" quand on n’appuie pas sur le microswitch.

Résumé : avec nos choix, il faut appuyer sur l’interrupteur pour faire contact pour qu’il y ait un signal qui soit lu.

Comment transformer l’état de l’interrupteur en un signal ? Tout simplement en reliant les pattes à l’alimentation :
 la patte Com à la masse (GND, 0V)
 la patte NO à la tension nominale (Vcc, 5V) mais..

Attention, lorsque le circuit est fermé, la masse va être reliée directement à la tension, ce qu’il ne faut pas faire. On va donc intercaler une résistance entre la tension de l’alimentation et la patte NO.

Voilà, on dispose d’un circuit complet et fonctionnel : le courant va passer dans l’interrupteur quand on va appuyer dessus !

Dernière étape, connectons un composant sur ce microrupteur. On a choisi l’entrée numérique d’un microcontrôleur : il suffit de connecter l’entrée à la patte Com de notre montage pour pouvoir "lire" la valeur de l’interrupteur : 0V quand l’interrupteur est ouvert, et 5V quand l’interrupteur est fermé.

Le mot de la fin

Ce montage qui consiste à relier la masse à l’entrée du microcontrôleur quand le circuit (interrupteur) est ouvert s’appelle un "pull-down" (pousser vers le bas). Le montage inverse est possible : en reliant le µC à la patte NO donc à l’alimentation (en passant par une résistance) s’appelle un "pull-up".

Montage et exemple de Code

Montage sur Atmega163 (Ici l’entrée du port D est liée à NC

On connecte un interrupteur sur l’entrée/sortie "PD2" d’un microcontrôleur ATmega163 (famille AVR du fabricant Atmel), soit la 3ème patte du port 8 bits D (les ports sont nommés A, B, C, D, E, F dans cette famille selon leurs fonctionnalités, certains microcontrôleurs n’ayant que le port B et D par exemple, d’autres un port A et C supplémentaire, etc..).

Il faut faire attention au nommage : un port d’entrées/sorties à fonctionnalités générales (GPIO or general purpose input ouput) de 8 bits a donc 8 entrées/sorties, numérotées de 0 à 7. Donc si on parle de la patte n°2, c’est la 3ème. Il faut bien faire attention à ne pas se tromper. Sans la vigilance de nos lecteurs, je n’aurai pas rectifié ce code (merci Simon) !

Comme on a relié une résistance à l’alimentation 5 volts, le port reçoit un niveau haut quand l’interrupteur est relâché et un niveau bas quand l’interrupteur est enfoncé.


// code exemple pour un Atmel AVR programmé avec avr-gcc
// include des définitions d’entrées/sorties (nom des ports, nom des pattes, etc)
#include "avr/io.h"

int main(void)

// initialisation des entrées/sorties
cbi(DDRD,2) ;
// "cbi" = "clear bit" = niveau bas sur le registre DDR du port D pour la patte 2
// DDR = direction data register, c’est un registre 8 bits disponible pour chaque port (DDRA, DDRB, DDRC..)
// qui permet d’assigner le sens : 1 pour sortie, 0 pour entrée

// boucle de détection de l’interrupteur
while ()
// masque entre la lecture du port D (attention, PIND et pas PORTD pour lire les valeurs en entrée)
// et la 3ème patte : (binaire) 0000 0100 = (hexa) 04
if (inb(PIND) & 0x04)
// interrupteur relâché, la pull-up fait son office
else
// interrupteur enfoncé


return 0 ;

Sur ces µC, les ports sont en 8 bits donc on utilise des registres pour accéder aux entrées/sorties numériques :
 DDRx pour positionner la direction de chacun des bits
 PORTx pour sortir un niveau haut ou bas (en sortie) ou sélectionner les pull-up/pull-down (en entrée)
 PINx pour lire les valeurs en entrée

Mais c’est parfois pénible d’avoir à gérer ce qui se passe sur les 8 pattes du port, car à chaque fois qu’on veut changer la valeur d’un seul bit du registre il faut veiller à ne pas toucher aux autres (on utilise des masques avec des "ou" | et des "et" &). Donc des fonctions existent avec la bibliothèque de fonctions "libc" pour avr fournie avec le compilateur avr-gcc. Ce sont "sbi" (pour set bit) et "cbi" (pour clear bit). Ainsi si je veux changer la valeur de la 3ème patte du port D (ou PD2), je peux faire directement cbi(PORTD,2) pour mettre à 0 la patte 2, ou sbi(PORTD,2) pour la mettre à 1.

De la même manière, la lecture du port se fait avec une fonction plutôt qu’avec le registre. C’est la fonction inb (pour in byte). Il n’y a pas à ma connaissance de fonction directe pour avoir la valeur d’un bit du registre PIND.

Vos commentaires

  • Le 8 février 2009 à 12:07, par alex En réponse à : Interrupteur Microswitch

    Bonjour,
    Je n’ai pas bien comprit le montage "pull-down"
    faut-il placer aussi une résistance ou pas ?? Pourriez-vous dessiner le montage ?
    Dans le code exemple je n’ai pas comprit la ligne 10 :

    "donc la patte 3 du port D sera en entrée"

    Que voulez-vous dire pas la patte 3 sera en entrée ?
    Ensuite, ligne 16 & 17 :

    "masque entre le port D et la patte 3" ???

    Est-ce que je peux utiliser le même code pour un capteur de type fourche optique en changeant la lettre du port ??
    Désolé pour ces questions de débutant....
    merci d’avance
    alex

    • Le 8 février 2009 à 14:16, par Julien H. En réponse à : Interrupteur Microswitch

      Bonjour Alex,

      J’ai un peu clarifié le programme. Ici il y a une pull-up donc surtout pas de pull-down dans le micro-contrôleur.

    • Le 8 février 2009 à 15:22, par alex En réponse à : Interrupteur Microswitch

      Plusieurs questions :
      pourquoi la ligne de code "cbi(PORTD,3) ; " a-t-elle disparue dans le nouveau code ??
      Ce ne serait pas plus simple d’utiliser un if lorsque l’interrupteur est enfoncé pour éviter d’avoir un else comme dans le premier code ??
      Dans le cas de plusieurs détections successives il faudrait inclure les cbi dans une boucle pour réinitialiser les registres après chaque détection ??

    • Le 9 février 2009 à 11:49, par Julien H. En réponse à : Interrupteur Microswitch

      Quand un port est en entrée, l’écriture dans le registre PORT sert à positionner une pull-up ou une pull-down. Dans notre exemple, une résistance externe relie l’interrupteur au 5 volts, réalisant ainsi une pull-up donc pas besoin d’en ajouter une interne au microcontrôleur. En plus, "cbi(PORTD,3)" positionnait une pull-down (clear bit = 0 = niveau bas = pull-down) ce qui est idiot quand on a une pull-up via une résistance externe :)

      Concernant le if ou le else, tout dépend de ce que tu veux faire !! J’ai écrit l’exemple dans le cas où l’interrupteur est un bumper (indique un choc du robot sur un obstacle), donc j’ai besoin de faire le traitement normal dans le if, et il est plus logique de mettre le cas d’exception (le choc détecté par l’interrupteur) dans le else. Mais tu peux inverser les deux bien sûr si tu n’as pas besoin de différencier les deux cas.

      Pas besoin de réinitialiser les registres. Le registre PINx (ici, PIND) change tout seul (c’est pourquoi il faut bien faire attention à boucler très rapidement, pour être capable de détecter un choc furtif). Il existe des circuits réarmables qui permettent de mémoriser la valeur de l’interrupteur pour que ce soit traité plus tard, et qu’il faut réenclencher ensuite, mais ce n’est pas le cas ici.

    Répondre à ce message

  • Le 8 septembre 2006 à 16:53, par timothée En réponse à : Interrupteur Microswitch

    et j’ai une autre question : Si j’utilise cet interrupteur comme capteur de parcour, il va ouvrir la circuit, comment redémarer après ?

    • Le 8 septembre 2006 à 17:04, par Julien H. En réponse à : Interrupteur Microswitch

      C’est un interrupteur va-et-vient, il n’est pas bloqué dans une position. Le circuit sera réouvert (ou refermé selon la connexion) dès que la pression sera relachée.

      Dans le cas d’un détecteur d’obstacle, il n’est pas intéressant de l’utiliser en coupe-circuit général, il vaut mieux l’utiliser pour déclencher un événement (entrée d’un microcontrôleur, changement d’état d’un circuit électronique,...)

    Répondre à ce message

  • Le 8 septembre 2006 à 16:43, par timothée En réponse à : Interrupteur

    bonjour, je vais faire un petit montage électronique et j’aimerais savoir s’il existe (sur conrad par exemple) un interupteur a levier capable de faire marcher un moteur dans un sens et dans l’autre + off ?
    merci d’avance

    • Le 8 septembre 2006 à 17:00, par Julien H. En réponse à : Interrupteur

      A priori oui, il existe couramment des interrupteurs à trois positions (milieu, gauche, droite) pour fermer un circuit ou l’autre. Mais il faut un circuit électronique capable d’utiliser cet interrupteur. Il ne peut pas à lui seul faire office d’inverseur de polarité (dans le cas d’un moteur à courant continu).

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.