Component · Sensor

Microswitch met hefboom

Microswitch met hefboom: de contactsensor achter een robotbumper. Fail-safe bedraden, waarom één druk negen flanken veroorzaakt en wat de hefboomarm doet.

Wat het is

Een microswitch met hefboom, oftewel een miniatuur-snelwerkschakelaar, is een mechanisch contact in een kleine kunststofbehuizing met een metalen hefboom die eruit steekt. Duw de hefboom en een interne veer schakelt het contact; laat hem los en de veer schakelt het terug. Het is een van de oudste onderdelen in deze bibliotheek en op een robot een van de nuttigste.

Wat het tot een robotonderdeel maakt, is de snelwerking. Het contact sluit niet geleidelijk terwijl je duwt; het springt op een herhaalbaar punt met een hoorbare klik. Zo krijg je een duidelijk ja of nee van een mechanisme dat door een bewegende robot wordt omvergegooid, precies de situatie waarin een geleidelijk werkende sensor onzin oplevert.

Twee grafieken boven elkaar. De bovenste toont een schakelaarsignaal over ongeveer zes milliseconden: de ruwe pin daalt laag, dendert daarna negen keer gedurende 4,7 milliseconden tussen hoog en laag en blijft vervolgens laag, terwijl het gedebouncet uitgangssignaal hoog blijft tot het venster verloopt en dan schoon daalt. De onderste grafiek toont het aantal flanken dat een interrupt zou tellen. Dit daalt in stappen van negen naar één terwijl het debouncevenster van nul naar acht milliseconden toeneemt en bij 4,7 milliseconden één bereikt.
Het enige dat je over dit onderdeel moet weten: één druk veroorzaakt negen overgangen in ongeveer 4,7 ms. Een debouncevenster dat korter is dan het denderen telt het denderen mee, en een venster dat lang genoeg is om alles te laten bezinken kost precies zijn eigen lengte als vertraging. SVG downloaden

Hoe het werkt

Drie aansluitingen: COM (common), NO (normaal geopend) en NC (normaal gesloten). In de ruststand verbindt COM zich met NC. Bij indrukken schakelt COM over naar NO. Je gebruikt er twee van de drie en negeert de derde.

Bedraad voor een robotbumper COM naar aarde en NO naar de ingangspin, met de interne pull-upweerstand van de pin aan:

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

Deze opstelling is fail-safe: een gebroken bumperkabel leest HIGH, oftewel niet ingedrukt. Bedraad je het anders, dan overtuigt een losse draad de robot van een permanente botsing. Gebruik voor een noodstop NC; daar moet een gebroken draad de machine juist stoppen.

De hefboom ruilt kracht in voor slag. De kale stempel vraagt ongeveer 1 N over circa 1 mm; een hefboomarm vergroot de beweging, zodat een bumperomhulsel 3–5 mm kan bewegen en met een veel lichtere druk activeert. Een rol aan het uiteinde vermindert de wrijving wanneer er iets langs schuift in plaats van recht erop te drukken.

Wanneer je hem gebruikt

Gebruik er een zodra de robot moet weten dat hij al contact heeft gemaakt: bumpers, eindstoppen op een arm of een schuif, een deksel- of ladesensor of een sensor voor het aanmeren. Het is de detectie van laatste instantie, en dat is een compliment: het vindt de zwarte stoelpoot, het glazen paneel en het obstakel op een hoogte waar elke optische en akoestische sensor mist.

Het is ook de enige detectie die een robot voor ruimtedekking die willekeurige bochten maakt nodig heeft. Twee schakelaars en een willekeurige generator bestrijken een volledige kamer, een verwonderlijk veel gedrag voor slechts twee bewegende onderdelen.

Kies iets anders wanneer je een botsing moet voorkomen in plaats van detecteren; daar is een ultrasone of looptijdsensor voor. Gebruik beide: de afstandssensor vermijdt de meeste obstakels en de schakelaar vangt wat hij niet kan zien.

