Inleiding

GPIO-pinnen (General Purpose Input/Output) op de Arduino kunnen zowel als ingang als uitgang worden gebruikt.  

  • GPIO als uitgang: Hier sluit je een actuator op aan, zoals een LED of motor. Dit is een component dat een actie uitvoert op commando van de Arduino, zoals licht aanzetten of een motor laten draaien. 
  • GPIO als ingang: Hier sluit je een sensor op aan. Het woord sensor is verwant aan het Engelse to sense (waarnemen). Sensoren fungeren als de zintuigen van de Arduino, waarmee deze zijn omgeving kan detecteren.  

Bij digitale input moeten we de GPIO configureren als INPUT (in plaats van OUTPUT). In plaats van een signaal te schrijven naar de pin, gaan we de status (HOOG of LAAG) lezen. Omdat we deze waarde vaak moeten opslaan, maken we gebruik van variabelen.  

In dit deel leer je:  

  • Hoe je digitale input configureert en uitleest. 
  • Hoe je de gelezen waarde opslaat in een variabele.  

Werken met digitale signalen, die slechts twee waarden hebben:  

  • HIGH (5V) 
  • LOW (0V)  

Dit maakt ze geschikt voor schakelaars, drukknoppen en digitale sensoren.  

GPIO instellen en uitlezen - Wat gaan we doen?Wat gaan we doen?

Om de basis van digitale inputpinnen aan te leren, gaan we één pin (GPIO 2) configureren als input en met een drukknop zorgen dat de status van de pin kan gewijzigd worden. We gaan deze status lezen, en om aan de gebruiker te duidelijk te maken wat deze status was, schrijven we deze status naar digitale pin 13, de pin waarmee het interne ledje verbonden is. We gaan dus wel GPIO 13 moeten configureren als output.

Digitale Input

Het circuit & werking digitale input

In deze schakeling wordt een schuifschakelaar gebruikt. Deze schakelaar is verbonden met:

  • GND (aarde)
  • GPIO 2 (een digitale pin van de Arduino)
  • +5V (voeding)

Werking van de schakelaar:

  • Linkse positie: GPIO 2 is verbonden met GND.
  • Rechtse positie: GPIO 2 is verbonden met +5V.

GPIO als invoer (input):

Wanneer een GPIO-pin (zoals GPIO 2) als input wordt geconfigureerd, meet de Arduino de spanning (potentiaal) ten opzichte van GND. Dit werkt vergelijkbaar met een voltmeter tussen de GPIO-pin en GND.

De "voltmeter" van de Arduino geeft echter slechts twee mogelijke waarden door:

  • Hoog (High, 1, +5V)
  • Laag (Low, 0, 0V)
Digitale Input1

Lezen van de schakelaar:

  • Schakelaar links (GPIO 2 → GND): De ingang is laag (0).
  • Schakelaar rechts (GPIO 2 → +5V): De ingang is hoog (1).

Met deze instelling kun je eenvoudig bepalen in welke stand de schakelaar staat door de waarde van GPIO 2 uit te lezen.

Je merkt dat je in deze schakelingen drie aansluitingen hebt met de Arduino:

  • + 5V
  • GND
  • digitale pin.

Dit zien we zeer dikwijls terugkomen in modules voor digitale sensoren. Om de module te voeden heb je de +5V en de GND nodig. De derde aansluiting zal dan het signaal zijn.

Brain Copy
Brain Copy Brain Copy Brain Copy Brain Copy

De programmatie

We hebben eerder gezien hoe je een GPIO-pin als output configureert met:  

pinMode(<GPIO>, OUTPUT);

Op dezelfde manier kunnen we een GPIO-pin als input instellen, maar dan gebruiken we `INPUT` in plaats van `OUTPUT`:  

pinMode(<GPIO>, INPUT);

Net zoals bij outputs gebeurt dit meestal in de `setup()`-functie. De setup()-functie wordt zo:

void setup()

{

  pinMode(2, INPUT);

  pinMode(13, OUTPUT);

}

GPIO-ingang lezen

Bij een output gaven we een status (HIGH/LOW) mee met `digitalWrite()`. Bij een input lezen we juist de status van de pin uit met `digitalRead()`.  

