modellering met Arduino



Vergelijkbare documenten
modellering met Arduino project module

modellering met Arduino extra module

modellering met Arduino mini module

MAKERKLAS WORKSHOP ARDUINO. Maandag 7 december 2015

1. Sluit de LED aan zoals afgebeeld 2. Sluit de USB-kabel aan op de Arduino 3. Klik op de knop uploaden 4. De LED begint te knipperen

Workshop Arduino - deel 2

Naam + Klas: Laptop Nr: Cijfer:

Programmeren met Arduino-software

Werkbladen voor Arduino workshop 1

Arduino[4KIDS] Maak je eigen muziekinstrument!

RCL Arduino Workshop 1

Workshop Arduino voor beginners deel 2

Android apps met App Inventor 2 antwoorden

Arduino Workshop 1 Zuid-Limburg

Programmeer-handleiding Easyboard MB

Workshop Arduino voor beginners. door TkkrLab Enschede

Tweede workshop Arduino

van PSD naar JavaScript

Workshop Arduino Uno. Touw dag 6 juni 2015 Harold Pootjes en Simon Pauw

Programmeren met Arduino

Hand-out Introductieworkshop LED programmeren

VANTEK Discovery set. N. B. De OPITEC bouwpakketten zijn gericht op het onderwijs. N991240#1

KAEDU : Outputs en inputs

Boe-Bots - Arduino robots

De Arduino-microcontroller in de motorvoertuigentechniek (6)

Module 3: Scratch programmeren: is het logisch of is het niet logisch?

DE ASTRO PI PROGRAMMEREN VOOR MISSION ZERO

by Jody Culkin Bronnen die gratis gebruikt, verspreid of aangepast kunnen worden. meestal software of hardware.

Wat is Arduino? Arduino = microprocessor (Atmel)

Arduino. Arduino UNO. Sam Decoster. CoderDojo Roeselare. Sam Decoster

Programmeerstructuren met App Inventor

Arduino Cursus, Deel 2 Programmeren. Simon Pauw, ZB45, Amsterdam

Oefening 1 - Seriële communicatie via USB

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

Logo quiz Project Inleiding op de Logo!

Fysische Informatica met FLEC

Temperatuur Les 8 Leerkrachtenhandleiding. Basis

A R D U I N O. addendum bij: Leren programmeren, meten en sturen met de Arduino. 3 e druk INHOUD

Verkeerslichten. De Verkeerslichten & de PLC in het TIBBLTO / VICTO lokaal. Werkplek 1. Leer & werkboek.

Ravi Ramcharan Arduino PRO Smart leeslampje

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Je kunt de mbot ook draadloos programmeren via Bluetooth of met 2.4G Wireless. Bekijk de instructies op mbot draadloos.

Workshop FLL. Leer robots programmeren. Marieke Peelen Lennart de Graaf Daryo Verouden -

programmeren leeromgeving

Gebruikershandleiding. robotcar.nl

Arduino. HCC Vlaanderen - Mechelen 7 februari Luc De Cock

De mbot Ranger. Je wilt zeker meteen al aan de slag. Maar voordat we beginnen moet je 3 dingen weten.

c o n t r o l Computerbesturing voor basisscholen Laurence Rogers en Doug Dickinson, School of Education, University of Leicester

Inhoud Inhoud. Inleiding 1 Leerdoelen 1

Inleiding De leerlingen maken deze les een alarm. Opent iemand stiekem hun broodtrommel? Dan worden ze dankzij het alarm gewaarschuwd!

EM2 Microcontroller Project. LED cube

De FOR lus: // terug naar waar je vandaan kwam Serial.begin(115200); // communicatie snelheid met de PC

Ar-doe-wie-no. Voorwoord

BBR programmeren met Ardublock

BEGINNER JAVA Inhoudsopgave

Arduino Zuid-Limburg Workshop 2

Elektor Uno R4 Installatie & Test

Arduino. Workshop. 20 juni 2014 Peter Struwe Stichting De Jonge Onderzoekers Groningen

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

De mbot. Je wilt zeker meteen al aan de slag. Maar voordat we beginnen moet je 3 dingen weten.

g. Je kan nu door op de play knop te drukken je programma versturen naar de EV3 brick waarna het zal uitgevoerd worden.

RGB licht Les 2 Leerkrachthandleiding. Basis. Materialen

PROS1E1 Handleiding ( ) Kf/Dd/Bd

ES1 Project 1: Microcontrollers

Over Betuwe College. Lego Mindstorm project

Handleiding Teknatool houtdraaibank Nova DVRxp Nederlands bij gebruik van de originele Engelse handleiding

WORKSHOP ORANGE PI & PYTHON v september 2017

Workshop Engino. 1 Aanvang workshop. 2 Bouwen. 1.1 Wat kan ik voor de workshop doen?

Aansluitles Les 1 Overzicht van de Componenten. Basis

bug fixen F. Vonk versie

Meet the Arduino FAMILY

Antwoorden Systeembord Fysische informatica voor de onderbouw havo/vwo

Netwerk Interfacing Data Logging.

Deel 8: stappenmotoren en interrupts

Een stop-motion film maken

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Workshop IOT. Handleiding V5 Vincent Verheggen 6 november Taal: Nederlands.

Weerstation. Weerstation met Arduino C.G.N. van Veen. HiSPARC. 1 Weerstation. 2 Arduino. 2.1 Werking van Arduino

Bouw een deel van het JeeNode schema zoals beschreven op pagina 5 in de JeeNode handleiding in de handout, maar dan op het breadboard.

Inleiding Tijdens deze les programmeren de leerlingen hun eigen verkeerslicht. Lesdoelen. Materiaal

Docentenhandleiding Arduino. Handleiding voor bij de module Arduino UNO kit

algoritmiek - antwoorden

by Jody Culkin Bronnen die gratis gebruikt, verspreid of aangepast kunnen worden. meesta software of hardware.

//enable de interne pull-up weerstand. //variabele sensorval. //naar de seriële monitor

Project 7 Pratende plant Docent Project 7 - Pratende Plant Docent

TECHNOLOGIE TECHNIEK. Vervangende opdracht voor produceer de sleutelhanger. H.O. Boorsma.

Neem een signaal-kabel en sluit hiermee het input-onderdeel aan, aan de kant van het Easyboard waar input bij staat.

Vang de stippen. Inleiding. Scratch. In dit project leer je een spel te maken waarin je met een controller de juiste kleur van stippen moet aantikken.

PROJECT 5: PLANT MONITOR

Bouw het schema zoals beschreven in de RBBB handleiding in de handout, maar dan op het breadboard.

Arduino. C.F.J. Pols.

Level ① Van A naar B Je leert...

intro informatica F. Vonk versie

De RCX voor beginners De intelligente steen van LEGO. I. De RCX zonder computer

Zo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders.

Milight 3.0 App installeren en configureren

Lessen in Elektriciteit

Handleiding Alma Rally & Alma Rally Off-road

Infographic De infographic geeft in grove lijnen het overkoepelend concept weer Your home remotely controlled Zie de infographic hier naast.

INHOUD. dankbetuiging inleiding DE ARDUINO REVOLUTIE...16 OVER DIT BOEK...17 OPZET VAN DIT BOEK...18

Transcriptie:

2015 modellering met Arduino F. Vonk versie 1 30-7-2015

inhoudsopgave 1. inleiding... - 2-2. de Arduino... - 5-3. programmeren voor Arduino... - 8 - commentaar... - 9 - variabelen... - 9 - functies/procedures... - 10 - de speciale functies setup en loop... - 12 - opslaan van je code... - 12-4. breadboards en elektronica... - 14-5. verder met programmeren... - 16-6. Flowcharts... - 18-7. uitdagingen blok 1... - 23-8. regelsystemen... - 26 - lichtsterkte meten... - 26 - temperatuur meten... - 30 - een knop uitlezen... - 33 - aansturen van een servomotor... - 34-9. State Transition Diagrams... - 37-10. sensoren en actuatoren combineren... - 41-11. uitdagingen blok 2... - 42-12. appendix A: Arduino IDE configureren... - 45 - Dit werk is gelicenseerd onder een Creative Commons Naamsvermelding NietCommercieel GelijkDelen 3.0 Unported licentie Deze module is grotendeels gebaseerd op: Aan de slag met Arduino Overleven in een ruimtestation ; ESoE bètadidactiek opdracht 2011-2012; R. Eggenkamp, R. van Elst, J. Geurts en M. Savelsberg. De afbeelding op het voorblad is verkregen via INFOwrs. Copyright 2010 INFOwrs Serviços em informatica. - 1 -

