Cyclus 1 - Arduino

Cyclus 1 - Arduino

Inleiding

Inleiding

In dit deel werk je toe naar het maken van de hotelschakeling met de Arduino. Die bestaat uit een lamp en twee schakelaars. Voor de lamp gebruiken we in eerste instantie de LED die standaard op de Arduino. Voor de schakelaars kun je kiezen of je een aanraaksensor, een drukknop of een drukknop met toggle-functie kiest (zie ook: Cyclus 1 - Aanraaksensor). We hebben het uitgewerkt voor de aanraaksensor en de drukknop, je kunt dus kiezen.

Maar eerst moet je weten:

  • hoe een breadboard werkt;
  • hoe schakelingen moeten worden opgebouwd;
  • hoe de Arduino kan worden aangesloten op een computer om te kunnen programmeren.

Breadboard

Om een schakeling met sensoren e.d. te bouwen maken we gebruik van een zogenaamd breadboard. In een breadboard zitten gaatjes waarin weer klemmetjes zitten. Tussen die klemmetjes zitten verbindingen die je op de afbeelding ziet als grijze lijntjes.

breadboard

Het breadboard

 

Dus als je kijkt naar de horizontale lijn 1 op het breadboard dan zijn daar de gaatjes A, B, C, D en E met elkaar verbonden. Hetzelfde geldt voor de gaatjes F, G, H, I en J. In die gaatjes kunnen we de aansluitdraadjes en vaak ook de pennetjes van de sensoren steken en zo gebruik maken van de verbindingen van het breadboard.

Schakeling bouwen met Arduino

Je gaat straks een schakeling bouwen met een aanraaksensor of drukknop waarmee je een lampje of ledje aan en uit kunt zetten. Je zou een schakeling als hieronder kunnen maken. Als je het drukknopje indrukt, gaat het het externe ledje aan, en als je het weer loslaat gaat het ledje uit.

We geven een korte toelichting op de schakeling

  • We maken hier gebruik van de plus en min lijnen op het breadboard. Deze bevinden zich zowel links als rechts van het breadboard en worden aangegeven met een rode en blauwe lijn. In zo’n verticale lijn zijn alle gaatjes met elkaar verbonden. Je ziet dat aan de grijze verbindingen in de tekening.
  • De schakelaar wordt via lijn 18 van het breadboard met een draadje verbonden aan de plus.
  • Als we op de schakelaar drukken maken we een verbinding tussen lijn 18 van het breadboard en lijn 20.
  • Vanaf lijn 20 kan de stroom door de weerstand naar lijn 26 gaan en zo verbinding maken met het ledje .
    Let op: het langste pootje of het pootje met de knik van de led komt aan de + zijde.
  • De stroom gaat dan door het ledje naar lijn 27 die weer gekoppeld zit aan de GND aansluiting van de Arduino.
  • Daarmee is er, als we de drukknop indrukken, sprake van een stroomkring. De stroom kan immers van de 5 volts aansluiting (5V) naar de 0 volt (GND) komen en dus gaat het ledje branden.

We gebruiken de weerstand om te voorkomen dat de LED doorbrandt. De meeste Arduino’s werken met een spanning van 5 volt. En voor de meeste LED’s is dat een te hoge spanning. Door in serie met een LED een weerstand van 220 Ω te plaatsen kun je dat oplossen. Daarmee daalt de spanning over de LED naar ongeveer 2 volt. De waarde van een weerstand kun je aflezen aan de kleuren die erop staan.

In het materiaal van Freek Pols wordt uitgebreider ingegaan op het aansluiten van een LED en de kleurcoderingen van weerstanden, zie: Verder met de Arduino

Opdracht: bouw bovenstaande schakeling na

Bouw de bovenstaande schakeling na en test het. Gaat het lampje branden als je de knop indrukt?

 

Maar dit is niet de manier waarop we een schakelaar met een Arduino willen gebruiken!

Met de bovenstaande schakeling kun je maar één ding, namelijk: als de drukknop wordt ingedrukt gaat het ledje aan. Maar stel nu dat we juist willen dat het ledje brandt als we niet op de drukknop drukken en dat het uit gaat als we er wel op drukken? Of wellicht willen we dat het lampje gaat knipperen. Dan moet de schakeling worden aangepast. We willen echter naar een situatie waarbij we het gedrag kunnen aanpassen met een programma (software), zonder de schakeling aan te hoeven passen.