Veelvoorkomende valkuilen

  • Eén druk is negen flanken. Debounce de schakelaar en gebruik nooit een interrupt die telt; alleen een interrupt die een vlag zet of een tijdstempel vastlegt.
  • De schakelaarbehuizing is geen constructieonderdeel. Geef het bumperomhulsel een harde stop die de impact opvangt. Behuizingen barsten; daar gaan ze lang vóór de contacten slijten aan kapot.
  • De eigen veer kaatst je bumper niet terug. Een microswitch duwt met 50–100 g terug. Gebruik rubberbanden of lichte drukveren voor de terugslag en laat de schakelaar alleen detecteren.
  • Een vlakke bumper mist treffers onder een hoek. Buig elke kant van het omhulsel minstens 45° naar achteren en plaats achter elke helft een schakelaar, zodat de code weet welke kant op moet draaien.
  • Lange kabels vangen motorruis op. Houd de bedrading kort, draai de twee draden in elkaar en vertrouw op het laagohmig pad van de pull-upweerstand wanneer de schakelaar gesloten is.
  • Contactbelasting geldt voor netstroom, niet voor logica. Een schakelaar die is gespecificeerd voor 5 A bij 125 V AC hoeft hier slechts enkele microampère door te laten. De contactbelasting zegt niets bruikbaars over de levensduur in deze toepassing; voorafloop en bedieningskracht wel.

Bedrading

Je gebruikt twee van de drie aansluitingen, en welke bepaalt hoe de robot uitvalt.

Toepassing COM naar Signaal van Ruststand Gebroken draad leest als
Bumper GND NO, pin INPUT_PULLUP HIGH Niet ingedrukt — veilig
Noodstop GND NC, pin INPUT_PULLUP LOW Ingedrukt — veilig
Een van beide, externe pull-up GND NO of NC, 10 kΩ naar VCC — Hetzelfde als hierboven

Het onderscheid is belangrijk. Een bumper die op NO is aangesloten is fail-safe doordat hij “geen botsing” leest. Dat klopt: een robot met een gebroken bumperkabel moet blijven rijden en niet vastlopen. Een noodstop die op NC is aangesloten is fail-safe doordat hij “gestopt” leest. Dat klopt ook, maar om de tegenovergestelde reden.

Gebruik de interne pull-upweerstand. Die kost niets, vereist geen onderdelen en geeft een eenduidige ruststand. Een pin die alleen als INPUT is ingesteld en een schakelaar heeft, zweeft als de schakelaar open is. Zwevende pinnen lezen de elektrische ruis in de omgeving, en op een robot vol motoren is dat veel.

Correct debouncen

Een enkele druk veroorzaakt ongeveer negen overgangen gedurende ongeveer 4,7 ms terwijl de contacten inspringen en terugveer. Software die de pin rechtstreeks leest, ziet negen drukken.

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

Het belangrijke structuurdetail is dat de timer op elke flank opnieuw begint, in plaats van eenmaal te samplen en te wachten. Een vaste meet-en-wachtprocedure kan midden in het denderen terechtkomen en de verkeerde waarde onthouden. Door het venster opnieuw te starten, wordt de toestand pas geaccepteerd als de pin de volledige periode stil is gebleven.

Waarom geen interrupt

Interrupts op een botsschakelaar zijn een valkuil, en dan vooral deze:

  • Gebruik nooit een interrupt die telt. Negen flanken worden negen tellingen, en debouncen binnen een ISR vereist millis(), dat op een AVR niet doorloopt binnen een ISR.
  • Een interrupt die een vlag zet is prima, als het debouncen in de hoofdlus gebeurt. Een schakelaar 100 Hz pollen kost niets en de robotlus draait toch al.
  • Reserveer D2 en D3 op een Uno voor encoders. Dit zijn de enige twee pins voor externe interrupts en encoders hebben ze werkelijk nodig. Een bumper niet.

Het enige geval waarin een interrupt gerechtvaardigd is, is een harde noodstop die de motoren moet uitschakelen, zelfs als de hoofdlus is vastgelopen. Dat los je beter op door de schakelaar rechtstreeks aan de enable-lijn van de motordriver te sluiten, zodat hij zonder software werkt.