1. inleiding Modelleren wordt steeds belangrijker in onze maatschappij. Producten die ontwikkeld worden, zijn steeds complexer. Om de kwaliteit en kosten van deze producten goed te kunnen managen, is het belangrijk eerst een goed model van een product te maken. Er zijn veel modelleringsmethoden op veel verschillende gebieden 1. In deze module gaan we naar een klein aantal methoden kijken op het gebied van software modellering. Om het levendiger te maken, ga je de gemaakte modellen ook implementeren met behulp van een zogenaamde microcontrollerbord, in dit geval een Arduino. Zo'n Arduino bestaat uit een eenvoudige CPU met weinig RAM die beide op een speciale printplaat zijn gemonteerd. Op deze printplaat wordt een relatief groot aantal IO (input-output) poorten aangeboden om sensoren en actuatoren aan te sluiten, zoals LED lampjes, drukknopjes, buzzers enzovoorts. Figuur 1: Een Arduino Uno Rev3 microcontrollerbord. De Arduino en andere microcontroller oplossingen worden voor de meest waanzinnige dingen gebruikt. Een aantal voorbeelden: YouTube Arduino Home Automation Project YouTube Arduino Garage Door Opener YouTube Arduino Robot Grabbing Drinks From Fridge De volgende modelleringsmethoden gaan behandeld worden: Flowcharts (stroomdiagrammen) State Transition Diagrams (toestandsovergang diagrammen) Dus welkom bij de module modellering met Arduino. We nemen je in vogelvlucht mee door de tijd vanaf het punt dat we als oorsprong van de computer zien. In deze module kom je opgaves tegen, die je moet maken om de lesstof te verwerken. De antwoorden kunnen in de les besproken worden. 1 Zie bijvoorbeeld Wikipedia Systems Modeling. - 2 -

opgave Opgaves in blauw moet je maken. Je kunt deze, op verzoek, ook aan je leraar laten zien. Kun je dit niet, dan beïnvloedt dat je cijfer voor de uitdagingen. In deze module kom je uitdagingen tegen, die je moet maken om dit onderdeel van het vak informatica af te ronden. Je oplossingen moet je als groepje met je leraar bespreken. uitdaging Opgaves in paars zijn uitdagingen. De uitvoering van alle uitdagingen samen bepalen je SE cijfer voor dit onderdeel (modellering) van het vak informatica. Wanneer je een uitdaging af hebt, verdedig je je oplossing met je hele groepje ten overstaande van je docent. Je kunt de volgende beoordelingen krijgen voor een uitdaging: 2. Je hebt geen goed model gemaakt, de hardware opstelling klopt niet of het programma werkt niet. Zelfs als delen van het voorgenoemde wel kloppen/werken, maar je kunt je oplossingen niet verdedigen, dan krijg je nog steeds deze beoordeling. 4. Je model en de hardware opstelling kloppen niet of het programma werkt niet. Zelfs als delen van het voorgenoemde wel werken, maar je kunt je oplossingen niet verdedigen, dan krijg je nog steeds deze beoordeling. 7. Je model en de hardware opstellingen kloppen en het programma werkt. De gekozen oplossingen zijn echter standaard en je verdediging is voldoende, maar houdt niet over. 8. Je model en de hardware opstellingen kloppen en het programma werkt. De gekozen oplossingen zijn inventief en je verdediging is goed. 9. Je model en de hardware opstellingen kloppen en het programma werkt. De gekozen oplossingen zijn inventief en creatief en je verdediging is uitstekend. Wanneer je de eindopdracht met goed gevolg uitvoert, dan wordt je cijfer met maximaal 1 opgehoogd en kun je een 10 halen. - 3 -

Je bent als team verantwoordelijk voor alle resultaten. Ook al heb je aan een bepaald deel niet zelf gewerkt, wil dat niet zeggen dat je er niets van hoeft te weten. Je moet dus in staat zijn om alles wat gemaakt is door je team te verdedigen. Als blijkt dat één persoon niet voldoende of juist extra heeft bijgedragen aan de resultaten van de groep dan kan de leraar besluiten over te gaan tot een individuele beoordeling in plaats van een beoordeling als team. Let op, links in dit document hebben een rode kleur. - 4 -

2. de Arduino Naast de Arduino, die je afgebeeld ziet in Figuur 1 in het vorige hoofdstuk, heb je nog een type A/B USB kabel en een computer nodig. Om software voor de Arduino te schrijven heb je de Arduino ontwikkelomgeving nodig. Deze is al geïnstalleerd op de computers in het informaticalokaal. Als je wel eens geprogrammeerd hebt, ken je ongetwijfeld het programma "Hello World!". Dit programma doet niks meer of minder dan Hello World! op het scherm laten zien. Dit programma wordt vaak gebruikt om snel te testen of de ontwikkelomgeving goed werkt. Binnen de elektronicawereld gebruikt men een variant op "Hello World!" en die heet "Blink". Het "Blink" programma zorgt ervoor dat je een LED lampje kunt laten knipperen. Het programma, ook wel "sketch" genoemd in de Arduino wereld, "Blink" wordt standaard meegeleverd met de Arduino ontwikkelomgeving. Hiermee ga je testen of alles goed werkt. opgave 2.1 Voer de volgende stappen uit en kijk of alles goed werkt: 1) Sluit de Arduino met de USB kabel aan op de PC. 2) Start de Arduino IDE op via Start All Programs Vakken Informatica Arduino 1.6.6 (dit kan even duren als de IDE nog nooit op de PC gebruikt is). Je ziet dan het volgende venster. Dit is de Arduino IDE. - 5 -

3) Kijk of het "Arduino Uno" bord ingesteld is bij Tools Board, zie appendix A: Arduino IDE configureren. 4) Kijk of de juiste USB poort ingesteld is bij Tools Port, zie appendix A: Arduino IDE configureren. 5) Ga naar File Examples in het menu. Je ziet hier een grote verzameling voorbeelden staan. Kies het Blink programma onder Basics. 6) De omgeving opent een nieuw venster met de sketch erin. Linksboven staan twee knoppen die je nodig hebt om een sketch te verifiëren en installeren op de Arduino. De linker knop Verify gebruik je om de code te controleren, de rechter knop Upload om de sketch op de Arduino te installeren. 7) Klik nu eerst op de Verify knop. Onderin beeld zie je dat de code gecontroleerd wordt (dit noemen we compileren). Als dit succesvol verloopt zie je het volgende. 8) Klik vervolgens op de Upload knop. De Arduino ontwikkelomgeving compileert de sketch nu nogmaals en upload deze vervolgens naar de Arduino. Als dit gelukt is zie je de melding Done uploading. Als alles goed is gegaan, dan zie je nu op de Arduino het indicatie LED knipperen met een snelheid van ongeveer 1 seconde, zie afbeelding hieronder. - 6 -

Proficiat, je hebt je eerste programma uitgevoerd op een Arduino bord. Nu ga je zelf de code wat aanpassen. opgave 2.2 Bekijk de code van de Blink sketch goed. Pas de code nu zo aan, dat het indicatie LED twee keer zo snel gaat knipperen. Als het niet lukt, geen probleem, dan ga je gewoon door met de module en probeer je het straks nog een keer. - 7 -

