Arduino-opdrachten/Button-dimmer

Uit basis
Naar navigatie springen Naar zoeken springen
Arduino opdrachten

Zie ook Regels en richtlijnen
Zie ook Artikelen bewerken

Button-dimmer

Leerdoelen IF, variabele, min, max
Voorkennis Arduino-opdrachten/Sweep
Onderdelen

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

Libraries en functies min, max

Inleiding

Dimmer: knoppen voor meer en minder licht

In dit project combineren we twee dingen die we eerder gezien hebben:

Op deze manier maak je een eenvoudige dimmer.


Je kunt de lichtsterkte niet verhogen boven het maximum (255) of verlagen onder het minimum (0).

  • In de schets hiernaast houden we daarmee nog geen rekening. In het programma hieronder wel.

In een latere versie gebruiken we een potmeter (draaiknop) voor een analoge dimmer.

Opbouwen van de schakeling

Dimmer met 2 knoppen

Dit is dezelfde schakeling als gebruikt in Arduino-opdrachten/Button-2

  • Plaats een LED met serieweerstand op het breadboard.
  • Plaats een drukknopschakelaar op het breadboard, over de lege middenrij;
    • verbind de ene zijde (kolom) van de schakelaar met pin 2;
    • plaats een weerstand (10kOhm) tussen deze kolom en de 0V rij;
    • verbind de andere zijde van de schakelaar met de 5V rij.
  • Plaats een tweede drukknopschakelaar op het breadboard;
    • verbind de ene zijde met pin3;
    • plaats een weerstand (10kOhm) tussen deze kolom en de 0V rij;
    • verbind de andere zijde met de 5V rij.
  • Verbing de 5V rij met de Arduini 5V pin.
  • Verbind de beide 0V rijen (onderaan en bovenaan).
  • Verbind de 0v rij met de Arduino GND pin.

Je kunt de schakeling testen:

  • test de LED door de LED-draad uit pin 9 tijdelijk te verplaatsen naar de Arduino 5V.
    • de LED moet dan gaan branden;
  • als de LED niet brandt:
    • controleer of alle 0V verbindingen aanwezig zijn;
    • controleer of de LED in de juiste richting gemonteerd is;
    • controleer of je overal de juiste kolommen gebruikt hebt.

Schema

Dimmer met 2 knoppen

De schakeling bestaat uit drie onderdelen:

  • een LED met serieweerstand, verbonden aan pin 9;
  • een button met pulldown-weerstand naar 0V, verbonden met pin 2; andere kolom verbonden aan 5V;
  • een button met pulldown-weerstand naar 0V, verbonden met pin 3; andere kolom verbonden aan 5V.

Programma

int upButton = 2;     // pin nr of "on" button
int downButton = 3;   // pin nr of "off" button
int led =  9;         // pin nr of LED

int ledStatus = 0;

void setup() {
  pinMode(led, OUTPUT);      // initialize LED pin as output
  pinMode(upButton, INPUT);  // initialize button pin as input
  pinMode(downButton, INPUT); // initialize button pin as input
}

void loop() {
  if (digitalRead(upButton) == HIGH) {
    ledStatus = min(ledStatus + 25, 255);
    delay(200);
  }

  if (digitalRead(downButton) == HIGH) {
    ledStatus = max(ledStatus - 25, 0);
    delay(200);
  }

  analogWrite(led, ledStatus);
}

Uitleg van het programma

  • We gebruiken de variabele ledState om de lichtsterkte weer te geven. Deze neemt waarden aan tussen 0 (LED uit) en 255 (LED vol aan).
  • Deze variabele gebruiken we als "analoge uitvoer" naar de LED. Deze "analoge waarde" is eigenlijk een PWM (pulsbreedte modulatie)-waarde: de LED knippert aan en uit met een hoge frequentie, onzichtbaar voor ons oog. Hierbij varieert de duty cycle: het deel van een cyclus dat de LED aan is (van 0% naar 100%).
  • Als upButton ingedrukt is (active HIGH) wordt de variabele ledState opgehoogd, tot een maximum van 255.
  • we gebruiken een delay(200) om te voorkomen dat de variabele direct weer opgehoogd wordt, bij een volgende herhaling van loop. Computers zijn erg snel!

Als downButton ingedrukt is (active HIGH) wordt de variabele ledState afgelaagd, tot een minimum van 0.


  • De functie max(a, b) heeft het maximum (grootste waarde) van deze getallen als resultaat. Voorbeelden: max(3, 100) = 100; max(3, -1) = 3.
  • De functie min(a, b) heeft het minimum (kleinste waarde) van deze getallen als resultaat. Voorbeelden: min(3, 100) = 3; min(3, -1) = -1.

Vragen en opdrachten

  • Welke waarde heeft min(ledStatus + 25, 255) als ledStatus de waarde 100 heeft? En als deze de waarde 245 heeft?

Eerste experimenten

  • wat gebeurt er als je een knop ingedrukt houdt?
  • wat gebeurt er als je beide knoppen ingedrukt houdt?
  • wat gebeurt er als je de waarde van de delay verhoogt? En als je deze verlaagt, bijvoorbeeld tot 10 msec?
  • wat gebeurt er als je de waarde van de stap verhoogt, bijvoorbeeld van 25 naar 50?
  • wat gebeurt er als je de opdracht analogWrite(led, ledState); aan het begin van de loop-body plaatst, in plaats van aan het eind?

Verdiepingsvragen