Componente · Sensor

Microchave de alavanca

Microchave de alavanca para o para-choque do robô: como conectá-la com segurança, por que um toque produz nove flancos e para que serve a alavanca.

O que é

Uma microchave de alavanca — uma minichave de ação instantânea — é um contato mecânico em um pequeno corpo de plástico, com uma alavanca metálica saliente. Pressione a alavanca e uma mola interna fecha o contato instantaneamente; solte-a e a mola o retorna. É um dos componentes mais antigos desta biblioteca e, em um robô, um dos mais úteis.

O que a torna um componente de robótica é a ação instantânea. O contato não fecha gradualmente conforme você pressiona; ele salta, em um ponto repetível, com um clique audível. Isso fornece uma resposta definida de sim ou não a partir de um mecanismo que está sendo empurrado por um robô em movimento—exatamente a situação em que um sensor gradual produziria valores sem sentido.

Dois gráficos empilhados. O gráfico superior mostra o sinal da chave durante cerca de seis milissegundos: o pino bruto cai para nível baixo e depois oscila entre alto e baixo nove vezes em 4,7 milissegundos antes de estabilizar em baixo, enquanto a saída tratada permanece alta até o fim da janela e então cai de forma limpa. O gráfico inferior mostra o número de flancos que uma interrupção contaria, caindo em degraus de nove para um quando a janela antirrebote aumenta de zero para oito milissegundos, chegando a um em 4,7 milissegundos.
A única coisa que você precisa saber sobre este componente: um único toque produz nove transições em cerca de 4,7 ms. Uma janela antirrebote menor que a duração da oscilação contará as oscilações, e uma janela longa o bastante para assentá-las custa exatamente a própria duração em latência. Baixar SVG

Como funciona

Há três terminais: COM (comum), NA (normalmente aberto) e NF (normalmente fechado). Com a chave não pressionada, COM está conectado a NF. Quando ela é pressionada, salta para NA. Você usa dois dos três e ignora o outro.

Para um para-choque de robô, conecte COM à massa e NA ao pino de entrada, com o pull-up interno do pino habilitado:

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

Essa disposição falha de maneira segura: um fio rompido no para-choque produz HIGH, que significa não pressionado. Conecte ao contrário e um fio partido convince o robô de que existe uma colisão permanente. Em uma parada de emergência, use NF — nesse caso, um fio rompido deve parar a máquina.

A alavanca troca força por curso. O acionador puro quer cerca de 1 N em aproximadamente 1 mm; uma alavanca amplia o deslocamento para que uma carenagem de para-choque possa percorrer 3–5 mm e disparar com um toque muito mais leve. Um rolete na ponta reduz o atrito quando algo desliza sobre a chave, em vez de pressioná-la diretamente.

Quando usar

Use uma microchave sempre que o robô precisar saber que já entrou em contato: para-choques, fins de curso de um braço ou de um cursor, sensores de tampa ou gaveta, ou detectores de encaixe. É a detecção de último recurso, e isso é um elogio—ela encontra a perna preta da cadeira, o painel de vidro e o obstáculo na altura errada que todos os sensores ópticos e acústicos deixam passar.

Ela também é a única detecção necessária a um robô de cobertura com desvios aleatórios. Duas microchaves e um gerador de números aleatórios cobrem uma sala inteira, um comportamento notável para apenas duas peças móveis.

Procure outra opção quando precisar evitar a colisão, em vez de detectá-la—essa é a função de um sensor ultrassônico ou de tempo de voo. Use ambos: o medidor de distância evita a maioria dos obstáculos, e a chave pega os que ele não vê.

Armadilhas comuns

  • Um toque gera nove flancos. Trate a oscilação e nunca use uma interrupção que apenas conte — use uma que defina um evento ou registre um horário.
  • O corpo da chave não é uma peça estrutural. Dê à carenagem do para-choque um batente mecânico que receba o impacto. Os corpos das microchaves trincam; é isso que os destrói muito antes de os contatos se desgastarem.
  • A mola da própria chave não devolve seu para-choque. Uma microchave empurra de volta com 50–100 g. Use elásticos ou molas de compressão leves para o retorno e deixe a chave apenas detectar.
  • Um para-choque plano perde impactos de raspão. Envolva a carenagem em pelo menos 45° de cada lado, com uma chave atrás de cada metade para que o código saiba para qual lado virar.
  • Fios longos captam ruído dos motores. Mantenha o trecho curto, torça o par e confie no caminho de baixa impedância do pull-up quando a chave fecha.
  • As classificações elétricas dos contatos são para rede, não para lógica. Uma chave classificada para 5 A a 125 V CA está sendo solicitada a conduzir microamperes aqui; essa classificação não diz nada útil sobre a vida útil nessa função. O curso preliminar e a força de operação dizem.

Conexão

Dois dos três terminais, e a escolha determina como o robô falha.