Montage: het onderdeel dat bepaalt of het werkt

Alles hierboven is een opgelost probleem. Het mechanische ontwerp bepaalt of een bumper slaagt of mislukt.

Het omhulsel vangt de impact op, niet de schakelaar. Een kunststof microswitch-behuizing is dun en barst bij een directe treffer. Bouw een bumperomhulsel dat draait of schuift, geef het een harde stop die de kracht opvangt en laat de schakelaar aan het einde van die slag een kleine beweging detecteren.

Buig het omhulsel om. Een vlakke voorbumper mist alles wat onder een hoek wordt geraakt. Een robot die met afstandssensoren navigeert, raakt meestal voorwerpen onder een hoek, want rechtvooruit gelegen obstakels zijn al gedetecteerd. Buig elke kant minstens 45° naar achteren.

Twee schakelaars, niet één. Links en rechts, achter de twee helften van het omhulsel. Eén schakelaar vertelt dat je iets hebt geraakt; twee vertellen welke kant je op moet draaien. Het verschil in gedrag is groot en de meerkosten ongeveer twintig cent.

Schakelaars Wat de robot leert Mogelijk gedrag
1, midden Er is iets geraakt Terugrijden en willekeurig draaien
2, links en rechts Welke kant is geraakt Terugrijden en van het contact af draaien
3, met een schakelaar achterin Ook dat hij achteruit ergens tegenaan reed Ontwikkkelen uit een klempositie

Laat de bumper terugveer met een eigen veer. De interne veer van een microswitch duwt met slechts 50–100 g terug, onvoldoende om een omhulsel met wrijving in de draaipunt betrouwbaar te resetten. Gebruik rubberbanden of lichte drukveren en laat de schakelaar uitsluitend detecteren.

Stel de voorafloop zo in dat het omhulsel beweegt voordat de schakelaar op zijn eind zit. De schakelaar werkt na 1–3 mm en heeft daarna nog een kleine overloop. De harde stop van het omhulsel moet binnen die overloop komen, anders vangt het interne mechanisme van de schakelaar de impact op.

Een schakelaar kiezen

Type hefboom Bedieningskracht Beste toepassing
Geen hefboom (kale stempel) ~1 N over ~1 mm Eindstoppen waar het mechanisme nauwkeurig is
Korte rechte hefboom 0,5–0,8 N Algemene bumpers
Lange rechte hefboom 0,2–0,5 N Lichte bumperomhulsels, gevoelig contact
Rolhefboom 0,5–1 N Alles wat langs het oppervlak schuift in plaats van erop te drukken
Gesimuleerde rol (gebogen) 0,5–1 N Goedkoper alternatief voor een rol

De contactbelasting is hier irrelevant. Een schakelaar voor 5 A bij 125 V AC hoeft hier slechts enkele microampère naar een pull-upweerstand te sturen. De mechanische specificatie telt: bedieningskracht, voorafloop en nominale mechanische levensduur (10⁵–10⁷ schakelbewerkingen). Een robot die per rit honderd keer botst, bereikt 10⁵ schakelbewerkingen na duizend ritten, dus de mechanische levensduur is praktisch onbeperkt. De schakelaar gaat veel eerder kapot door een gebarsten behuizing.

Problemen oplossen

Symptoom Waarschijnlijke oorzaak Oplossing
Eén druk activeert meerdere keren Geen debounce Gebruik het bovenstaande patroon met een venster van 8 ms
Leest voortdurend ingedrukt Aangesloten op NC in plaats van NO Wissel naar de NO-aansluiting
Leest willekeurig terwijl niets aanraakt Pin zweeft INPUT_PULLUP of een externe 10 kΩ-weerstand
Valse activatie tijdens het draaien van motoren Lange onafgeschermde kabels vangen ruis op Verkort en draai de draden in elkaar; zet een 100 nF-condensator over de pin
Bumper veert niet terug Vertrouwt op de eigen veer van de schakelaar Voeg rubberbanden of een terugveer toe
Schakelaar barst na enkele botsingen Impact loopt via de schakelaarbehuizing Voeg een harde stop toe die het omhulsel eerst raakt
Mist botsingen onder een hoek Vlakke bumper Buig elke kant van het omhulsel 45° naar achteren
Robot rijdt terug maar raakt hetzelfde Eén schakelaar zonder richtingsinformatie Gebruik twee schakelaars en draai weg van degene die activeerde
Werkt op de werktaafel, maar niet op de robot Bumpergeometrie, niet elektronica Duw het omhulsel met de hand vanuit meerdere hoeken en volg de pin

