Blink-PWM

Met behulp van een potmeter (analoge input) regel je de duty-cycle van een knipperende LED.

Nodig:

  • potmeter
  • LED
  • weerstand 220 Ohm

Voorkennis:

  • digitale output
  • analoge input
  • map-functie

Een knipperende LED, zoals we deze gezien hebben bij Blink, is een voorbeeld van een periodiek verschijnsel: hetzelfde patroon herhaalt steeds. De LED is in dit geval een deel van de tijd aan (Ta) en een deel van de tijd uit. De verhouding tussen Ta en de totale periode noemen we de duty cycle. Deze wordt vaak uitgedrukt als een percentage.

duty cycle = 100 * Ta / periode

Bij pulsbreedte modulatie (PWM) gebruiken we een periodiek signaal dat een deel van de tijd aan (1) is, en het andere deel uit (0). Door het aan-deel van de periode te veranderen regelen we het vermogen - wat je bijvoorbeeld ziet in de lichtopbrengst van een LED, of in de snelheid van een motor.

De Arduino heeft geen echte analoge output, maar voor veel toepassingen kan een PWM-output daarvoor gebruikt worden. De functie analogWrite(pin) geeft een PWM-output.

Schakeling

  • LED met serieweerstand aan Arduino pin 13 (en GND);
  • potmeter aan Arduino pin A0 (en GND en 5V)

Dit is dezelfde schakeling als bij Blink-freq

Programma

De duty cycle wordt bepaald door de waarde die we via de analoge input krijgen. Via de map-functie rekenen we de input-waarde, in het bereik 0..1023, om naar een waarde tussen 0 en 100. (input 0 geeft 0, input 1023 geeft 100).

We laten de LED knipperen met deze duty cycle. Als periode gebruiken we 200 msec (5Hz).

We gebruiken Serial.print om de ingevoerde periode te laten zien op de Serial Monitor.

int led = 13;

int period = 200;

int dutyCycle = 100;

void setup() {

  pinMode(led, OUTPUT);

  Serial.begin(9600);

}

void loop() {

  dutyCycle = map(analogRead(A0), 0,

     1023, 0, 100);

  Serial.println(dutyCycle);

  digitalWrite(led, HIGH);

  delay(period * dutyCycle / 100);

  digitalWrite(led, LOW);

  delay(period * (100 - dutyCycle) / 100);

}

Opdracht 1

Bouw deze schakeling, programmeer de Arduino, en controleer de werking.

Opdracht 2

Pas de periode aan zodat je de LED niet meer ziet knipperen.

Wat zie je nu (bij verschillende duty cycles)?

Hoe verklaar je dat?

Opdracht 3

Teken de golfvorm van het LED-signaal (uit = 0, aan = 1) voor een duty-cycle van 75%.

Opdracht 4

(Lastig) Wat zie je als de duty-cycle 0 is? Hoe verklaar je dit?

Hoe kun je het programma aanpassen zodat zich dit voor duty cycle 0 "correct" gedraagt?

Blink-PWM      --