Componente · Sensore
Microswitch a leva
Il microswitch a leva è il sensore di contatto del paraurti di un robot. Scopri il cablaggio sicuro, i nove fronti di una pressione e il ruolo del braccio.
Che cos’è
Un microswitch a leva — un interruttore miniaturizzato a scatto — è un contatto meccanico in un piccolo corpo di plastica dal quale sporge una leva metallica. Premi la leva e una molla interna fa scattare il contatto; rilasci e la molla lo riporta indietro. È uno dei componenti più antichi di questa libreria e, su un robot, uno dei più utili.
A renderlo un componente robotico è l’azione a scatto. Il contatto non si chiude gradualmente mentre premi: scatta, in un punto ripetibile, con un clic udibile. Così ottieni una risposta netta sì/no da un meccanismo spinto da un robot in movimento, proprio la situazione in cui un sensore graduale dà nonsenso.
Come funziona
Tre terminali: COM (comune), NO (normalmente aperto) e NC (normalmente chiuso). Senza pressione, COM è collegato a NC. Premendo, scatta su NO. Usi due dei tre e ignori l’altro.
Per un paraurti robotico, collega COM a massa e NO al pin di ingresso, con il pull-up interno del pin attivo:
pinMode(BUMP_L, INPUT_PULLUP); // idle HIGH
bool pressed = digitalRead(BUMP_L) == LOW; // LOW means the bumper moved
Questa configurazione è sicura in caso di guasto: un filo del paraurti rotto viene letto HIGH, cioè non premuto. Collegandolo al contrario, un filo spezzato convince il robot che è in collisione permanente. Per un arresto di emergenza usa invece NC: in quel caso un filo rotto dovrebbe fermare la macchina.
La leva scambia forza con corsa. Il puntalone nudo vuole circa 1 N su circa 1 mm; il braccio della leva moltiplica il movimento, così la scocca del paraurti può spostarsi di 3–5 mm e attivarsi con una pressione molto più leggera. Un rullo all’estremità riduce l’attrito quando qualcosa scorre sopra anziché premere direttamente.
Quando usarlo
Usane uno ovunque il robot debba sapere di aver già toccato qualcosa: paraurti, finecorsa di un braccio o di una slitta, sensore di coperchio o cassetto, oppure rivelatore di aggancio. È la sensazione di ultima istanza, ed è un complimento: cattura la gamba nera di una sedia, il vetro e l’ostacolo all’altezza sbagliata che ogni sensore ottico e acustico manca.
È anche l’unica sensazione necessaria a un robot di copertura con rimbalzi casuali. Due di questi e un generatore di numeri casuali coprono un’intera stanza: una quantità notevole di comportamento a fronte di sole due parti mobili.
Cerca altrove quando devi evitare la collisione anziché rilevarla: è questo il compito di un sensore ultrasonico o a tempo di volo. Puoi usare entrambi: il sensore di distanza evita la maggior parte degli ostacoli e l’interruttore cattura quelli che non vede.
Trappole comuni
- Una pressione è nove fronti. Elimina il rimbalzo e non collegare mai un interrupt che conta: deve soltanto impostare un flag o catturare una marca temporale.
- Il corpo dell’interruttore non è una parte strutturale. Dai alla scocca del paraurti un fermo meccanico che assorba l’impatto. I corpi degli interruttori si crepano: è ciò che li uccide molto prima che i contatti si consumino.
- La sua molla non riporta indietro il paraurti. Un microswitch spinge con 50–100 g. Usa elastici o molle di compressione leggere per il ritorno e lascia che l’interruttore si limiti a sentire.
- Un paraurti piatto manca gli impatti obliqui. Avvolgi la scocca fino ad almeno 45° su ciascun lato, con un interruttore dietro ogni metà, così il codice sa da che parte ruotare.
- I fili lunghi raccolgono rumore dei motori. Tieni il tratto corto, intreccia la coppia e affidati al percorso a bassa impedenza del pull-up quando è chiuso.
- Le portate dei contatti sono per la rete elettrica, non per la logica. A un interruttore classificato per 5 A a 125 V AC qui si chiede di far passare microampere; la portata non dice nulla di utile sulla sua durata in questo lavoro. La corsa preliminare e la forza di azionamento sì.
Cablaggio
Due dei tre terminali, e la scelta dei due decide come il robot si comporta in caso di guasto.
| Uso | COM verso | Segnale da | Stato inattivo | Filo rotto letto come |
|---|---|---|---|---|
| Paraurti | GND | NO, pin INPUT_PULLUP |
HIGH | Non premuto: sicuro |
| Arresto di emergenza | GND | NC, pin INPUT_PULLUP |
LOW | Premuto: sicuro |
| Qualsiasi dei due, pull-up esterno | GND | NO o NC, 10 kΩ verso VCC | — | Come sopra |
La distinzione conta. Un paraurti collegato a NO è sicuro in caso di guasto perché legge «nessuna collisione», ed è corretto: un robot con il filo del paraurti rotto deve continuare a marciare, non bloccarsi. Un arresto di emergenza collegato a NC è sicuro perché legge «fermo», ed è anch’esso corretto, per il motivo opposto.
Usa il pull-up interno. Non costa nulla, non richiede componenti e fornisce uno stato inattivo definito.
Un pin lasciato come semplice INPUT con un interruttore collegato, quando l’interruttore è aperto, è flottante e i
pin flottanti leggono qualsiasi rumore elettrico nelle vicinanze, che su un robot pieno di motori è parecchio.
L’eliminazione del rimbalzo, fatta bene
Una singola pressione produce circa nove transizioni in circa 4.7 ms mentre i contatti scattano e rimbalzano. Un software che legge il pin in modo ingenuo vede nove pressioni.
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(); }
}
Il dettaglio strutturale importante è che il timer riparte a ogni fronte, anziché leggere una volta e aspettare. Un campionamento fisso seguito da un’attesa può cadere dentro il rimbalzo e bloccare il valore sbagliato; riavviare la finestra significa che lo stato viene accettato solo dopo che il pin è rimasto tranquillo per l’intero periodo.
Perché non usare un interrupt
Gli interrupt su un microswitch sono una trappola, e precisamente:
- Non collegare mai un interrupt che conta. Nove fronti diventano nove conteggi e l’eliminazione del rimbalzo dentro un ISR richiede
millis(), che non avanza dentro un ISR su AVR. - Un interrupt che imposta un flag va bene, se l’eliminazione del rimbalzo avviene nel ciclo principale. Ma interrogare un interruttore a 100 Hz non costa nulla e il ciclo del robot sta già funzionando.
- Riserva D2 e D3 agli encoder su Uno. Sono gli unici due pin con interrupt esterno e gli encoder ne hanno davvero bisogno. Un paraurti no.
L’unico caso che giustifica un interrupt è un arresto di emergenza che deve interrompere i motori anche se il ciclo principale si è bloccato: meglio risolverlo collegando l’interruttore alla linea di abilitazione del driver del motore, così funziona senza alcun software.
Montaggio: la parte che decide davvero se funziona
Tutto quanto sopra è un problema risolto. La progettazione meccanica è dove i paraurti riescono o falliscono.
La scocca assorbe l’impatto, non l’interruttore. Il corpo di un microswitch è plastica sottile e si crepa sotto un colpo diretto. Costruisci una scocca che ruoti o scorra, dotala di un fermo meccanico che assorba la forza e lascia che l’interruttore senta un piccolo movimento verso la fine di quella corsa.
Avvolgi la scocca. Un paraurti anteriore piatto manca tutto ciò che viene colpito di lato, e un robot che naviga con sensori di distanza colpisce soprattutto di lato, perché gli ostacoli frontali sono già stati rilevati. Avvolgi fino ad almeno 45° su ciascun lato.
Due interruttori, non uno. A sinistra e a destra, dietro le due metà della scocca. Un interruttore indica che hai colpito qualcosa; due indicano da che parte ruotare. La differenza di comportamento è drammatica e il costo aggiuntivo è di circa venti centesimi.
| Interruttori | Che cosa impara il robot | Comportamento possibile |
|---|---|---|
| 1, centrale | Che è stato colpito qualcosa | Arretrare e ruotare in una direzione casuale |
| 2, sinistra e destra | Quale lato è stato colpito | Arretrare e ruotare dalla parte opposta al contatto |
| 3, aggiungendo un interruttore posteriore | Che è indietro contro qualcosa | Uscire da una situazione di blocco |
Riporta il paraurti con una molla propria. La molla interna di un microswitch spinge con soli 50–100 g, che non bastano a ripristinare in modo affidabile una scocca con attrito nel perno. Usa elastici o molle di compressione leggere e lascia che l’interruttore faccia soltanto da sensore.
Imposta la corsa preliminare in modo che la scocca si muova prima che l’interruttore raggiunga il fondo. Lo interruttore si aziona dopo 1–3 mm e ha un po’ di sovracorsa oltre quel punto: il fermo meccanico della scocca deve arrivare entro la sovracorsa, altrimenti l’impatto viene assorbito dal meccanismo interno dell’interruttore.
Sceglierne uno
| Tipo di leva | Forza di azionamento | Ideale per |
|---|---|---|
| Nessuna leva (puntalone nudo) | ~1 N su ~1 mm | Finecorse con meccanismo preciso |
| Leva corta dritta | 0.5–0.8 N | Paraurti generali |
| Leva lunga dritta | 0.2–0.5 N | Scocche leggere, contatti delicati |
| Leva a rullo | 0.5–1 N | Qualsiasi cosa che scorra sopra anziché premere dentro |
| Rullo simulato (piegato) | 0.5–1 N | Alternativa più economica al rullo |
La portata dei contatti è irrilevante qui. A un interruttore classificato per 5 A a 125 V AC si chiede di far passare pochi microampere verso un pull-up. Ciò che conta è la specifica meccanica: forza di azionamento, corsa preliminare e durata meccanica nominale (10⁵–10⁷ operazioni). Un robot che urta cento volte per sessione raggiunge 10⁵ operazioni dopo mille sessioni, quindi la durata meccanica è di fatto illimitata: lo l’interruttore morirà molto prima per il corpo crepato.
Risoluzione dei problemi
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| Una pressione attiva più volte | Nessuna eliminazione del rimbalzo | Usa il modello qui sopra con una finestra di 8 ms |
| Risulta sempre premuto | Collegato a NC invece che a NO | Passa al terminale NO |
| Legge valori casuali senza contatto | Pin flottante | INPUT_PULLUP, oppure un resistore esterno da 10 kΩ |
| Falsi trigger quando i motori girano | Fili lunghi e non schermati che raccolgono rumore | Accorcia e intreccia la coppia; aggiungi un condensatore da 100 nF sul pin |
| Il paraurti non torna indietro | Si affida alla molla dell’interruttore | Aggiungi elastici o una molla di ritorno |
| L’interruttore si crepa dopo poche collisioni | L’impatto passa dal corpo dell’interruttore | Aggiungi un fermo meccanico che la scocca incontri prima |
| Non rileva le collisioni oblique | Paraurti piatto | Avvolgi la scocca a 45° su ciascun lato |
| Il robot arretra ma colpisce di nuovo la stessa cosa | Un solo interruttore, nessuna informazione sulla direzione | Due interruttori e ruota dalla parte opposta a quello scattato |
| Funziona sul banco, non sul robot | Geometria del paraurti, non elettronica | Spingi la scocca a mano da più angolazioni e osserva il pin |
Perché questa componente economica si guadagna il suo posto
Ogni altro sensore di un robot ha superfici che non può vedere. Un sensore ultrasonico è cieco alle tende e alle pareti incontrate con un angolo ripido. Un VL53L0X è cieco alle superfici nere opache, agli specchi e a qualsiasi cosa alla luce diretta del sole. Una fotocamera ha bisogno di luce.
Un microswitch non ha un elenco del genere. Se qualcosa sta toccando il paraurti, l’interruttore si chiude. Questo lo rende la sensazione di ultima istanza e, su un robot che deve funzionare senza supervisione, è l’affidabilità più economica disponibile: due interruttori, due pin e circa quaranta centesimi.
Ed è anche, straordinariamente, sufficiente da solo. Un robot con due microswitch e una svolta casuale al contatto coprirà un’intera stanza, se ha tempo sufficiente: è esattamente così che funzionavano i robot aspirapolvere di prima generazione, ed è utile capirlo prima di ricorrere a qualcosa di più sofisticato.
Esplora il grafo
Usato in queste costruzioni
Progetti, percorsi di apprendimento e simulatori che includono Microswitch a leva.
- ProgettoCostruisci un plotter a penna: due assi passo-passo che arrivano
- ProgettoCostruisci un robot di copertura che percorre un'intera stanza
- ProgettoCostruisci un robot di prelievo e posa che sa quando ha mancato
- PercorsoGrasping e organi terminali: raccoglilo davvero
- PercorsoMovimento di precisione con motori passo-passo
- PercorsoNavigazione reattiva: insegna a un robot a evitare gli ostacoli
Domande
FAQ su Microswitch a leva
A cosa serve un microswitch a leva su un robot?
È il sensore dietro un paraurti. Una scocca elastica sul fronte del robot preme l'interruttore quando il robot entra in contatto e fornisce al codice un unico bit inequivocabile — ho colpito qualcosa — che nessun sensore ottico o acustico può fornire con la stessa affidabilità. È ciò che permette a un robot di rilevare una gamba nera di una sedia, un vetro o un ostacolo all'altezza sbagliata per il suo sensore di distanza.
L'interruttore va cablato normalmente aperto o normalmente chiuso?
Per un paraurti, normalmente aperto verso massa con il pin dotato di pull-up. In questo modo un filo rotto viene letto come non premuto, così un conduttore spezzato non può convincere il robot che è in collisione permanente. Usa invece il contatto normalmente chiuso per un arresto di emergenza, perché il guasto sicuro è opposto: un filo rotto deve fermare la macchina.
Perché una pressione viene registrata più volte?
Rimbalzo del contatto. Il contatto metallico arriva, devia, si separa e arriva di nuovo più volte nei primi millisecondi, e un microcontrollore che campiona a megahertz vede ognuno di questi come un fronte reale. Un interruttore a leva modello produce nove transizioni in circa 4.7 ms. Elimina il rimbalzo via software con una finestra che ignora per un certo tempo dopo l'accettazione e non collegare mai un interrupt che effettua il conteggio.
Che cosa fa davvero il braccio della leva?
Scambia forza con corsa. Il puntalone nudo richiede da 1 a 1.5 N su circa 1 mm; una leva moltiplica il movimento, così la scocca del paraurti può spostarsi di 3–5 mm e azionarsi con una pressione molto più leggera. È importante perché la scocca deve muoversi abbastanza da essere affidabile, ma non così tanto da spingere via i piccoli ostacoli prima di attivarsi.
Mi serve una resistenza di pull-up?
No: usa il pull-up interno del microcontrollore con INPUT_PULLUP. È gratuito, non richiede componenti aggiuntivi nell'angolo più soggetto a urti del robot e il percorso a bassa impedenza verso massa quando l'interruttore è chiuso impedisce a un lungo filo del paraurti di raccogliere rumore dal driver accanto.
Per approfondire