3. programmeren voor Arduino In het vorige hoofdstuk heb je de Blink sketch geladen in de ontwikkelomgeving, gecompileerd, naar de Arduino overgezonden en gekeken of het echt werkt op de Arduino. Misschien is het je zelf al gelukt om het LED lampje twee keer zo snel te laten knipperen. In dit hoofdstuk gaan we kijken hoe zo n sketch er uitziet, en zullen we er meer wijzigingen in maken. De sketch zelf staat in het tekstgedeelte van de Arduino ontwikkelomgeving. Sketches zijn geschreven in een op C/C++ gebaseerde taal. C en C++ zijn programmeertalen die erg veel gebruikt worden. Als je Verify vanuit het menu kiest, dan gaat de omgeving de tekst lezen en vertalen naar de Arduino machinetaal (compileren) zodat de Arduino het programma uit kan voeren. De Blink sketch is niet in alle versies van de ontwikkelomgeving hetzelfde. Waarschijnlijk ziet de versie die jij hebt er anders uit dan het onderstaande voorbeeld. /* * Blink * * The basic Arduino example. Turns on an LED on for one second, * then off for one second, and so on... We use pin 13 because, * depending on your Arduino board, it has either a built-in LED * or a built-in resistor so that you need only an LED. * * http://www.arduino.cc/en/tutorial/blink */ int ledpin = 13; // LED connected to digital pin 13 void setup() { pinmode(ledpin, OUTPUT); } // run once, when the sketch starts // sets the digital pin as output void loop() { digitalwrite(ledpin, HIGH); delay(1000); digitalwrite(ledpin, LOW); delay(1000); } // run over and over again // sets the LED on // waits for a second // sets the LED off // waits for a second - 8 -

We gaan nu het programma ontleden. commentaar Het eerste stuk is het zogenaamd commentaar. /* * Blink * * The basic Arduino example. Turns on an LED on for one second, * then off for one second, and so on... We use pin 13 because, * depending on your Arduino board, it has either a built-in LED * or a built-in resistor so that you need only an LED. * * http://www.arduino.cc/en/tutorial/blink */ Commentaar is tekst die niet wordt vertaald naar Arduino machinetaal, het is er alleen om mensen te vertellen wat er gaat gebeuren. Commentaar verduidelijkt de code. Commentaar begint met een /* en eindigt met een */. Alles tussen de /* en */ wordt genegeerd bij het compileren. In dit voorbeeld wil de auteur het er netjes uit laten zien met extra * s, maar dat hoeft niet. Commentaar is essentieel en het is belangrijk dat je zelf ook voldoende commentaar in je eigen sketches zet. Zonder commentaar is het voor anderen veel moeilijker om jouw code te begrijpen. Dit geldt natuurlijk voor je groepsgenoten, maar ook voor de docent die jouw werk moet beoordelen. Aan het begin van de sketch zet je de naam en het doel van je sketch. variabelen Daarna komen de variabelen. int ledpin = 13; // LED connected to digital pin 13 Dit is de eerste regel van de echte Arduino instructies. Het gedeelte aan de rechterkant is het commentaar. Als je een enkele commentaarregel of een deel daarvan wilt schrijven, dan kun mag je het achter // zetten. Het gedeelte voor de // noemen we een statement, ofwel een computer opdracht. In het Nederlands eindigen we een zin met een. (punt), maar in veel computertalen gebruiken we de ; (puntkomma). De computer regel hierboven is een opdracht voor de computer om een variabele, een speciaal soort doosje, te maken die ledpin heet, en waar de waarde 13 in gestopt wordt. Het heet een variabele, omdat de inhoud gedurende de uitvoering van de sketch kan veranderen; de inhoud is "variabel". - 9 -

Het eerste gedeelte van de regel is int, dit geeft aan wat voor soort variabele we gaan maken; we noemen dit het type. Het is de afkorting van integer en dat betekent geheel getal. Dit wil zeggen dat in deze variabele alleen gehele getallen gestopt kunnen worden. Als je er iets anders is stopt dan faalt het compileren. opgave 3.1 Verander de waarde 13 bij de variabele ledpin in "Jantje" en druk op de Verify knop. Kijk wat er gebeurt. Het tweede gedeelte van de regel is ledpin, dit is de naam van de variabele. Het derde gedeelte van de regel is de =, dit geeft aan dat de variabele ledpin de waarde krijgt die aan de rechterkant van de = staat. Deze = spreek je uit als "wordt", omdat het aangeeft dat de waarde van de variabele verandert. Het vierde gedeelte van de regel is 13, een geheel getal dat aan ledpin toegekend wordt. functies/procedures Het volgende, en laatste, stuk van de sketch bestaat uit functies, deze worden ook wel procedures genoemd. In iedere sketch worden twee speciale functies verwacht namelijk: void setup() en void loop() Daarnaast kun je ook zelf functies maken. void setup() { pinmode(ledpin, OUTPUT); } // run once, when the sketch starts // sets the digital pin as output Het woord void slaan we even over. Daarna staat de naam van de functie, in dit geval setup. Na de naam staan ALTIJD een openings- en een sluithaakje. Tussen deze haakjes mag iets staan, maar dat hoeft niet. Daarna staat wat de functie moet doen, dit staat altijd tussen accolades. Wat de functie moet doen wordt aangegeven door middel van instructies/statements. Dit alles noemen we een functiedeclaratie. De instructie in deze functie geeft aan dat de ledpin in de output modus staat, dat wil zeggen dat de Arduino verwacht dat we waardes gaan schrijven naar deze pin. - 10 -

pinmode is de naam van een functie die binnen de Arduino ontwikkelomgeving al voor ons gemaakt is en die we daarom kunnen gebruiken. Als we de pinmode functie gebruiken noemen we dat een functieaanroep. Ook bij een functieaanroep zetten we ALTIJD een openings- en een sluithaakje na de naam van de functie. Meestal staat er iets tussen de haakjes, maar dat hoeft niet! In het geval van pin- Mode staan er twee dingen tussen haakjes. Dit zijn de argumenten die we aan de functie doorgeven. Je scheidt de argumenten door middel van komma's. Je kunt dit vergelijken met wat je in de wiskunde gebruikt. Bijvoorbeeld sin(30), die de sinus van 30 graden voor je uitrekent. Een overzicht van functies die je kunt gebruiken vind je bijvoorbeeld op de Arduino website. De volgende functie heet loop en ziet er als volgt uit. void loop() { digitalwrite(ledpin, HIGH); delay(1000); digitalwrite(ledpin, LOW); delay(1000); } // run over and over again // sets the LED on // waits for a second // sets the LED off // waits for a second In deze functie worden 4 instructies uitgevoerd. De tweede en de vierde regel zijn identiek en hebben met wachten te maken. Deze instructie zegt: Arduino, doe 1000 milliseconden niets. De instructie roept de functie delay aan die ook bekend is binnen de Arduino ontwikkelomgeving. Dit is handig, want dan hoeven we niet zelf de code te schrijven om de Arduino te laten wachten. De eerste instructie bevat ook een functie aanroep. Ditmaal wordt de functie digitalwrite aangeroepen, die uiteraard ook bekend is in de Arduino ontwikkelomgeving. Hiermee kun je de spanning op een pin van de Arduino zetten of weghalen. Wanneer die pin met een LED verbonden is kun je daarmee die LED aan- en uitzetten. Aanzetten doe we met de speciale waarde HIGH en uitzetten met LOW. opgave 3.2 Als het in het vorige hoofdstuk niet gelukt is, pas dan nu de code van de Blink sketch zo aan, dat het indicatie LED twee keer zo snel gaat knipperen. - 11 -

de speciale functies setup en loop De functies setup en loop zijn speciaal voor de Arduino. De setup functie wordt altijd helemaal aan het begin aangeroepen, dus vanaf het moment dat er spanning op de Arduino staat. Nadat de setup functie is uitgevoerd, wordt telkens opnieuw de loop functie aangeroepen. De loop functie wordt dus steeds weer en net zolang aangeroepen totdat de spanning van de Arduino wordt gehaald. opslaan van je code Nu we de hele sketch geanalyseerd en aangepast hebben is het tijd om de veranderingen op te slaan. Als je dat probeert, dan krijg je de melding dat de sketch read-only is, zie de afbeelding hieronder. Sla hem nu op in een eigen map onder een zinvolle naam. Vervolgens ga je de volgende opdrachten uitvoeren. opgave 3.3 Verander de sketch zodat de code ervan er precies hetzelfde uitziet als de code aan het begin van dit hoofdstuk. Sla de sketch vervolgens op onder een nieuwe naam. opgave 3.4 Verander de sketch zo, dat de indicatie LED 100ms aan is en 900ms uit. Sla de sketch vervolgens op onder een nieuwe naam. - 12 -