Waarom dit goedkope onderdeel zijn plaats verdient

Elke andere sensor op een robot heeft oppervlakken die hij niet kan zien. Een ultrasone sensor ziet niets van gordijnen en niets van muren die hij onder een steile hoek raakt. Een VL53L0X ziet niets van zwart matte oppervlakken, spiegels of alles in fel zonlicht. Een camera heeft licht nodig.

Een microswitch heeft zulke lijst niet. Als iets de bumper aanraakt, sluit de schakelaar. Daardoor is dit de detectie van laatste instantie en op een robot die onbeheerd moet blijven werken biedt het de goedkoopste manier om de betrouwbaarheid te vergroten: twee schakelaars, twee pinnen en ongeveer veertig cent.

Verrassend genoeg is hij ook op zichzelf voldoende. Een robot met twee botsschakelaars die bij contact willekeurig draait, bestrijkt met voldoende tijd een volledige kamer. De eerste generatie stofzuigrobots werkte precies zo, en het is de moeite waard dat te begrijpen voordat je naar iets gecompliceerder gaat.

Verken de graaf

Gebruikt in deze bouwprojecten

Projecten, leerroutes en simulators waarin de Microswitch met hefboom voorkomt.

Vragen

FAQ over de Microswitch met hefboom

Waar wordt een microswitch met hefboom op een robot voor gebruikt?

Het is de sensor achter een bumper. Een veerbelaste omhulsel aan de voorkant van de robot drukt de schakelaar bij contact, waardoor de code één ondubbelzinnig bit krijgt: "ik ben iets tegengekomen". Geen optische of akoestische sensor levert dat zo betrouwbaar. Hiermee detecteert een robot een zwarte stoelpoot, een glazen paneel of een obstakel op een hoogte waar zijn afstandssensor het niet ziet.

Moet de schakelaar normaal geopend of normaal gesloten worden bedraad?

Voor een bumper normaal geopend naar aarde, met de pin omhoog getrokken. Zo leest een gebroken draad als niet ingedrukt en kan een losse kabel de robot niet overtuigen van een permanente botsing. Gebruik voor een noodstop juist het normaal gesloten contact, waar een gebroken draad de machine moet stoppen.

Waarom registreert één druk meerdere schakelingen?

Door contactdender. Het metalen contact komt aan, buigt uit, scheidt en komt in de eerste milliseconden meerdere keren opnieuw aan. Een microcontroller die met megahertz samplet, ziet elke overgang als echt. Een gemodelleerde hefboomschakelaar levert negen overgangen in ongeveer 4,7 ms. Debounce de schakelaar in software met een periode waarin je na acceptatie niets accepteert en gebruik nooit een interrupt die telt.

Wat doet de hefboomarm precies?

Hij ruilt kracht in voor slag. De kale stempel heeft 1 tot 1,5 N nodig over ongeveer 1 mm; een hefboom vergroot de beweging, zodat het omhulsel 3 tot 5 mm kan bewegen met een veel lichtere druk. Dat is belangrijk omdat een bumperomhulsel ver genoeg moet bewegen om betrouwbaar te zijn en licht genoeg om kleine obstakels niet weg te duwen voordat hij activeert.

Heb ik een pull-upweerstand nodig?

Nee; gebruik de interne pull-upweerstand van de microcontroller met INPUT_PULLUP. Die is gratis en vereist geen extra onderdeel op de meest belaste hoek van de robot. Dankzij een laagohmig pad naar aarde wanneer de schakelaar sluit, pakt een lange bumperkabel geen ruis op van de ernaast gelegen motordriver.

Verder lezen

Bronnen