Je schrijft de code, alles compileert, de knop zou iets moeten doen — maar niets. Of erger: de knop triggert spontaan zonder dat je hem aanraakt. De variabelen springen willekeurig van 0 naar 1. De code lijkt gek, maar de code is het probleem niet.

Een zwevende ingang is het probleem. En dat los je op met twee eurocent aan weerstanden.

Wat is een zwevende ingang?

Een digitale ingang leest hoog of laag. Maar als hij nergens stevig mee verbonden is — niet aan plus, niet aan massa — dan zweeft hij. Hij pikt willekeurig storingen op uit de omgeving: elektromagnetische ruis, capacitieve koppeling met andere signalen, zelfs je eigen hand die dichterbij komt. Het resultaat is onvoorspelbaar gedrag dat niks met je code te maken heeft.

Pull-up: standaard hoog, naar laag bij actie

Een pull-up weerstand verbindt de ingang via een weerstand met de voedingsspanning. Zonder actie leest de ingang hoog. Druk je op een knop die de ingang naar massa trekt, dan wordt het signaal laag.

Dit is het meest gebruikte schema voor knoppen op microcontrollers. De logica is omgekeerd — ingedrukt is LOW, losgelaten is HIGH — maar dat went snel en het is het standaard patroon in Arduino-code met INPUT_PULLUP.

Pull-down: standaard laag, naar hoog bij actie

Een pull-down weerstand verbindt de ingang via een weerstand met massa. Zonder actie leest de ingang laag. Verbind je de ingang met de voedingsspanning — via een knop of sensor — dan wordt het signaal hoog. Logica is nu rechtdoor: actief is HIGH.

Rustig bureau met open schrift met pull-up schakeling en breadboard met drukknop

Welke waarde kies je?

10 kΩ is een veelgebruikt startpunt voor een eenvoudige knop, maar geen universele waarde. Controleer het datasheet van de ingang en let op lekstroom, geldige HIGH- en LOW-drempels, stroomverbruik, bedrading, storingsomgeving en gewenste schakelsnelheid. Een lagere weerstand trekt sterker maar gebruikt meer stroom wanneer het signaal actief wordt. Een hogere weerstand gebruikt minder stroom, maar kan gevoeliger zijn voor lekstroom en storing.

Bij I2C horen pull-ups op SDA en SCL. Kies ze niet alleen op bussnelheid: logicaniveau, totale buscapaciteit, toegestane stijgtijd, sink current van de apparaten en pull-ups die al op modules zitten bepalen samen het bruikbare bereik. Volg de I2C-specificatie en de datasheets van de gebruikte apparaten.

Heb ik een pull-up nodig en zit die al op mijn module?

Gebruik een pull-up of pull-down wanneer een digitale ingang anders tijdens normaal gebruik, opstarten of reset kan zweven. Wordt de ingang altijd actief hoog én laag gestuurd, dan is een extra pull niet automatisch nodig; het datasheet en de opstarttoestand blijven leidend.

Bij I2C moeten SDA en SCL via pull-ups hoog kunnen worden. Sommige breakoutmodules hebben die al, andere niet. Meerdere modules kunnen hun pull-ups parallel zetten en zo de totale weerstand lager maken. Controleer daarom het schema of meet de module, tel de aanwezige pull-ups mee en bepaal pas dan de externe waarde uit voedingsspanning, sink current, buscapaciteit en toegestane stijgtijd. 4,7 kΩ en 10 kΩ zijn startpunten, geen universele antwoorden.

Interne pull-ups

Veel microcontrollers kunnen intern een pull-up inschakelen. Of die geschikt is, hangt af van het exacte board, de pin, reset-/opstarttoestand, bedrading en toepassing. Controleer de waarde en het gedrag in het datasheet. Voor I2C, langere bedrading of een storingsgevoelige omgeving kan een berekende externe pull-up nodig zijn.

Controleer eerst wat de ingang aanstuurt

Een digitale ingang heeft een geldig niveau nodig wanneer niets anders hem actief aanstuurt. Dat kan via een interne of externe pull-up/pull-down, maar soms ook via een actieve logische uitgang of een daarvoor bedoelde bus-holdfunctie. Voeg dus niet blind overal 10 kΩ toe: controleer functie, datasheet, bedrading en de toestand tijdens opstarten en reset.

Bekijk weerstanden en controleer daarna waarde, bouwvorm, tolerantie en vermogen voor jouw schakeling.