Arduino-opdrachten/LED-sweep: verschil tussen versies

Uit basis
Naar navigatie springen Naar zoeken springen
Geen bewerkingssamenvatting
k (Eelco heeft de pagina Arduino-opdrachten/Sweep hernoemd naar Arduino-opdrachten/LED-sweep zonder een doorverwijzing achter te laten)
 
(geen verschil)

Huidige versie van 25 mei 2016 om 09:59

Arduino opdrachten

Zie ook Regels en richtlijnen
Zie ook Artikelen bewerken

LED-sweep

Leerdoelen analoge uitvoer (PWM: pulsbreedte modulatie); sweep; variabele
Voorkennis spanning en stroom
Onderdelen

LED, weerstand 220 ohm (rood-rood-bruin-goud), weerstand 10K ohm (bruin-zwart-oranje-goud),

Libraries en functies Serial.begin, Serial.println

Inleiding

Stap voor stap meer licht

Je laat de lichtsterkte van de LED geleidelijk toenemen (en afnemen).

Opbouwen van de schakeling

LED aan Arduino pin 9
  1. Plaats een LED en serieweerstand op het breadboard.
  2. Verbind de LED aan pin 9(!) van de Arduino

In plaats van pin 9 kun je ook de andere pinnen gebruiken die als PWM-uitvoer gebruikt kunnen worden. Deze herken je aan de "~" naast het pinnummer: 3, 5, 6, 9, 10, 11 (voor de Arduino UNO).

Schema

LED aan Arduino pin 9 (PWM)

Programma

int led = 9;
int ledState = 0;
int step = 15;

void setup() {
  Serial.begin(9600);
}

void loop() {
  analogWrite(led, ledState);
  Serial.println(ledState);
  ledState = ledState + step;
  if (ledState > 255) {
    ledState = 0;
  }
  delay(100);
}

Uitleg van het programma

De constructie ledState = ledState + step; lees je als volgt:

  • (i) reken de waarde uit van de uitdrukking (expressie) ledState + step;
  • (ii) ken deze waarde toe aan de variabele ledState.

Je kunt dit ook omschrijven als: "hoog ledState op met step".

De waarde van de variabele step kan positief of negatief zijn, zodat de variabele ledState toeneemt of afneemt. Als ledState de grootste waarde voor de analoge output (i.e., 255)overschreden heeft, beginnen we weer opnieuw.

We gebruiken in dit programma ook de seriële uitvoer naar de host-computer. Daarmee kun je volgen wat er op de Arduino gebeurt. Dat is vaak handig als je fouten wilt opsporen.

  • met Serial.begin(9600); in de setup open je de seriële verbinding;
    • deze 9600 is de baudrate; deze moet gelijk zijn aan de baudrate in het seriële monitor-venster op de host;
  • Serial.println(ledState); stuurt de waarde van ledState naar de host (als een string).

Vragen en opdrachten

Eerste experimenten

Snellere of tragere sweep

Je kunt de snelheid van de "sweep" op twee manieren veranderen:

  1. door de waarde van de delay aan te passen;
  2. door de waarde van de step aan te passen.

Wat is het verschil? (Hint: probeer dit uit voor verschillende situaties; probeer ook eens een paar uitersten.)

Fade in - fade out

  1. plaats een tweede LED met serieweerstand op het breadboard (bijvoorbeeld een groene LED).
  2. verbind deze met een andere PWM-pin, bijvoorbeeld pin 10.
    1. int greenLed = 10;
  3. zorg ervoor dat deze LED altijd de "complementaire lichtsterkte" heeft van de eerste LED.
    1. de som van beide lichtsterktes is 255:
    2. analogWrite(led,ledState);
    3. analogWrite(greenLed, 255 - ledState);

Symmetrische sweep

De "sweep" is nu niet symmetrisch: de lichtsterkte neemt geleidelijk toe, en gaat in één keer terug naar 0. Verander het programma zodat de lichtsterkte vanaf de grootste waarde (255) ook geleidelijk afneemt. Hint:

  • als ledState de grootste waarde (255) voorbijgaat, keer je het teken van de stap om: (step = -step;). Neem dan voor ledState deze grootste waarde.
    • de toekenning ledState = ledState + step; verhoogt of verlaagt de waarde van ledState, afhankelijk van het teken van step
  • voor de kleinste waarde (0) voeg je een vergelijkbare actie toe.

Dit "sweep" patroon kun je voor verschillende toepassingen gebruiken. (Zie bijv. Arduino-opdrachten/Servo-sweep)

Verdiepingsvragen