Led aan en uit

Workshop 1

We starten met een eenvoudige kennismaking waarbij we een LED aan- en uitzetten met een microprocessorbord.

“In deze workshops maak ik voornamelijk gebruik van het betaalbare microprocessorbord ESP32-DevKitC Bord, dat vanaf de €10,- kost en veel mogelijkheden biedt.”

Om dit microprocessorbord te kunnen gebruiken in combinatie met de Arduino IDE, moeten enkele installatie- en configuratiestappen worden uitgevoerd. Raadpleeg de sectie ‘Technische info’ voor instructies over hoe dit te doen.

Benodigdheden

  • Programmeer omgeving Arduino IDE
  • microprocessorbord (in deze workshop ESP32-DevKitC Bord)
  • 1 x breadboard
  • 2 x led (kleur maakt niets uit, in deze workshop een rode en een groene led)
  • 2 x weerstand van min. 150Ω (max. 1KΩ, in deze workshop 220Ω)
  • 5 x jumper kabels (in deze workshop 3x zwart en 2x rood)

Voor deze onderdelen kun je terecht op websites zoals AZ-Delivery, Hackerstore, Otronic en Ben’s Electronics, waar ik veel van mijn onderdelen koop.

Technische info

Hieronder vind je pagina’s waar dieper wordt ingegaan op de materialen die tijdens deze workshop worden gebruikt, evenals extra informatie.

Breadboard

In afb. 1 zie je dat er twee rode draadjes lopen van GPIO 22 en 23 naar het breadboard. Vanuit deze rij (verticaal) worden beide draadjes verbonden met een weerstand (220 Ohm). Deze weerstanden zijn aan de andere zijde verbonden met een van de leds (lange pootje, ook wel anode genoemd). De andere zijde van de leds (korte pootje, ook wel kathode genoemd) worden verbonden met het zwarte draadje. Deze zwarte draadjes zijn weer verbonden met de min rij (bovenste rij). Deze rij is door het derde zwarte draadje verbonden met GND (ground/aarde of -) van het microprocessorbord.

Opmerking:
De weerstand mag zowel tussen het ledje (kathode) en de min als tussen het ledje (anode) en de plus geplaatst worden. Het maakt ook niets uit hoe om de weerstand wordt geplaatst.

Afb. 1

Programma omschrijving

Het programma stuurt 2 leds (1 rode en 1 groene) aan. Het laat de leds 1 seconde branden en daarna blijven ze 1 seconde uit. Dit blijft zich herhalen.

Arduino programma code (C++)

De Arduino C++ code van het programma.

// Hier maak je een variabele die aangeeft op welke pin het ledje aangesloten zit.
int pin1 = 22; // GPIO22
int pin2 = 23; // GPIO23
// met de 'duur' variabele geef je aan hoelang het ledje aan én uit moet gaan.
int duur = 1000;

// de setup functie wordt een keer uitgevoerd als je het Single Board Computer start of reset.
void setup() {
   // initializeert de digital pinnen 'pin1' en 'pin2' als uitvoer.
   pinMode(pin1, OUTPUT);
   pinMode(pin2, OUTPUT);
}

// de loop functie loopt keer op keer opnieuw, het is een eindeloze lus.
void loop() {
   digitalWrite(pin1, HIGH); // laat het ledje branden (HIGH is het voltage niveau, dus 3,3 volt)
   digitalWrite(pin2, HIGH);
   delay(duur); // wacht 1 seconde
   digitalWrite(pin1, LOW); // zet het ledje uit door het voltage nivea op LOW te zetten, 0 volt
   digitalWrite(pin2, LOW);
   delay(duur); // wacht 1 seconde
}

Uitleg code:
Het programma begint bij regel 1 en gaat daarna verder naar regel 2, 3, 4, 5 en zo voort.

In regel 2 en 3 worden 2 integer variabelen gedefinieerd, namelijk ‘pin1’ (pin nummer 22 voor GPIO22) en ‘pin2’ (pin nummer 23 voor GPIO23).
In regel 5 wordt een derde integer variabele gedefinieerd, namelijk ‘duur’. Deze krijgt de waarde 1000 (dit is de tijd in milliseconden dat er gewacht wordt). Opmerking, 1000 milliseconden is 1 seconde.

setup()
Regel 8 t/m 12 is de ‘setup()’ functie, deze wordt éénmalig uitgevoerd bij elke start of reset (herstart) van het programma.
Op regel 10 en 11 wordt van de mode van de pinnen aangegeven. Dit wordt door het commando ‘pinMode()’ gedaan, deze krijgt de waarde ‘INPUT’ (invoer) of ‘OUTPUT’ (uitvoer). Dit betekent dat de pin dan data ontvangt of uitstuurt. In bovenstaande code dus uitstuurt. Eerst wordt in het commando de pin aangegeven en daarna dat de mode uitvoer (OUTPUT) is.

loop()
Regel 15 t/m 23 is de ‘loop()’ functie, deze wordt na de functie ‘setup()’ uitgevoerd. Deze herhaald zich continue. Dus als regel 23 uitgevoerd is, gaat hij weer naar regel 15. Deze herhaald zich continue en is het eigenlijke uitvoerende gedeelte van het programma.
Regel 16, 17, 20 en 21 geven we het commando ‘digitalWrite()’ om 3,3 volt (‘HIGH’) of 0 volt (‘LOW’) op de pin te zetten.
Regel 16 en 17 zetten we de leds aan door deze op ‘HIGH’ te zetten.
Regel 18 gebruiken we het commando ‘delay()’ om een bepaalde tijd te wachten. Deze tijd is in de variabele ‘duur’ vastgelegd en heeft de waarde ‘1000’ (vastgelegd in regel 5).
Regel 20 en 21 zetten we de leds uit door deze op ‘LOW’ te zetten.
Regel 22 gebruiken we het commando ‘delay()’ om een bepaalde tijd te wachten. Deze tijd is in de variabele ‘duur’ vastgelegd en heeft de waarde ‘1000’ (vastgelegd in regel 5).
Het programma heeft het einde bereikt regel 23 en gaat nu weer terug naar regel 16. Dit gaat zo door totdat je het microprocessorbord uitzet of herstart (reset).

LET OP!!!
C++ is hoofdletter gevoelig, dus ‘digitalWrite’ werkt, maar ‘digitalwrite’ of ‘DigitalWrite’ werkt niet.
Bij variabelen is het ook zo, dus Pin1, pin1, PIN1 zijn allemaal verschillende variabelen. Doe dit niet op deze manier, dit is erg verwarrend en maakt de code slecht leesbaar. Geef duidelijke namen.

Opdrachten

  1. Probeer om een alarmlicht te maken waar de ene led aangaat als de andere uitgaat en andersom.
  2. Maak een knipperlicht waarbij de ene led dubbel zo vaak knippert als de andere.