Composant · Capteur

Lever Microswitch

Micro-interrupteur à levier : le capteur de contact d'un pare-chocs. Câblage à sécurité intégrée, pourquoi un appui donne neuf fronts, et à quoi sert le levier.

Présentation

Un micro-interrupteur à levier — un interrupteur miniature à action brusque — est un contact mécanique dans un petit boîtier plastique avec un levier métallique qui en dépasse. Poussez le levier et un ressort interne fait basculer le contact ; relâchez et le ressort le ramène. C’est l’un des plus vieux composants de cette bibliothèque et, sur un robot, l’un des plus utiles.

Ce qui en fait une pièce de robotique est l’action brusque. Le contact ne se ferme pas progressivement quand on appuie ; il saute, à un point répétable, avec un clic audible. Cela donne une réponse nette par oui ou non depuis un mécanisme bousculé par un robot en mouvement, exactement la situation où un capteur progressif donne n’importe quoi.

Deux tracés empilés. Celui du haut montre un signal d'interrupteur sur environ six millisecondes : la broche brute tombe au bas, puis oscille entre haut et bas neuf fois sur 4,7 millisecondes avant de se stabiliser au bas, tandis que la sortie filtrée reste au haut jusqu'à expiration de la fenêtre puis tombe proprement. Le tracé du bas montre le nombre de fronts qu'une interruption compterait chutant par paliers de neuf à un à mesure que la fenêtre anti-rebond passe de zéro à huit millisecondes, atteignant un à 4,7 millisecondes.
La chose à savoir sur cette pièce : un seul appui produit neuf transitions sur environ 4,7 ms. Une fenêtre anti-rebond plus courte que le rebond compte le rebond, et une fenêtre assez longue pour le stabiliser coûte exactement sa propre durée en latence. Télécharger le SVG

Fonctionnement

Trois bornes : COM (commun), NO (normalement ouvert) et NF (normalement fermé). Non appuyé, COM est relié à NF. Appuyé, il bascule vers NO. On en utilise deux sur trois et on ignore l’autre.

Pour un pare-chocs de robot, câblez COM à la masse et NO vers la broche d’entrée, avec le rappel interne de la broche :

pinMode(BUMP_L, INPUT_PULLUP);              // idle HIGH
bool pressed = digitalRead(BUMP_L) == LOW;  // LOW means the bumper moved

Ce montage est à sécurité intégrée : un fil de pare-chocs coupé se lit au HAUT, soit non appuyé. Câblé dans l’autre sens, un fil arraché convainc le robot qu’il est en collision permanente. Pour un arrêt d’urgence, utilisez NF à la place — là, un fil coupé doit arrêter la machine.

Le levier échange force contre course. Le poussoir nu veut environ 1 N sur à peu près 1 mm ; un bras de levier multiplie le mouvement pour qu’une coque pare-chocs parcoure 3–5 mm et déclenche avec un appui bien plus léger. Un galet en bout réduit la friction là où quelque chose glisse dessus plutôt que d’appuyer droit.

Quand l’utiliser

Utilisez-en partout où le robot doit savoir qu’il a déjà touché : pare-chocs, fins de course sur un bras ou un chariot, capteur de capot ou de tiroir, ou détecteur d’accueil. C’est la détection de dernier recours, et c’est un compliment — elle attrape le pied de chaise noir, la vitre, et l’obstacle à la mauvaise hauteur que chaque capteur optique et acoustique rate.

C’est aussi la seule détection dont a besoin un robot de couverture à rebond aléatoire. Deux de ceux-ci et un générateur aléatoire couvriront toute une pièce, ce qui est une quantité remarquable de comportement pour deux pièces mobiles.

Regardez ailleurs quand il faut éviter la collision plutôt que la détecter — c’est le travail d’un capteur ultrason ou temps de vol. Utilisez les deux : le télémètre évite la plupart des obstacles, l’interrupteur attrape ceux qu’il ne peut pas voir.