opgave 3.5 Verander de sketch zo, dat de LED 50ms aan is en 50ms uit. Sla de sketch vervolgens op onder een nieuwe naam. Verklaar wat je ziet, en vergelijk het met de vorige opdracht. opgave 3.6 Verander de sketch zo, dat de LED 10ms aan is en 10ms uit. Sla de sketch vervolgens op onder een nieuwe naam. Verklaar wat je ziet, en vergelijk het met de vorige opdrachten. - 13 -

4. breadboards en elektronica Je gaat in de rest van deze module aan de slag met elektronica in de vorm van sensoren en actuatoren. In dit hoofdstuk krijg je uitleg over de basis van de elektronicacomponenten die we gaan gebruiken. Hiernaast zie je een breadboard. Dit gebruik je om componenten op elkaar aan te sluiten. Belangrijk om te weten is dat de verschillende gaatjes in een patroon met elkaar verbonden zijn. Zoek zelf uit hoe dit bij jouw breadboard zit. Hiernaast zie je enkele enkel kleurige LED lampjes, in dit geval rode. Zo'n LED lampje heeft twee pootjes. Het ene pootje (positieve pootje) sluit je aan op een hoge spanning, bijvoorbeeld 3,3 of 5 volt. Het andere pootje (negatieve pootje) sluit je aan op de 0 volt. Je sluit het positieve pootje via een weerstand aan op een digitale poort van de Arduino. Deze stuurt ongeveer 3,3 volt uit. Het negatieve pootje sluit je op de GND (ground, oftewel 0 volt) van de Arduino aan. Het lange pootje van het LED lampje is het positieve pootje, het korte is het negatieve pootje. Je kunt dit ook zien aan het hoedje, de platte kant zit bij het negatieve pootje. Hiernaast zie je drie weerstanden van 220Ω (Ohm). Een weerstand heeft geen positieve en negatieve kant, dus het maakt niet uit hoe je hem aansluit. Hiernaast zie je M/M jump wires afgebeeld. Dit zijn draadjes met aan weerszijden pinnetjes, die je in Arduino's en breadboards kunt steken. M/M staat voor male/male en dat betekent dat er pinnetjes aan de uiteinden zitten. - 14 -

opgave 4.1 Bouw de schakeling na die je hieronder ziet. Pas vervolgens de Blink sketch uit het vorige hoofdstuk zo aan, dat je niet het indicatie LED op het Arduino bord laat knipperen, maar het LED lampje op het breadboard. opgave 4.2 Breid de schakeling die je in de vorige opgave hebt gebouwd uit. Voeg een groen LED lampje toe en sluit dat aan op Arduino poort 11. Maak een nieuwe sketch om beide LED lampjes aan te sturen. Neem de Blink sketch als uitgangspunt. Zorg ervoor dat de LED lampjes om en om een seconde aan zijn. Er mag dus maar 1 LED lampje tegelijkertijd branden. - 15 -

5. verder met programmeren Tot nu toe heb je enkel een vast aantal regels code uitgevoerd. Deze regels worden niet beïnvloed door de omgeving, maar uiteindelijk wil je dit natuurlijk wel graag. Je hebt immers veel meer mogelijkheden als jouw sketch kan reageren op een actie van de gebruiker (bijvoorbeeld een druk op de knop) of de verandering van een sensor. Om dit te kunnen heb je controle structuren nodig, zoals de if-else (de selectie). Door een if-else structuur te gebruiken, voer je een stukje code conditioneel uit zoals je ooit geleerd hebt. Dit betekent dat het stukje code enkel wordt uitgevoerd indien er aan een voorwaarde (de conditie) voldaan wordt. Je kunt hierdoor reageren op bijvoorbeeld het indrukken van een knop. Wanneer je code, zonder controle structuren, binnen de loop functie wordt uitgevoerd, dan wordt alle code in de loop functie continue herhaald. Door de if-else constructie te gebruiken kun je hier controle op uitoefenen. Je kunt bijvoorbeeld code uitvoeren elke derde keer dat de loop functie doorlopen wordt. Een voorbeeld hiervan, zie je in de code hieronder. int ledpin = 13; // LED connected to digital pin 13 void setup() { pinmode(ledpin, OUTPUT); } // sets the digital pin as output int teller = 0; // var to control code in loop void loop() { // execute code only when var teller if (teller == 3) // equals 3, use == to check equality { digitalwrite(ledpin, HIGH); // sets the LED on } teller = 0; // restart counting with var teller } // execute code when var teller is not else // equal to 3 { digitalwrite(ledpin, LOW); // sets the LED off } delay(1000); teller = teller+1; // waits for a second Figuur 2: Voorbeeld van een if-else constructie. - 16 -

opgave 5.1 Bestudeer het voorgaande programma goed. Teken een tijdlijn waarin voor elke seconde de toestand (aan of uit) van het LED lampje wordt weergegeven. Doe dit voor de eerste 10 seconden (dus van 0 tot en met 10 seconden). opgave 5.2 Pas de code van de opgave 4.2 aan met een if-else controle structuur, zodat maar één keer de delay functie wordt aangeroepen. - 17 -

6. Flowcharts Aangezien dit een module over modellering is, wordt het tijd om de eerste modelleringsmethode te gaan bekijken en dat zijn de Flowcharts. Wie de comedy serie The Big Bang Theory kent, herkent misschien het diagram uit Figuur 3. Figuur 3: "The friendship algorithm" diagram. 2 In Figuur 3 zie je de Flowchart van het "friendship algorithm" uit de aflevering "Stu the Cockatoo is New at the Zoo". De clip met, een deel van, de uitleg over deze Flowchart vind je op YouTube. Je ziet dat Flowcharts handig zijn om diagrammen te maken die processen voorstellen. Feitelijk is de uitvoering van een computerprogramma ook een proces. En daarom worden Flowcharts gebruikt om computerprogramma's te modelleren. 2 www.ripleysclothing.co.uk/at-bbt-4-amaster-official-t-shirt-big-bang-theory-sheldonfriendship-algorithm-all-sizes.html - 18 -

opgave 6.1 Bekijk de Flowchart uit Figuur 3 en zorg dat je precies snapt wat er gebeurt. Je ziet dat in Figuur 3 een aantal symbolen worden gebruikt. Deze symbolen hebben een afgesproken betekenis in het diagram. Op die manier leest iedereen een Flowchart op dezelfde manier. Er staan ook pijlen en lijnen in het diagram die aangeven welke symbolen een volgordelijke relatie met elkaar hebben. Zij laten de flow van het diagram zien. In Figuur 4 zie een overzicht van veel voorkomende Flowchart symbolen en een beknopte uitleg van elk van deze symbolen. Figuur 4: Overzicht van veel gebruikte Flowchart symbolen. 3 3 www.conceptdraw.com/how-to-guide/flowchart-design - 19 -

Je zult in deze module niet alle in Figuur 4 afgebeelde symbolen gaan gebruiken. De symbolen die je mogelijk nodig gaat hebben zijn de: Terminator, Proces, Decision, Delay, Data en Subroutine. In Figuur 3 worden al deze symbolen gebruikt behalve de Terminator en de Delay. In Figuur 5 staan nog meer symbolen, daarvan heb je alleen de Merge nodig. Figuur 5: Overzicht van minder gebruikte Flowchart symbolen. 4 Flowcharts kun je met de hand tekenen op papier, maar het is handiger om het via een tekentool op de computer te doen. Een gratis online tool is GliffyOnline. In het menu aan de linkerkant van dit tool, kun je, onder Basic Shapes, kiezen voor Flowchart. Daar vind je veel van de symbolen uit Figuur 4 en Figuur 5 5. 4 www.conceptdraw.com/how-to-guide/flowchart-design 5 De naamgeving is iets anders, zo gebruikt Gliffy start end i.p.v. Terminator, input/output i.p.v. data en predefined proces i.p.v. Subroutine. - 20 -