Uso COM conectado a Sinal de Estado ocioso Um fio rompido é lido como
Para-choque GND NA, pino INPUT_PULLUP HIGH Não pressionado — seguro
Parada de emergência GND NF, pino INPUT_PULLUP LOW Pressionado — seguro
Qualquer um, com pull-up externo GND NA ou NF, 10 kΩ para VCC — Igual ao acima

A distinção importa. Um para-choque conectado a NA falha de forma segura lendo “sem colisão”, o que está correto—um robô com um fio de para-choque rompido deve continuar andando, não congelar. Uma parada de emergência conectada a NF falha de forma segura lendo “parado”, o que também está correto, pelo motivo oposto.

Use o pull-up interno. Não custa nada, dispensa componentes e define um estado ocioso. Um pino deixado apenas como INPUT, com uma chave conectada, flutua quando a chave está aberta, e pinos flutuantes leem qualquer ruído elétrico por perto—o que, em um robô cheio de motores, significa muito ruído.

Tratamento antirrebote feito corretamente

Um único toque produz cerca de nove transições em aproximadamente 4,7 ms enquanto os contatos saltam e retornam. Um programa que lê o pino de forma ingênua vê nove toques.

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(); }
}

O detalhe estrutural importante é que o temporizador reinicia em cada flanco, em vez de fazer uma única amostragem e esperar. Amostrar uma vez e esperar pode cair no meio da oscilação e registrar o valor errado; reiniciar a janela significa que o estado só é aceito depois que o pino permanece quieto durante todo o período.

Por que não usar uma interrupção

Interrupções em uma chave de colisão são uma armadilha, por motivos específicos:

  • Nunca use uma interrupção que conte. Nove flancos viram nove contagens, e o tratamento antirrebote dentro de uma ISR precisa de millis(), que não avança dentro de uma ISR em um AVR.
  • Uma interrupção que define um evento é aceitável, desde que o tratamento antirrebote ocorra no laço principal. Mas consultar uma chave a 100 Hz não custa nada, e o laço do robô já está em execução.
  • Reserve D2 e D3 para encoders em um Uno. São os únicos dois pinos de interrupção externa, e encoders realmente precisam deles. Um para-choque, não.

O único caso que justifica uma interrupção é uma parada de emergência que precisa cortar os motores mesmo se o laço principal travar. Esse problema é melhor resolvido conectando a chave à linha de habilitação do driver de motor, para que funcione sem nenhum programa.

Montagem: a parte que realmente decide se funciona

O que foi discutido acima já está resolvido. O projeto mecânico decide se os para-choques funcionam ou falham.

A carenagem recebe o impacto, não a chave. O corpo de uma microchave é plástico fino e trinc sob um impacto direto. Construa uma carenagem de para-choque que gire ou deslize, dê a ela um batente mecânico que receba a força e deixe a chave detectar um pequeno movimento próximo ao final desse curso.

Envolva a carenagem. Um para-choque frontal plano perde tudo o que é atingido em ângulo—e um robô que navega com sensores de distância costuma atingir coisas em ângulo, porque obstáculos frontais já foram detectados. Envolva pelo menos 45° de cada lado.

Duas chaves, não uma. Uma à esquerda e outra à direita, atrás das duas metades da carenagem. Uma chave informa que houve uma colisão; duas informam para qual lado virar. A diferença no comportamento é enorme e o custo extra é de cerca de vinte centavos.

Chaves O que o robô aprende Comportamento possível
1, central Algo foi atingido Dar ré e virar para uma direção aleatória
2, esquerda e direita Qual lado foi atingido Dar ré e virar para longe do contato
3, acrescentando uma chave traseira Também que ele deu ré contra algo Escapar de ficar preso

Retorne o para-choque com a mola própria. A mola interna de uma microchave empurra de volta com apenas 50–100 g, insuficiente para reposicionar de forma confiável uma carenagem com atrito no ponto de pivô. Use elásticos ou molas de retorno leves e deixe a chave fazer apenas a detecção.

Defina o curso preliminar para que a carenagem se mova antes de a chave chegar ao fundo. A chave opera após 1–3 mm e tem um pouco mais de sobrecurso além disso; o batente da carenagem precisa chegar dentro desse sobrecurso, ou o impacto será absorvido pelo mecanismo interno da chave.

Escolhendo uma

Tipo de alavanca Força de operação Melhor para
Sem alavanca (pressionador puro) ~1 N em ~1 mm Fins de curso de mecanismos precisos
Alavanca reta curta 0,5–0,8 N Para-choques em geral
Alavanca reta longa 0,2–0,5 N Carenagens leves e contato delicado
Alavanca com rolete 0,5–1 N Tudo que desliza sobre a chave, em vez de pressionar
Rolete simulado (alavanca dobrada) 0,5–1 N Alternativa mais barata ao rolete

