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.

Voor de weerstand kies je typisch 10 kΩ. De CRG0805F10K (10 kΩ, 1%, 0805) of de CRGH0805F10K (10 kΩ, 1%, 0805, hoger vermogen) zijn beide goede keuzes.

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?

Te hoog (boven 100 kΩ) en de ingang is gevoelig voor ruis. Te laag (onder 1 kΩ) en er loopt onnodig veel stroom, wat bij batterijgevoede systemen telt. Voor de meeste knoppen en sensoren is 10 kΩ de standaard.

Bij I2C — de communicatiebus die veel sensoren gebruiken — heb je pull-ups nodig op de SDA en SCL lijnen. Hier bepaalt de bussnelheid mede de optimale waarde: bij 100 kHz is 4,7 kΩ gangbaar, bij 400 kHz eerder 2,2 kΩ. Kijk naar de datasheet van het langzaamste apparaat op de bus.

Interne pull-ups: handig, maar niet altijd genoeg

De meeste microcontrollers hebben ingebouwde pull-up weerstanden die je via software inschakelt. De waarde ligt typisch tussen 20 kΩ en 50 kΩ. Dat is prima voor een drukknop op een korte draad. Voor langere kabels, I2C of toepassingen waar ruis een factor is, zet je liever een externe weerstand van 10 kΩ dicht bij de pin.

Veelgemaakte fout

De fout is niet een verkeerde waarde kiezen — de fout is helemaal vergeten dat een ingang een bekende toestand nodig heeft. Zorg dat iedere digitale ingang altijd ergens naartoe getrokken wordt. Zweef is geen optie.