03.09.2013 Views

Bram Vanderborght - Enzu - Robocup Junior

Bram Vanderborght - Enzu - Robocup Junior

Bram Vanderborght - Enzu - Robocup Junior

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Bram</strong> <strong>Vanderborght</strong><br />

LEGO-NXT<br />

BINNENSTE-<br />

BUITEN<br />

ABIMO<br />

UITGEVERIJ


© 2008 The LEGO Group. These images are courtesy of the LEGO Group. (2x onder)<br />

© Quebec Lego User Group (quelug.org) (linksboven)<br />

© Daniele Benedettelli (rechtsboven)<br />

INhOUdSTaBEL<br />

Voorwoord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1. Is de LEGO Mindstorms NXT een echte robot? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2. Hoe wordt de LEGO Mindstorms NXT gebouwd? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

3. Waarmee denkt de LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

4. Hoe programmeer je de LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

5. Hoe toon je informatie op het NXT beeldscherm? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

6. Hoe bedien je de lamp van de LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . .38<br />

7. Hoe beweegt de LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40<br />

8. Hoe maakt de LEGO Mindstorms NXT geluid? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46<br />

9. Hoe hoort de LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

10. Hoe ziet de LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54<br />

11. Hoe voelt een LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

12. Hoe meet de LEGO Mindstorms NXT afstanden? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

13. Hoe communiceren een computer of GSM met de LEGO Mindstorms NXT? . . . . . . . . . .69<br />

14. Hoe geraakt de LEGO Mindstorms NXT het noorden niet kwijt? . . . . . . . . . . . . . . . . . . . . 71<br />

15. Waarom valt de LEGO Mindstorms NXT niet om? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

16. Extra NXT sensoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

17. Overige NXT-G programmeerblokken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

18. Hoe hack je de LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />

19. Programmeeromgevingen voor LEGO Mindstorms NXT . . . . . . . . . . . . . . . . . . . . . . . . . .88


VOOrwOOrd<br />

Met de robotwedstrijd RoboCup <strong>Junior</strong> willen de Vrije Universiteit Brussel, Erasmushogeschool<br />

Brussel, Hogeschool West-Vlaanderen, Katholieke Hogeschool West-Vlaanderen en<br />

Hogeschool Gent jongeren warm maken voor wetenschap en techniek. We beseffen dat er<br />

een zekere drempelvrees bestaat om aan de slag te gaan met robots. Om je te helpen bij de<br />

eerste stappen in de robotica, heb ik deze handleiding geschreven hoe de LEGO Mindstorms<br />

NXT robot bouwen en programmeren. Deze bouwdoos is een geschikt startpakket speciaal<br />

ontworpen voor dit doel. Dit boek sluit nauw aan bij het robotboek ROBOTS BINNENSTEBUI-<br />

TEN. Lees dus eerst het ene hoofdstuk uit het robotboek en probeer dan met behulp van deze<br />

handleiding de functie zelf uit met je LEGO robot. Voel je geroepen om je robot te meten met<br />

andere robots, surf dan naar www.robocupjunior.be en schrijf je in voor de komende RoboCup<br />

<strong>Junior</strong> robotwedstrijd.<br />

Bij het schrijven heb ik hulp gekregen van verschillende personen. In het bijzonder wil ik<br />

volgende personen bedanken: Wim Van Broeck van de Cel Wetenschapscommunicatie van<br />

de VUB, Leen De Bie van de Pedagogische Begeleidingsdienst Gent, Pol Demeurisse van<br />

Techniek op school voor de 21e eeuw (TOS21), mijn mama Christiane Terryn en mijn grootvader<br />

Louis Terryn. Ook Kristin <strong>Vanderborght</strong> om mij de basis notenleer uit te leggen en Klaas<br />

Demeulemeester voor de lay-out. Mijn dank gaat eveneens uit naar alle hobbyisten die fantastische<br />

projecten gemaakt hebben met hun LEGO blokjes en mij hun foto’s lieten gebruiken.<br />

Deze handleiding en RoboCup <strong>Junior</strong> kon niet gerealiseerd worden zonder de steun van<br />

de hoofdsponsors KUKA en de Nationale Loterij, partners maxon motor en Leroy-Somer en<br />

media partners EOS en Ketnet.<br />

Dansende robots, reddingsrobots en voetballende robots tijdens RoboCup <strong>Junior</strong>.<br />

© Ork de Rooij, RoboCup <strong>Junior</strong> NL<br />

© The RoboCup Federation<br />

© The RoboCup Federation


MEdIaparTNErS hOOfdSpONSOrS<br />

ONdErwIjSparTNErS prOfESSIONELE<br />

parTNErS<br />

MET daNk aaN


INLEIdING<br />

Heb je het robotboek ROBOTS BINNENSTEBUITEN gelezen en geprikkeld geraakt om zelf je<br />

robots te bouwen en te programmeren, dan is de LEGO Mindstorms NXT robot een uitstekende<br />

keuze. Deze bouwdoos biedt de mogelijkheid aan de beginner om zijn eerste stappen<br />

binnen de robotica te zetten, maar ook heel wat gevorderde hobbyisten beleven nog steeds<br />

veel plezier aan diezelfde LEGO steentjes. Het aantal robots dat je ermee kan bouwen is dan<br />

ook ongelimiteerd. Of misschien reikt je doelstelling wel verder en wil je een wedstrijd voor<br />

LEGO robots winnen zoals de FIRST LEGO League of de RoboCup <strong>Junior</strong>? Dan maak je met<br />

het lezen van dit boek al een goede start. In het boek ROBOTS BINNENSTEBUITEN legden we<br />

eerst uit hoe de mens functioneert en vervolgens hoe een robot werkt. In dit boek zetten we<br />

de volgende stap: zelf met robots experimenteren. Eén voor één zullen we de verschillende<br />

functies van de NXT belichten en stap voor stap de programma’s uitleggen om deze functies<br />

optimaal te benutten. Verwacht in dit boek echter geen recepten of bouwplannen voor de<br />

“ideale” robot . Want als iedereen dezelfde robot bouwt is de fun er ook snel af. Verwacht wel<br />

al de nodige ingrediënten om jou droomrobot te realiseren.<br />

De Youtube videos van de verschillende projecten staan op www.robocupjunior.be. Op de site<br />

staan eveneens de voorbeeldprogramma’s die uitgelegd worden in dit boek. Ook de praktische<br />

informatie en tips om deel te nemen aan de robotwedstrijd RoboCup <strong>Junior</strong> is er beschikbaar.<br />

Hoe werkt de mens? Hoe zitten verschillende soorten robots in elkaar? Hoe maak ik zelf een robot?<br />

© Honda, © KUKA<br />

© John Deere Construction & Foresty Company<br />

© 2008 The LEGO Group. These images<br />

are courtesy of the LEGO Group


© Photography by Adriana M. Groisman<br />

Concentratie bij de robotwedstrijd<br />

FIRST LEGO League.


1<br />

IS dE LEGO MINdSTOrMS<br />

NXT EEN EchTE rOBOT?<br />

De ingrediënten van een robot zijn de sensoren om de omgeving waar te nemen, de computer<br />

om na te denken en motoren om te bewegen. De hersenen van de LEGO robot is een klein<br />

computertje dat de NXT wordt genoemd. In het geheugen van de NXT sla je de programma’s<br />

op die vertellen wat de robot zal doen. Aan de NXT worden 4 sensoren aangesloten met<br />

elektrische draden via de poorten 1 tot en met 4. Standaard zit in de bouwdoos de tastsensor,<br />

de lichtsensor, de geluidssensor en de ultrasone sensor, maar er zijn nog heel wat andere<br />

sensoren beschikbaar voor je LEGO robot. Aan de NXT kan je 3 interactieve servomotoren<br />

koppelen via de poorten A, B en C. Met USB of bluetooth sluit je de NXT aan op een computer.<br />

Met de bluetooth kan je bovendien draadloos communiceren met andere NXT’s of met een<br />

GSM. Er zijn ook 4 knoppen aanwezig om de NXT te bedienen en hij heeft ook een groot LCDdisplay<br />

en een luidspreker.<br />

De LEGO NXT voldoet dus volledig aan de definitie van een<br />

robot. Met de 4 sensoren wordt de omgeving waargenomen,<br />

de NXT is de computer om na te denken en verschillende<br />

taken te volbrengen en met de 3 servomotoren beweegt hij.<br />

De LEGO NXT met 4 aangesloten sensoren en<br />

3 servomotoren.<br />

© 2008 The LEGO Group. These images are courtesy of the LEGO Group<br />

Je kan normaal vrij kiezen welke sensor je in een sensorpoort steekt en welke servomotor in<br />

een motorpoort. De standaardinstellingen zijn:<br />

Poort 1: Tastsensor Poort A: Interactieve servomotor voor extra functie<br />

Poort 2: Geluidssensor Poort B: Rechter bewegingsmotor<br />

Poort 3: Lichtsensor Poort C: Linker bewegingsmotor<br />

Poort 4: Ultrasone sensor<br />

Heel wat voorbeeldprogramma’s volgen deze afspraak, dus jij best ook.<br />

De hersenen met enkele<br />

zintuigen en spieren.


2<br />

hOE wOrdT dE LEGO MINd<br />

STOrMS NXT GEBOUwd?<br />

De LEGO Mindstorms NXT robot wordt niet gebouwd met de traditionele LEGO-steentjes met<br />

noppen, maar met de onderdelen van het LEGO Technic gamma. Deze werden in 1977 geïntroduceerd<br />

om meer technische constructies mogelijk te maken. Eerst werden ze verkocht<br />

onder de naam “Expert Builder”, sinds 1984 liggen ze onder de naam “Technic” in de winkel.<br />

De bouwstenen zijn onder te verdelen in balken met de typische gaten in de<br />

zijkant, wielen, assen, tandwielen en wormwielen en verschillende verbindingselementen<br />

om al deze stukken aan elkaar te verbinden. De balken<br />

hebben geen noppen meer, daardoor kan je er geen traditionele LEGO<br />

blokjes aan bevestigen. Het weglaten van de gekende noppen heeft tot<br />

enige controverse geleid. Met onderdelen zonder noppen kan men gemakkelijker<br />

bouwen in verschillende richtingen en soms is het eindresultaat ook<br />

mooier. Om een LEGO Technic constructie te maken moet je van binnen naar<br />

buiten bouwen, terwijl je met de blokjes met noppen van onder naar boven<br />

bouwt.<br />

De traditionele LEGO-steen.<br />

© 2008 The LEGO Group. These images are courtesy of the LEGO Group.<br />

De standaard bouwplannen: TRIBOT, ROBOARM T-56, SPIKE en ALPHA REX.<br />

© 2008 The LEGO Group. These images are courtesy of the LEGO Group<br />

LEGO levert de bouwplannen van de TRIBOT, ROBOARM T-56, SPIKE en ALPHA REX. Op de<br />

Mindstorms website vind je nog andere voorbeelden. Wil je liever je eigen robot ontwerpen ,dan<br />

volg je best onderstaande tips. Je kan trouwens met de software LEGO Digital Designer je robot<br />

eerst in de virtuele wereld bouwen. De software is gratis te downloaden van http://ldd.LEGO.com.


