2017 modellering met Arduino mini module F. Vonk versie 2 27-7-2017
inhoudsopgave 1. inleiding... - 3-2. de Arduino... - 5-3. programmeren voor Arduino... - 8-4. breadboards en elektronica... - 14-5. verder met programmeren... - 16-6. flowcharts... - 18-7. appendix A: Arduino IDE configureren... - 27 - Dit werk is gelicenseerd onder een Creative Commons Naamsvermelding NietCommercieel GelijkDelen 3.0 Unported licentie Deze module is 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. - 2 -
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 methode kijken op het gebied van software modellering, te weten flowcharts (stroomdiagrammen). 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 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 Robot Hand YouTube Arduino Tetris YouTube Arduino 3D LED cube Dus welkom bij de module modellering met Arduino mini module. We gaan je kennis laten maken met de Arduino en een aantal actuatoren. Daarnaast ga je leren over flowcharts. 1 Zie bijvoorbeeld Wikipedia Systems Modeling. - 3 -
In deze module kom je opgaves tegen, die je moet maken om de lesstof te verwerken. 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 inleveren en eventueel als groep met je leraar bespreken. uitdaging Opgaves in paars zijn uitdagingen. Het goed uitvoeren van de uitdagingen in deze module resulteert in het cijfer 5,5. Bij iedere uitdaging hoort een deelverslag. Uiteindelijk lever je 1 verslag in dat alle deelverslagen bevat. Per uitdaging worden eisen beschreven waaraan je moet voldoen. Gebruik voor code in je verslag het lettertype "Courier New". Laat de oplossing voor je uitdaging zien aan je leraar. Afhankelijk van hoe je werkt in de les en wat de leraar van je observeert, moet je je resultaat en verslag uiteindelijk wel of niet mondeling toelichten. Als je je resultaat moet toelichten, dan kan dat buiten de lestijd ingepland worden. Je cijfer zal in dat geval ook afhangen van je toelichting. Let op, links in dit document hebben een rode kleur. Voor leerlingen die informatica als extra vak doen: Het kan zijn dat je niet alle lessen aanwezig kunt zijn en dat je thuis geen Arduino tot je beschikking hebt. In dat geval doe je zoveel mogelijk met de Arduino in de les. In de beoordeling wordt er dan rekening mee gehouden, dat je niet alle delen die met de Arduino zelf af hebt gekregen. Je maakt natuurlijk wel voor alle uitdagingen de modellen en geeft er de uitleg bij. Ter compensatie doe je een extra uitdaging in de mini en extra module. - 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. Je kent intussen 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. Als dat het geval is, verander de sketch die je hebt dan in de onderstaande. /* * 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() { } // run over and over again digitalwrite(ledpin, HIGH); // sets the LED on delay(1000); // waits for a second digitalwrite(ledpin, LOW); // sets the LED off delay(1000); - 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 Het volgende, en laatste, stuk van de sketch bestaat uit functies. 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() // run over and over again { digitalwrite(ledpin, HIGH); // sets the LED on delay(1000); // waits for a second digitalwrite(ledpin, LOW); // sets the LED off delay(1000); } 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 -
uitdaging 1: Blink In deze uitdaging ga je spelen met de aan en uit duur van het LED. Benodigdheden: Arduino Verander de Blink sketch zo, dat de LED 50 ms aan is en 50 ms uit. Sla de sketch vervolgens op onder een nieuwe naam. Verander de zojuist gemaakte sketch zo, dat de LED 10 ms aan is en 10 ms uit. Sla de sketch vervolgens op onder een nieuwe naam. Verklaar wat je ziet, en vergelijk het met het resultaat van de vorige sketch uit deze uitdaging. Als alles werkt, laat het je leraar dan even zien! In je verslag neem je het volgende op: De uitleg van je observaties. De code die je gemaakt hebt (met voldoende commentaar). - 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. Het rode LED lampje zit via het rode draadje op poort 12 aangesloten en via het zwarte draadje op de "gnd" (ground, oftewel aarde). 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() { if (teller == 3) // execute code only when teller equals 3 { digitalwrite(ledpin, HIGH); // sets the LED on teller = 0; // restart counting with teller } else // execute code when teller is not equal to 3 { } digitalwrite(ledpin, LOW); // sets the LED off teller = teller + 1; } delay(1000); // waits for a second Figuur 2: Voorbeeld van een if-else constructie. - 16 -
uitdaging 2: LED lampjes In deze uitdaging ga je spelen met de aan en uit duur van het LED. Benodigdheden: Arduino breadboard 2 LED lampjes (groen en rood) 2 weerstanden van 220Ω (Ohm) M/M jump wires (draadjes) Pas de code van opgave 4.2 aan met een if-else controle structuur, zodat de delay functie maar één keer in de code voorkomt. Zet voldoende commentaar in je code! Als alles werkt, laat het je leraar dan even zien! In je verslag neem je het volgende op: Een foto van je opstelling. De code die je aangepast hebt (met voldoende commentaar). - 17 -
6. flowcharts Aangezien dit een module over modellering is, wordt het tijd om de flowcharts modelleringsmethode te gaan bekijken. 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 eventueel de uitleg in het YouTube filmpje) 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 algoritme. Laten we eens kijken naar de sketch uit Figuur 2. Een mogelijke flowchart voor deze sketch zie je in Figuur 6. Figuur 6: Een mogelijke flowchart voor de sketch in Figuur 2. - 21 -
Hierbij is het essentieel om op te merken dat we bij informatica standaard beginnen te tellen bij 0! Verder betekent tellen dat we met 1 omhoog gaan. En reset betekent dat we weer bij 0 beginnen te tellen. Bij het aan- en uitzetten gebruiken we de Subroutine, omdat we een (hulp)functie nodig hebben om dit te realiseren. Deze kan in theorie weer in detail gemodelleerd worden een aparte flowchart. Er zitten geen Terminator symbolen in de flowchart, omdat het programma oneindig lang door blijft gaan vanwege de eigenschap van de loop functie op de Arduino. opgave 6.3 Ga voor jezelf na dat de flowchart uit Figuur 6 inderdaad klopt bij de sketch uit Figuur 2. Toch is Figuur 6 geen model voor het probleem dat de sketch oplost. De reden is dat het eigenlijk een vertaling is van de sketch in een symbolische notatie. Een model hoort een vereenvoudigde weergave van de werkelijkheid te zijn. Een model van een computerprogramma moet dan ook niet alle details van het programma bevatten; oftewel, het moet een abstractie zijn van het computerprogramma. Je zou vanuit een model meerdere verschillende computerprogramma's moeten kunnen maken die hetzelfde resultaat hebben en daarbij ook nog verschillende programmeertalen moeten kunnen gebruiken. Een model is dan ook iets dat je moet maken vóór je een computerprogramma maakt. Een model maak je op basis van de beschrijving (vaak de specificatie met producteisen) van het probleem dat je wilt oplossen. Laten we eens naar het probleem kijken dat we op proberen te lossen met de sketch uit Figuur 2. We willen zorgen dat de built-in LED 3 seconden uit is, dan 1 seconde aan en dat zich dat oneindig lang herhaalt. Een goed model voor dit probleem zie je in Figuur 7. Je ziet in Figuur 7 als het goed is ook meteen, dat je een eenvoudigere sketch (zie Figuur 8) kunt maken om het probleem op te lossen dan we hebben in Figuur 2. De sketch in Figuur 2 is zo complex omdat we maar 1 keer de delay functie wilden gebruiken. Je ziet nu dat je daar beter niet naar kunt streven, omdat het de sketch onnodig veel complexer maakt. Door eerst een goed model te maken van je probleem, kun je ervoor zorgen dat je een zo eenvoudig mogelijk computerprogramma maakt. - 22 -
Figuur 7: Een goede flowchart voor de sketch in Figuur 2. int ledpin = 13; // LED connected to digital pin 13 void setup() { pinmode(ledpin, OUTPUT); // sets the digital pin as output } void loop() { } digitalwrite(ledpin, LOW); // sets the LED off delay(3000); digitalwrite(ledpin, HIGH); // sets the LED on delay(1000); Figuur 8: Een eenvoudigere sketch dan in Figuur 2. Maar zoals gezegd kun je nog meer verschillende sketches maken die het probleem oplossen op basis van het model. - 23 -
int ledpin = 13; // LED connected to digital pin 13 void setup() { pinmode(ledpin, OUTPUT); // sets the digital pin as output } int teller = 0; // counter to determine even or odd int delaymult = 0; // multiplier for delay function void loop() { if (teller % 2 == 0) // when teller is even, turn light off { delaymult = 3; // multiplier of 3 for delay when off digitalwrite(ledpin, LOW); // sets the LED off } else // when teller is odd, turn light on { delaymult = 1; // multiplier of 1 for delay when on digitalwrite(ledpin, HIGH); // sets the LED on } } teller = teller + 1; delay(1000 * delaymult); // wait correct amount of time Hier kiezen we er weer voor om maar 1 keer de delay functie te gebruiken. Ook deze oplossing is weer onnodig veel complexer dan de oplossing in Figuur 8. opgave 6.4 Maak zelf een flowchart voor het systeem van opgave 4.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? - 24 -
uitdaging 3: 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 eerst flowcharts 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, dat de gebouwde opstelling laat werken volgens het model en de specificaties. Zet voldoende commentaar in je code! Het kan zijn, dat je gaandeweg je flowcharts nog moet aanpassen. Dat mag. Bewaar de eerste versie van je flowchart, zodat je die ook in je verslag kunt zetten. Als alles werkt, laat het je leraar dan even zien! - 25 -
Je resultaat moet aan de volgende eisen voldoen: 1. De opstelling en code werken correct. 2. De modellen voldoen aan de voorgeschreven notaties. 3. De modellen beelden het bedachte systeem uit, niet de implementatie ervan. 4. De modellen bevatten voldoende uitleg. 5. De code bevat voldoende commentaar. In je verslag neem je het volgende op: De initiële flowcharts met uitleg waar nodig. De uiteindelijke flowcharts met uitleg over de veranderingen. Een foto van je opstelling. De code die je gemaakt hebt (met voldoende commentaar). uitdaging voor leerlingen met extra vak In deze uitdaging ga je een cruise control systeem van een auto modelleren. Maak flowcharts om het gedrag van het cruise control systeem te modelleren. Leg uit waarom het model er zo uitziet. Je mag natuurlijk op het internet opzoeken hoe een cruise control systeem werkt. Let wel op, dat je niet een flowchart van het internet pakt. Je moet het systeem zelf modelleren! Je resultaat moet aan de volgende eisen voldoen: 1. De modellen voldoen aan de voorgeschreven notaties. 2. De modellen beelden het bedachte systeem uit, niet de implementatie ervan. 3. De modellen bevatten voldoende uitleg. In je verslag neem je het volgende op: De flowcharts met uitleg waar nodig. - 26 -
7. 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. - 27 -
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. - 28 -