opgave 6.2 Probeer zelf een Flowchart te maken van het Blink programma. Laten we eens kijken naar de loop functie uit Figuur 2. Een mogelijke Flowchart voor dit algoritme zie je in Figuur 6. Figuur 6: Mogelijke Flowchart van Figuur 2. opgave 6.3 Ga voor jezelf na dat de Flowchart uit Figuur 6 inderdaad een model is voor Figuur 2. - 21 -

Je ziet dat in Figuur 2 door de if-else constructie twee paden zijn en dat er daarna nog meer code staat. Daarom moeten de twee paden samengevoegd (merged) worden voordat er gewacht wordt en de teller opgehoogd. Er zitten geen Terminator symbolen in omdat het programma oneindig lang door blijft gaan vanwege de eigenschap van de loop functie op de Arduino. opgave 6.4 Maak zelf een Flowchart voor de code van opgave 5.2. opgave 6.5 Is de Flowchart in Figuur 3 helemaal correct of kun je Dr. Sheldon Cooper, Ph. D verbeteren? Zo ja, hoe dan? - 22 -

7. uitdagingen blok 1 In dit hoofdstuk staan de eerste twee uitdagingen uit deze module. Veel succes. uitdaging 7.1: verkeerslicht In deze uitdaging ga je een werkend driekleurig verkeerslicht bouwen. Benodigdheden: Arduino breadboard 3 LED lampjes (groen, oranje/geel en rood) 3 weerstanden van 220Ω (Ohm) M/M jump wires (draadjes) Maak een verkeerslicht bestaande uit drie LED lampjes (groen, oranje/geel en rood). Maak hiervoor zelf een opstelling. In de afbeelding hierna zie je een voorbeeldopstelling: Maak een Flowchart om het gedrag van het verkeerslicht te modelleren. Het gedrag is als volgt: het stoplicht staat 4 seconden op groen, vervolgens 1 seconde op oranje en tot slot 6 seconden op rood. Maak een programma zo, dat de gebouwde opstelling werkt volgens het model. Het kan zijn dat je gaandeweg je Flowchart nog moet aanpassen. Dat mag. Bewaar de eerste versie van je Flowchart zodat je die kunt laten zien. Hint: Als deze uitdaging je moeilijk lijkt, probeer dan eerst een voetgangerslicht te maken. - 23 -

uitdaging 7.2: mood light In het huidige tijdperk is het doel van licht veranderd van puur verlichting naar het creëren van sfeer. Zo bestaan er lavalampen om een rustgevende sfeer te creëren. De nieuwste trend zijn LED mood lights, dit zijn lampen die langzaam van kleur veranderen. Meestal zijn er verschillende programma s te kiezen, afhankelijk van de sfeer die de gebruiker wil creëren. Het doel van deze opdracht is om met behulp van drie gekleurde LED lampjes zelf een mood light te maken. Kijk voor een voorbeeld op YouTube. Benodigdheden: Arduino breadboard 3 LED lampjes (rood, groen en blauw) 3 weerstanden van 220Ω (Ohm) M/M jump wires (draadjes) afdekmateriaal, bijvoorbeeld wit papier Maak een mood light bestaande uit drie LED lampjes (rood, groen en blauw). Maak hiervoor zelf een opstelling. In de afbeelding hierna zie je een voorbeeldopstelling: - 24 -

Maak een Flowchart om het gedrag van de mood light te modelleren. Het gedrag bepaal je zelf. Zorg ervoor dat je bij de verdediging uit kunt leggen waarom je dit gedrag hebt gekozen. Maak een programma zo, dat de gebouwde opstelling werkt volgens het model. Het kan zijn dat je gaandeweg je Flowchart nog moet aanpassen. Dat mag. Bewaar je de eerste versie van de Flowchart zodat je die kunt laten zien. - 25 -

8. regelsystemen In de voorgaande hoofdstukken heb je, als het goed is, een indruk gekregen van wat er allemaal met de Arduino mogelijk is. Een Arduino is een goede regelaar (controller) binnen meet- en regelsystemen. Een meet- en regelsysteem bestaat typisch uit een aantal onderdelen: één of meerdere sensoren, één of meerdere actuatoren en één of meerdere controllers. Een sensor kan een natuurkundige grootheid waarnemen in een omgeving en de waarde daarvan als signaal doorsturen naar de controller. Een voorbeeld is een temperatuursensor die de temperatuur doorgeeft aan een Arduino. Er zijn echter nog veel meer sensoren beschikbaar die makkelijk aangesloten kunnen worden op een Arduino. Met een aantal sensoren ga je kennismaken in dit hoofdstuk. Een actuator is een stuk elektronica dat direct of indirect invloed kan uitoefenen op zijn omgeving. Een voorbeeld is een elektronische schakelaar die de verwarming aanzet. Maar de LED lampjes die je al veel gebruikt hebt, zijn ook actuatoren. Ze geven immers licht en beïnvloeden daarmee hun omgeving. De controller verwerkt de signalen van de sensoren en stuurt op basis van de waarde van de binnenkomende signalen en zijn programma de actuatoren aan. Een voorbeeld van een controller in je eigen huis is de thermostaat. Deze meet de temperatuur in de kamer en zet op basis daarvan en op basis van de gebruikersinstellingen de verwarming aan of uit. lichtsterkte meten In deze paragraaf ga je de Arduino de lichtsterkte weer laten geven. Hiervoor ga je een lichtsensor aan de Arduino koppelen. Uiteindelijk ziet je opstelling er ongeveer als volgt uit. - 26 -

Lichtsterkte wordt gemeten met een Light Dependent Resistor (LDR). Dit is een weerstand die afhankelijk is van de lichtsterkte in zijn omgeving. De weerstand van een LDR neemt af naarmate er meer licht op valt. Dat klinkt misschien raar, omdat het een omgekeerd verband is. Toch werken de meeste sensoren op deze manier. In de volgende afbeelding zie je een LDR. Als je meer wilt weten over hoe een LDR werkt, kijk dan bijvoorbeeld eens op Technology Student of Lady Ada. Om de waarde van sensoren te laten zien hebben we de Serial Monitor van de Arduino ontwikkelomgeving nodig. Je vindt deze in het menu onder Tools, zoals je in de volgende afbeelding ziet. Als je de Serial Monitor aanzet krijg je het volgende scherm te zien waar je informatie in kunt afdrukken via het programma dat je op de Arduino runt. - 27 -

Om informatie naar de Serial Monitor te sturen moet je de Serial.println functie gebruiken. Om deze functie te kunnen gebruiken moet je in de setup functie de instructie Serial.begin(9600); gebruiken. Deze zorgt ervoor dat de Arduino een verbinding met de PC opent om data uit te wisselen. Bij het aansturen van een LED lampje gebruikten we een digitale Arduino poort, omdat we het lampje alleen aan en uit wilden zitten. De waarde van een LDR is echter niet aan of uit, maar een geleidende schaal. Daarom sluiten we de LDR niet op een digitale, maar een analoge Arduino poort aan. Omdat de LDR een sensor is, moeten we een inputpoort gebruiken. Via een analoge inputpoort kunnen we de waardes 0 tot en met 1023 binnen krijgen. Dit alles leidt tot de volgende code. int ldrpin = A0; // LDR zit aan analoge input A0 int ldrvalue = 0; // var om LDR waarden te onthouden void setup() { Serial.begin(9600); } // start de Serial Monitor void loop() { } ldrvalue = analogread(ldrpin); // lees een nieuwe LDR waarde Serial.println(ldrValue); // stuur waarde naar Serial Monitor delay(100); // wacht 0,1 seconde Figuur 7: Code om een LDR uit te lezen en de waarde te laten zien. Nu je dit allemaal weet, ben je klaar voor de volgende opdracht. opgave 8.1 Bouw een opstelling met een LDR die de gemeten lichtsterkte laat zien in de Serial Monitor. Benodigdheden: Arduino breadboard 1 LDR 1 weerstand van 10kΩ (kilo Ohm) 3 M/M jump wires (draadjes) - 28 -