Kijk nu eens naar de volgende schakeling en vooral naar de verschillen met de vorige schakeling:

 

We zien hier in feite twee stroomkringen:

  1. De stroomkring met de drukknop. Dit zit immers, met de bijbehorende weerstand van 10 kΩ (= 10.000 Ω), aangesloten op de plus en de min.
  2. De stroomkring van het ledje. Via de groene draad aan poort 5 krijgt de schakeling zijn plus. De stroom loopt dan door de weerstand van 220 Ω en het ledje naar de min toe.

Zowel de drukknop als de led zijn nu verbonden aan een poort op de Arduino. De poorten hebben allemaal een eigen nummer. De drukknop is verbonden met poort 10, de led is verbonden met poort 5. Een poort kan als input of als output werken.

  • Bij het programmeren van de Arduino gaan we poort 10 definiëren als een poort voor input. D.w.z. de Arduino luistert als het ware aan poort 10. Als iemand de drukknop indrukt wordt de waarde op deze poort namelijk HIGH (oftewel 5 Volt). Laat iemand de drukknop los, dan wordt de waarde weer LOW (oftwel 0 Volt)
  • Poort 5 van de Arduino gaan we definiëren als een poort voor output. In het programma kun je de waarde van de poort op HIGH (5 Volt) of LOW (0 Volt) zetten. Daarmee zet je de LED aan en uit.

De weerstand van 10 kΩ die is verbonden aan de drukknop is een zogenaamde pull-down weerstand. Die trekt, als er niet op de drukknop gedrukt wordt, als het ware de spanning aan poort 10 naar 0 volt.  Als je namelijk op de drukknop drukt is het wel duidelijk dat er op poort 10 een spanning komt te staan van 5 volt. Maar als je de schakelaar los laat is helemaal niet zeker of poort 10 dan wel 0 volt wordt. Dankzij die weerstand dus wel.

 

Samengevat:
Door te programmeren kunnen we schakeling op allerlei manieren gebruiken. Je sluit dus altijd sensoren (zoals drukknopjes) en actuatoren (zoals LEDjes) op aparte poorten aan. In het progamma (de software) bepaal je wat de Arduino precies moet doen.

 

Aansluiten van de Arduino

Opdracht: Arduino aansluiten

Nu wordt het tijd om de Arduino aan te sluiten. Doorloop de stappen in deze paragraaf om de Arduino aan te sluiten op de computer en klaar te maken zodat je een programma kunt maken.

 

  • Sluit Arduino met een USB kabel op de computer aan.
  • Start de Arduino software (vraag eventueel de docent waar deze staat). Als je thuis werkt, deze software kun je vinden via: https://www.arduino.cc/en/main/software.
  • Bij de settings in de Arduino software kun je de taal veranderen naar 'Nederlans (Dutch)'.
  • Controleer nu of de Arduino en de software wel met elkaar op de juiste manier kunnen communiceren. Dat doe je als volgt:
    • Klik op Hulpmiddelen – Board en kijk of de Arduino die jij gebruikt overeenkomt met de software (zie afbeelding hieronder) en pas dit eventueel aan.
Arduino editor

Het board instellen

 

  • Is het juiste board ingesteld?
    • Klik nu op Hulpmiddelen – Poort en controleer of de juiste poort is geselecteerd. In onderstaande afbeelding zie  je dat op de onderste regel van de software COM3 wordt genoemd maar bij de keuze voor de poort staat duidelijk COM4. We moeten hier dus voor COM4 kiezen.
De keuze van de poort in de Arduino editor

De juiste poort kiezen

 

Als het board en de poort juist zijn ingesteld kunnen we een programma maken.

In de afbeelding hierboven zie je het al: als je in de programmeeromgeving een nieuw bestand aan maakt staan er meteen al twee delen (functies), t.w. void setup() en void loop(). Dat zijn de twee functies die je altijd in een Arduino programma ziet staan. Beide functies zijn nodig om een programma te kunnen laten werken.

  • In setup() worden variabelen gedeclareerd en wordt bepaald welke pinnen ingang of uitgang worden. setup() wordt eenmaal doorlopen.
  • loop() volgt na setup() en wordt oneindig herhaald. loop() “leest” bijvoorbeeld wat er op de invoerpoorten gebeurt en laat (meestal afhankelijk daarvan) bepalen wat er op de uitvoerpoorten moet gebeuren. Bijvoorbeeld een verwarmingselement aanzetten of een motortje laten draaien. Eigenlijk komt het er op neer dat loop() de motor van het programma is dus daar waar al het werk moet gebeuren.

