WelcomeHere.ro
NIVEL: UȘOR

Tutorial: Controlul Luminozității unui LED cu PWM

Descoperă cum poți simula o ieșire analogică folosind pinii digitali ai plăcii Arduino. Această tehnică, numită PWM, este esențială pentru a controla luminozitatea unui LED sau viteza unui motor.

Componente Necesare

  • 1x Placă Arduino
  • 1x LED
  • 1x Rezistor de 220Ω
  • 1x Breadboard și fire de legătură

Ce este PWM?

PWM înseamnă Pulse Width Modulation (Modularea Lățimii Pulsului). Este o tehnică inteligentă prin care un pin digital (care poate fi doar ON sau OFF) este pornit și oprit foarte rapid, de sute de ori pe secundă. Prin controlarea procentului de timp în care pinul stă pe ON (numit "duty cycle"), putem varia puterea medie livrată componentei.

Pentru un LED, acest lucru se traduce într-o variație a luminozității. Un "duty cycle" de 0% înseamnă că LED-ul este stins. 50% înseamnă că este la jumătate din luminozitate. 100% înseamnă că este la luminozitate maximă.

Pe Arduino, folosim funcția analogWrite(pin, valoare) pentru a genera un semnal PWM. Valoarea poate fi orice număr între 0 (0% duty cycle) și 255 (100% duty cycle).

Atenție! Nu toți pinii digitali ai plăcii Arduino suportă PWM. Căutați pinii marcați cu o tildă (~), de exemplu: ~3, ~5, ~6, ~9, ~10, ~11 pe un Arduino Uno.

Asamblarea Circuitului

Circuitul este identic cu cel de la tutorialul "Blink", dar de data aceasta vom conecta LED-ul la pinul ~9, un pin care suportă PWM.

Schema circuitului PWM

Codul Sursă ("Fading")

Acest cod va face LED-ul să-și crească treptat luminozitatea până la maxim, apoi să o scadă treptat până la a se stinge, într-o buclă continuă (efectul de "fading" sau "breathing").

const int ledPin = 9; // Pinul PWM la care este conectat LED-ul

int brightness = 0;   // Variabila pentru a stoca luminozitatea curenta
int fadeAmount = 5;   // Cat de mult crestem/scadem luminozitatea la fiecare pas

void setup() {
  // Declaram pinul ca iesire
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // Setam luminozitatea LED-ului
  analogWrite(ledPin, brightness);

  // Schimbam luminozitatea pentru urmatorul pas din bucla
  brightness = brightness + fadeAmount;

  // Daca am ajuns la capete (0 sau 255), inversam directia de fading
  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount; // Inversam semnul (de la 5 la -5, si invers)
  }

  // Asteptam 30 de milisecunde pentru a vedea efectul de dimming
  delay(30);
}