Je kunt voor deze opgave de opstelling in de afbeelding hierna gebruiken. De LDR heeft, net als een gewone weerstand, geen positieve of negatieve kant, het maakt dus niet uit hoe je de pootjes plaatst. Om de LDR goed te laten werken gebruik je een 10kΩ weerstand. Ze de code uit Figuur 7 in een nieuwe sketch, zorg je dat de Serial Monitor aanzet en stuur de code naar de Arduino. Kijk wat er op de Serial Monitor verschijnt. Houd je hand boven de LDR en kijk wat er met de waarde van de lichtsterkte gebeurt. Je kunt ook met een flashlight app op je smartphone extra licht op de LDR schijnen. Probeer goed te snappen wat er gebeurt en waarom. Bijvoorbeeld: Waarom hoef je niet de instructie pinmode(ldrpin, INPUT); in de setup functie te zetten? Waarom wordt er een hoog getal getoond op de Serial Monitor als er weinig licht op de LDR valt en een laag getal als er veel licht opvalt. Hint: Het programma in deze sketch leest de waarde van analoge pin A0, dat wil zeggen dat de Arduino de spanning op A0 meet. - 29 -

temperatuur meten Temperatuur kun je bijvoorbeeld meten met een temperatuursensor. De Arduino kan de waarde van een temperatuursensor uitlezen en vertalen naar een temperatuur. Zo n temperatuursensor kan er als volgt uitzien. Als je wilt weten hoe een temperatuursensor werkt, kijk dan op Lady Ada. Bij het aansluiten van een temperatuursensor (ook wel thermistor genoemd) is het belangrijk dat je weet welk pootje van de sensor wat doet. Niet alle sensoren zijn hetzelfde gebouwd, dus je moet goed weten welk type sensor je hebt. Op de site van iprototype thermistor kun je vinden hoe onze sensor werkt. Daar kun je ook de datasheet en het aansluitschema vinden. opgave 8.2 Zoek zelf uit hoe je de thermistor aan moet sluiten en bouw een opstelling. Zorg dat de output van de thermistor op analoge input pin A0 is aangesloten. Probeer vervolgens zelf een sketch te maken om de output van de thermistor uit te lezen. Als het niet lukt vraag dan om hulp van je leraar. Zoals je ziet is de waarde die uit de thermistor komt een spanningswaarde tussen de 0 en 1023. Dit is dus geen temperatuur! Die moet je er zelf nog van maken. Om dit te doen moet je de thermistor eerst ijken. intermezzo: ijken IJken is het relateren van een meetmethode aan een bekende standaard. In het geval van een temperatuursensor moet je voltage waarden aan graden Celsius relateren. Dit moet je typisch bij alles dat je gaat meten doen. Of je nu gebruik maakt van een thermistor, een geluidssensor of een druksensor, je zult de uitgelezen waarden moeten koppelen aan een eenheid waar je zelf iets aan hebt. Om te laten zien hoe je moet ijken, gaan we onze thermistor als voorbeeld nemen. Om deze goed te kunnen ijken, is het het handigst om een al geijkte thermometer te gebruiken. Je zou ook gebruik kunnen maken van smeltend water of kokend wa- - 30 -

ter, maar dat is veel lastiger. Soms hebben smartphones een temperatuur sensor, die je kunt gebruiken met de juiste app. Alleen weet je dan niet zeker dat je smartphone goed geijkt is. Hoe goed je ijkt, bepaalt de betrouwbaarheid van je opstelling. Voor je gaat ijken, is het belangrijk om uit te zoeken wat het verband is tussen de opeenvolgende waardes die de sensor produceert. Dit bepaalt namelijk hoeveel metingen je minstens moet doen om een ijkgrafiek te maken. Als je een lineaire sensor hebt (dus met een lineair verband) zijn 3 metingen voldoende; 2 metingen om de grafiek te bepalen en 1 ter controle. Bij een niet lineair verband wordt het lastiger, daarom proberen de makers van sensoren hun sensoren zoveel mogelijk lineair te maken. Overigens is het ook bij een lineaire sensor zo, dat hoe meer meetpunten je gebruikt, hoe betrouwbaarder je ijkproces wordt. In de datasheet van de thermistor die we gebruiken staat: "The MCP9700/9700A and MCP9701/9701A family of Linear Active Thermistor". En daaruit kunnen we concluderen dat we een lineaire temperatuursensor hebben. Dus 3 metingen zijn voldoende. Het is wel aan te raden om niet 3 waardes te nemen die heel dicht bij elkaar liggen. Aan te raden is om 2 betrouwbare, maar extreme, waardes te nemen. De derde waarde neem je daar dan ongeveer midden tussenin. Goede waardes in ons geval zouden 0, 35 en 70 graden Celsius zijn. Meet, bij de gekozen temperaturen, de waarde van de temperatuursensor en de thermometer. De uitdaging is natuurlijk om je opstelling in een ruimte te krijgen waar je het 0, 35 of 70 graden Celsius is. In ons geval is dat ietwat problematisch. Wanneer je alle meetpunten hebt, dan kun je op een ruitjesblad de grafiek tekenen. Zet op de horizontale as de waarden van de temperatuursensor en op de verticale as de waarden van de thermometer. Als het goed is, dan komt er een rechte lijn uit als ijkgrafiek. In Figuur 8 zie je een voorbeeld van zo'n ijkgrafiek. Vervolgens kun je de formule bij deze grafiek opstellen zoals je geleerd hebt bij wiskunde. Bij Figuur 8 hoort de formule T = 0,16S - 40, waarbij T de temperatuur in graden Celsius is en S de waarde die de sensor geeft. - 31 -

Figuur 8: Een ijkgrafiek voor temperatuur. Bij het ijken zou het voor kunnen komen dat er geen rechte lijn uitkomt. In dat geval heb je of verkeerd gemeten, of de sensor is niet lineair. In het eerste geval moet je je metingen opnieuw uitvoeren en meer meetpunten gebruiken, bijvoorbeeld 5. In het laatste geval moet je tenminste 7 metingen doen en kijken of er sprake is van een ander verband zoals een exponentieel verband. verder met temperatuur meten Om betrouwbare resultaten te krijgen van onze opstelling, moeten we de boel dus ijken. Het probleem is echter dat het lastig is om tenminste 3 goede metingen te doen. We zitten immers op school en daar heb je niet zomaar 3 locaties met verschillende temperaturen. Wat je daarom gaat doen is ijken op basis van slechts 2 meetpunten. Dat is eigenlijk te weinig, maar aangezien de betrouwbaarheid van onze opstelling niet heel belangrijk is, kunnen we hier wel mee leven. De 2 meetpunten zijn de volgende: 1. kamertemperatuur; laat je opstelling die je hebt gewoon vrij werken, pak en thermometer en lees de temperatuur af als deze constant is. 2. vingertemperatuur; laat één iemand uit de groep zijn/haar duim en wijsvinger om de thermistor en om de thermometer houden en lees de sensorwaarde en de temperatuur af als deze constant zijn. Dit is niet echt wetenschappelijk maar afdoende voor wat we willen. - 32 -

opgave 8.3 Maak een ijkgrafiek op basis van de 2 metingen die je hebt gedaan, ervan uitgaande dat de thermistor lineair is. Bepaal vervolgens de formule die bij de ijkgrafiek hoort. Pas de code van je sketch aan op basis van de formule die je bepaald hebt, zodat je de temperatuur in graden Celsius te zien krijgt in de Serial Monitor. een knop uitlezen Deze paragraaf laat zien hoe je de Arduino kunt bedienen met een drukknop. In dit voorbeeld zet je er alleen het indicatie LED van de Arduino mee aan en uit, maar later kun je er ook servomotoren en andere actuatoren mee aansturen. Ook bij drukknoppen is het belangrijk te weten welk type knop je hebt. Dit bepaalt namelijk hoe je de knop aan moet sluiten. Wij gebruiken de volgende iprototype drukknop. Via de link vind je onder andere het aansluitschema. In het schema staat 1 weerstand maar er staat nergens wat voor soort weerstand dat is. In dit geval is het een 220Ω weerstand. Je zult merken, dat als je nieuwe dingen uit gaat vinden op het gebied van elektronica, dat de informatie die je vindt vaak niet volledig is. Je zult dus zelf inventief moeten zijn om de details te achterhalen. Een drukknop heeft maar twee toestanden en kun je dus het beste aansluiten op een digitale poort van de Arduino. We geven je alvast de code die je straks nodig gaat hebben in je sketch. /* * Zet de LED van pin 13 aan en uit als er gedrukt wordt op de knop * die aan pin 2 gekoppeld is. */ int buttonpin = 2; // de drukknop zit aan pin 2 int ledpin = 13; // de indicatie LED zit aan pin 13 int buttonvalue = 0; // variable om de drukknop uit te lezen void setup() { pinmode(ledpin, OUTPUT); // initialiseer LED pin als een output pinmode(buttonpin, INPUT); // initialiseer button pin als een input } - 33 -

