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.
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.
- ProjectBouw een grijp-en-plaatsrobot die weet wanneer hij misgreep
- ProjectBouw een penplotter: twee stappenmotorassen die op de plek komen
- ProjectBouw een robot die een gebied afdekt en de vloer veegt
- LeerrouteGrijpen en eind-effectoren: daadwerkelijk oppakken
- LeerrouteNauwkeurige beweging met stappenmotoren: een leertraject
- LeerrouteReactieve navigatie: leer een robot obstakels vermijden
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