Pièges courants

  • Un appui vaut neuf fronts. Filtrez-le, et ne branchez jamais une interruption qui compte — seulement une qui pose un drapeau ou capture une estampille temporelle.
  • Le corps de l’interrupteur n’est pas une pièce de structure. Donnez à la coque pare-chocs une butée dure qui encaisse le choc. Les corps d’interrupteur se fissurent ; c’est ce qui les tue bien avant l’usure des contacts.
  • Son propre ressort ne ramènera pas votre pare-chocs. Un micro-interrupteur repousse avec 50–100 g. Utilisez des élastiques ou de légers ressorts de compression pour le retour et laissez l’interrupteur seulement détecter.
  • Un pare-chocs plat rate les touches en biais. Enveloppez la coque au moins à 45° de chaque côté, avec un interrupteur derrière chaque moitié pour que le code sache de quel côté tourner.
  • Les longs fils captent le bruit moteur. Gardez le parcours court, torsadez la paire, et comptez sur le chemin basse impédance du rappel quand il est fermé.
  • Les pouvoirs de coupure sont pour le secteur, pas la logique. Un interrupteur prévu 5 A sous 125 V AC passe ici des microampères ; la valeur ne dit rien d’utile sur sa vie dans ce rôle. Pré-course et force d’actionnement, si.

Câblage

Deux des trois bornes, et lesquelles décident comment le robot échoue.

Usage COM vers Signal depuis État au repos Fil coupé lu comme
Pare-chocs GND NO, broche INPUT_PULLUP HAUT Non appuyé — sûr
Arrêt d’urgence GND NF, broche INPUT_PULLUP BAS Appuyé — sûr
L’un ou l’autre, rappel externe GND NO ou NF, 10 kΩ vers VCC — Comme ci-dessus

La distinction compte. Un pare-chocs câblé en NO échoue en sécurité en lisant « pas de collision », ce qui est juste — un robot au fil de pare-chocs coupé doit continuer à rouler, pas se figer. Un arrêt d’urgence câblé en NF échoue en sécurité en lisant « arrêté », ce qui est aussi juste, pour la raison inverse.

Utilisez le rappel interne. Il ne coûte rien, n’exige aucun composant, et donne un état de repos défini. Une broche laissée en simple INPUT avec un interrupteur flotte quand l’interrupteur est ouvert, et les broches flottantes lisent le bruit électrique ambiant — qui sur un robot plein de moteurs est abondant.

Anti-rebond, fait correctement

Un seul appui produit environ neuf transitions sur à peu près 4,7 ms quand les contacts claquent et rebondissent. Un logiciel qui lit la broche naïvement voit neuf appuis.

const int BUMP_L = 2, BUMP_R = 3;
const unsigned long DEBOUNCE_MS = 8;      // longer than the ~5 ms bounce

struct Bumper {
  uint8_t pin;
  bool stable;            // the debounced state
  bool lastRead;
  unsigned long changedAt;
};

Bumper left  = {BUMP_L, true, true, 0};
Bumper right = {BUMP_R, true, true, 0};

// Returns true on the frame the bumper newly closes.
bool update(Bumper &b) {
  bool now = digitalRead(b.pin);          // HIGH = open, with INPUT_PULLUP
  if (now != b.lastRead) {
    b.lastRead = now;
    b.changedAt = millis();               // restart the timer on any edge
    return false;
  }
  if (millis() - b.changedAt >= DEBOUNCE_MS && b.stable != now) {
    b.stable = now;
    return (now == LOW);                  // newly pressed
  }
  return false;
}

void setup() {
  pinMode(BUMP_L, INPUT_PULLUP);
  pinMode(BUMP_R, INPUT_PULLUP);
}

void loop() {
  if (update(left))  { backUp(); turnRight(); }
  if (update(right)) { backUp(); turnLeft(); }
}

Le détail structurel important est que le temporisateur redémarre à chaque front, plutôt que d’échantillonner une fois et d’attendre. Un échantillonnage fixe peut tomber dans le rebond et verrouiller la mauvaise valeur ; redémarrer la fenêtre signifie que l’état n’est accepté qu’une fois la broche restée calme pendant toute la période.

Pourquoi pas une interruption

