Waarom connectie naar GND in dit button voorbeeld?

Hallo,

Ik heb een vraagje over dit Button voorbeeld: http://arduino.cc/en/tutorial/button
Waarom is er een connectie met weerstand naar de GND pin?

Als je de hele connectie naar GND weghaalt werkt de button hetzelfde: als je 'm indrukt loopt de stroom naar Pin 2 en anders gebeurt er niks.

Thanks!

Erik.

Dat klopt Erik.

Wanneer we een open input laten als "open" dan weet de arduino niet direct welke status aan te nemen.
De arduino zelf heeft een weerstand naar de gnd. Klein van Wattage.
Zeker wanneer we in een onstabiele stoor omgeving zitten, boormachine, TV, en dergelijke, kan dit negatieve gevolgen hebben.

Dit kunnen we wegwerken door een "vaste" schakelwaarde te geven.

Hier wordt de schakeling enerzijds 1 gemaakt door die weerstand.
Anderzijds woord de ingang nul gemaakt door de schakeling naar de GND te schakelen.

Zekerder dan een "zwevende" ingang.

Alhoewel het in deze schakeling niet stikt noodzakelijk is.
Maar een goede gewoonte aankweken, en makkelijker dan een slechte gewoonte afleren.

Het is een "voorbeeld". En een voorbeeld hoort "voorbeeldig" te zijn.
In heel wat gevallen is de "pull down" weerstand niet nodig. Maar soms ook wel. Dus zoals ivanflo reeds zei:

Wanneer we een open input laten als "open" dan weet de arduino niet direct welke status aan te nemen.

Met andere woorden: als je geen pull down hebt; gebruik je eigenlijk een zijeffect en dat is niet "voorbeeldig".
Ook als je meer knopjes (of ander dingen) gebruikt zou je wel eens buiten de mogelijkheden van het zijeffect kunen komen en dan "werkt het ineens niet meer"

Zeker wanneer we in een onstabiele stoor omgeving zitten, boormachine, TV, en dergelijke, kan dit negatieve gevolgen hebben.

Merk ook op dat een voorbeeld maar 1 voorbeeld is. Je zou ook met een pull up weerstand kunnen werken of met INPUT_PULLUP in de code.

Met vriendelijke groet
Jantje

BollieDikmans:
Waarom is er een connectie met weerstand naar de GND pin?

Als je de hele connectie naar GND weghaalt werkt de button hetzelfde: als je 'm indrukt loopt de stroom naar Pin 2 en anders gebeurt er niks.

Zoals al eerder aangegeven, is dit zodat je een bekend nivo krijgt aan de ingang van je Arduino.
Een onbekend nivo kan ook betekenen dat er een HIGH word geregistreerd.
Maar er is ook nog een reden waarom dit aan GND gelegd word,
Daarover later meer.

Verder heb je het over stroom, maar dat is onjuist.
Er staat een hogere SPANNING op je Arduino ingang, er loopt een vrijwel onmeetbaar lage stroom, als die er überhaupt is.
Dat komt wellicht op je over als muggenzifterij, maar het is belangrijk dat je het verschil tussen stroom en spanning zo snel mogelijk leert te kennen, zodat je dat ook correct kunt toepassen in toekomstige schakelingen / projecten.

ivanflo:
De arduino zelf heeft een weerstand naar de gnd. Klein van Wattage.

Dat is een vergissing.
De Arduino heeft een weerstand naar 5 volt, maar die moet je wel aanzetten.
Das dus net ff anders als naar GND.

De weerstand naar GND trekt het nivo dus naar beneden als de ingang niet door iets anders beïnvloed word.
Daarom heet dat een pulldown.
De weerstand die je in de Arduino zelf kunt gebruiken, trekt het nivo juist omhoog, en heet dus een pullup.
De reden waarom in het voorbeeld niet de interne pullup gebruikt word, maar een externe pulldown, is puur om het voorbeeld duidelijker te maken voor de nieuweling.

Wanneer je een signaal verwacht van een druktoets, dan verwacht je eerder dat dat signaal van een 0 naar een 1 verandert wanneer de schakelaar word ingedrukt.
Bij vrijwel elke mij bekende schakelaar waar een indicatie op staat gedrukt, betekent de "1" ook dat ie aanstaat.
Dus als je het signaal LOW houdt en dat de schakelaar het HIGH maakt, is voor de gebruiker vooral logischer, voor de Arduino maakt het helemaal niets uit.

Later, wanneer je deze oefeningen en voorbeelden zo'n beetje allemaal hebt doorgewerkt, zul je waarschijnlijk gewend zijn het andersom te doen, omdat je je dan een externe weerstand kunt besparen.
Die externe weerstand is veel duurder dan de aanschafprijs er van, want je moet er tijdens het ontwerpen van je schakeling rekening mee houden, het ding neemt ruimte in op je print die daardoor dus groter moet worden, en je hebt iets meer tijd nodig om de spullen op je print te solderen.

Maar de interne weerstand is wel vrij hoog (iets van 20-40K). Nadeel is dat je een zeer kleine stroom hebt lopen waardoor je wel wat meer ruis kunt krijgen. En op het moment dat je bezig bent in een wat nogal heftige storende omgeving kan dit van invloed zijn. Zelf pak ik altijd een 10K weerstand en kies voor Pull-up of Pull-down afhankelijk van wat de klant wil .

In de software los ik het meestal als volgt op zodat het altijd nog kan veranderen:

#define BUTTON  4                // bijvoorbeeld pin 4
#define ACTIVE_BUTTON  LOW         // hier is Active button  LOW wat betekent dat de knop "aan" is als deze LAAG wordt

En dan in de loop() bijvoorbeeld :

if (digitalRead(BUTTON) == ACTIVE_BUTTON) {
    //
    // de knop is ingedrukt
    //
} else {
    //
    // de knop is niet ingedrukt
    //
}

Zou ik nu een Active HIGH willen gebruiken dan hoef ik alleen de define aan te passen en klaar.