LEGO heeft trouwens een speciale website (http://mindstorms.LEGO.com/NXTLOG/) ontwikkeld<br />

met een bibliotheek van projecten, vaak met de software dat ze ervoor geschreven hebben<br />

en de bouwplannen in LEGO Digital Designer. Heb je een bepaald probleem dan kan je hier<br />

enkele ideeën opdoen. Dit forum is ook geschikt om zelf je creatie wereldkundig maken.<br />

Screenshot van de LEGO Digital Designer software.<br />

Balken en verbindingselementen<br />

De balken kunnen op verschillende manieren met de verbindingselementen aan elkaar bevestigd<br />

worden. Het eenvoudigst zijn de pinnen, hiermee verbind je de balken zijdelings met<br />

elkaar. Je hebt zwarte en grijze verbindingselementen. Maak ze beide eens na zoals op de<br />

figuur en draai ermee rond. Je voelt het meteen. De zwarte heeft veel meer wrijving dan de<br />

grijze. De zwarte verbinding gebruik je dus om verbindingen te maken die vast moeten zitten<br />

en de grijze indien de twee balken ten opzichte van elkaar moeten roteren want hier is er<br />

geen tot weinig wrijving. Maar indien de beide balken echt onbeweeglijk of star moeten zijn<br />

dan gebruik je best twee zwarte pinnen naast elkaar.<br />

Twee balken aan elkaar bevestigt: L: zonder wrijving, M: met wrijving, R: star aan elkaar.


0<br />

Om ook in andere richtingen te kunnen bouwen is er een hele verzameling verbindingselementen<br />

beschikbaar. Met de lange pinnen worden 3 balken in één keer aan elkaar bevestigd.<br />

Enkele verbindingselementen.<br />

assen<br />

LEGO Technic is gemaakt om te kunnen bewegen en assen zijn hierbij onontbeerlijk. De assen<br />

gaan beweging transporteren en de LEGO Technic assen hebben een kruisvormig profiel.<br />

Deze assen kunnen vrij bewegen in de balken met gaten, maar ook volgens de richting van de<br />

as. Om dit te verhinderen zijn er twee aseinden te gebruiken.<br />

De twee verschillende aseinden om het zijdelings<br />

schuiven van de as te verhinderen.<br />

Maar ook stukken van de robot, zoals de klauwen van de TRIBOT, moeten bewegen. Daarvoor<br />

hebben sommige balken geen rond, maar een kruisvormig gat. Hierin wordt de as gestoken.<br />

Nu gaat door de as te draaien, de balk meebewegen.<br />

De as zal de grijze balk met bocht doen bewegen<br />

want de as steekt in een kruisvormig gat.<br />

De as kan vrij roteren in de cilindervormige gaten<br />

van de witte balk, deze zal dus niet meedraaien.<br />

Heel wat energie die uit de motor komt gaat verloren aan wrijving, veroorzaakt door een<br />

slecht gebruik van de assen. Tracht de wrijving dus zoveel mogelijk te beperken door de<br />

assen enkel door gaten te steken die mooi recht tegenover elkaar liggen en gebruik alleen<br />

assen die mooi recht zijn. Draag dus zorg voor je materiaal. Tracht ook steeds assen op minstens<br />

2 plaatsen te ondersteunen.<br />

1 2 3 4<br />

1: Zeer slecht: de as bevindt zich te ver van de balk dus veel wrijving.<br />

2: Slecht: de as is nog maar op één punt ondersteund.<br />

3: Goed: de as is op 2 punten ondersteund, wiel dicht bij balk.<br />

4: Best: de as is ondersteund rond de plaatsen waar er krachten op inwerken, hier rond het tandwiel en het wiel.<br />

Om de balken met de kruisvormige gaten te kunnen verbinden met de ronde gaten zijn er de blauwe pinnen<br />

(met wrijving) en witte pinnen (zonder wrijving).


Tandwielen<br />

Tandwielen zijn machine-elementen om bewegingen over te brengen of de draairichting,<br />

snelheid en kracht ervan te veranderen.<br />

Normale taNdwieleN<br />

De normale LEGO Technic tandwielen hebben 8, 16, 24 of 40 tandjes. Deze tandwielen kunnen<br />

enkel in een vlak gebruikt worden en de assen liggen steeds evenwijdig.<br />

De 4 normale Technic tandwielen met 8, 16, 24, 40 tanden.<br />

Probeer eens met de meegeleverde componenten het volgende te maken.<br />

Tracht deze eenvoudige tandwielkast te bouwen.<br />

Draai nu het kleine wiel 5 keer rond en tel hoeveel keer het grote wiel ronddraait. Als je goed<br />

hebt geteld kom je op 3 omwentelingen. De verhouding van 3 over 5 noemen we de overbrengingsverhouding<br />

en deze wordt precies bepaald door het aantal tanden te delen . Dit betekent<br />

dat als we een motor gaan aansluiten op het kleine tandwiel, dat de snelheid van het grote<br />

wiel keer kleiner is, maar ook 1,67 keer sterker! ! Je wint hier dus aan kracht maar verliest<br />

aan verplaatsing. Bovendien keert dergelijke opstelling de draairichting om. Het aantal gaten<br />

tussen de 2 assen is afhankelijk van het aantal tandwieltanden. Gebruik volgende tabel om<br />

de afstand te kennen. Soms staat er een kommagetal zoals bij het gelijktijdige gebruik van<br />

de tandwielen met 16 tanden en 8 tanden, de afstand is hier 1,5 gaten. Deze combinatie kan je<br />

niet monteren op dezelfde balk omdat de afstand geen geheel aantal gaten is.


Aantal<br />

tanden<br />

Voorbeeld waar enkel de draairichting<br />

wordt omgedraaid, maar niet de snelheid<br />

(overbrengingsverhouding =1).<br />

8 t 16 t 24 t 40 t<br />

8 t 1 1,5 2 3<br />

16 t 1,5 2 2,5 3,5<br />

24 t 2 2,5 3 4<br />

40 t 3 3,5 4 5<br />

Kijk eens op de figuur hoeveel tandwielen er na elkaar geplaatst zijn om de interactieve NXT<br />

servomotor krachtig te maken. De totale overbrengingsverhouding is 1 over 48. Dus de as van<br />

de motor draait 48 keer rond voor de uitgaande as 1 omwenteling maakt.<br />

Het inwendige van de NXT interactieve servomotoren, de verschillende tandwielen zorgen ervoor dat de<br />

as trager gaat draaien, maar met veel meer kracht. © 2008 The LEGO Group. These images are courtesy of the LEGO Group


Kegelvormige (of coNische) taNdwieleN<br />

Kegelvormige (of conische) tandwielen worden gebruikt om assen die niet evenwijdig staan<br />

met elkaar te verbinden. Met de Technic dubbele kegelvormige tandwielen staan de assen<br />

loodrecht op elkaar. Er zijn 3 verschillende kegelvormige tandwielen (12, 36 en 40 tanden).<br />

Kegelvormige tandwielverbinding.<br />

worm eN wormwiel<br />

Een combinatie van een worm en wormwiel wordt gebruikt wanneer grote overbrengingsverhoudingen<br />

gewenst zijn. Als je aan de as van de worm gaat draaien zal het grote wormwiel<br />

heel traag ronddraaien. Tracht je aan de as van het wormwiel te draaien dan zal je merken<br />

dat dit niet gaat. Dit noemt men het zelfremmend effect. Deze constructie wordt bijvoorbeeld<br />

voor de ROBOARM T-56 gebruikt. Zetten we de motor die verbonden is aan de as met de<br />

worm uit, dan zal de arm niet naar beneden zakken maar op zijn positie blijven.<br />

Worm met wormwiel<br />

Je zal veel plezier beleven aan het bouwen en programmeren van<br />

de LEGO Mindstorms NXT robots.<br />

© 2008 The LEGO Group. These images are courtesy of the LEGO Group


3<br />

waarMEE dENkT dE LEGO<br />

MINdSTOrMS NXT?<br />

Net zoals de hersenen bestaat een computer uit verschillende eenheden elk met een verschillende<br />

functie. Het hart van de computer is de processor. In dit kleine stukje elektronica<br />

gebeuren de berekeningen. De processor bestaat uit miljoenen transistoren vergelijkbaar<br />

met de zenuwcellen in de hersenen. Transistoren zijn piepkleine elektrisch gestuurde<br />

schakelelementen. De processor rekent echter enkel met nullen en enen, de zogenaamde<br />

bits. Wanneer we 8 bits gebruiken dan noemt men dit een byte. Hiermee kunnen we de<br />

getallen 0 (=00000000) tot 255 (=11111111) voorstellen. Het getal 52 is bijvoorbeeld 00110100.<br />

Deze voorstelling noemen we het binaire getalstelsel. De processor in de LEGO NXT is<br />

een 32-bit ARM7 processor en luistert naar de naam AT91SAM7S256. De 32-bit betekent<br />

dat de processor met getallen werkt die 32 bit lang zijn, dit zijn dus de getallen van 0 tot<br />

4.294.967.295. Hoe snel de computer rekent is een belangrijke eigenschap van de processor<br />

en wordt bepaald door de kloksnelheid van de processor. De klok van de processor gaat op<br />

regelmatige tijdstippen een signaal uitzenden waarop alle transistoren tegelijkertijd hun<br />

volgende berekening uitvoeren. Hoe sneller de klok deze signalen kan uitzenden, hoe meer<br />

berekeningen de processor kan uitvoeren. De kloksnelheid van de NXT processor is 48<br />

MHz (megahertz of 48.000.000 Hz). De processor haalt uit het geheugen data op en schrijft<br />

er terug weg. In het RAM (Random Access Memory) geheugen wordt data opgeslagen die<br />

de processor nodig heeft om de berekeningen uit te voeren. Daarom wordt dit geheugen<br />

ook het werkgeheugen genoemd. De LEGO NXT heeft 64 kB (64 kilobyte of 64.000byte)<br />

RAM geheugen. Om je programma op te slagen heb je een apart geheugen ter beschikking<br />

met een grootte van 256 kB Flash. Al deze elementen zitten in het zwarte doosje (de chip)<br />

met nummer 1. De hoofdprocessor wordt in zijn taak nog eens geholpen met de 8-bit AVR<br />

processor met de naam ATMEGA48 (4 MHz – 512 byte RAM - 4 kB Flash) en zit in het doosje<br />

met nummer 2. Al deze elektronica moet gevoed worden. Hiervoor moet je 6 AA batterijen<br />

in de LEGO NXT steken. Een heroplaadbare batterij is aangeraden als je de LEGO NXT vaak<br />

gebruikt. Lees in de gebruikshandleiding hoe je de batterijen moet aansluiten en gebruiken.<br />

Bovendien zie je op de foto nog heel wat andere componenten. Deze verbinden de processor<br />

met de sensoren, beeldscherm, motoren, knoppen, bluetooth en USB.<br />

SamENvaTTiNG TEchNiSchE SpEcificaTiES<br />

• 32-bit ARM7 microprocessor<br />

• 256 Kbytes FLASH, 64 Kbytes RAM<br />

• 8-bit microprocessor<br />

• 4 Kbytes FLASH, 512 Byte RAM<br />

• Bluetooth draadloze communicatie (Bluetooth<br />

Class II V2.0 volgend)<br />

• USB 2.0 full speed poort (12Mbit/s)<br />

• 4 inputpoorten, 6-draads kabel digital platform<br />

• 3 outputpoorten, 6-draads kabel digital platform<br />

• 100x64 pixel LCD grafisch beeldscherm<br />

• Luidspreker, 8 KHz geluidskwaliteit<br />

• Voedingsbron: Herlaadbare Lithium batterij of<br />

6 AA batterijen


1<br />

Het inwendige van de LEGO NXT met de 2 processoren en de nodige elektronica. © Jürgen Stuber<br />

NXT-robots proberen de tegenstrever uit de cirkel te duwen tijdens de Mindstorms NXT Sumo<br />

Competition. © Andrew Becraft - Brothers-Brick.com<br />

2


4<br />

hOE prOGraMMEEr jE dE LEGO<br />

MINdSTOrMS NXT?<br />

Hier volgt een voorbeeld hoe een klassiek computerprogramma eruit ziet (in NBC een programmeertaal<br />

voor LEGO robots geschreven door John Hansen). Het programma zal de robot<br />

gedurende 4 seconden vooruit doen rijden en dan 3 seconden achteruit. Elke regel bevat<br />

een instructie die de robot achter elkaar zal uitvoeren.<br />

#include “NXTDefs.h” hiermee moet het programma steeds beginnen en bevat<br />

informatie over hoe de motoren aansturen en sensoren uitlezen<br />

thread main start van het programma<br />

OnFwd(OUT _ B,100) Motor B voorwaarts laten draaien aan 100% vermogen<br />

OnFwd(OUT _ C,100) Motor C voorwaarts laten draaien aan 100% vermogen<br />

wait 4000 Wachten gedurende 4000 milliseconden, motoren draaien dus<br />

4 seconden lang<br />

OnRev(OUT _ B,50) Motor B achterwaarts laten draaien aan 50% vermogen<br />

OnRev(OUT _ C,50) Motor C achterwaarts laten draaien aan 50% vermogen<br />

wait 3000 Wachten gedurende 3000 milliseconden, motoren draaien dus<br />

3 seconden lang<br />

Off(OUT _ B) Motor B afremmen<br />

Off(OUT _ C) Motor C afremmen<br />

Endt einde van het programma<br />

Gelukkig kunnen we ook ons computerprogramma opbouwen met blokjes in de grafische<br />

programmeertaal “LEGO Mindstorms NXT-G”, deze software is bijgeleverd in de LEGO NXT<br />

kit. De LEGO NXT-G software is trouwens gebaseerd op LabVIEW van National Instruments,<br />

gebruikt door heel wat onderzoekers in universiteiten en onderzoekscentra wereldwijd. Lees<br />

in de handleiding hoe je de software (ook in het Nederlands) moet installeren. Je moet eerst<br />

de software installeren en dan pas mag je de NXT aan de PC aansluiten! Het fijne aan deze<br />

taal is dat je heel gemakkelijk een programma kan opbouwen. Het programma van hierboven<br />

gaat er als volgt uitzien.


Met volgende instellingen van de blokjes:<br />

Gebruik motoren B en C 100 % vermogen<br />

Vooruit rijden<br />

Je eerste NXt-g programma maKeN<br />

Een mogelijkheid om de LEGO Mindstorms<br />

NXT robot te<br />

programmeren is de NXT-G software.<br />

© 2008 The LEGO Group. These images are<br />

courtesy of the LEGO Group<br />

Rechtdoor rijden<br />

Gedurende 4 seconden<br />

Gebruik motoren B en C 50 % vermogen<br />

Achteruit rijden Rechtdoor<br />

Daarna<br />

rijden<br />

afremmen<br />

Gedurende 3 seconden


maar LaTEN wE EErST vaN hET bEGiN STarTEN zOdaNiG daT jE diT prOGramma<br />

zELf kaN SchrijvEN.<br />

Klik op het icoontje van Mindstorms NXT om de software te starten.<br />

Geef een naam aan je programma en klik op Go. Kies een naam die goed weergeeft wat je<br />

programma doet, zo vind je hem in de toekomst gemakkelijk terug.<br />

Als het tekstveld gemarkeerd is met Simple text gebruik dan enkel volgende karakters:<br />

Anders verkrijg je lege plaatsen op het NXT beeldscherm. Dus karakters met accenten en<br />

Aziatische tekens vermijd je best.<br />

De NXT-G gebruikersinterface wordt dan geopend. Hierop zijn een aantal onderdelen terug te<br />

vinden.


In het Robo Center (1) vind je de Bouwgids om de verschillende robots te bouwen. In de<br />

Programmeergids worden voorbeeldprogramma’s stap voor stap uitgelegd. Ik stel voor dat<br />

je start met de TRIBOT te bouwen die onder voertuigen terug te vinden is. Voorlopig hoef je<br />

enkel maar het rijdende onderstel te bouwen. Let goed op dat je Poort B gebruikt voor de<br />

rechter bewegingsmotor en Poort C voor de linker bewegingsmotor.<br />

Mijn Portaal (2) is jou toegang tot de website www.mindstorms.com. Surf er eens rond om te<br />

kijken wat er allemaal te vinden is.<br />

De Werkbalk (3)bevat het menu en icoontjes van een aantal vaak gebruikte functies. Zo kan<br />

je programma’s openen en sluiten, knippen en plakken enzovoort.<br />

Het Werkgebied (4) is de plaats waar je de verschillende instructies gaat invoeren.<br />

Het Klein hulpvenster (5) is een spiekbriefje, als je op meer hulp klikt krijg je de uitgebreide<br />

uitleg te lezen.<br />

In het Werkgebied kaart (6) krijg je een overzicht van heel het programma. Hou je muis ingedrukt<br />

en beweeg over de kaart van het werkgebied. Je zal het werkgebied heen en weer zien<br />

bewegen. Je kan ook in de werkbalk op drukken en met je muis ingedrukt in het<br />

werkgebied zelf bewegen. Als je een groot programma aan het schrijven bent is dit handig.<br />

De Programmeeromgeving (7) bevat alle programmeerblokken (dus de verschillende instructies)<br />

om je programma mee op te bouwen. Door te klikken op de tab vind je de<br />

standaard omgeving terug met de meest gebruikte blokken. De complete omgeving met alle<br />

beschikbare blokken roep je op door op de tab te drukken. En de persoonlijke blokken<br />

staan onder de custom tab . De programmeerblokken sleep je van de programmeeromgeving<br />

naar het werkgebied.<br />

Het Configuratiescherm (8) dient om elk programmeerblok in te stellen volgens je eigen wensen.<br />

Met de 5 knoppen op je Controller (9) verzend je programma’s, of stukken van programma’s<br />

naar de NXT. Een programma starten en stoppen en de instellingen van je NXT wijzigen.<br />

Heb je de educatieve versie van de NXT-G software<br />

dan is het Robo Center(1) vervangen door de Robot<br />

Educator. Deze bevat 39 tutorials om je kennis te laten<br />

maken met de verschillende mogelijkheden van de<br />

robot.<br />

In Robot Educator worden de bouwplannen van deze robot<br />

gegeven. Ook met deze robot kan je probleemloos de voorbeeldprogramma’s<br />

uit deze handleiding uitproberen.<br />

© 2008 The LEGO Group. These images are courtesy of the LEGO Group


0<br />

Nu je weet hoe de gebruikersinterface eruit ziet en je het onderstel<br />

van de TRIBOT gebouwd hebt, kan je starten met programmeren.<br />

In het werkgebied zie je het startpunt staan van je programma en<br />

de plaats waar je het eerste programmeerblok moet neerzetten.<br />

Vanaf dit startpunt vertrekt de sequentielijn . De sequentielijn regelt het logisch verloop<br />

van je programma en alleen blokken die hierop niet worden aangesloten worden uitgevoerd.<br />

Als je op het startpunt klikt, verschijnt in het configuratiescherm een scherm waar je een bericht<br />

kan intypen dat samen met het programma wordt opgeslagen. Je schrijft hier best een<br />

korte samenvatting van wat je programma doet. Na een tijdje zal je immers niet meer weten<br />

waarvoor je programma precies diende.<br />

Een andere mogelijkheid is met het icoon Commentaar functie rechtstreeks commentaar<br />

te schrijven in het werkgebied.<br />

Ik raad je aan om op regelmatige plaatsen in het programma commentaar te schrijven zoals<br />

wat je gedaan hebt of welk lid van je team het stuk geschreven heeft. Dit zal je heel wat tijd<br />

besparen in de toekomst.<br />

Sleep nu het Verplaats blok van de programmeeromgeving naar de sequentielijn van<br />

het werkgebied. In het configuratiescherm stel je in hoe de eerste beweging moet verlopen (4<br />

seconden vooruit rijden aan 100% vermogen):<br />

Merk trouwens op dat de programmeerblok een korte samenvatting geeft van de instellingen.


Rechtsboven staat dat poorten B en C ( ) zijn gebruikt. Linksonder<br />

staat dat de robot rechtdoor en vooruit zal rijden ( ). Rechts ervan<br />

een symbool dat de beweging zal gebeuren met vol vermogen ( ) en<br />

gedurende een bepaalde tijd ( ). Dit laat je toe in één oogopslag te<br />

zien hoe de programmeerblok is ingesteld. Ook alle andere programmeerblokken<br />

tonen telkens een korte samenvatting.<br />

Sleep vervolgens een nieuw Verplaats blok naar het werkgebied en plaats het achter het eerste<br />

blok. Stel deze als volgt in:<br />

Je eerste programma is nu klaar. Druk op om het op te slaan.<br />

vOOrbEELdprOGramma: vOOr EN achTEruiT.rbT<br />

Nu moet je het programma zenden naar je NXT. Je kan dit zowel via de USB kabel als via<br />

bluetooth doen. Hoe je een verbinding moet maken over bluetooth<br />

tussen je PC en de NXT lees je in de handleiding.<br />

Ik heb gekozen voor een bluetooth verbinding. Je kan dit nagaan<br />

door op de knop rechtsboven (NXT venster) van de controller te<br />

drukken.<br />

Waarop volgend venster verschijnt.<br />

Hierop zie je dat ik mijn NXT “NXT <strong>Bram</strong>” heb genoemd en dat het verbonden is via bluetooth.<br />

Bovendien zie je in dit venster het batterijniveau en hoeveel geheugen er nog vrij is.


Als je hebt nagekeken dat je PC verbonden is met je NXT kan je het programma inladen. Op<br />

het scherm van de NXT staat trouwens een voor een goed werkende bluetooth verbinding<br />

en voor een goed werkende USB verbinding.<br />

Klik nu op Download en start van de controller om je programma naar de<br />

NXT te zenden en uit te voeren.<br />

Je ziet het robotje nu voor de eerste keer tot leven komen. Je zal ook zien dat het in bedrijf<br />

icoon op de NXT steeds ronddraait. Als dit niet meer het geval is dan is het programma<br />

vastgelopen en zal je het moeten resetten zoals beschreven in de handleiding. Het programma<br />

stopt automatisch als de sequentielijn is afgelopen, dus in dit geval na 7 seconden. Je kan ook<br />

op de knop rechtsonder Stop drukken om het programma onderweg te stoppen. Met de knop<br />

linksboven Download en start selectie kan je enkel een selectie downloaden en starten. Dit<br />

is handig tijdens het programmeren om deelprogramma’s te starten zonder telkens het hele<br />

programma te moeten doorlopen. Met de knop linksonder Download wordt het programma<br />

opgeslagen in het geheugen van de NXT zonder het uit te voeren. Lees in de handleiding hoe<br />

je met de knoppen op de NXT je programma terugvindt en uitvoert rechtstreeks van op de NXT.<br />

Dit is echter nog maar een heel eenvoudig programma, je NXT robot is tot veel meer in staat.<br />

Want naast het aansturen van de servomotoren kan je ook zelf iets op het scherm tonen,<br />

de NXT geluiden laten produceren en berichten over bluetooth verzenden. De robot kan ook<br />

informatie van zijn verschillende sensoren gebruiken in het programma. Al deze acties en<br />

sensoren komen ruimschoots aan bod in de volgende hoofdstukken.<br />

Om de acties en sensoren ten volle te kunnen benutten moet je nog een aantal instructies<br />

kennen die het verloop van je programma zullen beïnvloeden.<br />

wacht bloK<br />

De eerste instructie is het wacht blok . Het programma zal wachten aan dit blok tot<br />

een bepaalde conditie vervuld is. Je kan het vergelijken met een stoplicht. Ook een auto moet<br />

wachten zolang het roodlicht is en mag pas verder rijden als hij groenlicht krijgt. De startconditie<br />

kan zowel een bepaald tijdsverloop zijn als van een sensor komen.<br />

In je eerste programma begon de auto onmiddellijk te rijden. Voer het wachtblok tijd in<br />

tussen het startpunt en het eerste verplaats blok.


Via het configuratiescherm stel je in dat de NXT 2 seconden moet wachten. Je kan tot 1/10<br />

seconde nauwkeurigheid ingeven (dus bijvoorbeeld 2,3 of 2.3 naargelang de instellingen van<br />

je computer).<br />

Download en start het programma en bekijk het resultaat.<br />

vOOrbEELdprOGramma: wachTbLOk mET Tijd.rbT<br />

Met Controleer kan je in plaats van Tijd ook voor een Sensor kiezen. Kies onder Sensor voor<br />

de NXT knoppen.<br />

Je stelt vervolgens in welke knop je wenst te gebruiken, hier de Enter knop. Vervolgens heb<br />

je 3 mogelijkheden voor de actie. Bij Ingedrukt zal de robot beginnen rijden wanneer de enter<br />

knop wordt ingedrukt. Bij Vrijgeven wordt de volgende programmeerblok gestart bij het loslaten<br />

van de knop. Bij Geraakt is dit bij het snel indrukken en terug losgelaten. Wij willen dat<br />

de robot start van zodra de knop wordt ingedrukt dus kiezen we voor Ingedrukt. Download<br />

en start het programma in de NXT en vergeet niet op de enter knop te drukken anders blijft<br />

de TRIBOT geduldig wachten.<br />

vOOrbEELdprOGramma: wachTbLOk mET ENTEr kNOp.rbT


herhaliNg bloK<br />

Wil je het vooruit en achteruit rijden 3 keer achter elkaar herhalen dan kan je dit als volgt doen<br />

Dit is echter niet erg elegant en wat als je de beweging 100 keer moet uitvoeren?<br />

Plaats daarom het Herhaling blok .<br />

Op de volgende instellingen is te zien dat de herhaling blok moet Tellen tot 3.<br />

Andere mogelijkheden zijn de lus eeuwig blijft uitvoeren, wachten op een sensorinput, de lus<br />

gedurende een aantal seconden uitvoeren of wachten op een logische input. Voor de logische<br />

input heb je wel een dataverbinding nodig waarover gesproken wordt in hoofdstuk 5.<br />

Met het Herhaling blok herhaal je dus een deel van het programma een aantal keer.<br />

VOORBEELDPROGRAMMA: HERHALING BLOK.RBT


omschaKel bloK<br />

In het leven neem je dagelijks heel wat omschakels. Als het mooi weer is neem ik mijn zonnebril<br />

mee anders een paraplu. Als ik veel honger heb neem ik een grote portie eten anders een kleine<br />

portie. Je kan het beschouwen als een weg waar je zowel naar links of naar rechts kan gaan<br />

naargelang een conditie al of niet vervuld is. Ook programmeertalen laten toe om schakelopties<br />

in te voegen, in de NXT-G software is dit het Omschakel blok .<br />

We gaan de werking van deze instructie uitleggen aan de hand van de TRIBOT die danst als<br />

er muziek/geluid is maar rechtdoor rijdt als het stil is. Dit is een duidelijk voorbeeld van een<br />

schakeloptie. De conditie die hier vervuld moet zijn is het al dan niet aanwezig zijn van muziek.<br />

Is dit het geval (de conditie is goed) dan moet de robot dansen. Is dit niet het geval (de conditie is<br />

verkeerd) moet de robot rechtdoor rijden. Hiervoor moet je het TRIBOT onderstel wel uitbreiden<br />

met de geluidssensor, anders kan de robot niet detecteren of er muziek in de kamer aanwezig<br />

is. Volg de instructies van de handleiding op pagina 61. Sluit de geluidssensor aan op Poort 2.<br />

Maak vervolgens een nieuw programma aan en plaats een Herhaling blok die je zo instelt dat<br />

hij eeuwig blijft doorgaan. Sleep in dit blok het Omschakel blok. Configureer in het configuratiescherm<br />

dit blok als volgt.<br />

We vragen dus dat de schakeloptie een Sensor controleert, deze sensor is de Geluidssensor die<br />

aangesloten is op Poort 2. Onder Vergelijk stellen we de conditie in. De conditie is hier dat het<br />

geluid groter (>) moet zijn dan 25. Het deel van het bereik waarin de conditie vervuld is wordt in<br />

oranje aangegeven, het deel van het bereik waarin de conditie niet vervuld is wordt in het grijs<br />

aangeduid. Bij de bovenste sequentielijn is de conditie vervuld, dus het geluid bedraagt meer<br />

dan 25. Bij de onderste sequentielijn is de conditie niet vervuld.<br />

Bovenste sequentielijn, als de conditie is vervuld.<br />

Onderste sequentielijn, als de conditie niet vervuld is.


In de bovenste sequentielijn programmeren we nu het dansje. De robot draait om zijn as<br />

eerst naar links en dan naar rechts. In de onderste sequentielijn rijdt de robot rechtdoor. Het<br />

volledige programma ziet er als volgt uit.<br />

Met de volgende instellingen in het configuratieblok:<br />

Deze twee blokken stellen het dansje voor. De robot draait eerst rond zijn as naar links met<br />

de wielen die een halve draai maken en vervolgens hetzelfde maar naar rechts.


Als de conditie niet vervult is dan rijdt de robot onbegrensd rechtdoor aan 50% van het vermogen.<br />

Wegens het Herhaling blok blijft de NXT steeds nakijken of de conditie al dan niet<br />

vervuld is. Van zodra het geluidsniveau dus de waarde 25 overschrijdt, start het dansje.<br />

VOORBEELDPROGRAMMA: DANSJE OP GELUID.RBT<br />

Met het Omschakel blok wijzig je dus het verloop van het programma in twee verschillende<br />

richtingen naargelang een conditie al dan niet vervuld is.<br />

In de volgende hoofdstukken zullen we verschillende sensoren zien die een conditie kunnen<br />

leveren. Het omschakel blok kan ook een conditie krijgen van dataverbinding waarover<br />

gesproken wordt in hoofdstuk 10. Deze optie schakel je in door Controleren op Waarde in te<br />

stellen in plaats van op Sensor.<br />

© Marc-Andre Bazergui - Quebec Lego User Group - (quelug.org)


de sequeNtieliJN<br />

Door de verschillende programmeerblokken achter elkaar op de sequentielijn te plaatsen bepaal<br />

je de logische volgorde van het programma. Je kan echter ook parallelle sequentielijnen<br />

maken waardoor je programma verschillende taken tegelijk uitvoert. Zo kan de hoofdsequentielijn<br />

de beweging van de robot bepalen en een tweede sequentielijn de grijper van de robot<br />

bedienen. Dit doe je door een programmeerblok boven de hoofdsequentielijn te plaatsen. Vervolgens<br />

ga je op de startknop staan en met de linkermuisknop ingedrukt sleep je een tweede<br />

sequentielijn naar het nieuwe programmeerblok.<br />

Je kan ook later in het programma een nieuwe parallelle sequentielijn starten door de shift<br />

toets ingedrukt te houden vanaf een punt van de hoofdsequentielijn en naar boven of beneden<br />

te bewegen met je muis.<br />

OPDRACHT: Programmeer de TRIBOT met de volgende sequentie: 4 keer de sequentie 4<br />

seconden vooruit en 3 seconden achteruit rijden en tegelijkertijd de klauwen van de TRIBOT<br />

open en dicht laten gaan. Voeg eerst aan de robot de klauwen toe zoals beschreven in de<br />

handleiding. Programmatietip: Gebruik een Herhaling blok die eeuwig blijft doorlopen. Plaats<br />

hier twee Verplaats Blokken in, nu enkel voor poort A waar de servomotor van de klauwen is<br />

aan verbonden is. Laat de motor steeds 90 graden draaien in beide richtingen.<br />

`<br />

VOORBEELDPROGRAMMA: VOORUIT EN ACHTERUIT MET KLAUWEN.RBT


miJN bloK<br />

Met Mijn blok bouw je zelf een eigen programmeerblok door een aantal blokken samen te<br />

voegen en er een eigen icoontje aan vast te plakken. Dit is handig wanneer je dezelfde sequentie<br />

blokken regelmatig in je programma nodig hebt, dan hoef je het niet steeds opnieuw<br />

te programmeren. Je kan deze blokken ook gebruiken in andere programma’s. Dit bespaart<br />

heel wat tijd. Je zal zien dat je na een tijdje een hele bibliotheek aan Mijn blokken hebt samengesteld.<br />

Bovendien verbetert deze mogelijkheid ook de leesbaarheid van je programma.<br />

Een groot programma met heel wat programmeerblokken is immers heel onoverzichtelijk.<br />

Rangschik dus de blokken met een bepaalde functie en breng ze onder in een Mijn blok.<br />

Om een Mijn blok aan te maken selecteer je de gewenste blokken door er met je cursor een<br />

denkbeeldige rechthoek rond te tekenen. De geselecteerde knoppen krijgen een blauwe rand.<br />

Ga vervolgens naar Bewerken in het menu en selecteer Maak een Nieuw Mijn Blok.<br />

Geef je programmeerblok een logische naam en een goede beschrijving. Je kan ook nazien<br />

welke programmeerblokken er in het blok zitten. Door op Volgende te klikken bouw je een<br />

eigen icoon door kleine tekeningen met je muis in de bewerkingsmodule te slepen. Klik uiteindelijk<br />

op Afsluiten.<br />

In het werkgebied zal je nu je eigen Mijn blok zien staan. Je vindt trouwens je bibliotheek Mijn<br />

Blokken terug door op de custom tab te drukken en dan op Mijn blokken te drukken.<br />

Je past het blok aan door er dubbel op te klikken of in menu onder Bewerken naar Bewerk<br />

Geselecteerd Mijn Blok te gaan. Je blokken beheren doe je door in het menu onder Bewerken<br />

naar Persoonlijke werkomgeving (Palet) Beheren te gaan.


0<br />

5<br />

hOE TOON jE INfOrMaTIE Op<br />

hET NXT BEELdSchErM?<br />

De NXT heeft een groot LCD beeldscherm waarop heel wat informatie terug te vinden is. De<br />

tekst is enkel in het Engels. Zo geeft het beeldscherm informatie weer of de USB kabel is<br />

aangesloten of dat de bluetooth verbinding werkt. Een icoontje toont het batterijniveau aan.<br />

Je ziet er ook dat het programma nog loopt. Indien het programma is vastgelopen,moet je de<br />

NXT resetten. Met de knoppen loop je ook door het NXT menu. Hoe je door het menu scrolt<br />

staat beschreven in de handleiding. Je kan echter ook zelf informatie en beelden tonen op het<br />

beeldscherm. De NXT display heeft 100x64 dus 6400 pixels. In dit hoofdstuk gaan we bekijken<br />

hoe je het beeldscherm van de NXT moet aansturen.<br />

beeldscherm bloK<br />

Met het Beeldscherm blok toon je zowel een afbeelding, tekst of een tekening op<br />

het scherm. We gaan nu een programma maken dat “Hello World” in een tekstballontje op het<br />

scherm toont.<br />

Sleep vanuit de programmeeromgeving het programmeerblok Beeldscherm in het werkgebied.<br />

Onder Actie selecteer je Afbeelding en onder Bestand kies je voor Talk01. Met je cursor kan je<br />

het beeld vastpakken en op een andere positie plaatsen.


Download en start dit programma. Wat zie je... niets. De reden is dat dit programma zo snel<br />

is uitgevoerd dat je het niet kan zien. Plaats daarom een Wacht blok achteraan en wacht 5<br />

seconden.<br />

Test het programma opnieuw. Nu werkt je programma wel.<br />

Plaats nu achter het wacht blok nog een Beeldscherm blok en een Wacht blok van 5 seconden.<br />

Stel onder Actie de optie Tekst in en schrijf onder Tekst de woorden Hello World.<br />

Download en start dit programma. Je ziet eerst 5 seconden de tekstballon verschijnen en<br />

vervolgens de woorden “Hello World”. Dit komt omdat de optie Wissen is aangevinkt onder<br />

Beeldscherm. Doe het vinkje weg door erop te klikken en probeer opnieuw. Nu zie je eerst<br />

5 seconden de tekstballon verschijnen en dan komt er in de tekstballon de woorden “Hello<br />

World”.<br />

VOORBEELDPROGRAMMA: HELLO WORLD.RBT


Door onder Actie de optie Tekening te kiezen kan je zelf iets tekenen op het beeldscherm.<br />

Je kan ofwel een Punt, Lijn of Cirkel tekenen onder Type. Wil je een tekening met meerdere<br />

punten, lijnen en cirkels dan zal je verschillende Beeldscherm blokken achter elkaar moeten<br />

plakken en telkens de optie Wissen ongedaan maken.<br />

In het beeldscherm configuratiescherm zie je de oorsprong, de positie van een punt en de X<br />

en Y coördinaat aangegeven. De X coördinaat geeft het aantal horizontale pixels weer en de Y<br />

coördinaat het aantal verticale pixels. De oorsprong 0 heeft als coördinaten X=0 en Y=0. Het<br />

aangeduide punt heeft als coördinaten X=15 en Y=35. Dus van de oorsprong worden er eerst<br />

15 pixels naar rechts geteld en dan 35 pixels naar boven. Het punt rechts bovenaan heeft als<br />

coördinaten X=99 en Y=63 omdat het beeldscherm 100 pixels breed en 64 pixels hoog is. Voor<br />

lijnen moet je de begincoördinaten van beide uiteinden van het lijnstuk ingeven en voor cirkels<br />

wordt het centrum gevraagd en de straal.<br />

Je kan de positie van een tekening, tekst of figuur veranderen door de cursor ingedrukt te<br />

houden of de begincoördinaten (linksonderaan) rechtstreeks in te typen.<br />

Ik heb deze tekening gemaakt. Welke mooie tekening kan<br />

jij maken?<br />

VOORBEELDPROGRAMMA: SMILEY.RBT<br />

De actie Reset zal simpelweg heel je beeldscherm wissen.


dataNaveN eN dataverbiNdiNgeN<br />

Het is handig om informatie op het scherm te tonen, maar dan moet die data wel in het programmeerblok<br />

ingevoegd worden. Daarom bestaan er de dataverbindingen en de datanaven.<br />

Je opent de datanaaf door op de tab linksonder van het programmeerblok te klikken (zie het<br />

pijltje op de figuur).<br />

De linkerkant van de datanaaf bevat de inputwaarden,<br />

die naar het programmeerblok<br />

gezonden worden. De rechtkant bevat de<br />

outputwaarden of de waarden die vanuit het<br />

programmeerblok vertrekken.<br />

Al de programmeerblokken hebben een dergelijke<br />

datanaaf, die wel verschillend is van blok<br />

tot blok. Een output contactpunt van de ene<br />

datanaaf verbind je met een input contactpunt<br />

van een andere datanaaf . Deze lijn noemt<br />

men een dataverbinding en transporteert data.<br />

Er bestaan 3 verschillende dataverbindingen<br />

die niet met elkaar verbonden mogen worden.<br />

1. Oranje draden dienen voor het vervoer van tekst. Een tekst bestaat uit letters,<br />

woorden en zelfs cijfers. Met die nummers kan je echter niet meer rekenen.<br />

2. Gele draden transporteren gehele getallen, zowel positief als negatief.<br />

3. Groene draden zijn voor de logische dataverbindingen, deze kunnen enkel Goed of<br />

Verkeerd bevatten.<br />

Je zal zien dat dataverbindingen heel krachtig zijn en je in staat zullen stellen om geavanceerde<br />

programma’s te maken.


We gaan nu een programma schrijven dat het aantal seconden op het scherm toont.<br />

Gebruik hiervoor een Herhaling blok dat je Eeuwig laat lopen. Vink ook de Teller aan<br />

Deze informatie ga je dan als tekst naar het Beeldscherm blok brengen. Sleep vervolgens<br />

een Beeldscherm blok en Wacht blok in het werkgebied. Kies in het beeldscherm configuratiescherm<br />

voor Tekst en stel het wacht blok in op 1 seconde. Door dit wacht blok krijgen we<br />

elke seconde een nieuwe waarde op het scherm.<br />

Wanneer je het output contactpunt van het Herhaling blok gaat verbinden met het Tekst input<br />

contactpunt voor het Beeldscherm blok krijg je een grijze gestippelde lijn. Deze grijze lijn<br />

geeft aan dat je dataverbinding fout is. Dit komt omdat het output contactpunt van het type<br />

getal is, terwijl het input contactpunt van het type tekst is en contactpunten van een verschillend<br />

type mag je niet met elkaar verbinden. Wis daarom de dataverbinding door éénmaal te<br />

klikken op het input contactpunt. Een dataverbinding wissen doe je door aan de uitgang van<br />

de dataverbinding te klikken.<br />

Daarvoor gaan we een extra programmeerblok Getal in tekst invoegen die te vinden is<br />

onder de complete omgeving tab onder Geavanceerd . Dit programmablok zal een<br />

getal omzetten in een tekstwaarde.<br />

Je ziet nu eerst een gele dataverbinding voor het getal en vervolgens een oranje dataverbinding<br />

voor de tekst. Nu zal het programma wel werken. Op het scherm zie je het aantal verstreken<br />

seconden. Probeer het maar eens uit.<br />

VOORBEELDPROGRAMMA: TELLER OP SCHERM.RBT


Een tweede fout ontstaat wanneer je een verbindingspad kunt volgen dat hetzelfde blok twee<br />

keer bezoekt (ongeacht het aantal blokken en verbindingen). Dit is een cyclus en moet vermeden<br />

worden want het geeft aanleiding tot verbroken dataverbindingen en dus een ongeldig<br />

programma. Een ontbrekende input geeft ook aanleiding tot een grijze lijn. Een laatste voorkomende<br />

fout is wanneer je teveel output contactpunten aansluit op één input contactpunt. Je<br />

mag daarentegen wel meerdere input contactpunten aansluiten op één output contactpunt.


Dit is het schema van de verschillende kenmerken van de contactpunten op de datanaaf van<br />

het Beeldscherm blok:<br />

Contactpunt Datatype<br />

Actie Getal 0-5<br />

Mogelijk<br />

bereik<br />

Wissen Logisch Goed/fout<br />

Bestandsnaam<br />

Tekst<br />

Max. 15<br />

tekens<br />

Tekst Tekst Tekst<br />

Je kan deze ook terugvinden in de helpfile die op te roepen is vanuit het Klein hulpvenster .<br />

De datanaaf van elk programmeerblok is hierin beschreven.<br />

Deze dataverbindingen zijn heel handig om fouten uit je programma te halen of te debuggen<br />

zoals ze dat in computertaal noemen. Waarden opgemeten door sensoren kan je zichtbaar<br />

maken door een dataverbinding van de sensor, over de Getal in tekst blok, naar het beeldscherm<br />

te sturen.<br />

OPDRACHT: Tracht nu zelf een volledig functionerende stopwatch te programmeren die loopt<br />

wanneer je op de Enter knop drukt en stopt wanneer je op de linker knop drukt. Wanneer je<br />

vervolgens terug op enter drukt zal de teller vanaf 0 opnieuw starten.<br />

VOORBEELDPROGRAMMA:STOPWATCH.RBT<br />

Wat de waarden betekenen Dit contactpunt<br />

wordt genegerd<br />

als...<br />

0 = Afbeelding, 1 = Tekst, 2 = Punt,<br />

3 = Lijn, 4 = Cirkel,<br />

5 = RestoreSysteemscherm<br />

Goed = Leeg het scherm<br />

Fout = Leeg het scherm niet<br />

X Getal 0-99 X-coördinaat<br />

Y Getal 0-63 Y-coördinaat<br />

Bestandsnaam van het afbeeldingsbestand<br />

Actie is geen<br />

afbeelding<br />

Actie is geen<br />

tekst<br />

Eindpunt X Getal 0-99 Eind X coördinaat (alleen lijn) Actie is geen lijn<br />

Eindpunt Y Getal 0-63<br />

Eind Y-coördinaat (alleen<br />

lijn)<br />

Radius Getal 0-120 Radius (alleen cirkel)<br />

Actie is geen lijn<br />

Actie is geen<br />

cirkel


OPGELET: Beeldscherm blokken zijn heel leuk, maar omdat er zoveel pixels op een display<br />

zijn vereisen Afbeeldingen heel wat geheugen van je NXT. Heb je te weinig geheugen dan laat<br />

je dit beter achterwege. Als je op knop rechtsboven (NXT venster) van de Controller drukt en<br />

dan naar de tab Geheugen gaat dan zie je hoeveel geheugen je over hebt op de NXT. Ook is<br />

weergegeven welke bestanden er zijn opgeslagen. Het deel Grafiek bevat de afbeeldingen die<br />

gebruikt worden voor de display. Na een tijdje zal je NXT vol programma’s zitten. Wis daarom<br />

regelmatig de programma’s die je niet meer gebruikt.<br />

Een radar zoekt de omgeving af naar vliegtuigen, schepen of obstakels. De radar zendt<br />

radiogolven uit en aan de hand van het ontvangen signaal worden de verschillende posities<br />

bepaald. Maar afstanden kan je ook meten met de ultrasone sensor. Deze TRIBOT RADAR is<br />

geprogrammeerd om 360° rond te draaien en dan een beeld van de afstanden op het scherm<br />

te tonen.<br />

© Krystian Majewski


6<br />

lamp bloK<br />

hOE BEdIEN jE dE LaMp VaN<br />

dE LEGO MINdSTOrMS NXT?<br />

De educatieve versie van de LEGO Mindstorms NXT bevat een extra lampje. Dit lampje zit<br />

echter niet in de standaarddoos. Via de Mindstorms website kan je de NXT-G lamp programmeerblok<br />

downloaden om de lamp te bedienen. In dit hoofdstuk gaan we een knipperlicht<br />

programmeren. We plaatsen eerst een Herhaling blok die we oneindig laten doorlopen.<br />

In dit programmeerblok plaatsen we tweemaal een Lamp Blok met erachter een<br />

Wacht blok.<br />

Het eerste Lamp blok stellen we al volgt in.<br />

De lamp blok schakelen we aan Poort A, we wensen dat de lamp aangaat (On) en met volledige<br />

intensiteit (Intensity=100).<br />

De lamp laten we 0,3 seconden aanstaan, dit stellen we in via het configuratiescherm van het<br />

Wacht blok.


Het tweede Lamp blok stellen we in als volgt.<br />

De lamp is nog aangesloten aan Poort A, nu schakelen we de lamp uit (Off). De lichtintensiteit<br />

is niet meer instelbaar.<br />

Gedurende 0,3 seconden wordt de lamp uitgeschakeld hetgeen ingesteld wordt in het Wacht blok.<br />

VOORBEELDPROGRAMMA: KNIPPERLICHT.RBT


0<br />

7<br />

hOE BEwEEGT dE LEGO<br />

MINdSTOrMS NXT?<br />

De NXT kan drie interactieve servomotoren aansturen via de poorten A, B en C. In de motor<br />

zit een sensor die detecteert hoeveel graden de motor draait en dit tot 1 graad nauwkeurig.<br />

Met opgeladen batterijen rijdt de robot ongeveer 3-4 uur.<br />

verplaats bloK<br />

NXT puppy hond.<br />

© Damien Kee - domabotics.com<br />

We hebben reeds gezien dat we de robot kunnen bewegen door middel van het Verplaats blok<br />

van de programmeeromgeving naar de sequentielijn van het werkgebied te slepen. We gaan<br />

het configuratiescherm eens nader bekijken.<br />

Onder Poort stel je in aan welke poorten je de bewegingsmotoren hebt gekoppeld. Standaard<br />

is dat Poort B voor de rechter bewegingsmotor en Poort C voor de linker bewegingsmotor<br />

wordt gebruikt. Ik raad je aan deze standaard te volgen. Door deze instelling worden beide<br />

motoren gesynchroniseerd zodanig dat de snelheid op elkaar is afgestemd. Als je dus de ene


motor tegenhoudt stopt de andere motor ook met draaien. Doe dit echter niet te lang. Onder<br />

Richting kies je of de wielen voor- of achteruit moeten bewegen, of moeten stoppen. Als Stop<br />

wordt geselecteerd worden de motoren gereset (op nul gesteld). De draairichting is relatief,<br />

ze hangt dus af van hoe je de motoren hebt ingebouwd in de robot. Onderstaande motor<br />

draait in de voorwaartse richting.<br />

Afspraak voorwaartse draairichting van de servomotor.<br />

Met Besturing bepaal je de draairichting door middel van een stuurschuif. In het midden zal<br />

de robot rechtdoor rijden. Als je ze aan de uiteinden plaatst, zal de robot om zijn as draaien.<br />

Het Vermogen stel je in tussen 0% en 100%. Voor een rijdend voertuig zal dit betekenen dat<br />

je de snelheid gaat instellen. Zonder belasting zal de as 150 keer per minuut draaien op vol<br />

vermogen. Bij een motor voor een grijper zal een hoger vermogen een<br />

grotere kracht genereren. Onder Tijdsduur stel je in of de motor Onbegrensd<br />

moet ronddraaien of een aantal Graden, Omwentelingen of<br />

Seconden. 1 omwenteling komt overeen met 360°. Wanneer de servomotor<br />

zijn actie heeft beëindigd geef je aan of de motor moet remmen<br />

(Remmen) of vrij uitlopen (Vrijlopen). Je kan het vergelijken wanneer je<br />

stopt met trappen op je fiets: ofwel kan je dan remmen of je gewoon laat<br />

uitbollen. Moet de robot een precieze afstand afleggen, dan kies je voor<br />

remmen. Anders bolt de robot nog uit. Helemaal rechts staan in het<br />

groen de feedbackmodules die het aantal graden of volle omwentelingen<br />

van je motoren tellen. Druk op de reset knop R om de waarden op nul<br />

te zetten. Je kunt alleen feedback krijgen als de motoren op de gekozen<br />

poorten aangesloten zijn en er communicatie met de NXT is.<br />

Al deze instellingen zijn trouwens instelbaar met de dataverbindingen en<br />

contactpunten van de datanaaf van het Verplaats blok. Kijk in de helpfile<br />

wat de verschillende contactpunten betekenen, maar dikwijls is het<br />

icoontje duidelijk genoeg.


opNeem/afspeel bloK<br />

Soms moet de robot heel ingewikkelde bewegingen uitvoeren en dan kan je beter tonen hoe<br />

de robot moet bewegen in plaats van alles te programmeren.<br />

Gebruik hiervoor het Opneem/afspeel blok . In de servomotor zit immers een sensor<br />

die de positie van de as gaat detecteren en daarom wordt hij ook interactief genoemd. Bij het<br />

opnemen worden dus deze waardes opgeslagen in het geheugen van de NXT. Zet eerst de actie<br />

op Opnemen in het configuratiescherm. Je kan immers niets afspelen zonder het eerst op<br />

te nemen. Geef de actie een goede naam en selecteer welke poorten je wenst te gebruiken.<br />

Als je de drie poorten neemt, kan je bijvoorbeeld tegelijkertijd de beweging van de robotarm<br />

voordoen. De laatste instelling Tijd is hoe lang je wenst op te nemen in seconden. Download<br />

en start dit programma, neem de robot vast en rijdt het gewenste parcours. Hoe lang je kan<br />

opnemen hangt af van het beschikbare geheugen van de NXT, maar meestal kan je tot enkele<br />

minuten opnemen. De status van het geheugen kijk je na door op de knop rechtsboven (NXT<br />

venster) van de Controller te drukken en dan naar de tab Geheugen te gaan. Het deel Opnemen/Afspelen<br />

bevat de bestanden die door deze functie worden ingenomen.<br />

Download en start het programma en toon de gewenste beweging aan de robot. Zet nu de<br />

actie op Afspelen en bekijk het resultaat. Zoals je zult zien is de beweging niet exact gelijk aan<br />

de opgenomen beweging. Neem eens enkele danspasjes op en bouw dan een volledige dans<br />

op door verschillende opnames achter elkaar te plaatsen.<br />

VOORBEELDPROGRAMMA: OPNEEM AFSPEEL BLOK.RBT


otatieseNsor bloK<br />

De servomotor is wegens zijn ingebouwde rotatiesensor ook een sensor en deze waarde leest<br />

men uit met het (Ingebouwde) rotatiesensor blok dat terug te vinden is onder de complete<br />

omgeving tab onder Sensor .<br />

De korte datanaaf zal automatisch getoond worden en geeft de logische waarde Goed weer<br />

wanneer de motor vooruit draait en Verkeerd indien de motor achteruit draait. Het tweede<br />

output contactpunt geeft het aantal omwentelingen of het aantal graden, naargelang de instelling<br />

in het configuratiescherm.<br />

Eerst stel je in welke poort er opgemeten moet worden. Onder Actie bepaal je of de actuele<br />

waarde uitgelezen moet worden of de teller op nul gezet moet worden (Reset). De teller kan je<br />

bijvoorbeeld op nul zetten wanneer je aan de start verschijnt. Stel met behulp van de radioknoppen<br />

de richting in die bewaakt moet worden: vooruit of achteruit. Je kan de uitkomst van<br />

deze bewaking uitlezen door de lange datanaaf te voorschijn te laten komen. Als je dit fout<br />

doet zal de teller niet in staat zijn de gewenste waarde te detecteren. Gebruik het groter dan<br />

(>) of kleiner dan (


motor bloK<br />

Je zou kunnen zeggen we hebben toch al een Verplaats blok, waarom dan nog een Motor blok?<br />

Bij het Verplaats blok zijn de bewegingen van de ingestelde poorten gekoppeld zodanig dat<br />

ze mooi synchroon bewegen, bij het Motor Blok is de beweging onafhankelijk van de andere<br />

servomotoren. Het Verplaats blok is dus aangewezen bij verplaatsingen waarbij de snelheid<br />

van beide motoren aan elkaar is afgestemd, bijvoorbeeld om een gewenste rechte lijn aan te<br />

houden. Het Motor blok ga je daarentegen gebruiken om bijvoorbeeld een grijper of robotarm<br />

te bewegen, want deze beweging is onafhankelijk van de andere motoren.<br />

Het Motor blok is terug te vinden onder de complete omgeving tab onder Actie .<br />

In het configuratiescherm kan je dus maar één poort (A, B of C) per programmeerblok instellen.<br />

Enkele instellingen zoals Richting, Vermogen, Tijdsduur en Volgende actie zijn gelijkaardig<br />

met het Verplaats blok. We gaan hier enkel de verschillen aangeven. Onder Actie stel je in<br />

hoe het vermogen wordt opgebouwd. Bij Constante wordt in één keer het gevraagde vermogen<br />

aan de motoren geleverd. Dit kan je vergelijken met het gaspedaal in één keer volledig<br />

in te duwen of plots te stoppen met energie leveren als de volgende actie in vrijloop of remmen<br />

wordt gezet. Bij Oplopen ga je geleidewlijk aan het gaspedaal induwen tot het gewenste<br />

vermogen bereikt wordt en omgekeerd bij Aflopen. Als je de checkbox van Motorvermogen<br />

aanzet ga je -om in autotermen te blijven- de cruise controle aanzetten. De vermogensniveau<br />

regeling zal proberen te compenseren (tot een maximum van 100%) voor elke weerstand<br />

of slip die de motor tegenkomt. Bij een aangevinkte Wacht op voltooiing zullen de verdere<br />

programmeerblokken niet uitgevoerd worden zolang de Tijdsduur niet verlopen is. Wens je<br />

ondertussen iets te tonen op het beeldscherm of een muziekje af te spelen, ontvink je Wacht<br />

op voltooiing.


Wanneer je foto’s wil afdrukken gebruik je best een printer. Voor technische plannen echter wordt<br />

vaak een plotter gebruikt. Een pen beweegt loodrecht over een vel papier, één servomotor staat in<br />

voor de beweging links-rechts over het papier en een tweede motor zorgt voor de voor-achter beweging.<br />

Een derde motor doet de pen op en neer gaan. De 3 NXT-servomotoren zijn hiervoor geschikt<br />

zoals getoond met de NXT 8094 PLOTTER.<br />

© Krystian Majewski


8<br />

geluid bloK<br />

hOE MaakT dE LEGO<br />

MINdSTOrMS NXT GELUId?<br />

De NXT heeft een ingebouwde luidspreker en wordt geactiveerd met het Geluid blok .<br />

In het configuratiescherm kies je om een Geluidsbestand af te spelen. Het gewenste Bestand<br />

selecteer je aan de rechterkant van het configuratiescherm. Door een bestand aan te duiden<br />

zal door de boxen van je computer het muziekfragment afgespeeld worden. Het Volume is instelbaar<br />

tussen 0 en 100. Kies je voor Herhalen dan zal gedurende het verdere verloop van je<br />

programma het gekozen bestand herhaald worden tot het programma een nieuw Geluid blok<br />

tegenkomt met een ander bestand of indien Stop aangeduid is. Indien Herhalen niet is aangevinkt<br />

dan heb je de mogelijkheid om al dan niet te wachten op voltooiing. Is Wacht op voltooiing<br />

aangevinkt dan zal het programma niet verder gaan naar het volgende programmablok<br />

tot het muziekbestand volledig is afgespeeld. Is Wacht op voltooiing niet aangevinkt dan start<br />

het programma het muziekbestand en gaat verder naar het volgende programmeerblok. Dergelijke<br />

geluidsbestanden nemen, net als afbeeldingen en het opnemen van bewegingen, veel<br />

geheugenplaats in van de NXT. Je laat ze dus beter achterwege als de NXT te weinig geheugen<br />

heeft.<br />

VOORBEELDPROGRAMMA: GELUID BLOK.RBT


Je NXt lateN ziNgeN<br />

Wil je daarentegen zelf een muziekje componeren duid dan de optie Toon aan. Rechts verschijnt<br />

er een klein toetsenbord met drie octaven uit de notenbalk. Klik met je muis op een<br />

toets van dit kleine toetsenbord, de toon zal erboven getoond worden en weerklinken door de<br />

boxen van je computer. Een toon is een stukje geluid met een vaste frequentie en we hebben 7<br />

stamtonen: do-re-mi-fa-sol-la-si. Ze staan aangeduid op het toetsenbord met de letters C-D-<br />

E-F-G-A-B en worden als volgt genoteerd op een notenbalk.<br />

Elke toon heeft een vaste frequentie. Het stemmen van een muziekinstrument betekent elke<br />

toon de juiste frequentie geven. Zo moet de toon la een frequentie hebben van 440Hz (dus de<br />

lucht trilt 440 keer per seconde). Wanneer deze frequentie verdubbelt dan heb je terug een la,<br />

maar dan wel een octaaf hoger. Toch kan je een la van een viool of een piano van elkaar onderscheiden.<br />

Dat komt omdat er naast de grondfrequentie van 440Hz, nog andere frequenties<br />

geproduceerd worden zodanig dat het geoefende oor het onderscheid kan maken. Dit noemt<br />

men de klankkleur of het timbre van een muziekinstrument. De NXT produceert echter enkel<br />

zuivere frequenties. Je kan ook telkens maar 1 toon tegelijk laten horen, waardoor de muziekjes<br />

geproduceerd door de NXT monotoon (uit het Grieks één-toon) worden genoemd.


Staat op een lijn van de notenbalk vooraan een ronde b (het molteken) dan moet je elke noot<br />

op die lijn een halve toon verlagen. Hiervoor dienen de zwarte toetsen op het toetsenbord, er<br />

wordt dan achter de letter een #-teken geplaatst.<br />

Laten we nu eens trachten het beroemde Star Wars Theme melodie te programmeren in de<br />

NXT. Je ziet dat dit stuk uit 19 noten bestaat. Elk Geluid blok geeft echter maar één toon weer,<br />

je zal er dus 19 achter elkaar moeten plaatsen.<br />

Het muziekstukje moet eveneens met een zeker ritme gespeeld worden dat men in muziektermen<br />

de maat noemt. Mensen die muzieklessen gevolgd hebben zien dat dit stukje met een<br />

maat van 4/4 gespeeld moet worden en we dus telkens tot 4 moeten tellen. Een wit bolletje is<br />

een hele noot en duurt 4 tellen. Hele noten zitten echter niet in deze melodie. Een wit bolletje<br />

met een stokje is een halve noot en duurt 2 tellen lang. Een zwart bolletje met een stokje is<br />

een kwart noot en duurt 1 tel. Een zwarte noot met stokje en vlagje, of twee (of meer) zwarte<br />

noten met stokjes en met elkaar verbonden met één streep zijn achtsten. Een achtste noot<br />

duurt dus een halve tel, twee achtsten een hele tel. Wanneer ze echter met drie aan elkaar<br />

hangen met een 3 boven of onder, dan noemt men dit een triool en deze 3 noten samen duren<br />

even lang als 1 tel. Bijgevolg duurt één noot uit een triool 1/3 tel. Dus naast de frequentie per<br />

noot moet je in het configuratiescherm eveneens instellen hoelang de noot moet spelen en<br />

dit wordt uitgedrukt in seconden. We gaan uit van het gegeven dat een hele noot 2 seconden<br />

duurt. Dan duurt de halve noot 1 seconde, de kwart noot 0,5 seconde en de noten uit de triool<br />

van achtste noten elk 0,167 seconden.<br />

Tracht nu voor elke noot de juiste toets te vinden en de tijdsduur. Vink steeds aan Wacht op<br />

voltooiing, eerst moet immers de ene noot volledig gespeeld zijn voor het programma naar de<br />

volgende noot mag gaan.<br />

VOORBEELDPROGRAMMA: STARWARS.RBT


1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

Toon en tijdsduur van de 19 noten uit de Star<br />

Wars theme melodie<br />

Als je alles in een Herhaling blok zet zal je<br />

robot deze melodie blijven spelen.


0<br />

0<br />

9<br />

hOE hOOrT dE LEGO MINdSTOrMS NXT?<br />

De geluidssensor van de LEGO Mindstorms NXT kan geen woorden herkennen of geluid opnemen,<br />

enkel geluidniveaus opmeten. Als we heel luid gaan praten dan gaat het membraan<br />

van de microfoon heel hard heen en weer bewegen, gaan we zachtjes praten dan gaat het<br />

membraan maar heel weinig heen en weer bewegen. Dit verschil kunnen we detecteren met<br />

de geluidssensor van de NXT. Het geluidsniveau meten we in decibel (afgekort dB). Geritsel<br />

van blaren is 10 dB, praten is tussen de 40 en 60 dB. Heel veel lawaai doet niet alleen<br />

het membraan van de microfoon hard bewegen, het doet het ook met bepaalde delen van je<br />

gehoor. Dus in een ruimte met veel lawaai verblijven of je iPod te luid zetten (meer dan 90 dB)<br />

kan je gehoor blijvend beschadigen. De NXT geluidssensor meet tot 90 dB.<br />

Ritselende<br />

bladeren<br />

decibelschaal.<br />

10<br />

Bibliotheek<br />

20<br />

Ademen<br />

30<br />

Fabriek<br />

40<br />

50<br />

60<br />

Gefluister<br />

Vrachtwagen<br />

70<br />

80<br />

Onweer<br />

90<br />

Klaslokaal<br />

100<br />

Rockconcert<br />

110<br />

Metro<br />

120<br />

130<br />

140<br />

Opstijgend<br />

vliegtuig


geluidsseNsor bloK<br />

De sensor kan ook via een contactpunt in de datanaaf in dBA mode gezet worden. Het menselijke<br />

oor is niet voor al de frequenties even gevoelig. De dBA gaat het gemeten geluidsniveau<br />

corrigeren zodanig dat het gemeten geluidsniveau meer overeenkomt met hoe wij als mens<br />

het geluidsniveau ervaren.<br />

Het Geluidssensor blok is terug te vinden onder de complete omgeving tab onder<br />

Sensor . De korte datanaaf van het programmeerblok bevat de uitlezing van het<br />

geluidsniveau en is een getal tussen 0 en 100.<br />

Dit is een eenvoudig programma om het geluidsniveau op het scherm te tonen.<br />

VOORBEELDPROGRAMMA: GELUIDSENSOR.RBT<br />

4-5 % komt overeen met een stille kamer<br />

5-10% is wanneer er op een afstand van de sensor gepraat wordt<br />

10-30% wanneer je in de sensor praat of wanneer er muziek speelt<br />

30-100% wanneer je gaat roepen in de sensor of bij heel luide muziek


teKst bloK<br />

Dit programma geeft enkel een getal op het scherm. We zouden liever een uitlezing hebben:<br />

“Geluidsniveau is: 21 %”.<br />

We gaan hiervoor een nieuw programmeerblok introduceren: het Tekst blok .<br />

Dit programmeerblok bevindt zich in de complete omgeving tab onder Geavanceerd .<br />

Het blok gaat tot 3 verschillende stukken tekst aan elkaar plakken.<br />

In dit programma wordt de tekst “Geluidsniveau” geschreven door het eerste Beeldscherm<br />

blok, verplaats de tekst hiervoor wel een stuk naar boven (bijvoorbeeld op regel 3, zoals je<br />

rechts onderaan in het configuratiescherm kan instellen). Het Tekst blok ga je als volgt instellen.<br />

Schrijf in het invulveld A de tekst “is: ”, in B kan je niets invullen want het input contactpunt<br />

is reeds verbonden via de Getal in tekst blok met de geluidssensor en vervolgens “%” in C.<br />

Normaal moet je scherm er dan zo uitzien als je dit<br />

programma download en start op de NXT.<br />

VOORBEELDPROGRAMMA: GELUIDSDRUKMETER.RBT


Je hebt zopas een geluidsdrukmeter gemaakt. Dit zijn meestal dure<br />

toestellen. Ze moeten immers heel precies gemaakt worden. Ze worden<br />

onder andere gebruikt om de geluidsoverlast in de omgeving van een<br />

luchthaven en discotheken te controleren.<br />

Geluidsdrukmeter.<br />

De geluidssensor kunnen we ook gebruiken als conditie voor de Wacht<br />

blok, Herhaling blok en Omschakel blok. Kies hiervoor in het configuratiescherm<br />

onder Controleer voor Sensor en opteer dan voor Geluidssensor.<br />

In hoofdstuk 4 hebben gezien hoe we de geluidssensor gebruikt<br />

hebben om de conditie van het Schakeloptie blok te bepalen. De robot<br />

ging dansen bij muziek en reed rechtdoor wanneer het stil was.


10<br />

hOE zIET dE LEGO MINdSTOrMS NXT?<br />

De NXT lichtsensor bestaat uit één enkele fotodiode en leest bijgevolg enkel de lichtintensiteit<br />

af. De sensor ziet dus enkel grijstinten en geeft een percentage weer: 0% betekent donker,<br />

100% veel licht. Zo kan je de robot programmeren dat hij enkel rijdt als er licht is in je<br />

kamer en gaat slapen indien het donker is. De sensor straalt, indien gewenst, een rood licht<br />

uit via de ingebouwde led (door aanvinken Genereer licht). Wil je bijvoorbeeld de robot over<br />

een zwarte lijn laten rijden, dan schakel je best de rode led aan anders ziet de lichtsensor<br />

enkel zijn eigen schaduw.<br />

lichtseNsor bloK<br />

Het Lichtsensor blok bevindt zich in de complete omgeving tab onder Sensor .<br />

De korte datanaaf van het programmeerblok bevat de uitlezing van de lichtintensiteit.<br />

De lichtsensor kunnen we ook gebruiken als conditie voor het Wacht blok, Herhaling blok en<br />

Omschakel blok. Kies hiervoor in het configuratiescherm onder Controleer voor Sensor en<br />

opteer dan voor Lichtsensor. We gaan nu de robot zo programmeren dat een zwarte lijn gevolgd<br />

wordt. De zwarte lijn op de testplaat is hiervoor geschikt of je kan met zwarte tape een<br />

parcours op de grond afplakken. Ook moet je de TRIBOT volledig afwerken zoals beschreven<br />

staat in de handleiding. Verbindt de lichtsensor met Poort 3. De lichtsensor is naar beneden<br />

gericht, de robot merkt dus of de lichtsensor boven de zwarte lijn staat of niet. We willen<br />

dat de volgende sequentie gevolgd wordt. We starten met de lichtsensor boven de zwarte<br />

lijn. Dan gaan we de rechtermotor, aangesloten op poort B, aansturen tot de lichtsensor wit<br />

detecteert, de robot bevindt zich dan naast de zwarte lijn. Vervolgens stoppen we de rechtermotor<br />

en zetten de linkermotor aan tot de lichtsensor weer de zwarte lijn ziet, dan moet de<br />

linkermotor worden afgezet en beginnen we terug van vooraan.<br />

We hebben dus duidelijk een loop nodig die Eeuwig blijft duren. We gaan werken met Motor<br />

blok in plaats van Verplaats blok, de beweging van beide motoren gebeurd immers apart en<br />

niet gekoppeld.<br />

Eerst wordt de rechtermotor aangestuurd die aangesloten is aan Poort B. We laten deze Onbegrensd<br />

Vooruit rijden. Zet het Vermogen niet te hoog, 50 is een goede waarde, anders gaat<br />

de robot de lijn te ver voorbijrijden en vindt hem daarna niet meer terug.


We stellen het Wacht blok in op Lichtsensor, die aangesloten is op Poort 3. We wachten tot<br />

de lichtsensor een waarde groter (>) dan 50 aangeeft en de robot dus naast de lijn rijdt. We<br />

hebben de rode led aangezet omdat anders de lichtsensor enkel zijn eigen schaduw ziet (vink<br />

aan Genereer licht).<br />

Eerst zetten we de rechtermotor af (Remmen en geen Vrijloop).<br />

En starten dan de linkermotor, aangesloten op Poort C, met hetzelfde vermogen.<br />

Nu moeten we wachten tot de lichtsensor weer de zwarte lijn detecteert. Dus als de waarde<br />

van de lichtsensor tussen 0 en 50 ligt.<br />

Als deze conditie vervuld is dan zetten we de linkermotor uit en starten we alles terug opnieuw.<br />

Download en start het programma. Als je op de verschillende programmeerblokken klikt<br />

tijdens de uitvoering van het programma zie je rechts in de feedbackmodules de uitlezing van<br />

de sensoren. Je zal merken dat het robotje steeds aan de linkerkant van de lijn blijft rijden.<br />

VOORBEELDPROGRAMMA: LIJNVOLGER.RBT


No hands across America. In 1995 slaagden onderzoekers erin om zonder handen van de<br />

Oostkust van Amerika naar de Westkust te rijden. Zoals onze robot volgde de autorobot NA-<br />

VLAB een lijn die het met zijn camera zag. De lijn was hier de wegmarkering langs de weg.<br />

© Photos courtesy of Carnegie Mellon, Robotics Institute<br />

NXt KleureNseNsor<br />

Wil je dat de robot ook kleuren onderscheidt dan kan je de NXT Color Sensor (kleurensensor)<br />

van Hi Technic kopen in de online LEGO winkel of op www.hitechnic.com. De NXT bevat<br />

3 verschillende kleuren Leds (die je niet kan uitzetten) en 3 verschillende fotodiodes die het<br />

gereflecteerde licht terug opvangen, elk natuurlijk met zijn eigen filter.<br />

Op de website moet je eveneens de NXT Software Color Sensor Block ( ) downloaden<br />

om te gebruiken in de NXT-G software. Vergeet ook niet de Firmware te updaten zoals beschreven<br />

staat in de handleiding!<br />

De eerste mogelijkheid om de kleur op te meten is met het “Color Number” (kleurnummer)<br />

output contactpunt. De kleur krijgt een nummer van 1 tot 17 volgens de volgende verdeling.


Een kleur is ook uit te drukken volgens het RGB-systeem. RGB staat voor de drie basiskleuren<br />

waaruit het licht bestaat: R(ood)-G(roen)-B(lauw). Voor elke kleur wordt aangegeven<br />

hoeveel er van de basiskleur inzit. Voor de NXT Color sensor is dit een getal tussen 0 en 255<br />

en de datanaaf bevat dan ook 3 outputcontactpunten met de waarden voor rood, groen en<br />

blauw. (255-0-0) is dus zuiver rood, (0-255-0) is volledig groen en (0-0-255) blauw. De drie<br />

kleuren samen geven wit licht (255-255-255) en zwart is (0-0-0). Door combinaties ontstaan<br />

de mengkleuren als paars (139-0-255) en geel (255-255-0).<br />

Foto ontbonden in de 3 RGB kleuren.<br />

= + +<br />

We gaan nu een programma voor de NXT Color sensor maken zodanig dat er op het scherm<br />

verschijnt welke kleur we aan de sensor tonen. We hebben dus een programma nodig dat als<br />

het kleurnummer gelijk is aan 0: wit schrijft, 1 paars noteert, 2 is dan blauw enzovoort tot we<br />

aan 17 komen voor zwart.<br />

Dit is een Omschakel blok maar nu niet met een conditie die enkel Goed of Verkeerd<br />

kan zijn, maar met meerdere mogelijkheden. Nu is deze mogelijkheid ook voorzien in het<br />

Omschakel blok. Controleer hiervoor een Waarde en vervolgens Getal. De output van de<br />

kleursensor is immers een getal van 0 tot 17. Ontvink vervolgens Vlak beeld en je zal zien dat<br />

je aan de rechterkant van het configuratiescherm extra voorwaarden kan toevoegen. Voeg<br />

hier 18 extra voorwaarden toe door telkens op het plusteken (+) te drukken! Die je de waarden<br />

geeft van 0 tot en met 17. Met het minteken (-) verwijder je voorwaarden.<br />

Het programmeerblok in het werkgebied ziet er nu anders uit dan wat we tot nu toe gezien<br />

hebben. Bovenaan het programmeerblok zal je nu 18 tabs zien staan, elk met een eigen sequentielijn.<br />

Voeg op de sequentielijn van elke tab een Beeldscherm blok toe waarin je telkens<br />

de naam van de desbetreffende kleur invoegt.<br />

VOORBEELDPROGRAMMA: KLEUR OP SCHERM.RBT


Download en start het programma en toon aan de sensor de kleuren die bijvoorbeeld op de<br />

meegeleverde testplaat staan. Een andere mogelijkheid is dat je de LEGO ROBOARM T-56<br />

maakt en telkens een andere beweging gaat programmeren op de sequentielijn naargelang<br />

de kleur van de bal die de robotarm vastgrijpt. Ook kan je nu de robot verschillende kleurenlijnen<br />

laten volgen.<br />

Via de kleurensensor sorteert<br />

de robot de LEGO-blokjes in<br />

verschillende bakjes.<br />

©HiTechnic


11<br />

hOE VOELT EEN LEGO MINdSTOrMS NXT?<br />

De tastsensor van de LEGO NXT is de eenvoudigste sensor die er bestaat en is niets meer<br />

dan een gewone aan/uit schakelaar. Er bestaan verschillende soorten schakelaars. Bij sommige<br />

schakelaars moet je blijven drukken om het contact te behouden. Dit is bijvoorbeeld<br />

het geval bij een deurbel. Laat je de bel los, dan stopt ook het signaal. Andere schakelaars<br />

behouden het contact ook na het drukken, je moet nogmaals drukken om het contact weer te<br />

verbreken. Een voorbeeld hiervan zijn de lichtschakelaars bij je thuis. De tastsensor geleverd<br />

bij LEGO NXT is van de eerste soort. Met de tastsensor kan je dus bepalen of er zich een<br />

bal tussen de grijpers van je NXT Robotarm bevindt of niet en of de robot tegen een muur is<br />

gebotst of niet.<br />

tastseNsor bloK<br />

Het Tastsensor blok is terug te vinden onder de complete omgeving tab onder<br />

Sensor .<br />

De korte datanaaf van het programmeerblok bevat de uitlezing van de sensor en is dus een<br />

logisch contactpunt dat Goed is indien ingedrukt en Verkeerd indien de schakelaar niet is<br />

ingedrukt.<br />

De tastsensor kan ook gebruikt worden als conditie voor het Wacht blok, Herhaling blok en<br />

Omschakel blok. Kies hiervoor in het configuratiescherm onder Controleer voor Sensor en<br />

opteer dan voor Tastsensor.<br />

We gaan nu een geavanceerd programma schrijven om je reactietijd te meten. De LEGO NXT<br />

gaat op een willekeurig tijdstip tussen 2 en 10 seconden “Start” roepen. Het gaat dan meten<br />

hoe snel jij op de tastsensor drukt. Zorg er dus voor dat je op de NXT de tastsensor aansluit<br />

op Poort 1. Druk je echter te vroeg dan gaat de NXT dat ook zeggen. Om dit programma te<br />

verwezenlijken moeten we een aantal nieuwe programmeerblokken voorstellen die terug te<br />

vinden zijn in de complete omgeving tab onder Data .


0<br />

willeKeurig bloK<br />

We doen al de berekeningen in honderdste van een seconde. De NXT rekent immers enkel<br />

met gehele getallen. Dus 1 seconde is bijgevolg 100 en 3,5 seconde wordt 350. We wensen dat<br />

de NXT op een willekeurig moment een signaal geeft. De NXT moet ons dus een willekeurig<br />

getal geven.<br />

Hiervoor bestaat het Willekeurig blok . Op dit blokje staat niet toevallig een dobbelsteen<br />

want als we met de dobbelsteen gooien dan krijgen we een willekeurig getal tussen 1 en 6.<br />

De korte datanaaf bevat de waarde van het willekeurig getal. Wij zouden graag het Willekeurig<br />

blok een getal laten uitkiezen tussen 200 en 1000 om een tijd tussen 2 en 10 seconden te<br />

hebben. In het configuratiescherm hebben we echter maar getallen tussen 0 en 100. Daarom<br />

gaan we het blok een getal laten kiezen tussen 20 en 100 en daarna vermenigvuldigen we<br />

dit getal met 10 om getallen tussen 200 en 1000 te bekomen. We kunnen ook een getal laten<br />

gooien tussen 2 en 10 en erna vermenigvuldigen met 100, maar dan zijn het aantal mogelijkheden<br />

veel beperkter: 2, 3, 4, 5, 6, 7, 8, 9 en 10 in plaats van 20, 21, 22, 23,..., 98, 99, 100.<br />

reKeN bloK<br />

We moeten dit willekeurig getal tussen 20 en 100 dus vermenigvuldigen met 10.<br />

Hiervoor bestaat het Reken blok . In het Reken blok kunnen we zowel 2 getallen Optellen,<br />

Aftrekken, Vermenigvuldigen als Delen. Hier nemen we Vermenigvuldigen. We verbinden met<br />

een dataverbinding het output contactpunt van het Willekeurig blok met het input contactpunt<br />

A van het Reken blok. Voor B vullen we het getal 10 in.


variabele bloK<br />

We krijgen dus nu een willekeurig getal tussen 200 en 1000 dat we moeten onthouden. We<br />

moeten dus in het geheugen een plaats vrijmaken om dit getal in te steken. In computertaal<br />

noemen we deze plaats een variabele. Om een nieuwe variabele te maken gaan we naar Bewerken<br />

in het menu en vervolgens Definieer Variabelen. Hier drukken we op Maken om een<br />

nieuwe variabele te maken. We noemen deze variabele “Random getal” en het Datatype is<br />

een Getal. Sluit dit venster af door op Sluiten te drukken.<br />

We hebben nu een nieuwe plaats<br />

in het geheugen, de variabele<br />

Random Getal, gemaakt. In deze<br />

variabele gaan we nu het willekeurig<br />

getal instoppen. Hiervoor<br />

gebruiken we het Variabele blok .<br />

In dit valiesje kan je zowel data<br />

instoppen, als de waarde er later<br />

terug uithalen. Hier willen we<br />

het willekeurig getal opslaan,<br />

daarom kiezen we voor Schrijven.<br />

In de Lijst kiezen we ook welke<br />

geheugenplaats we willen gebruiken,<br />

hier het Random getal.<br />

In de Waarde schrijven we niets<br />

want deze wordt geleverd via de<br />

gele dataverbinding.


We testen dit stukje programma al eens door het willekeurig getal naar het scherm te schrijven.<br />

Zo ziet het eerste deel van het programma eruit dat een willekeurig getal op het scherm<br />

zal tonen tussen 200 en 1000. Tip: zet de tekst in het Beeldscherm blok op de eerste regel, er<br />

komt straks nog veel meer op het scherm! Download het programma op je NXT en start het<br />

verschillende keren zodat je kunt zien dat er telkens een ander getal getoond wordt.<br />

VOORBEELDPROGRAMMA: REACTIETIJD STAP 1.RBT<br />

Nu we dit eerste deel hebben afgewerkt, beginnen we aan het tweede deel.<br />

We maken een stopwatch zoals we in hoofdstuk 5 geprogrammeerd hebben. We laten deze<br />

echter niet meer oneindig lang lopen. We gaan deze teller laten lopen tot we op de tastsensor<br />

drukken. Sleep dus een Herhaling blok op de sequentielijn en stel het configuratiescherm in.<br />

Als Sensor nemen we Tastsensor die aangesloten is op Poort 1 en als Actie nemen we Ingedrukt.<br />

De teller moet immers stoppen met tellen van zodra de tastsensor is ingedrukt. Vink<br />

eveneens Teller aan want we gaan dit gebruiken als tijdseenheid.<br />

Deze waarde van de teller tonen we niet alleen op het scherm (regel 3 en vergeet Wissen niet<br />

te ontvinken), we slaan deze waarde ook op in een nieuwe variabele met de naam “Reactie<br />

tijd”. Om een nieuwe variabele te maken ga naar Bewerken in het menu en vervolgens Definieer<br />

Variabelen, daarna drukken we op Maken.


In het Variabele blok kies je voor<br />

Schrijven en uit de Lijst kies je Reactie<br />

tijd. Bij elke herhaling wordt ook<br />

deze variabele Reactie tijd bijgewerkt.<br />

Wanneer je nu de schakelaar indrukt<br />

zal in de variabele Reactie tijd de<br />

laatst opgemeten tijd zitten.<br />

Voeg ook het Wacht blok in dat je instelt op 0,01 seconde. Zo bekomen we dat de teller werkt<br />

met honderdste van een seconde. Zet de waarde van de teller op de derde regel van het<br />

beeldscherm. Test nu deze tweede stap van het programma.


Je zal zien dat op de eerste regel nog steeds een nieuw willekeurig getal komt en op de derde<br />

regel komt een getal dat steeds optelt. Wanneer je op de tastsensor duwt zal het tellen stoppen.<br />

Proficiat, nu zitten we in de helft.<br />

VOORBEELDPROGRAMMA: REACTIETIJD STAP 2.RBT<br />

vergeliJK bloK<br />

Wanneer de willekeurige gegenereerde tijd gepasseerd is moeten we het startsignaal geven.<br />

We moeten dus de teller gaan vergelijken met het Random getal, we gebruiken hiervoor het<br />

Vergelijk blok .<br />

Maar eerst moeten we de variabele “Random getal” wel uit zijn valies halen. Neem hiervoor<br />

het Variabele blok dat we nu gaan Lezen.<br />

We vragen het Vergelijk blok of A (waarvan het input contact verbonden is met het Variabele blok)<br />

gelijk is aan (=) B (waarvan het input contactpunt verbonden is met de teller output contactpunt).<br />

Deze uitkomst is een logische dataverbinding, We verbinden ze met een Schakeloptie. De<br />

Schakeloptie gaan we controleren op een Logische Waarde. Als deze Goed is dan laten we het<br />

geluidsignaal Start weerklinken.<br />

In de bovenste sequentielijn plaatsen we een Geluid Blok. In dit configuratiescherm kiezen we<br />

voor het bestand Start, we wachten echter niet op voltooiing want anders gaat de teller wachten<br />

en dat is niet de bedoeling.


De onderste sequentielijn laten we leeg. We testen nu de derde stap van ons programma. Van<br />

zodra de teller, die op de derde regel staat, op het random getal komt zal de NXT “Start” zeggen.<br />

VOORBEELDPROGRAMMA: REACTIETIJD STAP 3.RBT<br />

Als laatste stap moeten we kijken of we niet te vroeg op de tastsensor hebben gedrukt en berekenen<br />

wat onze reactietijd is. Hiervoor gaan we de variabele “Reactie tijd” vergelijken met<br />

“Random getal”. Is de eerste groter (>) dan moeten we het verschil (-) tussen beide maken<br />

en dit op het scherm tonen. Is die conditie echter niet voldaan, dan is de tastsensor te vroeg<br />

ingedrukt en moet er op het beeldscherm “Te vroeg!!!” komen.<br />

We hebben al deze programmeerblokken in dit hoofdstuk gezien. Kan jij de nodige instellingen<br />

zelf doen?<br />

VOORBEELDPROGRAMMA: REACTIETIJD VOLLEDIG.RBT


Je ziet dat gans het programma redelijk groot is geworden. Om het overzichtelijk te houden<br />

kan je van de 4 stappen dier hier zijn uitgelegd aparte Mijn blokken maken zoals uitgelegd in<br />

hoofdstuk 4.<br />

In het Mijn blok teller zit trouwens de Mijn blok Starsignaal en aan dit blok zijn er automatisch<br />

de nodige contactpunten aangemaakt.<br />

Je hebt dus een toestel gemaakt om de reactietijd op te meten. De reactietijd tijdens het autorijden<br />

tussen het zien van een obstakel op de weg en het indrukken van de rem is ongeveer 1<br />

seconde. Op die tijd heb je bij een hoge snelheid al een hele afstand afgelegd en daarbij moet<br />

je de remafstand nog eens bijtellen. Het is dus heel belangrijk om tijdens het rijden voldoende<br />

afstand te bewaren tot de voorligger. Ben je onder invloed van alcohol en drugs of ben je onoplettend<br />

aan het rijden neemt de reactietijd gevoelig toe.<br />

Snelheid Reactie-afstand Rem-afstand Totale afstand<br />

50 km 14m 13m 27m<br />

70 km 19m 25m 44m<br />

90km 25m 41m 66m<br />

120km 33m 72m 105m<br />

Totale afgelegde afstand tussen het zien van het obstakel en volledig tot stilstand komen voor een<br />

auto in perfect staat en droog wegdek. Het is dan ook belangrijk voldoende afstand tot je voorligger<br />

te behouden.


12<br />

hOE MEET dE LEGO MINdSTOrMS<br />

NXT afSTaNdEN?<br />

De ultrasone sensor van de NXT heeft precies 2 ogen, maar in het ene oog zit de zender die<br />

de ultrasone geluidsgolven uitzendt en in het ander oog zit de ontvanger. Als er in een kamer<br />

meerdere ultrasone sensors tegelijk gebruikt worden, kunnen ze elkaar storen. De sensor<br />

meet, met een resolutie van ongeveer 3 cm, afstanden tot 250 cm ver. Kleine objecten, afgeronde<br />

objecten (zoals een bal) of zachte objecten zijn moeilijker te detecteren omdat daar het<br />

geluid niet zo goed op weerkaatst. Het beste zijn grote harde oppervlakken.<br />

ultrasoNe seNsor bloK<br />

Vind je het ook zo vreselijk als mensen vergeten<br />

het toilet door te spoelen of raak je de knop liever<br />

niet aan? Geef je spoelbak dan, zoals bij sommige<br />

openbare toiletten, een automatisch doorspoelsysteem<br />

genaamd de LEGO ROBOFLUSH.<br />

De ultrasone sensor detecteert wanneer iemand<br />

gaat zitten en de NXT zal bij het weggaan een mechanisme<br />

in werking zetten om door te trekken.<br />

Het Ultrasone sensor blok is terug te vinden onder de complete omgeving tab<br />

onder Sensor<br />

De korte datanaaf van het programmeerblok bevat de uitlezing van de afstand in centimeter<br />

en is een getal gelegen tussen 0 en 255.<br />

We gaan deze ultrasone sensor gebruiken om de TRIBOT steeds een bepaalde afstand te<br />

laten bewaren tot zijn voorganger. Gaat zijn voorganger vooruit dan zal de robot ook vooruit<br />

rijden, komt de voorganger echter terug, dan zal de robot achteruit rijden.


In hoofdstuk 11 hebben we gezien hoe we variabelen moeten gebruiken. In de variabele,<br />

van type Getal, gaan we de gewenste afstand opslaan. Willen we in de toekomst de afstand<br />

veranderen dan hoeven we dit alleen in het eerste Variabele blok te doen. In dit programma<br />

gebruiken we een afstand van 20 cm. We gebruiken het verschil tussen de werkelijke afstand<br />

en de gewenste afstand om het vermogen van de motor te regelen. Is het verschil in afstand<br />

0, dan stoppen de motoren want dan is de gewenste afstand bereikt. Hoe groter de afstand tot<br />

de voorganger hoe sneller de motoren zullen draaien. De formule voor het motorvermogen is<br />

dus (Sensorwaarde – afstand)x10. We vermenigvuldigen dit verschil met 10 om de robot sneller<br />

te doen reageren. Deze waardevergelijken we met 0. Als de sensorwaarde groter is dan<br />

de gewenste waarde zal de robot vooruit moeten rijden, is de sensorwaarde kleiner dan de<br />

gewenste waarde dan moet de robot achteruit rijden. Daarom verbinden we met een logische<br />

dataverbinding de uitkomst van het Vergelijk blok met de richting van het Verplaats blok. Op<br />

het scherm wordt met het onderstaande programma eveneens de afstand tot de voorganger<br />

op het scherm getoond.<br />

VOORBEELDPROGRAMMA: ULTRASONIC VOLGER.RBT<br />

Een ultrasone sensor in je auto<br />

In sommige auto’s kan men als optie parkeersensoren nemen. Dit zijn ultrasone sensoren die<br />

beginnen te piepen als de auto een obstakel te dicht nadert. Het automatische remsysteem<br />

van Volvo meet continue de afstand tot obstakels die voor de wagen gelegen zijn, duikt er een<br />

obstakel op dan zal het voertuig zelf remmen en er juist voor tot stilstand komen. In hoofdstuk<br />

11 hebben we gezien dat het om veiligheidsredenen belangrijk is om voldoende afstand<br />

te houden tot je voorganger. Om het energieverbruik te minimaliseren is het echter beter<br />

om heel dicht bij de voorganger te rijden om de luchtweerstand te verminderen. In iemand<br />

zijn wiel rijden bij het fietsen is minder vermoeiend dan vooraan te moeten rijden. Dit is voor<br />

ons gevaarlijk, maar robots kunnen heel snel reageren en zijn altijd alert. Daarom test men<br />

systemen waarbij het voertuig zelf de snelheid<br />

regelt om heel dicht bij zijn voorganger te<br />

rijden. Enkel de eerste auto moet dan<br />

nog een bestuurder hebben. Jij hebt<br />

met dit programma al getoond dat<br />

dit mogelijk is.<br />

Automatisch remsysteem van Volvo.<br />

© Volvo Car Corporation


13<br />

hOE cOMMUNIcErEN EEN cOMpUTEr Of<br />

GSM MET dE LEGO MINdSTOrMS NXT?<br />

Om je fototoestel, printer, scanner, webcam en andere elektronische apparaten met je computer<br />

te verbinden, gebruik je meestal een USB-kabel. Ook je LEGO NXT kan je op deze manier<br />

aan de computer koppelen. Dit laat toe om programma’s, die je op de PC hebt geschreven, uit<br />

te laten voeren door je LEGO robot. De kabel heeft 2 verschillende uiteinden, de platte stekker<br />

gaat in je computer, het andere uiteinde, meer vierkant wordt in de bovenkant van de NXT<br />

gestoken. Voor je de NXT aan de computer aansluit moet de NXT-G software geïnstalleerd zijn.<br />

Meestal is de USB-kabel niet zo handig. De lengte van de kabel is beperkt en na een tijdje<br />

rijdt je robotje de kabel in een knoop. Daarom is de robot ook uitgerust met Bluetooth. De<br />

computer en de NXT gaan nu via radiogolven met elkaar communiceren. Niet alle computers<br />

hebben een bluetooth module, let op het bluetooth logo . Heeft je computer geen bluetooth<br />

dan kan je in de computerwinkel verschillende goedkope mogelijkheden kopen om je computer<br />

toch via bluetooth t met je robot te verbinden. Ook verschillende mobiele telefoons hebben<br />

bluetooth. Surf naar www.mindstorms.com/bluetooth/ om na te kijken of jou GSM geschikt is<br />

om een programma te installeren waarmee de GSM met de NXT kan communiceren. Zo kunnen<br />

de toetsen van de GSM gebruikt worden om de motoren te besturen. De NXT kan de GSM<br />

ook opdracht geven om een foto te nemen, om een muziekje te spelen of een tekstbericht te<br />

verzenden.<br />

Je kan tot 4 NXT’s met elkaar laten communiceren over bluetooth waarin één de master (de<br />

leider) moet zijn en de drie overige de slaves (de onderdanen). Eén van de mogelijkheden is<br />

om verschillende robots te laten samenwerken, maar ook om 1 superrobot te maken met<br />

meer dan 3 motoren en 4 sensoren.<br />

Het centrale brein van de WIMO NXT is een smartphone,<br />

dit is een kruising tussen een GSM en een computer<br />

die past in je handpalm. Met deze smartphone<br />

kan de robot videobeelden maken en doorsturen naar<br />

een andere PC over WiFi. De robot gebruikt bluetooth<br />

om de NXT te besturen. Om de robot te programmeren<br />

werd gebruik gemaakt van Microsoft Robotics Studio.<br />

© Brian Cross – wimobot.com


0<br />

JOHNNXT 5 is gebouwd naar de fictieve robotheld Johnny 5 uit de films Short Circuit en Short Circuit 2. De robot<br />

heeft 6 servomotoren om de rupsbanden aan te sturen, het hoofd te roteren, het bovenlichaam op en neer te<br />

laten gaan, de laser aan te sturen en grijpers te openen en te sluiten. Om dit aan te sturen zijn er 2 NXT’s in<br />

de robot verwerkt die met elkaar over bluetooth communiceren om alles mooi synchroon te laten gebeuren.<br />

© Daniele Benedettelli


14<br />

Kompas bloK<br />

hOE GEraakT dE LEGO MINdSTOrMS<br />

NXT hET NOOrdEN NIET kwIjT?<br />

Hi Technic (www.hitechnic.com of via de LEGO online winkel) verkoopt de Compass Sensor<br />

(kompassensor) voor je LEGO robot. Hij bevindt zich in een standaard behuizing zodanig dat<br />

hij overeenkomt met andere Mindstorms NXT sensoren.<br />

Via de website kan je NXT software Compass Block ( ) downloaden om te gebruiken in<br />

de NXT-G software. Vergeet ook niet de Firmware te updaten! Je moet er wel op letten om<br />

het kompas steeds horizontaal te gebruiken. Met het kompas kan je bijvoorbeeld de LEGO<br />

robot steeds rechtdoor laten rijden. Zonder het kompas wijkt de LEGO robot af van zijn rechte<br />

baan. Dit komt omdat er een klein verschil in snelheid is tussen beide wielen. Met het kompas<br />

kan je de baan bijsturen zodanig dat de robot wel op een rechte lijn blijft rijden.<br />

Wij gaan de kompassensor gebruiken zodat de TRIBOT zich steeds naar het noorden zal<br />

draaien, onafhankelijk van hoe we de ondergrond draaien. Vervang hiervoor de geluidssensor<br />

bovenaan door de kompassensor. Het programmeerblok kan twee waarden geven. De eerste<br />

is een absolute hoekwaarde met een nauwkeurigheid van 1°. Dus het noorden is 0°, het<br />

oosten 90°, zuiden 180° en westen 270°. Het tweede is een relatieve hoekwaarde waarbij het<br />

verschil gemaakt wordt tussen een opgegeven richtwaarde en de absolute hoekwaarde (relatieve<br />

hoekwaarde = richtwaarde – absolute hoekwaarde) . Deze relatieve hoekwaarde gaan<br />

we gebruiken om het motorvermogen te regelen. Hoe meer de robot afwijkt van de gewenste<br />

richting, hoe sneller de robot moet ronddraaien. Is de gewenste richting bereikt dan zal de<br />

relatieve waarde nul zijn en zullen de motoren geen vermogen krijgen. De gewenste waarde<br />

steken we in een variabele.<br />

We gaan eveneens kijken of die relatieve waarde (Relative Reading) binnen de range (Inside<br />

Range) van -180° tot 0° ligt. Is dit zo dan moet de robot naar links om zijn as draaien, is dit<br />

niet het geval dan moet de robot naar rechts om zijn as draaien. Daarom is het Verplaats blok<br />

ingesteld om naar links om zijn as te draaien. Door de conditie dan te koppelen aan de Richting<br />

input contactpunt zal de robot naar links draaien indien de relatieve waarde tussen -180°


en 0° ligt en naar rechts draaien indien de relatieve hoekwaarde er buiten ligt. Het getoonde<br />

programma toont eveneens de gewenste hoek, de relatieve hoekwaarde en de absolute hoek<br />

waarde op het scherm.<br />

VOORBEELDPROGRAMMA: KOMPAS.RBT<br />

Het kompas zorgt ervoor dat de robotboot SERENITY steeds in dezelfde richting blijft varen.<br />

© Brian Davis


14<br />

NXt gyroscoop seNsor<br />

waarOM VaLT dE LEGO MINd-<br />

STOrMS NXT NIET OM?<br />

Met de NXT gyroscoop sensor (uitgebracht door Hi Technic) meet de NXT de hoekrotatie in<br />

graden per seconde. De sensor meet dus hoeveel graden de sensor gedraaid is om zijn verticale<br />

as in één seconde. Hij meet dit enkel rond de verticale as.<br />

De gyroscoop van Hi Technic met bijhorend<br />

programmeerblok.<br />

Deze sensor werd gebruikt om een LEGO NXT Segway<br />

te maken, een robotje dat balanceert op twee wielen.<br />

De sensor meet de hoeksnelheid van de robot en het<br />

programma gaat beide motoren van de wielen zo aansturen<br />

dat de het robotje steeds rechtop blijft staan,<br />

zelfs als je er een duwtje tegen geeft of als hij op een<br />

helling rijdt.<br />

NXTWAY-G blijft rechtop rijden met de gyroscoop.<br />

© Ryo Watanabe


NXt acceleratioN/tilt seNsor<br />

Hi Technic heeft een NXT Acceleration/Tilt Sensor (versnelling en tilt sensor) om versnellingen<br />

te meten. Hij kan volgens de drie richtingen de versnelling meten en dit tussen -2g en +2g.<br />

Zoals je ziet wordt de versnelling uitgedrukt in een aantal g. Dit is de valversnelling en deze is<br />

op het aardoppervlak gelijk aan 9,81m/s². Formule 1 of vliegtuigenpiloten krijgen grote g-krachten<br />

te verduren. Dit komt omdat ze zo snel optrekken, afremmen en bochten nemen dat het<br />

lichaam onderworpen is aan grote versnellingen en dus ook aan grote krachten. Via de wet van<br />

Newton (kracht is versnelling maal massa), zijn immers beide aan elkaar gekoppeld. Ook als<br />

je in een achtbaan zit word je onderworpen aan g-krachten. 1g ervaar je bij een vrije val. Bij 2g<br />

wordt de totale kracht op het lichaam tweemaal zo groot al de normale zwaartekracht.<br />

De accelerometer van Hi Technic met<br />

programmeerblok.<br />

De Wii Remote-achtige hendel<br />

bevat een Acceleration/<br />

tilt sensor om het LEGO<br />

blokkenkanon te richten.<br />

Via de tastsensor wordt<br />

er gevuurd.<br />

© Paul Tingey


16<br />

webcam voor lego NXt<br />

EXTra NXT SENSOrEN<br />

Heel wat robots hebben een camera aan boord. Via de website www.mindsensors.com kan je<br />

een webcam voor je LEGO NXT bestellen. Wil je bijvoorbeeld de oranje voetbal detecteren om<br />

mee te doen aan de RoboCup voetbalwedstrijd dan heb je een dergelijke camera nodig. Via de<br />

NXTCamView software verbind je de sensor via een USB kabel met je PC, de NXT heb je dus<br />

even niet nodig. Zo kan je het camerabeeld bekijken, wat niet mogelijk is via de NXT, en de<br />

nodige instellingen doen. Indien je bijvoorbeeld instelt dat het gedetecteerde object de kleur<br />

oranje moet hebben, dan gaat de software de coördinaten geven van de plaats waar zich in<br />

het beeld de gewenste kleur bevindt en dit tot 8 verschillende kleuren.<br />

Via http://nxtcamview.sourceforge.net/ zijn enkele demo’s te bekijken.<br />

© mindsensors.com © Scott Briscoe<br />

Met de NXT webcam speurt de NXT BRANDBLUSROBOT naar brandhaarden om het met water te blussen.<br />

kLOk vOOr LEGO NXT<br />

Dit blokje, dat aangeboden wordt via www.mindsensors.com, is de<br />

polshorloge voor je LEGO Robot. Hij houdt de tijd, dag, maand, jaar<br />

en dag van de week bij. De NXT-G software laat toe om de juiste<br />

informatie in te stellen en uit te lezen.<br />

© mindsensors.com<br />

SONy pLaySTaTiON 2 cONTrOLLEr iNTErfacE<br />

Zou je graag je PlayStation 2 controller gebruiken om je robot te commanderen<br />

dan is dit blokje de oplossing. Klik je draadloze ontvanger in en je<br />

kan de 4 joysticks uitlezen alsook de waarde van de 16 knoppen van je<br />

PS2 controller.<br />

© mindsensors.com


druKseNsor voor lego NXt<br />

LEGO Technic heeft verschillende pneumatische onderdelen. Om de druk te meten van de<br />

perslucht kan je de NXT druksensor kopen. Deze sensor sluit je aan op de<br />

pneumatische leidingen van LEGO. Zo is het mogelijk de motor van de LEGO<br />

pneumatische compressor te stoppen als de druk voldoende hoog is en<br />

terug aan te zetten als hij onder een bepaalde waarde zakt.<br />

© mindsensors.com<br />

iNfrarood zoeKer<br />

Infrarood (IR) licht is onzichtbaar voor het menselijke oog. Maar de infrarood zoeker van Hi<br />

Technic ziet wel dit licht en vertelt je bovendien de richting van de IR-straling. De sensor geeft<br />

een waarde van 0 tot 9 aan. 0 betekent dat er geen bron te vinden is. Een waarde 1 krijg je als<br />

de bron zich links achteraan bevindt, 5 als het voor de sensor is en 9 rechts achteraan. In de<br />

sensor zitten 5 IR sensors, waarvan ieders signaalsterkte beschikbaar is. Een bron van IR<br />

stralen is bijvoorbeeld de afstandbediening van je TV. Je kan<br />

dus de robot zo programmeren dat hij deze tracht te volgen.<br />

Deze sensor heb je nodig wanneer je wil deelnemen aan de<br />

RoboCup <strong>Junior</strong> voetbalwedstrijd. RoboCup is een voetbalwedstrijd<br />

voor robots, bij de junior afdeling spelen ze met<br />

een bal die IR uitstraalt (eveneens te koop bij Hi Technic). Wel<br />

opletten als je robotje in de buurt van fel zonlicht rijdt want<br />

ook de zon zendt infrarode straling uit!<br />

ir liNK seNsor<br />

De IR bal voor de RoboCup <strong>Junior</strong> voetbalwedstrijd.<br />

© HiTechnic<br />

IR wordt gebruikt voor gegevensoverdracht. Je afstandsbediening gebruikt bijvoorbeeld IR<br />

om je TV te bedienen. Vroeger had een mobiele telefoon soms een IR poort, maar door de<br />

lage communicatiesnelheid is dat nu grotendeels vervangen door bluetooth. De oude RCX<br />

brick heeft nog wel een IR poort. Met de Infrarood zoeker kan je niet communiceren met de<br />

RCX vermits hij geen IR straling uitzendt. Wil je een draadloze communicatie tot stand brengen<br />

tussen de RCX en NXT dan heb je de IR Link sensor nodig. De RCX IR Link Block voor de<br />

NXT-G software is in ontwikkeling. Deze IR Link is ook te gebruiken om de gemotoriseerde<br />

Technic Bulldozer en Monster Dino te commanderen of de LEGO R/C treinen. De IRLink Block<br />

voor de NXT-G software is wel al beschikbaar.


fid seNsor<br />

RFID is een technologie om van op een afstand informatie op te slaan<br />

en voor het lezen van zogenaamde RFID-tags die in of op objecten kunnen<br />

zitten. Een RFID tag bestaat in verschillende uitvoeringen, maar<br />

hij kan heel klein gemaakt worden en in zijn geheugen steekt vaak een<br />

uniek identificatienummer. Wanneer ze in de toekomst heel goedkoop<br />

gemaakt kunnen worden, kunnen ze bijvoorbeeld de streepjescode<br />

vervangen. Hierdoor is het voldoende om met je winkelwagentje door<br />

een poort te rijden waardoor de kassier ineens weet wat je allemaal in<br />

je wagentje hebt. De RFID NXT Sensor van Codatex (www.codatex.com)<br />

leest het 5 bytes identificatienummer in van een EM4102 RFID tag,<br />

wanneer het binnen een bereik van 3cm tot de sensor wordt gehouden.<br />

Als een RFID tag gedetecteerd wordt gaat een ingebouwde led een<br />

lichtsignaal geven. Zo kan je bijvoorbeeld in verschillende LEGO auto’s<br />

een RFID tag steken, die je eveneens bij Codatex aanschaft, waardoor<br />

je robot weet met welke auto hij te maken heeft.<br />

NXt seNsor adaptor<br />

RFID sensor waarmee de RFID tags mee gelezen worden.<br />

© Codatex.<br />

Vernier Software & Technology maakt producten en software om de wiskunde en wetenschappelijke<br />

vakken te ondersteunen. Met de NXT Sensor Adaptor is het mogelijk om één van<br />

hun 30 sensoren aan de NXT te koppelen. Hiermee kan je leuke proefjes maken om bijvoorbeeld<br />

de chemie of fysica lessen op te fleuren. Eén van de sensoren meet de vochtigheid van<br />

de grond. Deze sensor kan je gebruiken om automatisch de planten water te geven. De vissen<br />

in je aquarium zullen nog nooit zo vrolijk rondzwemmen wanneer hun waterkwaliteit getest<br />

wordt met de NXT AQUARIUM TESTER. De zuurgraad (uitgedrukt in pH) en hoeveelheid zuurstof<br />

in het water worden door een Vernier sensor opgemeten en via de NXT Sensor Adaptor<br />

naar de NXT gezonden.<br />

NXT Sensor Adaptor. NXT AQUARIUM TESTER. NXT PLANT WATERER.<br />

© Vernier Software & Technology


17<br />

OVErIGE NXT-G prOGraMMEErBLOkkEN<br />

In de vorige hoofdstukken zijn niet alle programmeerblokken aan bod gekomen. Hier is een<br />

overzicht van de overige functionaliteiten van de NXT-G software. Voor een gedetailleerde<br />

beschrijving van deze blokken wordt verwezen naar de handleiding.<br />

timer bloK<br />

De NXT heeft drie ingebouwde timers die je kan resetten of uitlezen. Bovendien<br />

kan het programmeerblok een logisch datasignaal geven indien de waarde al<br />

dan niet boven een activeerpunt komt.<br />

stop bloK<br />

Dit programmeerblok zal je programma en alle werkende motoren, lampen en<br />

geluiden stoppen. Gestopte motoren worden in de vrijloop gezet.<br />

logisch bloK<br />

Dit blok voert logische handelingen uit met logische data. De mogelijke logische<br />

handelingen zijn EN, OF, XOF en NIET.<br />

Bij EN moeten beide ingangen Goed zijn om de uitkomst Goed te hebben. In alle<br />

andere gevallen is de uitkomst Verkeerd. Bijvoorbeeld het moet licht zijn en er<br />

moet voldoende geluid zijn, dan pas mag de robot bewegen. Is er wel licht, maar<br />

niet voldoende geluid, dan is de uitkomst Verkeerd.<br />

Bij OF is het voldoende dat één van twee ingangen Goed is, om de uitkomst Goed<br />

te hebben. Dus enkel indien beide ingangen Verkeerd zijn, is ook de uitkomst<br />

Verkeerd.<br />

Bij XOF moet ofwel de ene Goed zijn, of de andere Goed, maar niet allebei tegelijk<br />

om de uitkomst Goed te hebben. Dus indien beide ingangen Verkeerd zijn of beide<br />

ingangen Goed, dan is de uitkomst Verkeerd.<br />

NIET draait de logisch data om. Dus Goed wordt Verkeerd en Verkeerd wordt<br />

Goed.


eeKs bloK<br />

Dit blok geeft een logische data als een testgetal tussen of buiten twee getallen A<br />

en B ligt.<br />

waaK bloK<br />

De NXT valt na een tijd in slaap. Deze tijd is in te stellen in het menu van de NXT.<br />

Wil je dit voorkomen gebruik dan dit programmeerblok.<br />

opeN bestaNd bloK<br />

Met het Open bestand blok kan je data in bestanden in het geheugen van je NXT<br />

schrijven en uitlezen. Het kan zowel een bestand met tekst als getallen zijn. Je<br />

sluit en wist ermee ook het bestanden. Hiermee kan je bijvoorbeeld regelmatig<br />

een sensorwaarde opslaan en op een bepaald moment terug ophalen.<br />

Kalibratie bloK<br />

Gebruik dit blok om de minimum en maximum waarde te kalibreren voor de lichtsensor<br />

en geluidssensor.<br />

reset motor bloK<br />

In de servomotoren zit een hoeksensor. Met het ingebouwde foutcorrectie mechanisme<br />

kan de motor heel precies bewegen. Met het Reset motor blok schakel je<br />

dit uit.<br />

verzeNd eN oNtvaNg bericht bloK<br />

Deze programmeerblokken laten toe om berichten te verzenden en te ontvangen<br />

over bluetooth.


0<br />

Nog Niet geNoeg programmeer-bloKKeN?<br />

Vind je onder deze programmeerblokken toch nog niet de functies die je zoekt, bijvoorbeeld<br />

om sinussen-cosinussen ( ), machten ( ) of wortels ( ) uit te rekenen. Of wil je dat<br />

het programma weet hoeveel geheugen ( ) of batterij ( ) er nog beschikbaar is, surf<br />

dan naar http://www.nxtasy.org/repository/nxt-g-blocks/. Hier staat een bibliotheek programmeerblokken<br />

ontwikkeld door NXT enthousiastelingen die je kan downloaden. Om deze<br />

blokken te installeren heb je wel de Dynamic Block Update nodig (http://mindstorms.LEGO.<br />

com/support/updates/). Gebruik vervolgens Blok Importeren en exporteren wizard dat onder<br />

extra in het menu staat.<br />

KalibrereN vaN de seNsoreN<br />

Sensoren moeten soms gekalibreerd<br />

worden. Door omgevingsinvloeden kan<br />

de nauwkeurigheid van de sensoren achteruit<br />

gaan. Door ze te kalibreren worden<br />

ze terug juist ingesteld om de juiste aflezing<br />

te bekomen. Om de NXT sensoren<br />

te kalibreren moet de NXT aanstaan en<br />

verbonden zijn met de PC. In het menu<br />

ga je naar Extra en dan Kalibratie van<br />

sensoren.<br />

Dialoogvenster om de sensoren te kalibreren.<br />

updateN firmware<br />

Firmware is ingeprogrammeerde software<br />

in de hardware. De NXT firmware<br />

zorgt er dus voor dat je motoren kan aansturen<br />

en sensoren kan uitlezen. LEGO<br />

geeft soms nieuwe versies vrij om functies<br />

te verbeteren of softwareproblemen<br />

op te lossen. Zeker als je de NXT pas<br />

gekocht hebt kijk je beter eens na of je<br />

Firmware de laatste versie is. Bovendien<br />

vereisen sensoren van andere fabrikanten<br />

dan LEGO (bijvoorbeeld Hitechnic<br />

of Mindsensors) een recente Firmware<br />

versie alvorens de sensor correct zal<br />

werken. Om deze actie te doen moet de<br />

NXT aanstaan en aangesloten zijn aan<br />

de PC. Bovendien moet je een verbinding<br />

met het internet hebben en online zijn.<br />

Kijk vervolgens in de handleiding om de<br />

firmware up te daten.<br />

Venster om de Firmware te updaten.


Rubiks kubus, een bekende puzzel,<br />

bestaat uit draaibare, kleine<br />

kubusjes met gekleurde vlakken. Je<br />

moet trachten de kubus zo in elkaar<br />

te draaien dat elk van de zes zijden<br />

dezelfde kleur heeft. Er zijn echter<br />

ook wiskundige algoritmes om dit<br />

probleem op te lossen. De webcam<br />

van de NXT RUBIKS KUBUS OPLOS-<br />

SER bekijkt eerst de 6 zijden van de<br />

kubus en herkent dan met beeld herkenningssoftware<br />

de verschillende<br />

kleuren. Deze software draait op een<br />

gewone PC. Dan worden de verschillende<br />

acties naar de NXT gestuurd<br />

om een mechanisme in werking te<br />

stellen die de Rubiks kubus oplost.<br />

© Daniele Benedettelli


18<br />

hOE hack jE dE LEGO MINd-<br />

STOrMS NXT?<br />

Er bestaan ongelooflijk veel mogelijkheden wat je met de LEGO Technic steentjes en de LEGO<br />

NXT met de 3 motoren en verschillende sensoren kan doen. Misschien wil de elektronicus onder<br />

jullie echter graag zijn eigen elektronica aan de LEGO NXT koppelen. Met een beetje handigheid<br />

lukt dit wel. Ik waarschuw je wel dat zulke aanpassingen niet door LEGO ondersteund<br />

worden en aanleiding kunnen geven tot het beschadigen van de componenten en dan<br />

vervalt ook je garantie. Alles wat je dus op deze pagina’s leest, valt onder je eigen<br />

verantwoordelijkheid. Om je te helpen verkoopt Hi Technic de NXT Prototype<br />

Sensor Board dat wel door LEGO is goedgekeurd.<br />

NXT Prototype Sensor Board om je eigen elektronica met de NXT te<br />

verbinden.<br />

NXt prototype seNsor board<br />

Met dit prototype bord kan je 5 analoge ingangen inlezen en het heeft<br />

6 digitale input/output poorten. Het bord leveren ook 3,3V en 5,0V gereguleerd<br />

en 4,3V en 9V ongereguleerd om je elektronica te voeden. Opgelet:<br />

de geleverde stroom is beperkt. Van de webpagina kan je de software van de<br />

NXT-G Prototype Sensor Programming Block downloaden om de analoge waarden in te<br />

lezen, de digitale poorten te lezen of in te stellen met de NXT-G software.<br />

Om snel een schakeling te maken, gebruiken we een experimenteerbord. Ga naar een elektronica<br />

winkel in de buurt en ze kunnen je er zeker verder helpen met de nodige componenten.<br />

Dit bordje bevat gaatjes waarin je de elektronica componenten kan inprikken en bepaalde<br />

gaatjes zijn elektrisch met elkaar verbonden. Alle gaatjes van de bovenste horizontale lijn zijn<br />

met elkaar verbonden, alsook alle gaatjes van de onderste horizontale lijn. De overige gaatjes<br />

zijn per 5 vertikaal met elkaar verbonden. Hierin prikken we het Prototype Sensor Board<br />

zoals aangeduid op de figuur. Met het prototype bordje gaan we nu een schakeling maken.<br />

Hoe meer we aan een knopje gaan draaien, hoe meer lampjes er moeten branden. De eerste<br />

component dat we hiervoor nodig hebben noemt potentiometer en sluiten we aan zoals op de<br />

figuur. Zo staat de analoge ingang A0 in verbinding met de potentiometer. Een potentiometer<br />

varieert de weerstand van 0Ω (spreek uit ohm, de eenheid van weerstand) tot een bepaalde<br />

waarde.


We knippen nu een stukje draad af en verwijderen de plastieken isolering voorzichtig aan<br />

beide kanten en prikken die in als volgt. Nu is de onderste lijn volledig verbonden met de<br />

grond (GND). Dikwijls worden er hiervoor zwarte draden gebruikt.<br />

Een tweede zwarte draad gebruiken we om de potentiometer met de grond te verbinden.<br />

Met een rode draad (vaak gebruikt voor de voeding) verbinden we nu de bovenste lijn met de<br />

+3V voedingspin. Een tweede rode draad gebruiken we om de bovenste lijn met de potentiometer<br />

te verbinden.<br />

Als je nu met een schroevendraaier aan de potentiometer draait zal de spanning op pin A0<br />

variëren van 0V tot 3,3V en vermits deze pin een analoge ingang is van het Prototype Sensor<br />

Board leest de software deze waarde uit als een getal tussen 0 (voor 0V) en 1023 (voor 3,3V).


Maak hiervoor volgend programma met het Prototype sensor blok .<br />

Met volgende instellingen:<br />

De sensor hebben we aangesloten op poort 1 (Port 1) en we wensen een analoog signaal (Read<br />

Analog) te lezen die is aangesloten aan Analog Port 0. Save en download dit programma op<br />

de NXT. Als je nu aan de potentiometer draait zal je de waarde op het scherm zien veranderen.<br />

VOORBEELDPROGRAMMA:ELEKTRONICA POTENTIOMETER.RBT<br />

We gaan deze waarde nu gebruiken om een aantal leds (Light Emitting Diode) aan te sturen.<br />

We hebben immers een aantal digitale input/output poorten ter beschikking. Hiervoor moeten<br />

we extra componenten op het experimenteerbord plaatsen. 5 leds heb je nodig en 5 weerstanden.<br />

Weerstanden bestaan er echter in verschillende waarden en we zullen een kleine<br />

berekening moeten doen om de juiste weerstandswaarde te vinden. De spanning aan de<br />

uitgang van de digitale output is 3,3V. De spanningsval over de led bedraagt ongeveer 1,2V. We<br />

moeten de stroomsterkte door de led beperken door de weerstand te gebruiken. Een goede<br />

richtwaarde voor de stroomsterkte is 12mA of 0,012A. Om de weerstand te vinden gebruiken<br />

we de wet van Ohm die zegt dat spanning gelijk is aan stroomsterkte maal weerstand of in<br />

formulevorm: V = RxI met V = 3,3-1,2=2,1 en I =0,012. Dus onze gewenste weerstand bedraagt:<br />

R = V/I = 2,1/0,012 = 175. Een weerstand van 175Ω bestaat echter niet, de eerste waarde groter<br />

dan 175Ω is 180Ω. Om de juiste waarde te weten te komen kijk je best in de technische fiche<br />

(datasheet) van de gekochte led. De weerstanden zijn te klein om een leesbare waardeaanduiding<br />

erop te drukken, daarom gebruikt men een kleurcode.<br />

zwart bruin rood oranje geel groen blauw violet grijs wit<br />

0 1 2 3 4 5 6 7 8 9


De eerste twee banden (soms drie) geven de waarde van de weerstand in ohm weer en de<br />

volgende band het aantal nullen. De overige banden zeggen iets over de precisie van de weerstand.<br />

Wij zoeken een weerstand van 180Ω, dus zal de kleurcode van de weerstand bruingrijs-bruin<br />

moeten zijn.<br />

De stroom kan maar in één richting door de led stromen, daarom steek je de led met de langste<br />

pin aan de kant van de digitale outputpoort (pinnen B0 tot B4) en met de korte kant aan de<br />

weerstand. De andere zijde van de weerstand wordt aan de grond verbonden zoals op de foto<br />

te zien is.<br />

We gaan nu het programma uitbreiden zodanig dat we de leds kunnen aansturen. De waarde<br />

van de analoge ingang delen we door 100. Hierdoor schrappen we de laatste twee cijfers van<br />

de analoge waarde en bekomen we een getal tussen 0 en 10. Vervolgens verbinden we de<br />

uitkomst met het Omschakel blok waar we 11 verschillende mogelijkheden aanmaken.<br />

Bij de waardes van 0-99 (dus 0 na deling) schakelen we alle lampjes uit. Bij de waardes van<br />

100-299 (dus 1 en 2 na deling) schakelen we het eerste lampje in enzovoort tot alle lampjes<br />

aan zijn.


Daarvoor moeten we telkens het configuratiescherm van het Prototype sensor blok als volgt<br />

instellen.<br />

De sensor is nog steeds aangesloten aan poort 1 (Port 1) en we gaan de digitale uitgang<br />

instellen, dus Write Digital onder Action. In Digital Out gaan we aanduiden welke poorten als<br />

digitale ingang worden ingesteld en welke als digitale uitgang. Dit moeten we binair aangeven<br />

met een 1 voor een uitgang en 0 voor een ingang en dit in de volgorde van de poorten. We<br />

willen poorten B0 tot B4 als uitgang instellen, want daaraan zijn de leds aangesloten en B5<br />

als ingang, dit betekent 111110 in het binair stelstel. Om dit getal naar het decimaal stelsel te<br />

zetten past men volgende formule toe: 1x1+1x2+1x4+1x8+1x16+0x32=31. In Digital Control wordt<br />

dan aangegeven of de uitgang hoog (3,3 V - led aan) of laag (0V - led uit) moet zijn volgens<br />

hetzelfde idee. Om alle leds uit te zetten wordt de formule dus: 0x1+0x2+0x4+0x8+0x16+0x3<br />

2=0, voor de eerste led: 1x1+0x2+0x4+0x8+0x16+0x32=1, twee leds: 3, drie eerste leds: 7, vier<br />

leds: 15 en alle vijf leds: 31.<br />

Download dit programma in de NXT en wanneer je aan de potentiometer draait gaan de leds<br />

één voor één aan en bij het terugdraaien terug uit.<br />

VOORBEELDPROGRAMMA:ELEKTRONICA MET LEDS.RBT


voor de eleKtroNicaspecialisteN<br />

Wil je echter dit bord graag zelf maken dan moet je weten hoe de NXT communiceert met de<br />

motoren en sensoren. De servomotoren gebruiken 6-aderige kabels. De NXT heeft 3 identieke<br />

servomotor poorten A, B en C. Pinnen 1 en 2 zijn de PWM signalen om de H-brug voor<br />

de servomotoren aan te sturen. Ze kunnen elk continu 700mA leveren en 1A piekstroom. Pin<br />

3 is de aarding (GND). Pin 4 is de 4,3V voeding. Pinnen 5 en 6 zijn de pulsen van de relatieve<br />

hoekencoder en ze hebben beide een Schmitt trigger. Het faseverschil tussen beide signalen<br />

geeft de draairichting weer.<br />

1-wit PWM signaal motor<br />

2-zwart PWM signaal motor<br />

3-rood aarding<br />

4-groen voeding 4,3V<br />

5-geel hoekencoder signaal 1<br />

6-blauw hoekencoder signaal 2<br />

De NXT heeft 4 identieke poorten voor sensoren 1, 2 ,3 en 4, elk voorzien van 6 pinnen. Pin 1 is<br />

de analoge input (0-5V) en is verbonden met een 10bit A/D- convertor. Het is eveneens de 9V<br />

voeding voor de oude RCX sensoren. Je kan dus nog je oude RCX sensoren gebruiken. Hiervoor<br />

heb je wel een conversiekabel nodig (ordernummer 8528 bij LEGO) of je kan hem zelf<br />

maken. Installeer ook de Dynamic Block Update en de Legacy Block Library, te downloaden<br />

op de LEGO Mindstorms NXT software update website. Pinnen 2 en 3 zijn de aarding. Pin 4<br />

is de voeding voor de sensor en levert 4,3V. Pinnen 5 en 6 zijn de digitale poorten voor het I²C<br />

seriële bussysteem met een communicatiesnelheid van 9600bit/s. Deze standaard, ontwikkeld<br />

door Philips, is uitermate geschikt voor communicatie tussen microcontrollers en een<br />

uitgebreid gamma IC’s met I²C interface. In de LEGO Mindstorms NXT Hardware Developer<br />

Kit (HDK) vind je de nodige documentatie om je eigen sensoren en actuatoren te maken.<br />

1-wit analoge input<br />

2-zwart aarding<br />

3-rood aarding<br />

4-groen voeding 4,3V<br />

5-geel I²C (klok-SCL)<br />

6-blauw I²C (data-SDA)


19<br />

prOGraMMEErOMGEVINGEN VOOr<br />

LEGO MINdSTOrMS NXT<br />

Met de meegeleverde software NXT-G is het gemakkelijk en snel om de LEGO NXT te programmeren.<br />

Maar na een tijdje zal je ook de limieten ondervinden van het programma. Ingewikkelde berekeningen<br />

met wiskundige functies zoals cosinus, sinus, machten en wortels worden al behoorlijk<br />

moeilijk of eindigen in een spaghetti van programmeerblokken en dataverbindingen. Naast NXT-G<br />

bestaan er nog andere pakketten die toelaten om de robot te programmeren. Wie dus geavanceerde<br />

programma’s wil schrijven of liever de robot programmeert door code te schrijven in plaats van<br />

programmeerblokken met elkaar te verbinden moet volgende programmeeromgevingen zeker<br />

eens overlopen.<br />

microsoft robotics studio (http://msdN.microsoft.com/robotics/)<br />

Microsoft heeft sinds kort een speciaal pakket ontwikkeld, genaamd Microsoft Robotics Studio<br />

(MSRS), om robots te programmeren en zelfs te simuleren. Je kan dus eerst volledig de werking<br />

van je robot controleren in een virtuele omgeving alvorens de robot in het echt te bouwen en te laten<br />

werken. Leuk hieraan is dat het pakket naast heel wat andere robots ook de LEGO NXT volledig<br />

ondersteund. Bovendien is de software gratis en is het te downloaden van de website van MSRS. Met<br />

deze software hoopt Microsoft een standaard neer te zetten zoals het deed voor de computerindustrie<br />

enkele decennia geleden. Nu wordt er immers voor elke robot aparte software geschreven met<br />

weinig of geen standaarden. Met NXT-G kan je enkel de LEGO NXT robot aansturen en bijvoorbeeld<br />

niet de Create van iRobot (de hobbyrobot gebaseerd op hun stofzuigrobot). Dit heeft tot gevolg dat<br />

heel wat software nodeloos herschreven moet worden bij het ontwikkelen van een volgend project<br />

en dus een verlies van tijd en geld. Met MSRS daarentegen programmeer je met hetzelfde softwarepakket<br />

verschillende robotplatformen. Bovendien wordt MSRS geleverd met Microsoft Visual Programming<br />

Language (MVPL) dat de mogelijkheid biedt om de robot te programmeren met een soort<br />

programmeerblokken zoals in NXT-G, maar dan met veel meer mogelijkheden.<br />

Het gelijkaardig programma om met de ultrasone sensor een voorganger te volgen ziet er in MVPL dan als<br />

volgt uit.


Willen we nu dit programma in de toekomst gebruiken met een andere robot dan hoeven we<br />

enkel de service blokken van de ultrasone sensor en de motoren te vervangen, aan de rest<br />

van het programma hoeven we niets te wijzigen.<br />

Gebruik een webbrowser om je code te testen en te debuggen, hier zie je de waarde van de ultrasone<br />

sensor aangesloten op poort 4.


0<br />

De simulator van MSRS berekent de echte fysica, dus met zwaartekracht en botsingen. Rij je<br />

dus te hard tegen een object (hier een Pioneer 3DX robot) dan heb je kans dat de LEGO robot<br />

omkantelt.<br />

bricXcc (http://bricXcc.sourceforge.Net)<br />

BricxCC is een programmeeromgeving met Next Byte Codes (NBC) en Not eXactly C (NXC).<br />

NBC is een hogere assembleertaal en NXC is een C-achtige-compiler voor de NXT ontwikkeld<br />

bovenop NBC. Bovendien is dit eveneens gratis.<br />

robotc (http://www.robotc.Net/)<br />

RobotC is een C-gebaseerde programmeeromgeving van de Carnegie Mellon University Robotics<br />

Academy. Twee modes zijn beschikbaar: expert en basis. Bij het laatste zijn de geavanceerde<br />

functionaliteiten onzichtbaar gemaakt. Hier moet er code geschreven worden, maar<br />

via een menu sleept men wel stukken voorbeeldcode in het programma. Voor deze software<br />

moet je echter wel betalen, je krijgt dan wel een betere documentatie en ondersteuning.<br />

leJos (http://leJos.sourceforge.Net)<br />

LeJOS gaat de firmware van de NXT vervangen en bevat een kleine Java Virtual Machine<br />

zodanig dat je de robot kan programmeren in Java. Eveneens gratis.


HOOFDSPONSOR


HOOFDSPONSOR<br />

DE NATIONALE LOTERIJ IS OOK DAAR<br />

WAAR JE HET NIET VERWACHT.<br />

Soms moet je heel goed kijken om het op te merken. De Nationale<br />

Loterij speelt voortdurend een actieve rol in de samenleving. Elk<br />

jaar creëert ze kansen voor honderden projecten in de sociale,<br />

culturele, wetenschappelijke, humanitaire en sportieve sfeer.<br />

Kansen voor iedereen. En daarom vind je de Nationale Loterij ook<br />

daar waar je het niet verwacht.


HOOFDSPONSOR


LEGO-NXT<br />

BINNENSTE-<br />

BUITEN<br />

©Daniele Benedettelli<br />

Roboticaonderzoekers hebben een fantastische droom: in 2050 de wereldkampioen<br />

voetbal verslaan met een ploeg robots. Zover zijn we nog<br />

lang niet, maar ondertussen oefenen de robots reeds in de robotwedstrijd<br />

RoboCup. Je kan zelf ook een robot in elkaar knutselen en deelnemen aan<br />

RoboCup <strong>Junior</strong>! Surf naar www.robocupjunior.be en je krijgt meer info<br />

over de volgende RoboCup <strong>Junior</strong>-finale in België of Nederland.<br />

In het boek ROBOTS BINNENSTEBUITEN vergeleken we de werking van<br />

een mens met deze van een robot en zagen we verschillende toepassingen<br />

van robots. In dit boek zetten we de volgende stap: zelf met de LEGO<br />

Mindstorms NXT robot experimenteren. Deze bouwdoos biedt de mogelijkheid<br />

aan de beginner om zijn eerste stappen binnen de robotica te zetten.<br />

Ook heel wat gevorderde hobbyisten beleven nog steeds veel plezier<br />

aan diezelfde LEGO steentjes en bouwen er fantastische projecten mee. In<br />

dit boek staan leuke projecten beschreven die je kennis laten maken met<br />

de verschillende mogelijkheden van deze unieke robot. De ideale start om<br />

jou droomrobot te realiseren!<br />

<strong>Bram</strong> <strong>Vanderborght</strong> ( jaar) is roboticaonderzoeker aan de Vrije Universiteit<br />

Brussel en het Italian Institute of Technology. Hij bouwde de<br />

stappende robot Lucy. In Japan deed hij onderzoek op de menselijke<br />

robot HRP- . Nu werkt hij in Italië mee aan de kindrobot iCub.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!