Les 3 - Effe dimmen met die LED's

Arduino Les: Variabelen, Knipperende LED's, en Pulsbreedtemodulatie

In deze interactieve sessie gaan we leren over programmeren met Arduino, waarbij we ons richten op variabelen, LED-besturing, en het concept van pulsbreedtemodulatie (PWM) om de helderheid van een LED te veranderen.


Deel 1: Introductie tot Variabelen

Theoretische Uitleg

Variabelen zijn essentiële elementen in het programmeren die gebruikt worden om gegevens op te slaan die tijdens het uitvoeren van een programma kunnen veranderen. Ze kunnen worden gezien als containers die informatie bevatten die kan worden gewijzigd of gemanipuleerd.

Praktische Toepassing

  1. Open de Arduino IDE en maak een nieuw projectbestand.
  2. We gaan een eenvoudig programma schrijven dat een LED aanstuurt. Begin met het definiëren van een variabele voor de pin waarop de LED is aangesloten:
  3. Gebruik de setup() en loop() functies om de LED te laten knipperen:
int ledPin = 9;  // Definieer de LED pin

void setup()
{
  pinMode(ledPin, OUTPUT);  // Zet de LED pin als 'OUTPUT'
}

void loop()
{
  digitalWrite(ledPin, HIGH);  // Zet de LED aan
  delay(1000);                 // Wacht voor een seconde
  digitalWrite(ledPin, LOW);   // Zet de LED uit
  delay(1000);                 // Wacht voor een seconde
}
  1. Upload je programma naar de Arduino en controleer of de LED knippert.

Deel 2: Spelen met LED Frequentie

Uitleg

De frequentie van het knipperen beïnvloedt hoe snel de LED knippert. Door de frequentie te verhogen, kan het menselijk oog op een gegeven moment de afzonderlijke knipperingen niet meer onderscheiden, waardoor de illusie van een constante lichtbron ontstaat.

Praktische Toepassing

  1. Experimenteer met de knipperfrequentie door de waarden in de delay() functie te veranderen.
  2. Verlaag de waarden stapsgewijs (bijv. 500ms, 250ms, 100ms) en observeer de veranderingen in hoe de LED knippert.
  3. Bij welke frequentie kun je niet meer zien dat het ledje knippert?

Deel 3: Helderheid Variëren met Delays

Theoretische Uitleg

De pulsbreedtemodulatie (PWM) techniek stelt ons in staat de schijnbare helderheid van de LED te variëren door de verhouding van de tijd dat de LED aan en uit is te veranderen.

pwm 50% In dit plaatje is de LED net zolang aan als uit. De LED zal dus op halve kracht branden.

pwm 10% In dit plaatje is de LED maar kort aan. De LED zal nauwelijks te zien zijn.

pwm 90% In dit plaatje is de LED lang aan en maar kort uit. De LED zal dus bijna op volle kracht branden.

Praktische Toepassing

  1. In je bestaande Arduino-programma, introduceer twee variabelen om de aan-tijd en uit-tijd te controleren, en gebruik ze in de delay() functie.
int aanTijd = 30;  // Tijd in milliseconden dat de LED aan is
int uitTijd = 70;  // Tijd in milliseconden dat de LED uit is

int ledPin = 9;  // Definieer de LED pin

void setup()
{
  pinMode(ledPin, OUTPUT);  // Zet de LED pin als 'OUTPUT'
}


void loop()
{
  digitalWrite(ledPin, HIGH);  
  delay(aanTijd);              
  digitalWrite(ledPin, LOW);   
  delay(uitTijd);              
}
  1. Experimenteer met verschillende waarden voor aanTijd en uitTijd om te zien hoe de helderheid van de LED verandert.

Deel 4: Fade-In en Fade-Out

Theoretische Uitleg

Een dynamisch visueel effect kan worden bereikt door de helderheid van de LED automatisch te laten toenemen en afnemen, alsof de LED in en uit vervaagt.

Praktische Toepassing

We kunnen dit doen door de helderheid van de LED langzaam te veranderen. Hier is hoe:

int ledPin = 9;        // De pin waarop de LED is aangesloten
int helderheid = 0;    // Een variabele om de huidige 'helderheid' te vertegenwoordigen
int maxHelderheid = 255; // De maximale 'helderheid' waarde

void setup()
{
  pinMode(ledPin, OUTPUT);  // Stel de pin als uitgang in
}

void loop()
{
  // "Helderheid" verhogen
  if (helderheid < maxHelderheid)
  {
    helderheid = helderheid + 1;
  }
  else
  {
    helderheid = 0; // Reset na het bereiken van de maximale helderheid
  }
  
  // LED aan op basis van de huidige "helderheid"
  digitalWrite(ledPin, HIGH);
  delay(helderheid);  // Laat de LED voor een periode aan, gebaseerd op de "helderheid"

  // LED uit
  digitalWrite(ledPin, LOW);
  delay(maxHelderheid - helderheid); // Dit creëert de periode dat de LED uit is, waardoor we een PWM-achtig effect krijgen

  // De totale periode (delay(helderheid) plus delay(maxHelderheid - helderheid)) blijft constant, waardoor de LED lijkt te faden.
}

Is de waarde voor maxHelderheid goed gekozen? Experimenteer met verschillende waardes.

Conclusie

In deze les hebben we wat belangerijke programmeertechnieken verkend, waaronder variabelen, controlestructuren, en het aansturen van een LED met verschillende frequenties en helderheid. Door deze technieken te beheersen, kun je beginnen met het bouwen van meer complexe en interactieve projecten.

Uitdaging

Probeer na de fade-in een fade-out te laten beginnen zodat het ledje langzaam lijkt te 'kloppen'.