void loop() { buttonvalue = digitalread(buttonpin); // lees de waarde van de knop } // Controleer of de knop is ingedrukt. if (buttonvalue == HIGH) // Dan is de waarde HIGH. { digitalwrite(ledpin, HIGH); // zet de LED aan } else { digitalwrite(ledpin, LOW); // zet de LED uit } Figuur 9: Code om een knop uit te lezen en het indicatie LED aan/uit te zetten. opgave 8.4 Bouw de opstelling die je vindt op de iprototype website. Je hebt daarvoor het volgende nodig: Arduino breadboard 1 drukknop 1 weerstand van 220Ω (Ohm) 3 M/M jump wires (draadjes) Zorg dat je de code uit Figuur 9 goed begrijpt en test alles uit. Pas vervolgens de code zo aan, dat de indicatie LED uitgaat als je de knop indrukt en aan gaat als je de knop loslaat. Pas daarna de code zo aan, dat je de toestand van de knop in de Serial Monitor ziet. Pas tot slot de code zo aan, dat de toestand van de knop maar 1 keer per seconde gecontroleerd wordt. Beredeneer goed wat het gevolg van deze wijziging is. Is deze positief of negatief en waarom? aansturen van een servomotor Deze paragraaf laat zien hoe je via de Arduino een servomotor (afgekort servo) kunt aansturen. De informatie over de servo die we gebruiken vind je op iprototype servo. - 34 -

Een servo kan typisch heen en terug draaien, maar geen rondjes draaien. Daarom is een servo niet geschikt om bijvoorbeeld de wielen van een auto te laten draaien. opgave 8.5 Bouw een opstelling aan de hand van de informatie die je vindt op de iprototype website. Je hebt daarvoor minimaal het volgende nodig: Arduino breadboard 1 servo 3 M/M jump wires (draadjes) Probeer vervolgens zelf een sketch te maken om de servo aan te sturen. Als het niet lukt vraag dan om hulp van je leraar. Hints: Zorg dat je de servo bibliotheek (Servo.h) aanhaalt (include). Zorg dat je in de setup functie aangeeft dat je een Arduino pin aan de servo koppelt (attached). Bijvoorbeeld pin 9. Zorg dat je in de loop functie een aantal keer een positie (een hoek in graden) aan de servo doorgeeft. Hiervoor gebruik je de write functie uit de servo bibliotheek. opgave 8.6 Als het goed is heb je intussen een opstelling en een sketch die goed samenwerken. Nu ga je wat dingen aanpassen. Pas de code zo aan, dat je, via een lus, de servo van 0 graden met stappen van 15 graden naar de maximale positie brengt. Iedere stap duurt 500 milliseconden. Daarna moet de servo met stappen van 10 graden weer terug draaien naar 0 graden. Iedere stap duurt nu 250 milliseconden. Pas daarna de code zo aan, dat je de stand van de servo in de Serial Monitor ziet. Je hebt intussen met redelijk wat sensoren en actuatoren gewerkt. Tot nu toe heb je steeds 1 sensor of 1 actuator gebruikt (behalve bij de drukknop waar het indica- - 35 -

tie LED feitelijk ook en actuator is). Je kunt echter, zoals je in de filmpjes uit de inleiding ziet, veel grotere opstellingen maken met meerdere sensoren en actuatoren. Stel je wilt een opstelling maken met bijvoorbeeld een lichtsensor en een temperatuursensor. Dan kun je niet beide sensoren op de A0 pin aansluiten. Gelukkig heeft de Arduino 6 analoge ingangen waar je sensoren op kunt aansluiten, zie rechts onderaan op Figuur 10. Op elk van deze analoge ingangen kun je een sensor aansluiten. Je moet uiteraard wel zorgen dat de code van je sketch de correcte pin uitleest voor de juiste sensor. Figuur 10: De power en analoge input pinnen in detail. Daarnaast wil je misschien een servomotor, een ventilator en een aantal LED lampjes aansluiten. Ook dat is mogelijk, zelfs tezamen met meerdere sensoren. De actuatoren kun je aansluiten op de digitale pinnen of analoge output pinnen aan de bovenkant van het Arduino bord. Bij de digitale pinnen staat een ~ op de Arduino Uno, zie Figuur 11. Dat zijn dus pin 3, 5, 6, 9, 10 en 11 zoals je kunt zien. Ook hier geldt, dat je in je code moet zorgen dat de juiste waarde naar de juiste pin voor de juiste actuator wordt gestuurd. Figuur 11: De digitale pinnen en analoge output pinnen in detail. Voor het uitlezen van drukknoppen, het aansturen van LED lampjes die alleen op een vaste lichtsterkte mogen te branden en het aansturen van een relais kun je vrij kiezen uit de pinnen 2 t/m 13. - 36 -

9. State Transition Diagrams In de afgelopen hoofdstukken ben je diverse sensoren en actuatoren tegengekomen. Veel van deze hebben een zogenaamde toestand. Een drukknop is bijvoorbeeld wel of niet ingedrukt, een LED lampje is wel of niet aan, een servo draait of staat stil enzovoorts. Dingen die een toestand hebben kunnen we modelleren met een toestandsovergang diagram. In het Engels heten dit een State Transition Diagram, afgekort STD. Een voorbeeld van een STD van een drukknop zie je afgebeeld in Figuur 12. De verklaring van de gebruikte symbolen vind je in Tabel 1. Figuur 12: STD van een drukknop. Tabel 1: Symbolen uit een STD. symbool uitleg Dit is het symbool voor de begintoestand van het diagram. Wanneer het systeem dat het STD modelleert in werking treedt, dan is het systeem in zijn begintoestand. Een toestand van het systeem. Een toestand heeft altijd een naam die de toestand zo duidelijk mogelijk beschrijft. Een event (gebeurtenis) dat op kan treden binnen het systeem. Als een event optreedt binnen het systeem, dan zorgt dit voor een toestandsovergang binnen het systeem. Dit kan een overgang naar dezelfde toestand zijn! Een event heeft meestal een naam die het event zo duidelijk mogelijk beschrijft. Soms hebben events geen naam. In dat geval treden ze altijd en onmiddellijk op. In het online tool, GliffyOnline, dat je voor Flowcharts hebt gebruikt, kun je ook een STD maken. Hiervoor kun je de symbolen gebruiken die je aan de linkerkant - 37 -

bij UML Activity vindt. De naamgeving van de symbolen in Gliffy is iets anders dan in een standaard STD. De begintoestand heet in Gliffy initial node en de toestand heet action. opgave 9.1 Maak, met de symbolen die je nu kent, een STD voor een LED lampje. Misschien heb je gemerkt dat het maken van een STD voor een lampje minder logisch is dan voor een drukknop. Vond je het makkelijk om een goede naam te vinden voor de events? Hoe denk je dat dit komt? De drukknop is een sensor, die door een gebruiker van het systeem bedient wordt. Dat betekent, dat de events worden getriggerd door de gebruiker en dat is een heel natuurlijke situatie. Een LED lampje is echter geen sensor, maar een actuator. Wie bedient een actuator? Precies, de Arduino. De events, die horen bij een actuator, worden daarom niet getriggerd door de gebruiker van het systeem, maar door het systeem zelf. Meestal is dit wel een resultaat van iets dat de gebruiker doet. Kijk maar eens naar het STD in Figuur 13. Figuur 13: STD van een drukknop en LED lampje. - 38 -

opgave 9.2 Probeer het STD uit Figuur 13 te snappen zonder eerst de uitleg hieronder te lezen. Het diagram in Figuur 13 verandert 1 aspect van het STD, namelijk het event. In Figuur 12 gaf het event alleen de trigger (stuurpuls) van het event aan, in Figuur 13 wordt daar een actie aan toegevoegd. Een event bestaat nu dus uit een trigger / actie paar. Wat je verder ziet is dat de actie uit het ene event de trigger is in een ander event. Dit is de manier waarop sensoren invloed uitoefenen op actuatoren. Kun je je de volgende code nog herinneren? void loop() { buttonvalue = digitalread(buttonpin); // lees de waarde van de knop } if (buttonvalue == HIGH) { digitalwrite(ledpin, HIGH); // zet de LED aan } else { digitalwrite(ledpin, LOW); // zet de LED uit } // Controleer of de knop is ingedrukt. // Dan is de waarde HIGH. Figuur 14: De loop functie code om een drukknop uit te lezen. opgave 9.3 Kijk goed naar Figuur 13 en de code van Figuur 14. Is er een relatie tussen beide figuren en zo ja welke? opgave 9.4 Maak zelf een Flowchart die het programma van een drukknop en een LED lampje modelleert. - 39 -

Zoals je ziet kun je het systeem met een drukknop en een LED lampje met zowel een Flowchart als STD modelleren. Toch geldt dit niet voor alle problemen. In Flowcharts heb je geen toestanden en kan de toestand daarom niet onthouden worden. Dat kan in een STD wel, al heb je dat nog niet geleerd. Je zult begrijpen dat de STD modellen die je tot nu toe hebt gemaakt erg eenvoudig zijn en er veel meer symbolen zijn om complexere problemen te modelleren met een STD. Het mooie aan de STD modellen is dat er tools zijn om ze om te zetten in programma code die ook daadwerkelijk werkt! Kijk maar eens op Altova en Sinelabore. Je ziet daar overigens dat veel mensen de term SMD (State Machine Diagram) gebruiken in plaats van STD. opgave 9.5 Maak een STD die het programma uit Figuur 2 modelleert. - 40 -

10. sensoren en actuatoren combineren De vorige opdracht met de servo is niet echt zinvol. Een servo die alleen maar heen en weer draait heeft weinig nut, tenzij het warm is en je er een waaier op monteert. In dit hoofdstuk ga je daarom een LDR combineren met een servo. Daarbij geeft de hoeveelheid licht aan in welke stand de servo moet gaan staan. Hiermee zou je een automatische luifel kunnen maken. Hoe meer zon er is, hoe verder de luifel naar beneden moet. opgave 10.1 Bouw een opstelling waarin je een LDR en een servo aan de Arduino koppelt. Op basis van wat je in vorige opdrachten geleerd hebt, zou je daar zelf een opstelling voor moeten kunnen maken. Je hebt daarvoor minimaal het volgende nodig: Arduino breadboard 1 servo 1 LDR 1 weerstand van 10kΩ (kilo Ohm) M/M jump wires (draadjes) Maak vervolgens een Flowchart die het programma, dat je moet gaan schrijven, modelleert. Probeer ook een STD te maken voor datzelfde programma. Maak vervolgens een sketch om de LDR en de servo aan te sturen. Zorg dat je handige informatie naar de Serial Monitor stuurt. Als het niet lukt vraag dan om hulp van je leraar. Hint: De map functie, zie de Arduino website, is handig om een waarde van de LDR om te zetten naar de positie van de servo motor. De LDR geeft waarden tussen 0 en 1023 en de servo kan alleen tussen 0 en 180 gezet worden. - 41 -

11. uitdagingen blok 2 In dit hoofdstuk staat het tweede paar uitdagingen uit deze module en een eindopdracht. Veel succes. uitdaging 11.1: verkeerslicht met voetgangers In deze uitdaging ga je een semi-realistische verkeerssituatie namaken. Er is een stroom van auto's en fietsers op een eenrichtingsstraat die door een driekleurig verkeerslicht wordt geregeld. Er is echter ook een voetgangersoversteekplaats. Deze wordt geregeld door een voetgangerslicht met een drukknop en geluid. Je wilt geen ongelukken, dus het verkeerslicht en voetgangerslicht mogen niet samen op groen staan. Een voorbeeld vind je op YouTube. Benodigdheden: Arduino breadboard 5 LED lampjes (2x groen, oranje/geel en 2x rood) drukknop speaker 7 weerstanden van 220Ω (Ohm) M/M jump wires (draadjes) Maak zelf een opstelling voor het geschetste probleem. Je zoekt zelf uit hoe de speaker werkt. Wij gebruiken de volgende iprototype speaker. Je kunt deze speaker zonder weerstand gebruiken, maar het is beter om er een 220Ω weerstand tussen te zetten. Maak een STD om het gedrag van het systeem te modelleren. Je bepaalt zelf hoe lang de lichten op groen, rood of oranje staan. Daarnaast moet je een veiligheidsinterval inbouwen. Dit is de tijd tussen het op rood springen van het ene verkeerslicht en het op groen springen van het andere. Zorg dat je bij de verdediging uit kunt leggen waarom je deze tijden hebt gekozen. Maak een programma zo, dat de gebouwde opstelling werkt volgens het model. Het kan zijn dat je gaandeweg je STD nog moet aanpassen. Dat mag. Bewaar de eerste versie van je STD zodat je die kunt laten zien. - 42 -

Hint: Als deze uitdaging je moeilijk lijkt, probeer dan eerst het voetgangerslicht helemaal werkend te maken en voeg daarna pas het verkeerslicht voor de auto's en fietsers toe. uitdaging 11.2: interactief mood light In een eerdere uitdaging heb je een mood light gemaakt. Deze reageerde echter niet op zijn omgeving. Nu je ervaring hebt met sensoren ga je dat veranderen. Je gaat een interactief mood light maken. De interactieve mood light moet aan de volgende eisen voldoen: Als de omgeving donker is, dan verandert de mood light rustig van kleur. Hoe meer licht er is, hoe sneller de mood light van kleur moet veranderen. Bij hogere omgevingstemperaturen is rood de overheersende kleur en bij lagere temperaturen is dat blauw. Benodigdheden: Arduino breadboard 3 LED lampjes (rood, groen en blauw) temperatuursensor (thermistor) LDR 4 weerstanden van 220Ω (Ohm) 1 weerstand van 10kΩ (kilo Ohm) M/M jump wires (draadjes) afdekmateriaal, bijvoorbeeld wit papier Maak zelf een opstelling voor het geschetste probleem. Maak een Flowchart of een STD om het gedrag van het systeem te - 43 -

modelleren. Maak een programma zo, dat de gebouwde opstelling werkt volgens het model. Het kan zijn dat je gaandeweg je model nog moet aanpassen. Dat mag. Bewaar de eerste versie van je model zodat je die kunt laten zien Je bepaalt zelf precieze gedrag van je systeem. Zorg ervoor dat je bij de verdediging uit kunt leggen waarom je dit gedrag hebt gekozen. eindopdracht Bedenk zelf een systeem met de sensoren en actuatoren die je tot nu toe gebruikt hebt. Het hoeft geen zinvol systeem te zijn, het mag ook gewoon een grappig systeem zijn. Zie het systeem als showcase om te laten zien wat je geleerd hebt. Je gaat zelf opschrijven wat je systeem moet doen. Verder ga je de opdracht uitvoeren zoals je gewend bent. - 44 -

12. appendix A: Arduino IDE configureren Je moet altijd controleren of het juiste Arduino bord en de juiste USB poort zijn ingesteld in de Arduino omgeving. Wij werken met Arduino Uno borden. De Arduino bord instellingen vind je bij Tools Board, zie hieronder. - 45 -

De USB poort instellingen vind je bij Tools Port, zie hieronder. Welke USB poort je nodig hebt kan per computer verschillen en zelfs per keer dat je de Arduino omgeving opstart. Meestal staan er twee COM poorten waaruit je kunt kiezen, 1 daarvan is COM1 en dat is de verkeerde, je moet de andere kiezen. - 46 -