## Keuzes en Herhaling

In het vorige hoofdstuk heb je kennis gemaakt met het LEGO Mindstorms materiaal door het bouwen en programmeren van een eenvoudige robot. Om een intelligente robot te programmeren, moet je goed nadenken over de opdrachten die je de robot geeft. De acties die je de robot laat uitvoeren, en de volgorde waarin, bepalen hoe goed de robot zijn taak vervult.

In dit hoofdstuk leer je hoe je een algoritme kunt schrijven met programmeertechnieken zoals herhalingen en keuzes en hoe je deze kunt programmeren in LEGO Mindstorms. Het gebruik van sensoren is hierbij van groot belang: sensoren geven antwoord op vragen en bepalen de keuzes die de robot zal maken. De opgedane kennis ga je direct toepassen: je gaat ‘The Explorer’ uit de vorige les intelligent maken.

Je mag voor deze opdracht in tweetallen werken, kies iemand uit jouw projectgroep (bepaald in de eerste les) om mee samen te werken.

### Wacht-blok

Met het wacht-blok geef je de robot opdracht om voor een bepaalde tijd niets te doen. Na de opgegeven pauze gaat het programma verder met het volgende blok.

Het wacht-blok heeft twee controlemodes: tijd en sensoren. In de tijdmodus pauzeert het programma tot de opgegeven tijd voorbij is. In de sensormodus pauzeert het programma tot de gevraagde sensorinformatie verkregen is.

### Herhaling-blok

Stel je voor dat je een robot wilt programmeren die over een denkbeeldige lijn van een gelijkbenige vierhoek rijdt. Je kunt dit bereiken door een serie van verplaatsen-blokken waarmee je de robot de volgende opdrachten geeft: vooruit rijden, 90 graden draaien, vooruit rijden, 90 graden draaien, vooruit rijden, 90 graden draaien, vooruit rijden, 90 graden draaien. Voor een vierkant gebruik je twee blokken vier keer. Stel je nu eens voor dat het de robot het vierkant 8 keer wilt laten rijden…

Met het herhaling-blok kun je efficiënter programmeren. Met een herhaling-blok geef je de robot opdracht om een reeks acties in het herhalings-blok herhaaldelijk uit te voeren. Je kun de robot een vierkant laten rijden door de opdrachten voor vooruit rijden en 90 graden draaien in een herhaling-blok te plaatsen en de herhaling 4 keer uit te laten voeren.

Je kunt het aantal herhalingen controleren door het gewenste aantal op te geven in de tellen modus. Het herhaling-blok kent ook de modes: eeuwig, sensor, tijd en logisch. Wanneer de herhalingen uitgevoerd zijn, gaat het programma verder met de blokken na het herhaling-blok.

### Schakeloptie-blok

Tot nu toe heb je robots geprogrameerd die altijd precies hetzelfde doen; alle acties zijn vooraf gedefinieerd in het programma. Met het schakeloptie-blok kun je de robot keuzes laten maken op basis van vooraf onbekende informatie. De robot kan bijvoorbeeld van richting veranderen wanneer de sensor een obstakel detecteert, of de robot kan de kleur van een object benoemen.

Je geeft een voorwaarde op in het eigenschappenpaneel van het schakeloptie-blok. De robot controleert of aan de voorwaarde voldaan is. Op basis van het antwoord, ja of nee, kiest de robot welke reeks acties uitgevoerd worden. Als het antwoord ja is, voert de robot de bovenste blok(ken) uit. Anders (het antwoorde is nee) voert de robot de onderste blok(ken) uit.

De voorwaarde kan gecontroleerd worden in de modes waarde of sensor. In de sensormodus selecteer je op basis van welke sensor informatie de robot een keuze moet maken. Aan de rechterkant van het eigenschappenpaneel specificeer je de voorwaarde.

### Programmeren met Sensoren

Met sensoren kan de robot informatie verzamelen over zijn omgeving. Sensoren laten de robot zien en voelen, een beetje zoals mensen dat kunnen. De informatie van de sensoren wordt geïnterpreteerd in het programma van de robot en je kunt de robot programmeren zodat hij reageert op de omgeving.

In de LEGO Mindstorms NXT 2.0 set zitten verschillende sensoren. In deze lessenserie werk je met de kleurensensor. Sensoren sluit je altijd aan op de poorten 1 t/m 4 van de brick.

#### Kleurensensor

De kleurensensor detecteert de kleur van een oppervlakte, de helderheid van een lichtbron en de intensiteit van de reflectie van licht. De kleurensensor kan zwart, blauw, groen, geen, rood en wit onderscheiden. Je kunt de kleurensensor bijvoorbeeld gebruiken om de robot voor een verkeerslicht te laten wachten of om de robot een zwarte lijn te laten volgen.

Je kunt de informatie van de kleurensensor gebruiken in een algemene actie zoals het wacht-blok. In het eigenschappaneel van het wacht-blok selecteer je sensormodus en kies je de kleurensensor. Aan de rechterkant geef je de range van kleuren aan die de sensor moet zien om te stoppen met wachten.

Demonstratie van een LEGO robot die wacht op detectie van de gevraagde kleur

#### Discovery

Je gaat straks een intelligente versie van The Explorer programmeren: Discovery. Discovery kan een zwarte lijn volgen terwijl hij rijdt. We gebruiken de kleurensensor om de lijn op het testpad te detecteren. De kleurensensor detecteert zwart of wit: lijn of papier. Met een schakeloptie-blok zoekt de robot naar zwart. Als de kleurensensor zwart ziet, wordt een verplaatsen actie uitgevoerd. Wanneer de kleurensensor geen zwart (dus wit) ziet, wordt een verplaatsing in de andere richting uitgevoerd. De kleurensensor ziet niet aan welke kant van de lijn hij is. Om te voorkomen dat de robot in het witte vlak ‘verdwaald’ moet je er voor zorgen dat de robot altijd aan dezelfde kant van de lijn blijft. Maar eerst moet de kleurensensor aangesloten worden.

Bouwinstructies voor het aansluiten van de kleurensensor

Gefeliciteerd, je hebt nu je eerste intelligente robot geprogrammeerd. Jouw robot gebruikt een sensor om de omgeving waar te nemen. De informatie over de omgeving gebruikt de robot om een keuze te maken; in dit geval het maken van een bocht naar rechts of links.

In de volgende les leer je hoe je met de programmeer concepten uit deze les (herhaling en keuze) kan sorteren op kleur. Uiteindelijk ga je met je groep een eigen kleursorteerder robot bouwen.