Het woordje void voor deze functies betekent dat je deze functies wel aan kunt roepen maar dat je geen waarde of iets dergelijks terug krijgt. Dit in tegenstelling tot bijvoorbeeld een functie die iets moet berekenen. Dan verwacht je de uitkomst van de berekening terug.

Naast deze twee functies kunnen nog meer zaken aan de orde komen zoals het declareren van variabelen en het inlezen van zogenaamde libraries (bibliotheken met stukjes code die anderen al voor je gemaakt hebben). Ook kun je zelf functies aanmaken die je dan aanroept vanuit de loop() functie.

Verder met de Arduino

In deze module gaan we niet uitgebreid in op het programmeren en de werking van de Arduino zelf. Als je meer wilt oefenen en meer achtergrond wilt, dan raden we het materiaal van Freek Pols aan.

Arduino module basis cursus
Arduino module gevorderde cursus versie 2

Arduino module bestanden

Bij de bronnen die horen bij deze module vind je nog meer interessante bronnen.

Hotelschakeling met aanraaksensor

Prototype met één aanraaksensor

We beginnen met het maken van een prototype met slechts één aanraaksensor. Als de aanraaksensor wordt aangeraakt gaat de lamp (het ledje) aan. Wordt de aanraaksensor weer losgelaten gaat de lamp uit. Heel simpel dus. Later ga je zelf een hotelschakeling maken waarbij je gebruik maakt van twee aanraaksensoren.

In deze uitwerking werken we met een aanraaksensor, zoals hieronder. De technische, engelse naam is: Capacitive Touch Switch Sensor. Als iemand de sensor aanraakt dan wordt het uitgangssignaal hoog (HIGH), zodra hij/zij de sensor loslaat wordt het uitgangssignaal laag (LOW).

Aanraaksensor

Een eenvoudige aanraaksensor

 

Bij het maken een prototype is het belangrijk om in kleine stapjes te werken. Daarmee voorkom je fouten en wordt het makkelijker om problemen op te lossen. Je kunt de volgende stappen doorlopen.

  1. Aansluiten van de aanraaksensor
  2. Het testen van de aanraaksensor
  3. Maken van een toestandsdiagram
  4. Omzetten van het toestandsdiagram naar een programma op de Arduino

In de volgende paragrafen doen we die stappen voor.

Stap 1: Aansluiten van de aanraaksensor

De eerste stap is het aansluiten van een aanraaksensor aan een Arduino. De aanraakschakelaar is een simpele sensor. Je raakt hem aan en hij reageert (de SIG-poort van de sensor wordt HIGH) en zodra je hem niet meer aanraakt gaat hij weer terug naar de oorspronkelijke toestand (de SIG-poort wordt dan weer LOW).

We gaan de aanraakschakelaar gebruiken om een ledje aan- en uit te zetten. We gebruiken hiervoor het ledje dat al op de Arduino zit dus vandaar dat we alleen maar de aanraakschakelaar hoeven aan te sluiten.

Hieronder vind je de schakeling.

Arduino met aanraakschakelaar 1
De aanraakschakelaar aangesloten

 

  • Via de rode draadjes en de plus lijn sluiten we de VCC-pen van de aanraakschakelaar aan op 5 volt van de Arduino.
    De verbinding loopt via de linker horizontale lijn 23 van het breadboard.
  • De GND-pen van de aanraakschakelaar maakt gebruik van de linker horizontale lijn 22 van het breadboard en komt via de blauwe draadjes en de min lijn aan de GND van de Arduino.
  • De groene draad (SIG) sluiten we (via linker horizontale lijn 24 van het breadboard) aan op poort 2 van de Arduino.

Opdracht: bouw de schakeling