Les interruptions sur un contacteur de choc sont un piège, et précisément :

  • Ne branchez jamais une interruption qui compte. Neuf fronts deviennent neuf comptages, et un anti-rebond dans une ISR exige millis(), qui n’avance pas dans une ISR sur AVR.
  • Une interruption posant un drapeau convient, si le filtrage se fait dans la boucle principale. Mais scruter un interrupteur à 100 Hz ne coûte rien, et la boucle d’un robot tourne déjà.
  • Réservez D2 et D3 aux encodeurs sur un Uno. Ce sont les deux seules broches d’interruption externe, et les encodeurs en ont vraiment besoin. Un pare-chocs non.

Le seul cas justifiant une interruption est un arrêt d’urgence dur qui doit couper les moteurs même si la boucle principale est bloquée — et cela se résout mieux en câblant l’interrupteur dans la ligne de validation du pilote moteur, pour que cela marche sans aucun logiciel.

Montage : la partie qui décide vraiment si ça marche

Tout ce qui précède est un problème résolu. La conception mécanique est là où les pare-chocs réussissent ou échouent.

La coque encaisse le choc, pas l’interrupteur. Un corps de micro-interrupteur est un plastique fin qui se fissure sous un coup direct. Construisez une coque pare-chocs qui pivote ou coulisse, donnez-lui une butée dure qui encaisse l’effort, et laissez l’interrupteur détecter un petit mouvement près de la fin de cette course.

Enveloppez la coque. Un pare-chocs avant plat rate tout ce qui est touché en biais — et un robot naviguant aux télémètres touche surtout en biais, parce que les obstacles de face étaient déjà détectés. Enveloppez au moins à 45° de chaque côté.

Deux interrupteurs, pas un. Gauche et droite, derrière les deux moitiés de la coque. Un interrupteur dit que vous avez touché quelque chose ; deux disent de quel côté tourner. La différence de comportement est spectaculaire et le surcoût est d’environ vingt centimes.

Interrupteurs Ce que le robot apprend Comportement possible
1, centre Quelque chose a été touché Reculer, tourner dans une direction aléatoire
2, gauche et droite Quel côté a touché Reculer, s’écarter du contact
3, ajout arrière Aussi qu’il a reculé dans quelque chose Sortir d’un coincement

Ramenez le pare-chocs avec son propre ressort. Le ressort interne d’un micro-interrupteur repousse avec seulement 50–100 g, insuffisant pour rappeler fiablement une coque avec du frottement dans son pivot. Utilisez des élastiques ou de légers ressorts de compression, et laissez l’interrupteur seulement détecter.

Réglez la pré-course pour que la coque bouge avant que l’interrupteur ne bute. L’interrupteur fonctionne après 1–3 mm et a un peu de sur-course au-delà ; la butée dure de la coque doit arriver dans la sur-course, sinon l’impact est encaissé par le mécanisme interne de l’interrupteur.

En choisir un

Type de levier Force d’actionnement Idéal pour
Sans levier (poussoir nu) ~1 N sur ~1 mm Fins de course où le mécanisme est précis
Levier droit court 0,5–0,8 N Pare-chocs généraux
Levier droit long 0,2–0,5 N Coques légères, contact délicat
Levier à galet 0,5–1 N Tout ce qui glisse dessus plutôt qu’appuyer droit
Faux galet (plié) 0,5–1 N Alternative moins chère au galet

Le pouvoir de coupure est sans objet ici. Un interrupteur prévu 5 A sous 125 V AC passe quelques microampères vers un rappel. Ce qui compte est la spécification mécanique : force d’actionnement, pré-course, et durée de vie mécanique nominale (10⁵–10⁷ manœuvres). Un robot cognant cent fois par parcours atteint 10⁵ manœuvres après mille parcours, donc la vie mécanique est effectivement illimitée — l’interrupteur mourra d’un corps fissuré bien avant.

Dépannage

