WelcomeHere.ro
ARTICOL TEORETIC

Ce sunt Rezistorii Pull-up și Pull-down?

Acesta este unul dintre cele mai importante concepte de bază în electronica digitală. Înțelegerea acestor rezistori rezolvă 90% din problemele pe care le întâmpină începătorii când lucrează cu butoane sau întrerupătoare.

Problema: Starea "Plutitoare" (Floating)

Pinii digitali ai unui microcontroler (ca Arduino) pot fi configurați ca intrare (INPUT). Într-un astfel de pin, microcontrolerul încearcă să citească dacă tensiunea este **HIGH** (de obicei 5V sau 3.3V) sau **LOW** (0V sau GND).

Să ne imaginăm un circuit simplu cu un buton. Când butonul este apăsat, el conectează pinul la 5V, iar Arduino citește corect **HIGH**.

Dar ce se întâmplă când butonul NU este apăsat?

Pinul de intrare nu este conectat la absolut nimic. El "plutește" în aer. În această stare, pinul se comportă ca o mică antenă și poate fi influențat de orice zgomot electric din mediul înconjurător (electricitate statică, rețeaua Wi-Fi, chiar și mâna dumneavoastră care se apropie). Rezultatul este că Arduino va citi valori aleatorii și haotice: HIGH, LOW, HIGH, LOW... făcând programul inutilizabil.

Soluția: Oferirea unei Stări Stabile

Pentru a rezolva această problemă, trebuie să ne asigurăm că pinul de intrare este **întotdeauna** conectat la o valoare cunoscută (fie HIGH, fie LOW), chiar și atunci când butonul nu este apăsat. Facem acest lucru folosind un rezistor care "trage" (pull) pinul către o stare stabilă.

1. Rezistorul Pull-down (cel mai comun)

Acesta este circuitul pe care l-am folosit în tutorialul nostru despre buton.

  • Rezistorul (de 10kΩ) conectează pinul de intrare la GND (LOW).
  • Butonul conectează pinul de intrare la 5V (HIGH).

Cum funcționează:

  • Când butonul e eliberat: Singura cale a pinului este prin rezistor către GND. Pinul citește **LOW** (0). Starea este stabilă.
  • Când butonul e apăsat: Pinul este conectat direct la 5V. Deoarece această conexiune are o rezistență mult mai mică decât cea a rezistorului, curentul alege calea ușoară, iar pinul citește **HIGH** (1).
Diagrama unui circuit cu rezistor pull-down

2. Rezistorul Pull-up

Această metodă funcționează invers și este foarte populară deoarece Arduino are deja rezistori pull-up încorporați!

  • Rezistorul conectează pinul de intrare la 5V (HIGH).
  • Butonul conectează pinul de intrare la GND (LOW).

Cum funcționează:

  • Când butonul e eliberat: Pinul este conectat prin rezistor la 5V. Pinul citește **HIGH** (1). Starea este stabilă.
  • Când butonul e apăsat: Pinul este conectat direct la GND. Pinul citește **LOW** (0).
Diagrama unui circuit cu rezistor pull-up

Cum folosim rezistorul Pull-up intern din Arduino?

Este foarte simplu! Nu mai aveți nevoie de un rezistor extern. Trebuie doar să schimbați două linii în cod:

  1. În `setup()`, în loc de `pinMode(buttonPin, INPUT)`, scrieți: `pinMode(buttonPin, INPUT_PULLUP);`. Aceasta activează rezistorul intern.
  2. În `loop()`, logica se inversează. Deoarece pinul stă pe HIGH și devine LOW la apăsare, verificați `if (buttonState == LOW)` pentru a detecta apăsarea.
Input_Pullup_Example.ino

const int buttonPin = 2; 

void setup() {
  Serial.begin(9600);
  // Activează rezistorul PULL-UP intern
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  int buttonState = digitalRead(buttonPin);

  // Logica este inversată:
  // LOW (0) înseamnă că butonul este apăsat.
  // HIGH (1) înseamnă că butonul este eliberat.
  if (buttonState == LOW) {
    Serial.println("Buton Apasat!");
  } else {
    Serial.println("Buton Eliberat.");
  }
  delay(100);
}