Voorbeeld:  

We lezen de status van digitale ingang pin 3 en slaan deze op in een variabele `status`:  

waarde = digitalRead(3);

De variabele `status` kan van het type int`(0 of 1) of  bool (`true`/`false`) zijn.  

Syntax:

digitalRead(pin)

Parameters

  • pin: de nummer van de Arduino-pin (GPIO) die we gaan configureren

Bron :

https://docs.arduino.cc/language-reference/en/functions/digital-io/digitalread/ 

Volledige sketch

Al de andere code kennen we reeds. Zo komen we tot onderstaande sketch.

int waarde;
void setup()
{
  pinMode(2, INPUT);
  pinMode(13, OUTPUT);
}

void loop()
{
  waarde = digitalRead(2);
  digitalWrite(13,waarde);
  delay(100);
}

Voorbeeld simulatie drukknop zonder breadboard.

  • Klik op Tinkercad logo
  • Klik op "Copy and Tinker"

Voorbeeld simulatie drukknop met breadboard

  • Klik op Tinkercad logo
  • Klik op "Copy and Tinker"

Toepassing:

Simulatie openen in Tinkercad

Klik op het Tinkercad-logo hiernaast om een volledig uitgewerkte simulatie te openen.  

Na het openen klik je op "Copy and Tinker" om zelf met de schakeling aan de slag te gaan.  

Opbouw van de schakeling  

De simulatie bevat een schuifschakelaar die is aangesloten op:  

  • GND (aarde)
  • GPIO2 (digitale ingang van de Arduino)
  • +5V (voeding)

Werking van de schuifschakelaar:

  • Linkse positie: GPIO2 is verbonden met GND (LOW signaal). 
  • Rechtse positie: GPIO2 is verbonden met +5V (HIGH signaal).  

Weergave van de status via LED  

De status van GPIO2 wordt doorgegeven aan GPIO13, waar een interne LED op aangesloten is:  

  • GPIO2 = HIGH → LED brandt.  
  • GPIO2 = LOW → LED gaat uit.  

GPIO2 = LOW → LED gaat uit.  

Op deze manier kun je direct zien in welke stand de schakelaar staat!

Drukknoppen

Drukknoppen (ook wel push buttons of tactile switches genoemd) zijn mechanische schakelaars die een elektrisch circuit sluiten of onderbreken wanneer ze worden ingedrukt. Ze behoren tot de meest gebruikte invoercomponenten in elektronica en Arduino-projecten omdat ze een eenvoudige manier bieden om interactie tussen een gebruiker en een circuit mogelijk te maken.  

Drukknop module

De eenvoudigste manier om een drukknop in je project te integreren, is door gebruik te maken van een drukknopmodule. Dit is een klein printplaatje (PCB: Printed Circuit Board) dat alle benodigde componenten bevat om de schakelaar stabiel en betrouwbaar te laten werken.  

Aansluitingen van de module

De module heeft drie aansluitingen, een veelvoorkomende opbouw bij elektronica-modules:  

  1. VCC → Sluit aan op +5V van de Arduino (voeding) 
  2. GND → Verbind met GND (aarde) van de Arduino 
  3. Signaalaansluiting → Een  digitale input-pin (bijv. GPIO2)
    Geeft aan of de knop ingedrukt is (meestal hoog of laag signaal)

Belangrijke opmerkingen

Let op de labelling! De volgorde van de aansluitingen kan per fabrikant verschillen. Controleer dus altijd het bordje of de datasheet.  

Tip: 

Test altijd eerst met een eenvoudig programma of de module correct werkt voordat je hem in een complex circuit bouwt.

Drukknop

Simulatie opdracht

Classes => Maze Runner Online => Op weg naar de start! => Drukknop module

In de simulatieomgeving is er geen drukknopmodule beschikbaar. Om die reden hebben we deze module nagebouwd op een breadboardje. Ook hier moet je in eerste instantie niets kennen van de elektronica, maar gaan we focussen op het aansluiten en het gebruik van de module.

  • Sluit de drukknop-module aan op de Arduino.
  • Configureer GPIO13 als output
  • Zorg ervoor dat de interne led brandt als de drukknop ingedrukt is.

Wat als je geen drukknop module gebruikt maar een "gewone" drukknop?

Lijnvolg-sensor

In dit project navigeert een robot door een doolhof dat is gemarkeerd met een zwarte lijn. Om de route te volgen, gebruiken we een IR-lijnvolger, een digitale sensor die het contrast tussen de lijn en de ondergrond detecteert.  

Werking van de IR-lijnvolger

De sensor bestaat uit twee hoofdcomponenten:  

  1. IR-LED (infrarood-LED) – Zendt onzichtbaar infrarood licht uit. 
  2. Fotodiode – Meet de intensiteit van het teruggekaatste licht.  

Principe van lijnherkenning:

  • Witte ondergrond: Reflecteert veel IR-licht → fotodiode ontvangt een sterk signaal → sensor geeft HIGH (of digitaal `1`). 
  • Zwarte lijn: Absorbeert IR-licht → weinig reflectie → sensor geeft LOW (of digitaal `0`).  

De Arduino gebruikt dit signaal om te bepalen of de robot nog op de lijn rijdt of moet corrigeren.

 

Aansluiting en configuratie

De sensor heeft drie aansluitingen:  

VCC → Sluit aan op +5V (voeding).  

GND → Verbinding met ground (GND).  

OUT → Digitaal uitgangssignaal naar een Arduino-ingang (bijv. `D2`).  

Lijnvolger2

Optionele instellingen:  

Sommige sensoren hebben een potentiometer om de gevoeligheid af te stellen.  

Gebruik `digitalRead()` in de Arduino-code om het signaal te verwerken.  

Praktische tips

  1. Meerdere sensoren voor betrouwbaarheid:
    Voor nauwkeurige navigatie kun je meerdere sensoren naast elkaar plaatsen (bijv. links, midden, rechts). Zo detecteert de robot ook bochten en vertakkingen. 
  2. Omgevingslicht:
    Sterk omgevingslicht (zoals zonlicht) kan storing veroorzaken. Gebruik een **gekantelde sensor** of een afscherming om interferentie te minimaliseren. 
  3. Kalibratie:
    Test de sensor eerst op de ondergrond om zeker te weten of hij goed reageert op het contrast tussen zwart en wit.  

Oefening lijnvolger

Omdat er in de simulatieomgeving geen echte IR-lijnsensor beschikbaar is, wordt deze nagebootst met een zelfgebouwd circuit op een breadboard. In plaats van infraroodsensoren gebruiken we schuifschakelaars om de werking van een 5-kanaals lijnvolger te simuleren.  

Opbouw van het simulatiecircuit

Het circuit heeft de volgende aansluitingen (van rechts naar links):  

  • GND (Ground) – Gemeenschappelijke aarding. 
  • VCC (+5V) – Voeding voor de schakelaars (sensoren). 
  • OUT1 t/m OUT5 – Digitale uitgangen die met de Arduino verbonden zijn.  

Hoe werkt de simulatie?  

  • Elke schuifschakelaar stelt één virtuele "sensor" voor. 
  • Schuif je een schakelaar naar links, dan wordt de bijbehorende uitgang (OUT1 t/m OUT5) LAAG (LOW/0)
  • Schuif je een schakelaar naar rechts, dan wordt de uitgang HOOG (HIGH/1).  

Waarom is dit handig?  

  • Je kunt verschillende lijnposities nabootsen (bijv. alsof de robot links, rechts of precies op de lijn rijdt). 
  • Ideaal voor testen en debuggen zonder fysieke sensor. 
  • Vergelijkbaar met een echte 5-kanaals lijnvolger, waarbij elke sensor apart uitleesbaar is. 
  • Met dit systeem kunnen we realistische lijnvolglogica testen voordat je naar een echt fysiek systeem overgaat.  

 

Oef Lijn1
Oef Lijn2

Opdracht

Classes => Maze Runner Online => Op weg naar de start! => Line follower initiatie

In deze oefening gaan we terug het verkeerslichtje aansluiting, maar in combinatie met de line follower sensor. We maken wel enkel gebruik van OUT1, OUT3 en OUT5.

De sketch moet de waarden van OUT1, OUT3 en OUT5 lezen, en deze waarden doorgeven aan respectievelijk de groene, gele en rode LED.