Bouw de schakeling zoals hierboven.

  • Sluit de aanraakschakelaar aan volgens het schema hierboven. Doe dat met een breadboard waar je de aanraakschakelaar in prikt. Ook de draadjes prik je in in het breadboard.
  • De kleuren van de draadjes doen er in feite niet toe maar gebruik ze een beetje slim. Bijvoorbeeld: de plus altijd rood en de min altijd blauw. Dat maakt het aansluiten overzichtelijk en het opsporen van fouten handiger.
  • We hoeven nog geen ledje aan te sluiten. De Arduino heeft een eigen led die we hier kunnen gebruiken.

 

Stap 2: Het testen van de aanraaksensor

Het is verstandig om voor je verder gaat eerst te testen of de aanraaksensor werkt. Dat kan bijvoorbeeld met onderstaande programmaatje.

const int sensorPin = 2;

void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);
}

void loop()  {
  Serial.println (digitalRead(sensorPin));
}

 

De waarde van de pin waar de sensor wordt dan gecommuniceerd met de seriële monitor. Die kun je starten door in de Arduino software te klikken op Hulpmiddelen en dan Seriële monitor. Als je het programma dan upload naar de Arduino krijg je als het goed is zoiets als in de schermafdruk hieronder.

De waarde in de seriële monitor verandert in 0 of 1 afhankelijk van of je de aanraaksensor aanraakt. Hiermee kun je dus testen of de aanraaksensor werkt en goed is aangesloten.

Opdracht: testen aanraaksensor

Neem bovenstaande programma over en test de aanraaksensor met behulp van de seriële monitor.

 

Stap 3: Het toestandsdiagram

Nu maken we een toestandsdiagram. We hebben hierbij te maken met twee toestanden:

  • ledUit
  • ledAan

En twee toestandsovergangen:

  • aangeraakt (iemand heeft de vinger op de sensor)
  • nietAangeraakt (niemand heeft de vinger op de sensor)

Het toestandsdiagram ziet er dan uit zoals in de afbeelding. Ga na of deze klopt!

 

Toestandsdiagram aanraakschakelaar 1

Toestandsdiagram aanraaksensor

 

 

Stap 4: Programma maken voor de Arduino

Nu kun je op basis van het toestandsdiagram een programma maken voor de Arduino. Maak er een gewoonte van een Arduino programma altijd op dezelfde manier op te bouwen.

 

Toewijzingen

We beginnen met de pin toewijzingen. Dat betekent dat we een naam bedenken voor een pin. Daardoor wordt het programma dat je schrijft overzichtelijker. Zo'n toewijzing ziet er dan als volgt uit:

const int sensorPin = 2;

Den aanraaksensor is immers aangesloten op pin 2 (we noemen een pin ook wel poort). In de code hoeven we nu niet meer te onthouden dat we de sensor aan pin 2 hebben aangesloten.

 

Variabelen

Daarna gaan we de variabelen vastleggen. Variabelen zijn die "dingen" die in waarde kunnen veranderen maar waarvan we wel steeds willen weten wat hun waarde op een bepaald moment is. Bijvoorbeeld:

int aanraken = 0;

of:

int toestand = 1;

Je ziet dat we hier ook meteen waarden aan de variabelen toekennen.

 

Setup

Het setup gedeelte begint altijd met:

void setup() {

In de setup geven we o.a. aan waar de pinnen voor worden gebruikt. Bijvoorbeeld voor input of voor output:

pinMode(sensorPin, INPUT);

of:

pinMode(ledPin, OUTPUT);

 

Loop

Tenslotte de loop. De loop is een stuk code dat steeds herhaald wordt. Als er dan veranderingen optreden kan de loop daarop actie ondernemen. De loop begint altijd met:

void loop() {

Voor elke toestandsovergang gebruik je een if of if...else functie om de actie die bij die toestandsovergang hoort te programmeren.

Hieronder kun je het gehele bestand downloaden.

Open bestand aanraaksensor1.ino

Opdracht: upload het programma

Bestudeer de code en vergelijk deze met het toestandsdiagram.

  1. Kopieer de code en plak deze in de Arduino software. Let op: verwijder wel eerst de code die al in het venster staat!
  2. Upload de code naar de Arduino door op uploaden te klikken.
  3. Als er geen foutmeldingen zijn zou de code nu moeten werken. Dus test de aanraakschakelaar.

 

Hopelijk zie je de relatie tussen het toestandsdiagram en de code. Deze schakeling is nog redelijk eenvoudig en je zou de code ook gemakkelijk kunnen schrijven zonder die toestanden te gebruiken maar pas op, het wordt al gauw ingewikkelder. En om dan nog alle mogelijke toestanden en toestandsovergangen in de gaten te kunnen houden en te kunnen programmeren is een goed toestandsdiagram erg belangrijk.

Opdracht: hotelschakeling

Opdracht: bouw een hotelschakeling

Implementeer nu een hotelschakeling. Maak gebruik van twee aanraaksensors en de ingebouwde LED. Je zult dus zelf een tweede aanraaksensor moeten aansluiten. Ga uit van de volgende situatie: als aanraaksensor A wordt aangeraakt gaat de lamp aan. Zodra deze wordt losgelaten, gaat de lamp weer uit.

Je hebt dus de volgende mogelijke toestandsovergangen:

  • aanraaksensor A wordt aangeraakt
  • aanraaksensor A wordt losgelaten (niet aangeraakt)
  • aanraaksensor B wordt aangeraakt
  • aanraaksensor B wordt losgelaten (niet aangeraakt)

De mogelijke acties zijn:

  • lamp aan (doe ledje aan)
  • lamp uit (doe ledje uit)

Werk in stappen:

  1. Sluit de eerste aanraaksensor aan en test deze.
  2. Sluit de tweede aanraaksensor aan en test deze.
  3. Maak een toestandsdiagram.
  4. Maak op basis hiervan het programma in de Arduino.
  5. Test het programma goed. Ga alle mogelijke situaties langs.

Hotelschakeling met drukknop

Prototype met één drukknop

We beginnen eerst met het maken van een prototype met slechts één drukknop. Als de drukknop wordt ingdrukt gaat de lamp (het ledje) aan. Wordt de drukknop weer losgelaten gaat de lamp uit. Heel simpel dus. Later ga je zelf een hotelschakeling maken waarbij je gebruik maakt van twee drukknopjes.

In deze uitwerking werken we met een drukknop zoals hieronder. Als iemand de drukknop indrukt dan wordt het uitgangssignaal hoog (HIGH), zodra hij/zij de knop loslaat wordt het uitgangssignaal laag (LOW).

Drukknop

 

Let op: bij een drukknop met toggle-functie is dat anders: als je de schakelaar/drukknop indrukt en weer loslaat blijft het uitgangssignaal hoog (HIGH). Als je de schakelaar vervolgens weer indrukt en weer loslaat wordt het uitgangssignaal laag (LOW). Die mag je overigens ook gebruiken.

Bij het maken een prototype is het belangrijk om in kleine stapjes te werken. Daarmee voorkom je fouten en wordt het makkelijker om problemen op te lossen. Je kunt de volgende stappen doorlopen.

  1. Aansluiten van de drukknop
  2. Het testen van de drukknop
  3. Maken van een toestandsdiagram
  4. Omzetten van het toestandsdiagram naar een programma op de Arduino

In de volgende paragrafen doen we die stappen voor.

Stap 1: Aansluiten van de drukknop

De eerste stap is het aansluiten van een drukknop aan een Arduino. We gaan de drukknop gebruiken om een ledje aan- en uit te zetten. We gebruiken hiervoor het ledje dat al op de Arduino zit dus vandaar dat we alleen maar de drukknop hoeven aan te sluiten.

Hieronder vind je de schakeling.

 

We geven een korte toelichting op de schakeling

  • We maken hier gebruik van de plus en min lijnen op het breadboard. Deze bevinden zich zowel links als rechts van het breadboard en worden aangegeven met een rode en blauwe lijn.
  • De schakelaar wordt via lijn 18 van het breadboard met een draadje verbonden aan de plus.
  • Als we op de schakelaar drukken maken we een verbinding tussen lijn 18 en lijn 20 van het breadboard. Lijn 20 van het breadboard is verbonden met poort 10 van de Arduino.
De weerstand van 10 kΩ die is verbonden aan de drukknop is een zogenaamde pull-down weerstand. Die trekt, als er niet op de drukknop gedrukt wordt, als het ware de spanning aan poort 10 naar 0 volt.  Als je namelijk op de drukknop drukt is het wel duidelijk dat er op poort 10 een spanning komt te staan van 5 volt. Maar als je de schakelaar los laat is helemaal niet zeker of poort 10 dan wel 0 volt wordt. Dankzij die weerstand dus wel.

 

Opdracht: bouw de schakeling

Bouw de schakeling zoals hierboven.

  • Sluit de drukknop aan volgens het schema hierboven. Doe dat met een breadboard waar je de drukknop in prikt. Ook de draadjes prik je in in het breadboard.
  • De kleuren van de draadjes doen er in feite niet toe maar gebruik ze een beetje slim. Bijvoorbeeld: de plus altijd rood en de min altijd blauw. Dat maakt het aansluiten overzichtelijk en het opsporen van fouten handiger.
  • We hoeven nog geen ledje aan te sluiten. De Arduino heeft een eigen led die we hier kunnen gebruiken.

Stap 2: Testen van de drukknop

Het is verstandig om voor je verder gaat eerst te testen of de drukknop werkt. Dat kan bijvoorbeeld met onderstaande programmaatje.

const int sensorPin = 10;

void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);
}