Symptôme Cause probable Solution
Un appui déclenche plusieurs fois Pas d’anti-rebond Utilisez le motif ci-dessus avec une fenêtre de 8 ms
Lit appuyé en permanence Câblé en NF au lieu de NO Passez à la borne NO
Lit aléatoirement sans toucher Broche flottante INPUT_PULLUP, ou 10 kΩ externe
Faux déclenchements quand les moteurs tournent Longs fils non blindés captant du bruit Raccourcissez et torsadez la paire ; ajoutez 100 nF sur la broche
Le pare-chocs ne revient pas Retour confié au ressort propre Ajoutez élastiques ou ressort de rappel
Interrupteur fissuré après quelques collisions Impact passant par le corps Ajoutez une butée dure que la coque heurte d’abord
Rate les collisions en biais Pare-chocs plat Enveloppez la coque à 45° de chaque côté
Le robot recule mais retouche la même chose Un interrupteur, pas d’info de direction Deux interrupteurs, et tournez à l’opposé de celui qui a déclenché
Marche sur table, pas sur le robot Géométrie du pare-chocs, pas électronique Poussez la coque à la main sous plusieurs angles et observez la broche

Pourquoi cette pièce bon marché mérite sa place

Chaque autre capteur d’un robot a des surfaces qu’il ne peut pas voir. Un capteur ultrason est aveugle aux rideaux et aux murs abordés à angle fort. Un VL53L0X est aveugle aux surfaces noires mates, miroirs, et à tout en plein soleil. Une caméra a besoin de lumière.

Un micro-interrupteur n’a pas une telle liste. Si quelque chose touche le pare-chocs, l’interrupteur se ferme. Cela en fait la détection de dernier recours, et sur un robot qui doit survivre sans surveillance c’est la fiabilité la moins chère disponible — deux interrupteurs, deux broches, et environ quarante centimes.

C’est aussi, remarquablement, suffisant seul. Un robot à deux contacteurs de choc et un virage aléatoire au contact couvrira une pièce entière avec assez de temps — c’est exactement comment fonctionnait la première génération d’aspirateurs robots, et cela vaut d’être compris avant de chercher quoi que ce soit de plus sophistiqué.

Explorer le graphe

Utilisé dans ces réalisations

Projets, parcours d'apprentissage et simulateurs qui intègrent le composant Lever Microswitch.

Questions

FAQ : Lever Microswitch

À quoi sert un micro-interrupteur à levier sur un robot ?

C'est le capteur derrière un pare-chocs. Une coque à ressort sur l'avant du robot appuie sur l'interrupteur quand le robot touche, donnant au code un bit sans ambiguïté — j'ai touché quelque chose — qu'aucun capteur optique ou acoustique ne fournit aussi fiablement. C'est ce qui permet à un robot de détecter un pied de chaise noir, une vitre, ou un obstacle à la mauvaise hauteur pour son télémètre.

Faut-il câbler l'interrupteur normalement ouvert ou normalement fermé ?

Normalement ouvert vers la masse avec la broche rappelée au haut, pour un pare-chocs. Ainsi un fil coupé se lit comme non appuyé, donc un fil arraché ne peut pas convaincre le robot qu'il est en collision permanente. Utilisez le contact normalement fermé pour un arrêt d'urgence, où la défaillance sûre est inverse — un fil coupé doit arrêter la machine.

Pourquoi un appui s'enregistre-t-il plusieurs fois ?

Rebond de contact. Le contact métallique arrive, fléchit, se sépare et revient plusieurs fois pendant les premières millisecondes, et un microcontrôleur échantillonnant au mégahertz voit chacun comme un vrai front. Un interrupteur à levier modélisé produit neuf transitions sur environ 4,7 ms. Filtrez en logiciel avec une fenêtre d'ignorance après acceptation, et ne branchez jamais une interruption qui compte.

À quoi sert vraiment le levier ?

Il échange force contre course. Le poussoir nu exige 1 à 1,5 N sur environ 1 mm ; un levier multiplie le mouvement pour que la coque parcoure 3 à 5 mm et actionne avec un appui bien plus léger. Cela compte parce qu'une coque pare-chocs doit bouger assez pour être fiable et assez légèrement pour ne pas pousser les petits obstacles avant de déclencher.

Faut-il une résistance de rappel ?

Non — utilisez le rappel interne du microcontrôleur avec INPUT_PULLUP. Il est gratuit, n'exige aucune pièce supplémentaire sur le coin le plus malmené du robot, et le chemin basse impédance vers la masse quand l'interrupteur se ferme empêche un long fil de pare-chocs de capter le bruit du pilote moteur voisin.

Pour aller plus loin

Références