A classificação dos contatos é irrelevante aqui. Uma chave classificada para 5 A a 125 V CA está sendo solicitada a fornecer alguns microamperes a um pull-up. O que importa é a especificação mecânica: força de operação, curso preliminar e vida útil mecânica nominal (10⁵–10⁷ operações). Um robô que colide cem vezes por execução alcança 10⁵ operações após mil execuções, portanto a vida mecânica é praticamente ilimitada—a chave falhará muito antes por trincar do corpo.

Solução de problemas

Sintoma Causa provável Solução
Um toque dispara várias vezes Sem tratamento antirrebote Use o padrão acima com uma janela de 8 ms
Sempre lê pressionado Conectada a NF em vez de NA Mude para o terminal NA
Lê aleatoriamente sem nada tocando Pino flutuante INPUT_PULLUP ou um resistor externo de 10 kΩ
Falsos disparos quando os motores funcionam Fios longos e sem blindagem captando ruído Encurte e torça o par; acrescente um capacitor de 100 nF em paralelo com o pino
O para-choque não retorna Depende da mola da própria chave Acrescente elásticos ou uma mola de retorno
A chave trinca após algumas colisões O impacto passa pelo corpo da chave Acrescente um batente mecânico atingido primeiro pela carenagem
Perde colisões em ângulo Para-choque plano Envolva a carenagem 45° de cada lado
O robô dá ré e bate na mesma coisa Uma chave, sem informação de direção Use duas chaves e vire para longe da que disparou
Funciona na bancada, mas não no robô Geometria da carenagem, não eletrônica Pressione a carenagem à mão em vários ângulos e observe o pino

Por que este componente barato merece seu lugar

Todos os outros sensores de um robô têm superfícies que eles não conseguem ver. Um sensor ultrassônico não enxerga cortinas nem paredes encontradas em ângulo muito inclinado. Um VL53L0X não enxerga superfícies foscas pretas, espelhos nem algo sob luz solar intensa. Uma câmera precisa de luz.

Uma microchave não tem essa lista. Se algo está tocando o para-choque, a chave fecha. Isso a torna a detecção de último recurso e, em um robô que precisa funcionar sem supervisão, a confiabilidade mais barata disponível—duas chaves, dois pinos e cerca de quarenta centavos.

É também, surpreendentemente, suficiente por si só. Um robô com duas chaves de colisão e uma mudança aleatória de direção ao tocar cobrirá uma sala inteira dado tempo suficiente—que é exatamente como funcionava a primeira geração de robôs aspiradores, e vale entender antes de recorrer a algo mais sofisticado.

Explore o grafo

Usado nestas montagens

Projetos, caminhos de aprendizagem e simuladores que incluem Microchave de alavanca.

Perguntas

Perguntas frequentes sobre Microchave de alavanca

Para que serve uma microchave de alavanca em um robô?

Ela é o sensor por trás de um para-choque. Uma carenagem articulada com retorno por mola na frente do robô pressiona a chave quando ocorre contato, entregando ao código um único bit inequívoco — eu colidi — que nenhum sensor óptico ou acústico fornece com a mesma confiabilidade. É ela que permite detectar a perna preta de uma cadeira, um painel de vidro ou um obstáculo na altura errada para o medidor de distância.

A chave deve ser conectada normalmente aberta ou normalmente fechada?

Normalmente aberta à massa, com o pino em pull-up, para um para-choque. Assim, um fio rompido produz a leitura "não pressionado", portanto um fio partido não convince o robô de que existe uma colisão permanente. Use o contato normalmente fechado em uma parada de emergência, na qual a falha segura é a oposta—um fio rompido deve parar a máquina.

Por que um toque é registrado várias vezes?

Oscilação de contato. O contato metálico chega, desvia, se separa e chega novamente várias vezes nos primeiros milissegundos; um microcontrolador que faz amostragem em megahertz vê cada uma dessas ocorrências como um flanco real. Uma microchave de alavanca modelada produz nove transições em cerca de 4,7 ms. Trate isso no programa com uma janela que ignora novas alterações depois de aceitar uma leitura e nunca use uma interrupção apenas para contar.

Para que serve realmente a alavanca?

Ela troca força por curso. O acionador puro precisa de 1 a 1,5 N em cerca de 1 mm; uma alavanca amplia o deslocamento para que a carenagem possa percorrer 3 a 5 mm e ser acionada com um toque bem mais leve. Isso importa porque a carenagem de um para-choque deve se mover o suficiente para ser confiável e receber um toque leve o bastante para não empurrar pequenos obstáculos para longe antes de disparar.

Preciso de um resistor de pull-up?

Não — use o pull-up interno do microcontrolador com INPUT_PULLUP. Ele é gratuito, dispensa componentes extras no canto mais sujeito a danos do robô, e o caminho de baixa impedância até a massa quando a chave fecha evita que um longo fio do para-choque capte ruído do driver de motor ao lado.

Leitura complementar

Referências