void loop()  {
  Serial.println (digitalRead(sensorPin));
}

 

De waarde van de pin waar de sensor wordt dan gecommuniceerd met de seriële monitor. Die kun je starten door in de Arduino software te klikken op Hulpmiddelen en dan Seriële monitor. Als je het programma dan upload naar de Arduino krijg je als het goed is zoiets als in de schermafdruk hieronder.

De waarde in de seriële monitor verandert in 0 of 1 afhankelijk van of je de aanraaksensor aanraakt. Hiermee kun je dus testen of de aanraaksensor werkt en goed is aangesloten.

Opdracht: testen drukknop

Neem bovenstaande programma over en test de drukknop met behulp van de seriële monitor.

 

Stap 3: Toestandsdiagram maken

Nu maken we een toestandsdiagram. We hebben hierbij te maken met twee toestanden:

  • ledUit
  • ledAan

En twee toestandsovergangen:

  • ingedrukt (iemand heeft de vinger op de drukknop)
  • nietIngedrukt (niemand heeft de vinger op de drukknop)

Het toestandsdiagram ziet er dan uit zoals in de afbeelding. Ga na of deze klopt!

Stap 4: Programma maken voor de Arduino

Nu kun je op basis van het toestandsdiagram een programma maken voor de Arduino. Maak er een gewoonte van een Arduino programma altijd op dezelfde manier op te bouwen.

 

Toewijzingen

We beginnen met de pin toewijzingen. Dat betekent dat we een naam bedenken voor een pin. Daardoor wordt het programma dat je schrijft overzichtelijker. Zo'n toewijzing ziet er dan als volgt uit:

const int sensorPin = 10;

Den drukknop is immers aangesloten op pin10 van de Arduino (we noemen een pin ook wel poort). In de code hoeven we nu niet meer te onthouden dat we de sensor aan pin 10 hebben aangesloten.

 

Variabelen

Daarna gaan we de variabelen vastleggen. Variabelen zijn die "dingen" die in waarde kunnen veranderen maar waarvan we wel steeds willen weten wat hun waarde op een bepaald moment is. Bijvoorbeeld:

int ingedrukt = 0;

of:

int toestand = 1;

Je ziet dat we hier ook meteen waarden aan de variabelen toekennen.

 

Setup

Het setup gedeelte begint altijd met:

void setup() {

In de setup geven we o.a. aan waar de pinnen voor worden gebruikt. Bijvoorbeeld voor input of voor output:

pinMode(sensorPin, INPUT);

of:

pinMode(ledPin, OUTPUT);

 

Loop

Tenslotte de loop. De loop is een stuk code dat steeds herhaald wordt. Als er dan veranderingen optreden kan de loop daarop actie ondernemen. De loop begint altijd met:

void loop() {

Voor elke toestandsovergang gebruik je een if of if...else functie om de actie die bij die toestandsovergang hoort te programmeren.

Hieronder kun je het gehele bestand downloaden.

Open bestand drukknop1.ino

Opdracht: upload het programma

Bestudeer de code en vergelijk deze met het toestandsdiagram.

  1. Kopieer de code en plak deze in de Arduino software. Let op: verwijder wel eerst de code die al in het venster staat!
  2. Upload de code naar de Arduino door op uploaden te klikken.
  3. Als er geen foutmeldingen zijn zou de code nu moeten werken. Test je prototype.

 

Hopelijk zie je de relatie tussen het toestandsdiagram en de code. Deze schakeling is nog redelijk eenvoudig en je zou de code ook gemakkelijk kunnen schrijven zonder die toestanden te gebruiken maar pas op, het wordt al gauw ingewikkelder. En om dan nog alle mogelijke toestanden en toestandsovergangen in de gaten te kunnen houden en te kunnen programmeren is een goed toestandsdiagram erg belangrijk.

Opdracht: hotelschakeling

Opdracht: bouw een hotelschakeling

Implementeer nu een hotelschakeling. Maak gebruik van twee drukknoppen. Je zult dus zelf een tweede drukknop moeten aansluiten. Ga uit van de volgende situatie: als drukknop A wordt ingedrukt gaat de lamp (LED) aan. Zodra deze wordt losgelaten, gaat de lamp weer uit.

Je hebt dus de volgende mogelijke toestandsovergangen:

  • drukknop A wordt ingedrukt
  • drukknop A wordt losgelaten (niet ingedrukt)
  • drukknop B wordt ingedrukt
  • drukknop B wordt losgelaten (niet ingedrukt)

De mogelijke acties zijn:

  • lamp aan (doe ledje aan)
  • lamp uit (doe ledje uit)

Werk in stappen:

  1. Sluit de eerste drukknop aan en test deze.
  2. Sluit de tweede drukknop aan en test deze.
  3. Maak een toestandsdiagram.
  4. Maak op basis hiervan het programma in de Arduino.
  5. Test het programma goed. Ga alle mogelijke situaties langs.

Extra opdrachten

Een externe led toevoegen (aanraaksensor)

Hieronder vind je dezelfde schakeling als bij het prototype, maar nu wordt er gebruik gemaakt van een externe led. Om een led aan te sluiten heb je een weerstand nodig die je in serie met de led schakelt. Die weerstand zorgt ervoor dat de spanning over de led wordt verlaagd want als je de led rechtstreeks aansluit op een poort van de Arduino krijgt de led een spanning van 5 volt te verduren en daar kunnen de meeste leds niet tegen.
De spanning hangt overigens af van de kleur van de led. Vaak voldoet een weerstand van 220 Ω maar wil je het precies weten dan kun je het laten uitrekenen op deze website.

De waarde van de weerstand is af te lezen aan de kleurringen. De laatste ring (meestal goud of zilver gekleurd) geeft de tolerantie aan dus begin met het aflezen van de kleurringen aan de andere kant. Een handige website om de weerstandswaarde te bepalen vind je hier.

 

De aanraakschakelaar met een externe led

De aanraakschakelaar met een externe led

 

Opdracht: pas hotelschakeling aan met externe led

Pas de hotelschakeling die je eerder maakt (met één of twee aanraaksensoren) aan waarbij een externe led gebruikt in plaats van de interne led van de Arduino.

Een externe led toevoegen (drukknop)

Hieronder vind je dezelfde schakeling maar nu wordt er gebruik gemaakt van een externe led. Om een led aan te sluiten heb je een weerstand nodig die je in serie met de led schakelt. Die weerstand zorgt ervoor dat de spanning over de led wordt verlaagd want als je de led rechtstreeks aansluit op een poort van de Arduino krijgt de led een spanning van 5 volt te verduren en daar kunnen de meeste leds niet tegen.
De spanning hangt overigens af van de kleur van de led. Vaak voldoet een weerstand van 220 Ω maar wil je het precies weten dan kun je het laten uitrekenen op deze website.

De waarde van de weerstand is af te lezen aan de kleurringen. De laatste ring (meestal goud of zilver gekleurd) geeft de tolerantie aan dus begin met het aflezen van de kleurringen aan de andere kant. Een handige website om de weerstandswaarde te bepalen vind je hier.

 

Opdracht: pas hotelschakeling aan met externe led

Pas de hotelschakeling die je eerder maakt (met één of twee drukknoppen) aan waarbij een externe led gebruikt in plaats van de interne led van de Arduino.

 

Toggle-functie programmeren (drukknop en aanraaksensor)

Je kunt van een drukknop of aanraaksensor zonder toggle functie toch een schakelaar met toggle functie maken door deze te programmeren. Het idee is als volgt: de lamp gaat aan als je de drukknop hebt ingedrukt en weer losgelaten. En de lamp gaat uit als je dat weer doet: indrukken en loslaten.

Hieronder vind je het bijbehorende toestandsdiagram. Je kunt het toestandsdiagram testen door met de muis te klikken op de aanraaksensor. Helaas werkt het (nog) niet op een touchscreen waarbij je de aanraaksensor daadwerkelijk zou kunnen aanraken. In plaats van de aanraaksensor kun je ook een drukknop gebruiken.

Toestandsdiagram van een aanraakschakelaar met toggle functie.

Toestandsdiagram met toggle functie

Klik op de afbeelding om het programma te starten.

Opdracht: bouw de toggle functie

Maak op basis van een bovenstaande toestandsdiagram een programma waarbij de aanraaksensor of drukknop een toggle-functie krijgen. Je mag kiezen of je de interne led van de Arduino gebruikt of een externe led aansluit.

Hotelschakeling versie 2 (aanraaksensor of drukknop)

Opdracht: bouw een hotelschakeling (versie 2)

Deze opdracht kan alleen met aanraaksensoren of drukknopjes zonder toggle-functie.

Je gaat nu de hotelschakeling nog eens maken, alleen de aanraaksensor of drukknop werken op een iets andere manier: als je de aanraaksensor aanraakt en vervolgens loslaat moet de lamp aangaan.  Als je aanraaksensor vervolgens weer aanraakt en vervolgens loslaat gaat de lamp weer uit. Hetzelfde geldt voor als je met drukknopjes werkt: als je de drukknop indrukt en weer loslaat gaat de lamp aan. Doe je dat weer gaat de lamp uit. Ze krijgen dus een toggle-functie.

Je kunt de volgende toestandsovergangen gebruiken:

  • aanraaksensor / drukknop A aangeraakt / ingedrukt
  • aanraaksensor / drukknop A losgelaten (niet ingedrukt / niet aangeraakt)
  • aanraaksensor / drukknop B aangeraakt / ingedrukt
  • aanraaksensor / drukknop B losgelaten (niet ingedrukt / niet aangeraakt)

De mogelijke acties zijn:

  • lamp aan (doe ledje aan)
  • lamp uit (doe ledje uit)

Werk in stappen:

  1. Sluit de eerste aanraaksensor of drukknop aan en test deze
  2. Sluit de tweede aanraaksensor of drukknop aan en test deze
  3. Maak een toestandsdiagram
  4. Maak op basis hiervan het programma in de Arduino

Toegangscode (aanraaksensor of drukknop)

Opdracht: maak een toegangscode

Bouw het systeem voor de toegangscontrole via een deur. Gebruik hiervoor twee aanraaksensoren of drukknopjes zonder toggle-functie (A en B). De deur gaat open als de gebruiker AAB indrukt (je mag ook een andere toegangscode bedenken).

De toestandsovergangen zijn dus:

  • aanraaksensor / drukknop A aangeraakt / ingedrukt
  • aanraaksensor / drukknop A losgelaten (niet ingedrukt / niet aangeraakt)
  • aanraaksensor / drukknop B aangeraakt / ingedrukt
  • aanraaksensor / drukknop B losgelaten (niet ingedrukt / niet aangeraakt)

Om aan te geven dat de deur open gaat kun je een led gebruiken die aangaat, bijvoorbeeld de led op de Arduino.

Werk weer in kleine stappen:

  1. Sluit de eerste aanraaksensor of drukknop aan en test deze
  2. Sluit de tweede aanraaksensor of drukknop aan en test deze
  3. Maak een toestandsdiagram
  4. Maak op basis van het toestandsdiagram het programma voor de Arduino

Terug naar voorpagina Arduino

Ga terug naar de voorpagina Arduino met verwijzingen naar alle hoofstukken voor deze module.

  • Het arrangement Cyclus 1 - Arduino is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Laatst gewijzigd
    2019-07-17 15:15:13
    Licentie
    CC Naamsvermelding 4.0 Internationale licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding 4.0 Internationale licentie.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
    Studiebelasting
    4 uur en 0 minuten