Handleiding Lego Mindstorms NXT

advertisement
Bram Vanderborght
LEGO-NXT
BINNENSTEBUITEN
ABIMO
UITGEVERIJ
© 2008 The LEGO Group. These images are courtesy of the LEGO Group. (2x onder)
© Quebec Lego User Group (quelug.org) (linksboven)
© Daniele Benedettelli (rechtsboven)
Inhoudstabel
Voorwoord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1. Is de LEGO Mindstorms NXT een echte robot?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2. Hoe wordt de LEGO Mindstorms NXT gebouwd? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3. Waarmee denkt de LEGO Mindstorms NXT?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4. Hoe programmeer je de LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5. Hoe toon je informatie op het NXT beeldscherm?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6. Hoe bedien je de lamp van de LEGO Mindstorms NXT?. . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7. Hoe beweegt de LEGO Mindstorms NXT?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8. Hoe maakt de LEGO Mindstorms NXT geluid? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
9. Hoe hoort de LEGO Mindstorms NXT?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
10.Hoe ziet de LEGO Mindstorms NXT? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
11. Hoe voelt een LEGO Mindstorms NXT?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
12. Hoe meet de LEGO Mindstorms NXT afstanden?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
13. Hoe communiceren een computer of GSM met de LEGO Mindstorms NXT?. . . . . . . . . . 69
14. Hoe geraakt de LEGO Mindstorms NXT het noorden niet kwijt?. . . . . . . . . . . . . . . . . . . . . 71
15.Waarom valt de LEGO Mindstorms NXT niet om?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
16. E xtra NXT sensoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
17. Overige NXT-G programmeerblokken. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
18. Hoe hack je de LEGO Mindstorms NXT?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
19. Programmeeromgevingen voor LEGO Mindstorms NXT. . . . . . . . . . . . . . . . . . . . . . . . . . 88
Voorwoord
Met de robotwedstrijd RoboCup Junior willen de Vrije Universiteit Brussel, Erasmushogeschool Brussel, Hogeschool West-Vlaanderen, Katholieke Hogeschool West-Vlaanderen en
Hogeschool Gent jongeren warm maken voor wetenschap en techniek. We beseffen dat er
een zekere drempelvrees bestaat om aan de slag te gaan met robots. Om je te helpen bij de
eerste stappen in de robotica, heb ik deze handleiding geschreven hoe de LEGO Mindstorms
NXT robot bouwen en programmeren. Deze bouwdoos is een geschikt startpakket speciaal
ontworpen voor dit doel. Dit boek sluit nauw aan bij het robotboek ROBOTS BINNENSTEBUITEN. Lees dus eerst het ene hoofdstuk uit het robotboek en probeer dan met behulp van deze
handleiding de functie zelf uit met je LEGO robot. Voel je geroepen om je robot te meten met
andere robots, surf dan naar www.robocupjunior.be en schrijf je in voor de komende RoboCup
Junior robotwedstrijd.
Bij het schrijven heb ik hulp gekregen van verschillende personen. In het bijzonder wil ik
volgende personen bedanken: Wim Van Broeck van de Cel Wetenschapscommunicatie van
de VUB, Leen De Bie van de Pedagogische Begeleidingsdienst Gent, Pol Demeurisse van
Techniek op school voor de 21e eeuw (TOS21), mijn mama Christiane Terryn en mijn grootvader Louis Terryn. Ook Kristin Vanderborght om mij de basis notenleer uit te leggen en Klaas
Demeulemeester voor de lay-out. Mijn dank gaat eveneens uit naar alle hobbyisten die fantastische projecten gemaakt hebben met hun LEGO blokjes en mij hun foto’s lieten gebruiken. Deze handleiding en RoboCup Junior kon niet gerealiseerd worden zonder de steun van
de hoofdsponsors KUKA en de Nationale Loterij, partners maxon motor en Leroy-Somer en
media partners EOS en Ketnet.
Dansende robots, reddingsrobots en voetballende robots tijdens RoboCup Junior.
© The RoboCup Federation
© Ork de Rooij, RoboCup Junior NL
© The RoboCup Federation
Onderwijspartners
Professionele
Partners
Mediapartners
Hoofdsponsors
Met Dank aan
Inleiding
Heb je het robotboek ROBOTS BINNENSTEBUITEN gelezen en geprikkeld geraakt om zelf je
robots te bouwen en te programmeren, dan is de LEGO Mindstorms NXT robot een uitstekende keuze. Deze bouwdoos biedt de mogelijkheid aan de beginner om zijn eerste stappen
binnen de robotica te zetten, maar ook heel wat gevorderde hobbyisten beleven nog steeds
veel plezier aan diezelfde LEGO steentjes. Het aantal robots dat je ermee kan bouwen is dan
ook ongelimiteerd. Of misschien reikt je doelstelling wel verder en wil je een wedstrijd voor
LEGO robots winnen zoals de FIRST LEGO League of de RoboCup Junior? Dan maak je met
het lezen van dit boek al een goede start. In het boek ROBOTS BINNENSTEBUITEN legden we
eerst uit hoe de mens functioneert en vervolgens hoe een robot werkt. In dit boek zetten we
de volgende stap: zelf met robots experimenteren. Eén voor één zullen we de verschillende
functies van de NXT belichten en stap voor stap de programma’s uitleggen om deze functies
optimaal te benutten. Verwacht in dit boek echter geen recepten of bouwplannen voor de
“ideale” robot . Want als iedereen dezelfde robot bouwt is de fun er ook snel af. Verwacht wel
al de nodige ingrediënten om jou droomrobot te realiseren.
De Youtube videos van de verschillende projecten staan op www.robocupjunior.be. Op de site
staan eveneens de voorbeeldprogramma’s die uitgelegd worden in dit boek. Ook de praktische
informatie en tips om deel te nemen aan de robotwedstrijd RoboCup Junior is er beschikbaar.
Hoe werkt de mens?
Hoe zitten verschillende soorten robots in elkaar?
© Honda, © KUKA
© John Deere Construction & Foresty Company
Hoe maak ik zelf een robot?
© 2008 The LEGO Group. These images are courtesy of the LEGO Group
Concentratie bij de robotwedstrijd
FIRST LEGO League.
© Photography by Adriana M. Groisman
Is de LEGO Mindstorms 1 NXT een echte robot?
De ingrediënten van een robot zijn de sensoren om de omgeving waar te nemen, de computer
om na te denken en motoren om te bewegen. De hersenen van de LEGO robot is een klein
computertje dat de NXT wordt genoemd. In het geheugen van de NXT sla je de programma’s op die vertellen wat de robot zal doen. Aan de NXT worden 4 sensoren aangesloten met
elektrische draden via de poorten 1 tot en met 4. Standaard zit in de bouwdoos de tastsensor,
de lichtsensor, de geluidssensor en de ultrasone sensor, maar er zijn nog heel wat andere
sensoren beschikbaar voor je LEGO robot. Aan de NXT kan je 3 interactieve servomotoren
koppelen via de poorten A, B en C. Met USB of bluetooth sluit je de NXT aan op een computer.
Met de bluetooth kan je bovendien draadloos communiceren met andere NXT’s of met een
GSM. Er zijn ook 4 knoppen aanwezig om de NXT te bedienen en hij heeft ook een groot LCDdisplay en een luidspreker.
De LEGO NXT voldoet dus volledig aan de definitie van een
robot. Met de 4 sensoren wordt de omgeving waargenomen,
de NXT is de computer om na te denken en verschillende
taken te volbrengen en met de 3 servomotoren beweegt hij.
De LEGO NXT met 4 aangesloten sensoren en
3 servomotoren.
© 2008 The LEGO Group. These images are courtesy of the LEGO Group
Je kan normaal vrij kiezen welke sensor je in een sensorpoort steekt en welke servomotor in
een motorpoort. De standaardinstellingen zijn:
Poort 1: Tastsensor
Poort 2: Geluidssensor
Poort 3: Lichtsensor
Poort 4: Ultrasone sensor
Poort A: Interactieve servomotor voor extra functie
Poort B: Rechter bewegingsmotor
Poort C: Linker bewegingsmotor
Heel wat voorbeeldprogramma’s volgen deze afspraak, dus jij best ook.
De hersenen met enkele
zintuigen en spieren.
Hoe wordt de LEGO Mind
2
storms
NXT gebouwd?
De LEGO Mindstorms NXT robot wordt niet gebouwd met de traditionele LEGO-steentjes met
noppen, maar met de onderdelen van het LEGO Technic gamma. Deze werden in 1977 geïntroduceerd om meer technische constructies mogelijk te maken. Eerst werden ze verkocht
onder de naam “Expert Builder”, sinds 1984 liggen ze onder de naam “Technic” in de winkel.
De bouwstenen zijn onder te verdelen in balken met de typische gaten in de
zijkant, wielen, assen, tandwielen en wormwielen en verschillende verbindingselementen om al deze stukken aan elkaar te verbinden. De balken
hebben geen noppen meer, daardoor kan je er geen traditionele LEGO
blokjes aan bevestigen. Het weglaten van de gekende noppen heeft tot
enige controverse geleid. Met onderdelen zonder noppen kan men gemakkelijker bouwen in verschillende richtingen en soms is het eindresultaat ook
mooier. Om een LEGO Technic constructie te maken moet je van binnen naar
buiten bouwen, terwijl je met de blokjes met noppen van onder naar boven
bouwt.
De traditionele LEGO-steen.
© 2008 The LEGO Group. These images are courtesy of the LEGO Group.
De standaard bouwplannen: TRIBOT, ROBOARM T-56, SPIKE en ALPHA REX.
© 2008 The LEGO Group. These images are courtesy of the LEGO Group
LEGO levert de bouwplannen van de TRIBOT, ROBOARM T-56, SPIKE en ALPHA REX. Op de
Mindstorms website vind je nog andere voorbeelden. Wil je liever je eigen robot ontwerpen ,dan
volg je best onderstaande tips. Je kan trouwens met de software LEGO Digital Designer je robot
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 met een bibliotheek van projecten, vaak met de software dat ze ervoor geschreven hebben en de bouwplannen in LEGO Digital Designer. Heb je een bepaald probleem dan kan je hier
enkele ideeën opdoen. Dit forum is ook geschikt om zelf je creatie wereldkundig maken.
Screenshot van de LEGO Digital Designer software.
Balken en verbindingselementen
De balken kunnen op verschillende manieren met de verbindingselementen aan elkaar bevestigd worden. Het eenvoudigst zijn de pinnen, hiermee verbind je de balken zijdelings met
elkaar. Je hebt zwarte en grijze verbindingselementen. Maak ze beide eens na zoals op de
figuur en draai ermee rond. Je voelt het meteen. De zwarte heeft veel meer wrijving dan de
grijze. De zwarte verbinding gebruik je dus om verbindingen te maken die vast moeten zitten en de grijze indien de twee balken ten opzichte van elkaar moeten roteren want hier is er
geen tot weinig wrijving. Maar indien de beide balken echt onbeweeglijk of star moeten zijn
dan gebruik je best twee zwarte pinnen naast elkaar.
Twee balken aan elkaar bevestigt: L: zonder wrijving, M: met wrijving, R: star aan elkaar.
10
Om ook in andere richtingen te kunnen bouwen is er een hele verzameling verbindingselementen beschikbaar. Met de lange pinnen worden 3 balken in één keer aan elkaar bevestigd.
Enkele verbindingselementen.
Assen
LEGO Technic is gemaakt om te kunnen bewegen en assen zijn hierbij onontbeerlijk. De assen gaan beweging transporteren en de LEGO Technic assen hebben een kruisvormig profiel.
Deze assen kunnen vrij bewegen in de balken met gaten, maar ook volgens de richting van de
as. Om dit te verhinderen zijn er twee aseinden te gebruiken.
De twee verschillende aseinden om het zijdelings
schuiven van de as te verhinderen.
Maar ook stukken van de robot, zoals de klauwen van de TRIBOT, moeten bewegen. Daarvoor
hebben sommige balken geen rond, maar een kruisvormig gat. Hierin wordt de as gestoken.
Nu gaat door de as te draaien, de balk meebewegen.
De as zal de grijze balk met bocht doen bewegen
want de as steekt in een kruisvormig gat.
De as kan vrij roteren in de cilindervormige gaten
van de witte balk, deze zal dus niet meedraaien.
Heel wat energie die uit de motor komt gaat verloren aan wrijving, veroorzaakt door een
slecht gebruik van de assen. Tracht de wrijving dus zoveel mogelijk te beperken door de
assen enkel door gaten te steken die mooi recht tegenover elkaar liggen en gebruik alleen
assen die mooi recht zijn. Draag dus zorg voor je materiaal. Tracht ook steeds assen op minstens 2 plaatsen te ondersteunen.
1
2
3
4
1: Zeer slecht: de as bevindt zich te ver van de balk dus veel wrijving.
2: Slecht: de as is nog maar op één punt ondersteund.
3: Goed: de as is op 2 punten ondersteund, wiel dicht bij balk.
4: Best: de as is ondersteund rond de plaatsen waar er krachten op inwerken, hier rond het tandwiel en het wiel.
Om de balken met de kruisvormige gaten te kunnen verbinden met de ronde gaten zijn er de blauwe pinnen
(met wrijving) en witte pinnen (zonder wrijving).
11
Tandwielen
Tandwielen zijn machine-elementen om bewegingen over te brengen of de draairichting,
snelheid en kracht ervan te veranderen.
Normale tandwielen
De normale LEGO Technic tandwielen hebben 8, 16, 24 of 40 tandjes. Deze tandwielen kunnen
enkel in een vlak gebruikt worden en de assen liggen steeds evenwijdig.
De 4 normale Technic tandwielen met 8, 16, 24, 40 tanden.
Probeer eens met de meegeleverde componenten het volgende te maken.
Tracht deze eenvoudige tandwielkast te bouwen.
Draai nu het kleine wiel 5 keer rond en tel hoeveel keer het grote wiel ronddraait. Als je goed
hebt geteld kom je op 3 omwentelingen. De verhouding van 3 over 5 noemen we de overbrengingsverhouding en deze wordt precies bepaald door het aantal tanden te delen . Dit betekent
dat als we een motor gaan aansluiten op het kleine tandwiel, dat de snelheid van het grote
wiel keer kleiner is, maar ook 1,67 keer sterker! ! Je wint hier dus aan kracht maar verliest
aan verplaatsing. Bovendien keert dergelijke opstelling de draairichting om. Het aantal gaten
tussen de 2 assen is afhankelijk van het aantal tandwieltanden. Gebruik volgende tabel om
de afstand te kennen. Soms staat er een kommagetal zoals bij het gelijktijdige gebruik van
de tandwielen met 16 tanden en 8 tanden, de afstand is hier 1,5 gaten. Deze combinatie kan je
niet monteren op dezelfde balk omdat de afstand geen geheel aantal gaten is.
12
Aantal
tanden
8t
16 t
24 t
40 t
8t
1
1,5
2
3
16 t
1,5
2
2,5
3,5
24 t
2
2,5
3
4
40 t
3
3,5
4
5
Voorbeeld waar enkel de draairichting
wordt omgedraaid, maar niet de snelheid
(overbrengingsverhouding =1).
Kijk eens op de figuur hoeveel tandwielen er na elkaar geplaatst zijn om de interactieve NXT
servomotor krachtig te maken. De totale overbrengingsverhouding is 1 over 48. Dus de as van
de motor draait 48 keer rond voor de uitgaande as 1 omwenteling maakt.
Het inwendige van de NXT interactieve servomotoren, de verschillende tandwielen zorgen ervoor dat de
as trager gaat draaien, maar met veel meer kracht. © 2008 The LEGO Group. These images are courtesy of the LEGO Group
13
Kegelvormige (of conische) tandwielen
Kegelvormige (of conische) tandwielen worden gebruikt om assen die niet evenwijdig staan
met elkaar te verbinden. Met de Technic dubbele kegelvormige tandwielen staan de assen
loodrecht op elkaar. Er zijn 3 verschillende kegelvormige tandwielen (12, 36 en 40 tanden).
Kegelvormige tandwielverbinding.
Worm en wormwiel
Een combinatie van een worm en wormwiel wordt gebruikt wanneer grote overbrengingsverhoudingen gewenst zijn. Als je aan de as van de worm gaat draaien zal het grote wormwiel
heel traag ronddraaien. Tracht je aan de as van het wormwiel te draaien dan zal je merken
dat dit niet gaat. Dit noemt men het zelfremmend effect. Deze constructie wordt bijvoorbeeld
voor de ROBOARM T-56 gebruikt. Zetten we de motor die verbonden is aan de as met de
worm uit, dan zal de arm niet naar beneden zakken maar op zijn positie blijven.
Worm met wormwiel
Je zal veel plezier beleven aan het bouwen en programmeren van
de LEGO Mindstorms NXT robots.
© 2008 The LEGO Group. These images are courtesy of the LEGO Group
14
Waarmee denkt de LEGO
3 Mindstorms NXT?
Net zoals de hersenen bestaat een computer uit verschillende eenheden elk met een verschillende functie. Het hart van de computer is de processor. In dit kleine stukje elektronica
gebeuren de berekeningen. De processor bestaat uit miljoenen transistoren vergelijkbaar
met de zenuwcellen in de hersenen. Transistoren zijn piepkleine elektrisch gestuurde
schakelelementen. De processor rekent echter enkel met nullen en enen, de zogenaamde
bits. Wanneer we 8 bits gebruiken dan noemt men dit een byte. Hiermee kunnen we de
getallen 0 (=00000000) tot 255 (=11111111) voorstellen. Het getal 52 is bijvoorbeeld 00110100.
Deze voorstelling noemen we het binaire getalstelsel. De processor in de LEGO NXT is
een 32-bit ARM7 processor en luistert naar de naam AT91SAM7S256. De 32-bit betekent
dat de processor met getallen werkt die 32 bit lang zijn, dit zijn dus de getallen van 0 tot
4.294.967.295. Hoe snel de computer rekent is een belangrijke eigenschap van de processor
en wordt bepaald door de kloksnelheid van de processor. De klok van de processor gaat op
regelmatige tijdstippen een signaal uitzenden waarop alle transistoren tegelijkertijd hun
volgende berekening uitvoeren. Hoe sneller de klok deze signalen kan uitzenden, hoe meer
berekeningen de processor kan uitvoeren. De kloksnelheid van de NXT processor is 48
MHz (megahertz of 48.000.000 Hz). De processor haalt uit het geheugen data op en schrijft
er terug weg. In het RAM (Random Access Memory) geheugen wordt data opgeslagen die
de processor nodig heeft om de berekeningen uit te voeren. Daarom wordt dit geheugen
ook het werkgeheugen genoemd. De LEGO NXT heeft 64 kB (64 kilobyte of 64.000byte)
RAM geheugen. Om je programma op te slagen heb je een apart geheugen ter beschikking
met een grootte van 256 kB Flash. Al deze elementen zitten in het zwarte doosje (de chip)
met nummer 1. De hoofdprocessor wordt in zijn taak nog eens geholpen met de 8-bit AVR
processor met de naam ATMEGA48 (4 MHz – 512 byte RAM - 4 kB Flash) en zit in het doosje
met nummer 2. Al deze elektronica moet gevoed worden. Hiervoor moet je 6 AA batterijen
in de LEGO NXT steken. Een heroplaadbare batterij is aangeraden als je de LEGO NXT vaak
gebruikt. Lees in de gebruikshandleiding hoe je de batterijen moet aansluiten en gebruiken.
Bovendien zie je op de foto nog heel wat andere componenten. Deze verbinden de processor met de sensoren, beeldscherm, motoren, knoppen, bluetooth en USB.
Samenvatting technische specificaties
• 32-bit ARM7 microprocessor
• USB 2.0 full speed poort (12Mbit/s)
• 256 Kbytes FLASH, 64 Kbytes RAM
• 4 inputpoorten, 6-draads kabel digital platform
• 8-bit microprocessor
• 3 outputpoorten, 6-draads kabel digital platform
• 4 Kbytes FLASH, 512 Byte RAM
• 100x64 pixel LCD grafisch beeldscherm
• Bluetooth draadloze communicatie (Bluetooth
Class II V2.0 volgend)
• Luidspreker, 8 KHz geluidskwaliteit
• Voedingsbron: Herlaadbare Lithium batterij of
6 AA batterijen
15
2
1
Het inwendige van de LEGO NXT met de 2 processoren en de nodige elektronica. © Jürgen Stuber
NXT-robots proberen de tegenstrever uit de cirkel te duwen tijdens de Mindstorms NXT Sumo
Competition. © Andrew Becraft - Brothers-Brick.com
16
Hoe programmeer je de LEGO 4 Mindstorms NXT?
Hier volgt een voorbeeld hoe een klassiek computerprogramma eruit ziet (in NBC een programmeertaal voor LEGO robots geschreven door John Hansen). Het programma zal de robot gedurende 4 seconden vooruit doen rijden en dan 3 seconden achteruit. Elke regel bevat
een instructie die de robot achter elkaar zal uitvoeren.
#include “NXTDefs.h” hiermee moet het programma steeds beginnen en bevat
informatie over hoe de motoren aansturen en sensoren uitlezen
thread main
start van het programma
OnFwd(OUT _ B,100)
Motor B voorwaarts laten draaien aan 100% vermogen
OnFwd(OUT _ C,100)
Motor C voorwaarts laten draaien aan 100% vermogen
wait 4000
Wachten gedurende 4000 milliseconden, motoren draaien dus
4 seconden lang
OnRev(OUT _ B,50)
Motor B achterwaarts laten draaien aan 50% vermogen
OnRev(OUT _ C,50)
Motor C achterwaarts laten draaien aan 50% vermogen
wait 3000
Wachten gedurende 3000 milliseconden, motoren draaien dus
3 seconden lang
Off(OUT _ B)
Motor B afremmen
Off(OUT _ C)
Motor C afremmen
Endt einde van het programma
Gelukkig kunnen we ook ons computerprogramma opbouwen met blokjes in de grafische
programmeertaal “LEGO Mindstorms NXT-G”, deze software is bijgeleverd in de LEGO NXT
kit. De LEGO NXT-G software is trouwens gebaseerd op LabVIEW van National Instruments,
gebruikt door heel wat onderzoekers in universiteiten en onderzoekscentra wereldwijd. Lees
in de handleiding hoe je de software (ook in het Nederlands) moet installeren. Je moet eerst
de software installeren en dan pas mag je de NXT aan de PC aansluiten! Het fijne aan deze
taal is dat je heel gemakkelijk een programma kan opbouwen. Het programma van hierboven
gaat er als volgt uitzien.
17
Met volgende instellingen van de blokjes:
Gebruik motoren B en C
Vooruit rijden
100 % vermogen
Rechtdoor rijden
Gedurende 4 seconden
Gebruik motoren B en C
Achteruit rijden
50 % vermogen
Rechtdoor
rijden
Je eerste NXT-G programma maken
Een mogelijkheid om de Lego Mindstorms NXT robot te
programmeren is de NXT-G software.
© 2008 The LEGO Group. These images are
courtesy of the LEGO Group
Daarna
afremmen
Gedurende 3 seconden
18
Maar laten we eerst van het begin starten zodanig dat je dit programma
zelf kan schrijven.
Klik op het icoontje van Mindstorms NXT om de software te starten.
Geef een naam aan je programma en klik op Go. Kies een naam die goed weergeeft wat je
programma doet, zo vind je hem in de toekomst gemakkelijk terug.
Als het tekstveld gemarkeerd is met Simple text gebruik dan enkel volgende karakters:
Anders verkrijg je lege plaatsen op het NXT beeldscherm. Dus karakters met accenten en
Aziatische tekens vermijd je best.
De NXT-G gebruikersinterface wordt dan geopend. Hierop zijn een aantal onderdelen terug te
vinden.
19
In het Robo Center (1) vind je de Bouwgids om de verschillende robots te bouwen. In de
Programmeergids worden voorbeeldprogramma’s stap voor stap uitgelegd. Ik stel voor dat
je start met de TRIBOT te bouwen die onder voertuigen terug te vinden is. Voorlopig hoef je
enkel maar het rijdende onderstel te bouwen. Let goed op dat je Poort B gebruikt voor de
rechter bewegingsmotor en Poort C voor de linker bewegingsmotor.
Mijn Portaal (2) is jou toegang tot de website www.mindstorms.com. Surf er eens rond om te
kijken wat er allemaal te vinden is.
De Werkbalk (3)bevat het menu en icoontjes van een aantal vaak gebruikte functies. Zo kan
je programma’s openen en sluiten, knippen en plakken enzovoort.
Het Werkgebied (4) is de plaats waar je de verschillende instructies gaat invoeren.
Het Klein hulpvenster (5) is een spiekbriefje, als je op meer hulp klikt krijg je de uitgebreide
uitleg te lezen.
In het Werkgebied kaart (6) krijg je een overzicht van heel het programma. Hou je muis ingedrukt en beweeg over de kaart van het werkgebied. Je zal het werkgebied heen en weer zien
bewegen. Je kan ook in de werkbalk op drukken en met je muis ingedrukt in het
werkgebied zelf bewegen. Als je een groot programma aan het schrijven bent is dit handig.
De Programmeeromgeving (7) bevat alle programmeerblokken (dus de verschillende instructies) om je programma mee op te bouwen. Door te klikken op de tab vind je de
standaard omgeving terug met de meest gebruikte blokken. De complete omgeving met alle
beschikbare blokken roep je op door op de tab te drukken. En de persoonlijke blokken
staan onder de custom tab . De programmeerblokken sleep je van de programmeeromgeving naar het werkgebied.
Het Configuratiescherm (8) dient om elk programmeerblok in te stellen volgens je eigen wensen.
Met de 5 knoppen op je Controller (9) verzend je programma’s, of stukken van programma’s
naar de NXT. Een programma starten en stoppen en de instellingen van je NXT wijzigen.
Heb je de educatieve versie van de NXT-G software
dan is het Robo Center(1) vervangen door de Robot
Educator. Deze bevat 39 tutorials om je kennis te laten
maken met de verschillende mogelijkheden van de
robot.
In Robot Educator worden de bouwplannen van deze robot
gegeven. Ook met deze robot kan je probleemloos de voorbeeldprogramma’s uit deze handleiding uitproberen.
© 2008 The LEGO Group. These images are courtesy of the LEGO Group
20
Nu je weet hoe de gebruikersinterface eruit ziet en je het onderstel
van de TRIBOT gebouwd hebt, kan je starten met programmeren.
In het werkgebied zie je het startpunt staan van je programma en
de plaats waar je het eerste programmeerblok moet neerzetten.
Vanaf dit startpunt vertrekt de sequentielijn . De sequentielijn regelt het logisch verloop
van je programma en alleen blokken die hierop niet worden aangesloten worden uitgevoerd.
Als je op het startpunt klikt, verschijnt in het configuratiescherm een scherm waar je een bericht kan intypen dat samen met het programma wordt opgeslagen. Je schrijft hier best een
korte samenvatting van wat je programma doet. Na een tijdje zal je immers niet meer weten
waarvoor je programma precies diende.
Een andere mogelijkheid is met het icoon Commentaar functie rechtstreeks commentaar
te schrijven in het werkgebied.
Ik raad je aan om op regelmatige plaatsen in het programma commentaar te schrijven zoals
wat je gedaan hebt of welk lid van je team het stuk geschreven heeft. Dit zal je heel wat tijd
besparen in de toekomst.
Sleep nu het Verplaats blok van de programmeeromgeving naar de sequentielijn van
het werkgebied. In het configuratiescherm stel je in hoe de eerste beweging moet verlopen (4
seconden vooruit rijden aan 100% vermogen):
Merk trouwens op dat de programmeerblok een korte samenvatting geeft van de instellingen.
21
Rechtsboven staat dat poorten B en C ( ) zijn gebruikt. Linksonder
staat dat de robot rechtdoor en vooruit zal rijden ( ). Rechts ervan
een symbool dat de beweging zal gebeuren met vol vermogen ( ) en
gedurende een bepaalde tijd ( ). Dit laat je toe in één oogopslag te
zien hoe de programmeerblok is ingesteld. Ook alle andere programmeerblokken tonen telkens een korte samenvatting.
Sleep vervolgens een nieuw Verplaats blok naar het werkgebied en plaats het achter het eerste blok. Stel deze als volgt in:
Je eerste programma is nu klaar. Druk op om het op te slaan.
Voorbeeldprogramma: voor en achteruit.rbt
Nu moet je het programma zenden naar je NXT. Je kan dit zowel via de USB kabel als via
bluetooth doen. Hoe je een verbinding moet maken over bluetooth
tussen je PC en de NXT lees je in de handleiding.
Ik heb gekozen voor een bluetooth verbinding. Je kan dit nagaan
door op de knop rechtsboven (NXT venster) van de controller te
drukken.
Waarop volgend venster verschijnt.
Hierop zie je dat ik mijn NXT “NXT Bram” heb genoemd en dat het verbonden is via bluetooth.
Bovendien zie je in dit venster het batterijniveau en hoeveel geheugen er nog vrij is.
22
Als je hebt nagekeken dat je PC verbonden is met je NXT kan je het programma inladen. Op
het scherm van de NXT staat trouwens een voor een goed werkende bluetooth verbinding en voor een goed werkende USB verbinding.
Klik nu op Download en start van de controller om je programma naar de
NXT te zenden en uit te voeren.
Je ziet het robotje nu voor de eerste keer tot leven komen. Je zal ook zien dat het in bedrijf
icoon op de NXT steeds ronddraait. Als dit niet meer het geval is dan is het programma
vastgelopen en zal je het moeten resetten zoals beschreven in de handleiding. Het programma
stopt automatisch als de sequentielijn is afgelopen, dus in dit geval na 7 seconden. Je kan ook
op de knop rechtsonder Stop drukken om het programma onderweg te stoppen. Met de knop
linksboven Download en start selectie kan je enkel een selectie downloaden en starten. Dit
is handig tijdens het programmeren om deelprogramma’s te starten zonder telkens het hele
programma te moeten doorlopen. Met de knop linksonder Download wordt het programma
opgeslagen in het geheugen van de NXT zonder het uit te voeren. Lees in de handleiding hoe
je met de knoppen op de NXT je programma terugvindt en uitvoert rechtstreeks van op de NXT.
Dit is echter nog maar een heel eenvoudig programma, je NXT robot is tot veel meer in staat.
Want naast het aansturen van de servomotoren kan je ook zelf iets op het scherm tonen,
de NXT geluiden laten produceren en berichten over bluetooth verzenden. De robot kan ook
informatie van zijn verschillende sensoren gebruiken in het programma. Al deze acties en
sensoren komen ruimschoots aan bod in de volgende hoofdstukken.
Om de acties en sensoren ten volle te kunnen benutten moet je nog een aantal instructies
kennen die het verloop van je programma zullen beïnvloeden.
Wacht blok
De eerste instructie is het Wacht blok . Het programma zal wachten aan dit blok tot
een bepaalde conditie vervuld is. Je kan het vergelijken met een stoplicht. Ook een auto moet
wachten zolang het roodlicht is en mag pas verder rijden als hij groenlicht krijgt. De startconditie kan zowel een bepaald tijdsverloop zijn als van een sensor komen.
In je eerste programma begon de auto onmiddellijk te rijden. Voer het wachtblok tijd in
tussen het startpunt en het eerste verplaats blok.
23
Via het configuratiescherm stel je in dat de NXT 2 seconden moet wachten. Je kan tot 1/10
seconde nauwkeurigheid ingeven (dus bijvoorbeeld 2,3 of 2.3 naargelang de instellingen van
je computer).
Download en start het programma en bekijk het resultaat.
Voorbeeldprogramma: wachtblok met tijd.rbt
Met Controleer kan je in plaats van Tijd ook voor een Sensor kiezen. Kies onder Sensor voor
de NXT knoppen.
Je stelt vervolgens in welke knop je wenst te gebruiken, hier de Enter knop. Vervolgens heb
je 3 mogelijkheden voor de actie. Bij Ingedrukt zal de robot beginnen rijden wanneer de enter
knop wordt ingedrukt. Bij Vrijgeven wordt de volgende programmeerblok gestart bij het loslaten van de knop. Bij Geraakt is dit bij het snel indrukken en terug losgelaten. Wij willen dat
de robot start van zodra de knop wordt ingedrukt dus kiezen we voor Ingedrukt. Download
en start het programma in de NXT en vergeet niet op de enter knop te drukken anders blijft
de TRIBOT geduldig wachten.
Voorbeeldprogramma: wachtblok met enter knop.rbt
24
Herhaling blok
Wil je het vooruit en achteruit rijden 3 keer achter elkaar herhalen dan kan je dit als volgt doen
Dit is echter niet erg elegant en wat als je de beweging 100 keer moet uitvoeren?
Plaats daarom het Herhaling blok .
Op de volgende instellingen is te zien dat de herhaling blok moet Tellen tot 3.
Andere mogelijkheden zijn de lus eeuwig blijft uitvoeren, wachten op een sensorinput, de lus
gedurende een aantal seconden uitvoeren of wachten op een logische input. Voor de logische
input heb je wel een dataverbinding nodig waarover gesproken wordt in hoofdstuk 5.
Met het Herhaling blok herhaal je dus een deel van het programma een aantal keer.
Voorbeeldprogramma: herhaling blok.rbt
25
Omschakel blok
In het leven neem je dagelijks heel wat omschakels. Als het mooi weer is neem ik mijn zonnebril
mee anders een paraplu. Als ik veel honger heb neem ik een grote portie eten anders een kleine
portie. Je kan het beschouwen als een weg waar je zowel naar links of naar rechts kan gaan
naargelang een conditie al of niet vervuld is. Ook programmeertalen laten toe om schakelopties
in te voegen, in de NXT-G software is dit het Omschakel blok .
We gaan de werking van deze instructie uitleggen aan de hand van de TRIBOT die danst als
er muziek/geluid is maar rechtdoor rijdt als het stil is. Dit is een duidelijk voorbeeld van een
schakeloptie. De conditie die hier vervuld moet zijn is het al dan niet aanwezig zijn van muziek.
Is dit het geval (de conditie is goed) dan moet de robot dansen. Is dit niet het geval (de conditie is
verkeerd) moet de robot rechtdoor rijden. Hiervoor moet je het TRIBOT onderstel wel uitbreiden
met de geluidssensor, anders kan de robot niet detecteren of er muziek in de kamer aanwezig
is. Volg de instructies van de handleiding op pagina 61. Sluit de geluidssensor aan op Poort 2.
Maak vervolgens een nieuw programma aan en plaats een Herhaling blok die je zo instelt dat
hij eeuwig blijft doorgaan. Sleep in dit blok het Omschakel blok. Configureer in het configuratiescherm dit blok als volgt.
We vragen dus dat de schakeloptie een Sensor controleert, deze sensor is de Geluidssensor die
aangesloten is op Poort 2. Onder Vergelijk stellen we de conditie in. De conditie is hier dat het
geluid groter (>) moet zijn dan 25. Het deel van het bereik waarin de conditie vervuld is wordt in
oranje aangegeven, het deel van het bereik waarin de conditie niet vervuld is wordt in het grijs
aangeduid. Bij de bovenste sequentielijn is de conditie vervuld, dus het geluid bedraagt meer
dan 25. Bij de onderste sequentielijn is de conditie niet vervuld.
Bovenste sequentielijn, als de conditie is vervuld.
Onderste sequentielijn, als de conditie niet vervuld is.
26
In de bovenste sequentielijn programmeren we nu het dansje. De robot draait om zijn as
eerst naar links en dan naar rechts. In de onderste sequentielijn rijdt de robot rechtdoor. Het
volledige programma ziet er als volgt uit.
Met de volgende instellingen in het configuratieblok:
Deze twee blokken stellen het dansje voor. De robot draait eerst rond zijn as naar links met
de wielen die een halve draai maken en vervolgens hetzelfde maar naar rechts.
27
Als de conditie niet vervult is dan rijdt de robot onbegrensd rechtdoor aan 50% van het vermogen. Wegens het Herhaling blok blijft de NXT steeds nakijken of de conditie al dan niet
vervuld is. Van zodra het geluidsniveau dus de waarde 25 overschrijdt, start het dansje.
Voorbeeldprogramma: dansje op geluid.rbt
Met het Omschakel blok wijzig je dus het verloop van het programma in twee verschillende
richtingen naargelang een conditie al dan niet vervuld is.
In de volgende hoofdstukken zullen we verschillende sensoren zien die een conditie kunnen leveren. Het omschakel blok kan ook een conditie krijgen van dataverbinding waarover
gesproken wordt in hoofdstuk 10. Deze optie schakel je in door Controleren op Waarde in te
stellen in plaats van op Sensor.
© Marc-Andre Bazergui - Quebec Lego User Group - (quelug.org)
28
De sequentielijn
Door de verschillende programmeerblokken achter elkaar op de sequentielijn te plaatsen bepaal je de logische volgorde van het programma. Je kan echter ook parallelle sequentielijnen
maken waardoor je programma verschillende taken tegelijk uitvoert. Zo kan de hoofdsequentielijn de beweging van de robot bepalen en een tweede sequentielijn de grijper van de robot
bedienen. Dit doe je door een programmeerblok boven de hoofdsequentielijn te plaatsen. Vervolgens ga je op de startknop staan en met de linkermuisknop ingedrukt sleep je een tweede
sequentielijn naar het nieuwe programmeerblok.
`
Je kan ook later in het programma een nieuwe parallelle sequentielijn starten door de shift
toets ingedrukt te houden vanaf een punt van de hoofdsequentielijn en naar boven of beneden
te bewegen met je muis.
Opdracht: Programmeer de TRIBOT met de volgende sequentie: 4 keer de sequentie 4
seconden vooruit en 3 seconden achteruit rijden en tegelijkertijd de klauwen van de TRIBOT
open en dicht laten gaan. Voeg eerst aan de robot de klauwen toe zoals beschreven in de
handleiding. Programmatietip: Gebruik een Herhaling blok die eeuwig blijft doorlopen. Plaats
hier twee Verplaats Blokken in, nu enkel voor poort A waar de servomotor van de klauwen is
aan verbonden is. Laat de motor steeds 90 graden draaien in beide richtingen.
Voorbeeldprogramma: vooruit en achteruit met klauwen.rbt
29
Mijn blok
Met Mijn blok bouw je zelf een eigen programmeerblok door een aantal blokken samen te
voegen en er een eigen icoontje aan vast te plakken. Dit is handig wanneer je dezelfde sequentie blokken regelmatig in je programma nodig hebt, dan hoef je het niet steeds opnieuw
te programmeren. Je kan deze blokken ook gebruiken in andere programma’s. Dit bespaart
heel wat tijd. Je zal zien dat je na een tijdje een hele bibliotheek aan Mijn blokken hebt samengesteld. Bovendien verbetert deze mogelijkheid ook de leesbaarheid van je programma.
Een groot programma met heel wat programmeerblokken is immers heel onoverzichtelijk.
Rangschik dus de blokken met een bepaalde functie en breng ze onder in een Mijn blok.
Om een Mijn blok aan te maken selecteer je de gewenste blokken door er met je cursor een
denkbeeldige rechthoek rond te tekenen. De geselecteerde knoppen krijgen een blauwe rand.
Ga vervolgens naar Bewerken in het menu en selecteer Maak een Nieuw Mijn Blok.
Geef je programmeerblok een logische naam en een goede beschrijving. Je kan ook nazien
welke programmeerblokken er in het blok zitten. Door op Volgende te klikken bouw je een
eigen icoon door kleine tekeningen met je muis in de bewerkingsmodule te slepen. Klik uiteindelijk op Afsluiten.
In het werkgebied zal je nu je eigen Mijn blok zien staan. Je vindt trouwens je bibliotheek Mijn
Blokken terug door op de custom tab te drukken en dan op Mijn blokken te drukken.
Je past het blok aan door er dubbel op te klikken of in menu onder Bewerken naar Bewerk
Geselecteerd Mijn Blok te gaan. Je blokken beheren doe je door in het menu onder Bewerken
naar Persoonlijke werkomgeving (Palet) Beheren te gaan.
30
Hoe toon je informatie op 5 het NXT beeldscherm?
De NXT heeft een groot LCD beeldscherm waarop heel wat informatie terug te vinden is. De
tekst is enkel in het Engels. Zo geeft het beeldscherm informatie weer of de USB kabel is
aangesloten of dat de bluetooth verbinding werkt. Een icoontje toont het batterijniveau aan.
Je ziet er ook dat het programma nog loopt. Indien het programma is vastgelopen,moet je de
NXT resetten. Met de knoppen loop je ook door het NXT menu. Hoe je door het menu scrolt
staat beschreven in de handleiding. Je kan echter ook zelf informatie en beelden tonen op het
beeldscherm. De NXT display heeft 100x64 dus 6400 pixels. In dit hoofdstuk gaan we bekijken
hoe je het beeldscherm van de NXT moet aansturen.
Beeldscherm blok
Met het Beeldscherm blok toon je zowel een afbeelding, tekst of een tekening op
het scherm. We gaan nu een programma maken dat “Hello World” in een tekstballontje op het
scherm toont.
Sleep vanuit de programmeeromgeving het programmeerblok Beeldscherm in het werkgebied.
Onder Actie selecteer je Afbeelding en onder Bestand kies je voor Talk01. Met je cursor kan je
het beeld vastpakken en op een andere positie plaatsen.
31
Download en start dit programma. Wat zie je... niets. De reden is dat dit programma zo snel
is uitgevoerd dat je het niet kan zien. Plaats daarom een Wacht blok achteraan en wacht 5
seconden.
Test het programma opnieuw. Nu werkt je programma wel.
Plaats nu achter het wacht blok nog een Beeldscherm blok en een Wacht blok van 5 seconden.
Stel onder Actie de optie Tekst in en schrijf onder Tekst de woorden Hello World.
Download en start dit programma. Je ziet eerst 5 seconden de tekstballon verschijnen en
vervolgens de woorden “Hello World”. Dit komt omdat de optie Wissen is aangevinkt onder
Beeldscherm. Doe het vinkje weg door erop te klikken en probeer opnieuw. Nu zie je eerst
5 seconden de tekstballon verschijnen en dan komt er in de tekstballon de woorden “Hello
World”.
Voorbeeldprogramma: Hello World.rbt
32
Door onder Actie de optie Tekening te kiezen kan je zelf iets tekenen op het beeldscherm.
Je kan ofwel een Punt, Lijn of Cirkel tekenen onder Type. Wil je een tekening met meerdere
punten, lijnen en cirkels dan zal je verschillende Beeldscherm blokken achter elkaar moeten
plakken en telkens de optie Wissen ongedaan maken.
In het beeldscherm configuratiescherm zie je de oorsprong, de positie van een punt en de X
en Y coördinaat aangegeven. De X coördinaat geeft het aantal horizontale pixels weer en de Y
coördinaat het aantal verticale pixels. De oorsprong 0 heeft als coördinaten X=0 en Y=0. Het
aangeduide punt heeft als coördinaten X=15 en Y=35. Dus van de oorsprong worden er eerst
15 pixels naar rechts geteld en dan 35 pixels naar boven. Het punt rechts bovenaan heeft als
coördinaten X=99 en Y=63 omdat het beeldscherm 100 pixels breed en 64 pixels hoog is. Voor
lijnen moet je de begincoördinaten van beide uiteinden van het lijnstuk ingeven en voor cirkels
wordt het centrum gevraagd en de straal.
Je kan de positie van een tekening, tekst of figuur veranderen door de cursor ingedrukt te
houden of de begincoördinaten (linksonderaan) rechtstreeks in te typen.
Ik heb deze tekening gemaakt. Welke mooie tekening kan
jij maken?
Voorbeeldprogramma: smiley.rbt
De actie Reset zal simpelweg heel je beeldscherm wissen.
33
Datanaven en dataverbindingen
Het is handig om informatie op het scherm te tonen, maar dan moet die data wel in het programmeerblok ingevoegd worden. Daarom bestaan er de dataverbindingen en de datanaven.
Je opent de datanaaf door op de tab linksonder van het programmeerblok te klikken (zie het
pijltje op de figuur).
De linkerkant van de datanaaf bevat de inputwaarden, die naar het programmeerblok
gezonden worden. De rechtkant bevat de
outputwaarden of de waarden die vanuit het
programmeerblok vertrekken.
Al de programmeerblokken hebben een dergelijke datanaaf, die wel verschillend is van blok
tot blok. Een output contactpunt van de ene
datanaaf verbind je met een input contactpunt
van een andere datanaaf . Deze lijn noemt
men een dataverbinding en transporteert data.
Er bestaan 3 verschillende dataverbindingen
die niet met elkaar verbonden mogen worden.
1.
2.
3.
Oranje draden dienen voor het vervoer van tekst. Een tekst bestaat uit letters,
woorden en zelfs cijfers. Met die nummers kan je echter niet meer rekenen.
Gele draden transporteren gehele getallen, zowel positief als negatief.
Groene draden zijn voor de logische dataverbindingen, deze kunnen enkel Goed of Verkeerd bevatten.
Je zal zien dat dataverbindingen heel krachtig zijn en je in staat zullen stellen om geavanceerde programma’s te maken.
34
We gaan nu een programma schrijven dat het aantal seconden op het scherm toont.
Gebruik hiervoor een Herhaling blok dat je Eeuwig laat lopen. Vink ook de Teller aan
Deze informatie ga je dan als tekst naar het Beeldscherm blok brengen. Sleep vervolgens
een Beeldscherm blok en Wacht blok in het werkgebied. Kies in het beeldscherm configuratiescherm voor Tekst en stel het wacht blok in op 1 seconde. Door dit wacht blok krijgen we
elke seconde een nieuwe waarde op het scherm.
Wanneer je het output contactpunt van het Herhaling blok gaat verbinden met het Tekst input
contactpunt voor het Beeldscherm blok krijg je een grijze gestippelde lijn. Deze grijze lijn
geeft aan dat je dataverbinding fout is. Dit komt omdat het output contactpunt van het type
getal is, terwijl het input contactpunt van het type tekst is en contactpunten van een verschillend type mag je niet met elkaar verbinden. Wis daarom de dataverbinding door éénmaal te
klikken op het input contactpunt. Een dataverbinding wissen doe je door aan de uitgang van
de dataverbinding te klikken.
Daarvoor gaan we een extra programmeerblok Getal in tekst invoegen die te vinden is
onder de complete omgeving tab onder Geavanceerd . Dit programmablok zal een
getal omzetten in een tekstwaarde.
Je ziet nu eerst een gele dataverbinding voor het getal en vervolgens een oranje dataverbinding voor de tekst. Nu zal het programma wel werken. Op het scherm zie je het aantal verstreken seconden. Probeer het maar eens uit.
Voorbeeldprogramma: teller op scherm.rbt
35
Een tweede fout ontstaat wanneer je een verbindingspad kunt volgen dat hetzelfde blok twee
keer bezoekt (ongeacht het aantal blokken en verbindingen). Dit is een cyclus en moet vermeden worden want het geeft aanleiding tot verbroken dataverbindingen en dus een ongeldig
programma. Een ontbrekende input geeft ook aanleiding tot een grijze lijn. Een laatste voorkomende fout is wanneer je teveel output contactpunten aansluit op één input contactpunt. Je
mag daarentegen wel meerdere input contactpunten aansluiten op één output contactpunt.
36
Dit is het schema van de verschillende kenmerken van de contactpunten op de datanaaf van
het Beeldscherm blok:
Contactpunt Datatype
Mogelijk
bereik
Wat de waarden betekenen
Dit contactpunt
wordt genegerd
als...
0 = Afbeelding, 1 = Tekst, 2 = Punt,
Actie
Getal
0-5
3 = Lijn, 4 = Cirkel,
5 = RestoreSysteemscherm
Goed = Leeg het scherm
Wissen
Logisch
Goed/fout
Bestandsnaam
Tekst
Max. 15
tekens
Tekst
Tekst
X
Getal
0-99
X-coördinaat
Y
Getal
0-63
Y-coördinaat
Eindpunt X
Getal
0-99
Eind X coördinaat (alleen lijn) Actie is geen lijn
Eindpunt Y
Getal
0-63
Eind Y-coördinaat (alleen
lijn)
Actie is geen lijn
Radius
Getal
0-120
Radius (alleen cirkel)
Actie is geen
cirkel
Fout = Leeg het scherm niet
Bestandsnaam van het afbeeldingsbestand
Actie is geen
afbeelding
Tekst
Actie is geen
tekst
Je kan deze ook terugvinden in de helpfile die op te roepen is vanuit het Klein hulpvenster .
De datanaaf van elk programmeerblok is hierin beschreven.
Deze dataverbindingen zijn heel handig om fouten uit je programma te halen of te debuggen
zoals ze dat in computertaal noemen. Waarden opgemeten door sensoren kan je zichtbaar
maken door een dataverbinding van de sensor, over de Getal in tekst blok, naar het beeldscherm te sturen.
Opdracht: Tracht nu zelf een volledig functionerende stopwatch te programmeren die loopt
wanneer je op de Enter knop drukt en stopt wanneer je op de linker knop drukt. Wanneer je
vervolgens terug op enter drukt zal de teller vanaf 0 opnieuw starten.
Voorbeeldprogramma:stopwatch.rbt
37
Opgelet: Beeldscherm blokken zijn heel leuk, maar omdat er zoveel pixels op een display
zijn vereisen Afbeeldingen heel wat geheugen van je NXT. Heb je te weinig geheugen dan laat
je dit beter achterwege. Als je op knop rechtsboven (NXT venster) van de Controller drukt en
dan naar de tab Geheugen gaat dan zie je hoeveel geheugen je over hebt op de NXT. Ook is
weergegeven welke bestanden er zijn opgeslagen. Het deel Grafiek bevat de afbeeldingen die
gebruikt worden voor de display. Na een tijdje zal je NXT vol programma’s zitten. Wis daarom
regelmatig de programma’s die je niet meer gebruikt.
Een radar zoekt de omgeving af naar vliegtuigen, schepen of obstakels. De radar zendt
radiogolven uit en aan de hand van het ontvangen signaal worden de verschillende posities
bepaald. Maar afstanden kan je ook meten met de ultrasone sensor. Deze TRIBOT RADAR is
geprogrammeerd om 360° rond te draaien en dan een beeld van de afstanden op het scherm
te tonen.
© Krystian Majewski
38
Hoe bedien je de lamp van 6 de LEGO Mindstorms NXT?
Lamp Blok
De educatieve versie van de LEGO Mindstorms NXT bevat een extra lampje. Dit lampje zit
echter niet in de standaarddoos. Via de Mindstorms website kan je de NXT-G lamp programmeerblok downloaden om de lamp te bedienen. In dit hoofdstuk gaan we een knipperlicht
programmeren. We plaatsen eerst een Herhaling blok die we oneindig laten doorlopen.
In dit programmeerblok plaatsen we tweemaal een Lamp Blok met erachter een
Wacht blok.
Het eerste Lamp blok stellen we al volgt in.
De lamp blok schakelen we aan Poort A, we wensen dat de lamp aangaat (On) en met volledige intensiteit (Intensity=100).
De lamp laten we 0,3 seconden aanstaan, dit stellen we in via het configuratiescherm van het
Wacht blok.
39
Het tweede Lamp blok stellen we in als volgt.
De lamp is nog aangesloten aan Poort A, nu schakelen we de lamp uit (Off). De lichtintensiteit
is niet meer instelbaar.
Gedurende 0,3 seconden wordt de lamp uitgeschakeld hetgeen ingesteld wordt in het Wacht blok.
Voorbeeldprogramma: knipperlicht.rbt
40
Hoe beweegt de LEGO
7 Mindstorms NXT?
De NXT kan drie interactieve servomotoren aansturen via de poorten A, B en C. In de motor
zit een sensor die detecteert hoeveel graden de motor draait en dit tot 1 graad nauwkeurig.
Met opgeladen batterijen rijdt de robot ongeveer 3-4 uur.
NXT puppy hond.
© Damien Kee - domabotics.com
Verplaats blok
We hebben reeds gezien dat we de robot kunnen bewegen door middel van het Verplaats blok van de programmeeromgeving naar de sequentielijn van het werkgebied te slepen. We gaan
het configuratiescherm eens nader bekijken.
Onder Poort stel je in aan welke poorten je de bewegingsmotoren hebt gekoppeld. Standaard
is dat Poort B voor de rechter bewegingsmotor en Poort C voor de linker bewegingsmotor
wordt gebruikt. Ik raad je aan deze standaard te volgen. Door deze instelling worden beide
motoren gesynchroniseerd zodanig dat de snelheid op elkaar is afgestemd. Als je dus de ene
41
motor tegenhoudt stopt de andere motor ook met draaien. Doe dit echter niet te lang. Onder
Richting kies je of de wielen voor- of achteruit moeten bewegen, of moeten stoppen. Als Stop
wordt geselecteerd worden de motoren gereset (op nul gesteld). De draairichting is relatief, ze hangt dus af van hoe je de motoren hebt ingebouwd in de robot. Onderstaande motor
draait in de voorwaartse richting.
Afspraak voorwaartse draairichting van de servomotor.
Met Besturing bepaal je de draairichting door middel van een stuurschuif. In het midden zal
de robot rechtdoor rijden. Als je ze aan de uiteinden plaatst, zal de robot om zijn as draaien.
Het Vermogen stel je in tussen 0% en 100%. Voor een rijdend voertuig zal dit betekenen dat
je de snelheid gaat instellen. Zonder belasting zal de as 150 keer per minuut draaien op vol
vermogen. Bij een motor voor een grijper zal een hoger vermogen een
grotere kracht genereren. Onder Tijdsduur stel je in of de motor Onbegrensd moet ronddraaien of een aantal Graden, Omwentelingen of
Seconden. 1 omwenteling komt overeen met 360°. Wanneer de servomotor zijn actie heeft beëindigd geef je aan of de motor moet remmen
(Remmen) of vrij uitlopen (Vrijlopen). Je kan het vergelijken wanneer je
stopt met trappen op je fiets: ofwel kan je dan remmen of je gewoon laat
uitbollen. Moet de robot een precieze afstand afleggen, dan kies je voor
remmen. Anders bolt de robot nog uit. Helemaal rechts staan in het
groen de feedbackmodules die het aantal graden of volle omwentelingen
van je motoren tellen. Druk op de reset knop R om de waarden op nul
te zetten. Je kunt alleen feedback krijgen als de motoren op de gekozen
poorten aangesloten zijn en er communicatie met de NXT is.
Al deze instellingen zijn trouwens instelbaar met de dataverbindingen en
contactpunten van de datanaaf van het Verplaats blok. Kijk in de helpfile wat de verschillende contactpunten betekenen, maar dikwijls is het
icoontje duidelijk genoeg.
42
Opneem/afspeel blok
Soms moet de robot heel ingewikkelde bewegingen uitvoeren en dan kan je beter tonen hoe
de robot moet bewegen in plaats van alles te programmeren.
Gebruik hiervoor het Opneem/afspeel blok . In de servomotor zit immers een sensor
die de positie van de as gaat detecteren en daarom wordt hij ook interactief genoemd. Bij het
opnemen worden dus deze waardes opgeslagen in het geheugen van de NXT. Zet eerst de actie op Opnemen in het configuratiescherm. Je kan immers niets afspelen zonder het eerst op
te nemen. Geef de actie een goede naam en selecteer welke poorten je wenst te gebruiken.
Als je de drie poorten neemt, kan je bijvoorbeeld tegelijkertijd de beweging van de robotarm
voordoen. De laatste instelling Tijd is hoe lang je wenst op te nemen in seconden. Download
en start dit programma, neem de robot vast en rijdt het gewenste parcours. Hoe lang je kan
opnemen hangt af van het beschikbare geheugen van de NXT, maar meestal kan je tot enkele
minuten opnemen. De status van het geheugen kijk je na door op de knop rechtsboven (NXT
venster) van de Controller te drukken en dan naar de tab Geheugen te gaan. Het deel Opnemen/Afspelen bevat de bestanden die door deze functie worden ingenomen.
Download en start het programma en toon de gewenste beweging aan de robot. Zet nu de
actie op Afspelen en bekijk het resultaat. Zoals je zult zien is de beweging niet exact gelijk aan
de opgenomen beweging. Neem eens enkele danspasjes op en bouw dan een volledige dans
op door verschillende opnames achter elkaar te plaatsen.
Voorbeeldprogramma: opneem afspeel blok.rbt
43
Rotatiesensor blok
De servomotor is wegens zijn ingebouwde rotatiesensor ook een sensor en deze waarde leest
men uit met het (Ingebouwde) rotatiesensor blok dat terug te vinden is onder de complete omgeving tab onder Sensor .
De korte datanaaf zal automatisch getoond worden en geeft de logische waarde Goed weer
wanneer de motor vooruit draait en Verkeerd indien de motor achteruit draait. Het tweede
output contactpunt geeft het aantal omwentelingen of het aantal graden, naargelang de instelling in het configuratiescherm.
Eerst stel je in welke poort er opgemeten moet worden. Onder Actie bepaal je of de actuele
waarde uitgelezen moet worden of de teller op nul gezet moet worden (Reset). De teller kan je
bijvoorbeeld op nul zetten wanneer je aan de start verschijnt. Stel met behulp van de radioknoppen de richting in die bewaakt moet worden: vooruit of achteruit. Je kan de uitkomst van
deze bewaking uitlezen door de lange datanaaf te voorschijn te laten komen. Als je dit fout
doet zal de teller niet in staat zijn de gewenste waarde te detecteren. Gebruik het groter dan
(>) of kleiner dan (<) teken om te bepalen of het activeringsgebied groter of kleiner dan de
activeerwaarde moet zijn die je instelt in het daaropvolgende veld. Deze waarde is uit te drukken in Graden of Omwentelingen.
Dezelfde instellingen vind je trouwens terug door in het configuratiescherm van de Wacht
blok, Herhaling blok en Omschakel blok te kiezen voor Sensor en vervolgens Rotatiesensor.
De servomotor is wegens zijn ingebouwde rotatiesensor ook een sensor en men kan er dus
een conditie mee bepalen. Kies hiervoor in het configuratiescherm onder Controleer voor
Sensor en opteer dan voor Rotatiesensor. Stel vervolgens de gewenste conditie in.
44
Motor blok
Je zou kunnen zeggen we hebben toch al een Verplaats blok, waarom dan nog een Motor blok?
Bij het Verplaats blok zijn de bewegingen van de ingestelde poorten gekoppeld zodanig dat
ze mooi synchroon bewegen, bij het Motor Blok is de beweging onafhankelijk van de andere
servomotoren. Het Verplaats blok is dus aangewezen bij verplaatsingen waarbij de snelheid
van beide motoren aan elkaar is afgestemd, bijvoorbeeld om een gewenste rechte lijn aan te
houden. Het Motor blok ga je daarentegen gebruiken om bijvoorbeeld een grijper of robotarm
te bewegen, want deze beweging is onafhankelijk van de andere motoren.
Het Motor blok is terug te vinden onder de complete omgeving tab onder Actie .
In het configuratiescherm kan je dus maar één poort (A, B of C) per programmeerblok instellen. Enkele instellingen zoals Richting, Vermogen, Tijdsduur en Volgende actie zijn gelijkaardig met het Verplaats blok. We gaan hier enkel de verschillen aangeven. Onder Actie stel je in
hoe het vermogen wordt opgebouwd. Bij Constante wordt in één keer het gevraagde vermogen aan de motoren geleverd. Dit kan je vergelijken met het gaspedaal in één keer volledig
in te duwen of plots te stoppen met energie leveren als de volgende actie in vrijloop of remmen wordt gezet. Bij Oplopen ga je geleidewlijk aan het gaspedaal induwen tot het gewenste
vermogen bereikt wordt en omgekeerd bij Aflopen. Als je de checkbox van Motorvermogen
aanzet ga je -om in autotermen te blijven- de cruise controle aanzetten. De vermogensniveau
regeling zal proberen te compenseren (tot een maximum van 100%) voor elke weerstand
of slip die de motor tegenkomt. Bij een aangevinkte Wacht op voltooiing zullen de verdere
programmeerblokken niet uitgevoerd worden zolang de Tijdsduur niet verlopen is. Wens je
ondertussen iets te tonen op het beeldscherm of een muziekje af te spelen, ontvink je Wacht
op voltooiing.
45
Wanneer je foto’s wil afdrukken gebruik je best een printer. Voor technische plannen echter wordt
vaak een plotter gebruikt. Een pen beweegt loodrecht over een vel papier, één servomotor staat in
voor de beweging links-rechts over het papier en een tweede motor zorgt voor de voor-achter beweging. Een derde motor doet de pen op en neer gaan. De 3 NXT-servomotoren zijn hiervoor geschikt
zoals getoond met de NXT 8094 PLOTTER.
© Krystian Majewski
46
Hoe maakt de LEGO
8 Mindstorms NXT geluid?
Geluid blok
De NXT heeft een ingebouwde luidspreker en wordt geactiveerd met het Geluid blok .
In het configuratiescherm kies je om een Geluidsbestand af te spelen. Het gewenste Bestand
selecteer je aan de rechterkant van het configuratiescherm. Door een bestand aan te duiden
zal door de boxen van je computer het muziekfragment afgespeeld worden. Het Volume is instelbaar tussen 0 en 100. Kies je voor Herhalen dan zal gedurende het verdere verloop van je
programma het gekozen bestand herhaald worden tot het programma een nieuw Geluid blok
tegenkomt met een ander bestand of indien Stop aangeduid is. Indien Herhalen niet is aangevinkt dan heb je de mogelijkheid om al dan niet te wachten op voltooiing. Is Wacht op voltooiing aangevinkt dan zal het programma niet verder gaan naar het volgende programmablok
tot het muziekbestand volledig is afgespeeld. Is Wacht op voltooiing niet aangevinkt dan start
het programma het muziekbestand en gaat verder naar het volgende programmeerblok. Dergelijke geluidsbestanden nemen, net als afbeeldingen en het opnemen van bewegingen, veel
geheugenplaats in van de NXT. Je laat ze dus beter achterwege als de NXT te weinig geheugen heeft.
Voorbeeldprogramma: geluid blok.rbt
47
Je NXT laten zingen
Wil je daarentegen zelf een muziekje componeren duid dan de optie Toon aan. Rechts verschijnt er een klein toetsenbord met drie octaven uit de notenbalk. Klik met je muis op een
toets van dit kleine toetsenbord, de toon zal erboven getoond worden en weerklinken door de
boxen van je computer. Een toon is een stukje geluid met een vaste frequentie en we hebben 7
stamtonen: do-re-mi-fa-sol-la-si. Ze staan aangeduid op het toetsenbord met de letters C-DE-F-G-A-B en worden als volgt genoteerd op een notenbalk.
Elke toon heeft een vaste frequentie. Het stemmen van een muziekinstrument betekent elke
toon de juiste frequentie geven. Zo moet de toon la een frequentie hebben van 440Hz (dus de
lucht trilt 440 keer per seconde). Wanneer deze frequentie verdubbelt dan heb je terug een la,
maar dan wel een octaaf hoger. Toch kan je een la van een viool of een piano van elkaar onderscheiden. Dat komt omdat er naast de grondfrequentie van 440Hz, nog andere frequenties
geproduceerd worden zodanig dat het geoefende oor het onderscheid kan maken. Dit noemt
men de klankkleur of het timbre van een muziekinstrument. De NXT produceert echter enkel
zuivere frequenties. Je kan ook telkens maar 1 toon tegelijk laten horen, waardoor de muziekjes geproduceerd door de NXT monotoon (uit het Grieks één-toon) worden genoemd.
48
Staat op een lijn van de notenbalk vooraan een ronde b (het molteken) dan moet je elke noot
op die lijn een halve toon verlagen. Hiervoor dienen de zwarte toetsen op het toetsenbord, er
wordt dan achter de letter een #-teken geplaatst.
Laten we nu eens trachten het beroemde Star Wars Theme melodie te programmeren in de
NXT. Je ziet dat dit stuk uit 19 noten bestaat. Elk Geluid blok geeft echter maar één toon weer,
je zal er dus 19 achter elkaar moeten plaatsen.
Het muziekstukje moet eveneens met een zeker ritme gespeeld worden dat men in muziektermen de maat noemt. Mensen die muzieklessen gevolgd hebben zien dat dit stukje met een
maat van 4/4 gespeeld moet worden en we dus telkens tot 4 moeten tellen. Een wit bolletje is
een hele noot en duurt 4 tellen. Hele noten zitten echter niet in deze melodie. Een wit bolletje
met een stokje is een halve noot en duurt 2 tellen lang. Een zwart bolletje met een stokje is
een kwart noot en duurt 1 tel. Een zwarte noot met stokje en vlagje, of twee (of meer) zwarte
noten met stokjes en met elkaar verbonden met één streep zijn achtsten. Een achtste noot
duurt dus een halve tel, twee achtsten een hele tel. Wanneer ze echter met drie aan elkaar
hangen met een 3 boven of onder, dan noemt men dit een triool en deze 3 noten samen duren
even lang als 1 tel. Bijgevolg duurt één noot uit een triool 1/3 tel. Dus naast de frequentie per
noot moet je in het configuratiescherm eveneens instellen hoelang de noot moet spelen en
dit wordt uitgedrukt in seconden. We gaan uit van het gegeven dat een hele noot 2 seconden
duurt. Dan duurt de halve noot 1 seconde, de kwart noot 0,5 seconde en de noten uit de triool
van achtste noten elk 0,167 seconden.
Tracht nu voor elke noot de juiste toets te vinden en de tijdsduur. Vink steeds aan Wacht op
voltooiing, eerst moet immers de ene noot volledig gespeeld zijn voor het programma naar de
volgende noot mag gaan.
Voorbeeldprogramma: starwars.rbt
49
1
11
2
12
3
13
4
14
5
15
6
16
7
17
8
18
9
19
10
Toon en tijdsduur van de 19 noten uit de Star
Wars theme melodie
Als je alles in een Herhaling blok zet zal je
robot deze melodie blijven spelen.
50
9
Hoe hoort de LEGO Mindstorms NXT?
De geluidssensor van de LEGO Mindstorms NXT kan geen woorden herkennen of geluid opnemen, enkel geluidniveaus opmeten. Als we heel luid gaan praten dan gaat het membraan
van de microfoon heel hard heen en weer bewegen, gaan we zachtjes praten dan gaat het
membraan maar heel weinig heen en weer bewegen. Dit verschil kunnen we detecteren met
de geluidssensor van de NXT. Het geluidsniveau meten we in decibel (afgekort dB). Geritsel van blaren is 10 dB, praten is tussen de 40 en 60 dB. Heel veel lawaai doet niet alleen
het membraan van de microfoon hard bewegen, het doet het ook met bepaalde delen van je
gehoor. Dus in een ruimte met veel lawaai verblijven of je iPod te luid zetten (meer dan 90 dB)
kan je gehoor blijvend beschadigen. De NXT geluidssensor meet tot 90 dB.
Rockconcert
Onweer
140
Decibelschaal.
Vrachtwagen
130
120
Fabriek
110
100
Bibliotheek
90
Opstijgend
vliegtuig
80
Ritselende
bladeren
70
60
Metro
50
40
30
20
Klaslokaal
10
0
Gefluister
Ademen
51
Geluidssensor blok
De sensor kan ook via een contactpunt in de datanaaf in dBA mode gezet worden. Het menselijke oor is niet voor al de frequenties even gevoelig. De dBA gaat het gemeten geluidsniveau
corrigeren zodanig dat het gemeten geluidsniveau meer overeenkomt met hoe wij als mens
het geluidsniveau ervaren.
Het Geluidssensor blok is terug te vinden onder de complete omgeving tab onder
Sensor . De korte datanaaf van het programmeerblok bevat de uitlezing van het
geluidsniveau en is een getal tussen 0 en 100.
Dit is een eenvoudig programma om het geluidsniveau op het scherm te tonen.
Voorbeeldprogramma: geluidsensor.rbt
4-5 % komt overeen met een stille kamer
5-10% is wanneer er op een afstand van de sensor gepraat wordt
10-30% wanneer je in de sensor praat of wanneer er muziek speelt
30-100% wanneer je gaat roepen in de sensor of bij heel luide muziek
52
Tekst blok
Dit programma geeft enkel een getal op het scherm. We zouden liever een uitlezing hebben:
“Geluidsniveau is: 21 %”.
We gaan hiervoor een nieuw programmeerblok introduceren: het Tekst blok .
Dit programmeerblok bevindt zich in de complete omgeving tab onder Geavanceerd .
Het blok gaat tot 3 verschillende stukken tekst aan elkaar plakken.
In dit programma wordt de tekst “Geluidsniveau” geschreven door het eerste Beeldscherm
blok, verplaats de tekst hiervoor wel een stuk naar boven (bijvoorbeeld op regel 3, zoals je
rechts onderaan in het configuratiescherm kan instellen). Het Tekst blok ga je als volgt instellen. Schrijf in het invulveld A de tekst “is: ”, in B kan je niets invullen want het input contactpunt
is reeds verbonden via de Getal in tekst blok met de geluidssensor en vervolgens “%” in C.
Normaal moet je scherm er dan zo uitzien als je dit
programma download en start op de NXT.
Voorbeeldprogramma: geluidsdrukmeter.rbt
53
Je hebt zopas een geluidsdrukmeter gemaakt. Dit zijn meestal dure
toestellen. Ze moeten immers heel precies gemaakt worden. Ze worden
onder andere gebruikt om de geluidsoverlast in de omgeving van een
luchthaven en discotheken te controleren.
Geluidsdrukmeter.
De geluidssensor kunnen we ook gebruiken als conditie voor de Wacht
blok, Herhaling blok en Omschakel blok. Kies hiervoor in het configuratiescherm onder Controleer voor Sensor en opteer dan voor Geluidssensor. In hoofdstuk 4 hebben gezien hoe we de geluidssensor gebruikt
hebben om de conditie van het Schakeloptie blok te bepalen. De robot
ging dansen bij muziek en reed rechtdoor wanneer het stil was.
54
Hoe ziet de LEGO Mindstorms NXT?
10
De NXT lichtsensor bestaat uit één enkele fotodiode en leest bijgevolg enkel de lichtintensiteit af. De sensor ziet dus enkel grijstinten en geeft een percentage weer: 0% betekent donker, 100% veel licht. Zo kan je de robot programmeren dat hij enkel rijdt als er licht is in je
kamer en gaat slapen indien het donker is. De sensor straalt, indien gewenst, een rood licht
uit via de ingebouwde led (door aanvinken Genereer licht). Wil je bijvoorbeeld de robot over
een zwarte lijn laten rijden, dan schakel je best de rode led aan anders ziet de lichtsensor
enkel zijn eigen schaduw.
Lichtsensor blok
Het Lichtsensor blok bevindt zich in de complete omgeving tab onder Sensor .
De korte datanaaf van het programmeerblok bevat de uitlezing van de lichtintensiteit.
De lichtsensor kunnen we ook gebruiken als conditie voor het Wacht blok, Herhaling blok en
Omschakel blok. Kies hiervoor in het configuratiescherm onder Controleer voor Sensor en
opteer dan voor Lichtsensor. We gaan nu de robot zo programmeren dat een zwarte lijn gevolgd wordt. De zwarte lijn op de testplaat is hiervoor geschikt of je kan met zwarte tape een
parcours op de grond afplakken. Ook moet je de TRIBOT volledig afwerken zoals beschreven
staat in de handleiding. Verbindt de lichtsensor met Poort 3. De lichtsensor is naar beneden
gericht, de robot merkt dus of de lichtsensor boven de zwarte lijn staat of niet. We willen
dat de volgende sequentie gevolgd wordt. We starten met de lichtsensor boven de zwarte
lijn. Dan gaan we de rechtermotor, aangesloten op poort B, aansturen tot de lichtsensor wit
detecteert, de robot bevindt zich dan naast de zwarte lijn. Vervolgens stoppen we de rechtermotor en zetten de linkermotor aan tot de lichtsensor weer de zwarte lijn ziet, dan moet de
linkermotor worden afgezet en beginnen we terug van vooraan.
We hebben dus duidelijk een loop nodig die Eeuwig blijft duren. We gaan werken met Motor
blok in plaats van Verplaats blok, de beweging van beide motoren gebeurd immers apart en
niet gekoppeld.
Eerst wordt de rechtermotor aangestuurd die aangesloten is aan Poort B. We laten deze Onbegrensd Vooruit rijden. Zet het Vermogen niet te hoog, 50 is een goede waarde, anders gaat
de robot de lijn te ver voorbijrijden en vindt hem daarna niet meer terug.
55
We stellen het Wacht blok in op Lichtsensor, die aangesloten is op Poort 3. We wachten tot
de lichtsensor een waarde groter (>) dan 50 aangeeft en de robot dus naast de lijn rijdt. We
hebben de rode led aangezet omdat anders de lichtsensor enkel zijn eigen schaduw ziet (vink
aan Genereer licht).
Eerst zetten we de rechtermotor af (Remmen en geen Vrijloop).
En starten dan de linkermotor, aangesloten op Poort C, met hetzelfde vermogen.
Nu moeten we wachten tot de lichtsensor weer de zwarte lijn detecteert. Dus als de waarde
van de lichtsensor tussen 0 en 50 ligt.
Als deze conditie vervuld is dan zetten we de linkermotor uit en starten we alles terug opnieuw.
Download en start het programma. Als je op de verschillende programmeerblokken klikt
tijdens de uitvoering van het programma zie je rechts in de feedbackmodules de uitlezing van
de sensoren. Je zal merken dat het robotje steeds aan de linkerkant van de lijn blijft rijden.
Voorbeeldprogramma: lijnvolger.rbt
56
No hands across America. In 1995 slaagden onderzoekers erin om zonder handen van de
Oostkust van Amerika naar de Westkust te rijden. Zoals onze robot volgde de autorobot NAVLAB een lijn die het met zijn camera zag. De lijn was hier de wegmarkering langs de weg.
© Photos courtesy of Carnegie Mellon, Robotics Institute
NXT Kleurensensor
Wil je dat de robot ook kleuren onderscheidt dan kan je de NXT Color Sensor (kleurensensor) van Hi Technic kopen in de online LEGO winkel of op www.hitechnic.com. De NXT bevat
3 verschillende kleuren Leds (die je niet kan uitzetten) en 3 verschillende fotodiodes die het
gereflecteerde licht terug opvangen, elk natuurlijk met zijn eigen filter.
Op de website moet je eveneens de NXT Software Color Sensor Block ( ) downloaden
om te gebruiken in de NXT-G software. Vergeet ook niet de Firmware te updaten zoals beschreven staat in de handleiding!
De eerste mogelijkheid om de kleur op te meten is met het “Color Number” (kleurnummer)
output contactpunt. De kleur krijgt een nummer van 1 tot 17 volgens de volgende verdeling.
57
Een kleur is ook uit te drukken volgens het RGB-systeem. RGB staat voor de drie basiskleuren waaruit het licht bestaat: R(ood)-G(roen)-B(lauw). Voor elke kleur wordt aangegeven
hoeveel er van de basiskleur inzit. Voor de NXT Color sensor is dit een getal tussen 0 en 255
en de datanaaf bevat dan ook 3 outputcontactpunten met de waarden voor rood, groen en
blauw. (255-0-0) is dus zuiver rood, (0-255-0) is volledig groen en (0-0-255) blauw. De drie
kleuren samen geven wit licht (255-255-255) en zwart is (0-0-0). Door combinaties ontstaan
de mengkleuren als paars (139-0-255) en geel (255-255-0).
=
+
+
Foto ontbonden in de 3 RGB kleuren.
We gaan nu een programma voor de NXT Color sensor maken zodanig dat er op het scherm
verschijnt welke kleur we aan de sensor tonen. We hebben dus een programma nodig dat als
het kleurnummer gelijk is aan 0: wit schrijft, 1 paars noteert, 2 is dan blauw enzovoort tot we
aan 17 komen voor zwart.
Dit is een Omschakel blok maar nu niet met een conditie die enkel Goed of Verkeerd
kan zijn, maar met meerdere mogelijkheden. Nu is deze mogelijkheid ook voorzien in het
Omschakel blok. Controleer hiervoor een Waarde en vervolgens Getal. De output van de
kleursensor is immers een getal van 0 tot 17. Ontvink vervolgens Vlak beeld en je zal zien dat
je aan de rechterkant van het configuratiescherm extra voorwaarden kan toevoegen. Voeg
hier 18 extra voorwaarden toe door telkens op het plusteken (+) te drukken! Die je de waarden
geeft van 0 tot en met 17. Met het minteken (-) verwijder je voorwaarden.
Het programmeerblok in het werkgebied ziet er nu anders uit dan wat we tot nu toe gezien
hebben. Bovenaan het programmeerblok zal je nu 18 tabs zien staan, elk met een eigen sequentielijn. Voeg op de sequentielijn van elke tab een Beeldscherm blok toe waarin je telkens
de naam van de desbetreffende kleur invoegt.
Voorbeeldprogramma: kleur op scherm.rbt
58
Download en start het programma en toon aan de sensor de kleuren die bijvoorbeeld op de
meegeleverde testplaat staan. Een andere mogelijkheid is dat je de LEGO ROBOARM T-56
maakt en telkens een andere beweging gaat programmeren op de sequentielijn naargelang
de kleur van de bal die de robotarm vastgrijpt. Ook kan je nu de robot verschillende kleurenlijnen laten volgen.
Via de kleurensensor sorteert
de robot de LEGO-blokjes in
verschillende bakjes.
©HiTechnic
59
11
Hoe voelt een LEGO Mindstorms NXT?
De tastsensor van de LEGO NXT is de eenvoudigste sensor die er bestaat en is niets meer
dan een gewone aan/uit schakelaar. Er bestaan verschillende soorten schakelaars. Bij sommige schakelaars moet je blijven drukken om het contact te behouden. Dit is bijvoorbeeld
het geval bij een deurbel. Laat je de bel los, dan stopt ook het signaal. Andere schakelaars
behouden het contact ook na het drukken, je moet nogmaals drukken om het contact weer te
verbreken. Een voorbeeld hiervan zijn de lichtschakelaars bij je thuis. De tastsensor geleverd
bij LEGO NXT is van de eerste soort. Met de tastsensor kan je dus bepalen of er zich een
bal tussen de grijpers van je NXT Robotarm bevindt of niet en of de robot tegen een muur is
gebotst of niet.
Tastsensor blok
Het Tastsensor blok is terug te vinden onder de complete omgeving tab onder
Sensor .
De korte datanaaf van het programmeerblok bevat de uitlezing van de sensor en is dus een
logisch contactpunt dat Goed is indien ingedrukt en Verkeerd indien de schakelaar niet is
ingedrukt.
De tastsensor kan ook gebruikt worden als conditie voor het Wacht blok, Herhaling blok en
Omschakel blok. Kies hiervoor in het configuratiescherm onder Controleer voor Sensor en
opteer dan voor Tastsensor.
We gaan nu een geavanceerd programma schrijven om je reactietijd te meten. De LEGO NXT
gaat op een willekeurig tijdstip tussen 2 en 10 seconden “Start” roepen. Het gaat dan meten
hoe snel jij op de tastsensor drukt. Zorg er dus voor dat je op de NXT de tastsensor aansluit
op Poort 1. Druk je echter te vroeg dan gaat de NXT dat ook zeggen. Om dit programma te
verwezenlijken moeten we een aantal nieuwe programmeerblokken voorstellen die terug te
vinden zijn in de complete omgeving tab onder Data .
60
Willekeurig blok
We doen al de berekeningen in honderdste van een seconde. De NXT rekent immers enkel
met gehele getallen. Dus 1 seconde is bijgevolg 100 en 3,5 seconde wordt 350. We wensen dat
de NXT op een willekeurig moment een signaal geeft. De NXT moet ons dus een willekeurig
getal geven.
Hiervoor bestaat het Willekeurig blok . Op dit blokje staat niet toevallig een dobbelsteen
want als we met de dobbelsteen gooien dan krijgen we een willekeurig getal tussen 1 en 6.
De korte datanaaf bevat de waarde van het willekeurig getal. Wij zouden graag het Willekeurig blok een getal laten uitkiezen tussen 200 en 1000 om een tijd tussen 2 en 10 seconden te
hebben. In het configuratiescherm hebben we echter maar getallen tussen 0 en 100. Daarom
gaan we het blok een getal laten kiezen tussen 20 en 100 en daarna vermenigvuldigen we
dit getal met 10 om getallen tussen 200 en 1000 te bekomen. We kunnen ook een getal laten
gooien tussen 2 en 10 en erna vermenigvuldigen met 100, maar dan zijn het aantal mogelijkheden veel beperkter: 2, 3, 4, 5, 6, 7, 8, 9 en 10 in plaats van 20, 21, 22, 23,..., 98, 99, 100.
Reken blok
We moeten dit willekeurig getal tussen 20 en 100 dus vermenigvuldigen met 10.
Hiervoor bestaat het Reken blok . In het Reken blok kunnen we zowel 2 getallen Optellen,
Aftrekken, Vermenigvuldigen als Delen. Hier nemen we Vermenigvuldigen. We verbinden met
een dataverbinding het output contactpunt van het Willekeurig blok met het input contactpunt
A van het Reken blok. Voor B vullen we het getal 10 in.
61
Variabele blok
We krijgen dus nu een willekeurig getal tussen 200 en 1000 dat we moeten onthouden. We
moeten dus in het geheugen een plaats vrijmaken om dit getal in te steken. In computertaal
noemen we deze plaats een variabele. Om een nieuwe variabele te maken gaan we naar Bewerken in het menu en vervolgens Definieer Variabelen. Hier drukken we op Maken om een
nieuwe variabele te maken. We noemen deze variabele “Random getal” en het Datatype is
een Getal. Sluit dit venster af door op Sluiten te drukken.
We hebben nu een nieuwe plaats
in het geheugen, de variabele
Random Getal, gemaakt. In deze
variabele gaan we nu het willekeurig getal instoppen. Hiervoor
gebruiken we het Variabele blok .
In dit valiesje kan je zowel data
instoppen, als de waarde er later
terug uithalen. Hier willen we
het willekeurig getal opslaan,
daarom kiezen we voor Schrijven.
In de Lijst kiezen we ook welke
geheugenplaats we willen gebruiken, hier het Random getal.
In de Waarde schrijven we niets
want deze wordt geleverd via de
gele dataverbinding.
62
We testen dit stukje programma al eens door het willekeurig getal naar het scherm te schrijven. Zo ziet het eerste deel van het programma eruit dat een willekeurig getal op het scherm
zal tonen tussen 200 en 1000. Tip: zet de tekst in het Beeldscherm blok op de eerste regel, er
komt straks nog veel meer op het scherm! Download het programma op je NXT en start het
verschillende keren zodat je kunt zien dat er telkens een ander getal getoond wordt.
Voorbeeldprogramma: reactietijd stap 1.rbt
Nu we dit eerste deel hebben afgewerkt, beginnen we aan het tweede deel.
We maken een stopwatch zoals we in hoofdstuk 5 geprogrammeerd hebben. We laten deze
echter niet meer oneindig lang lopen. We gaan deze teller laten lopen tot we op de tastsensor
drukken. Sleep dus een Herhaling blok op de sequentielijn en stel het configuratiescherm in.
Als Sensor nemen we Tastsensor die aangesloten is op Poort 1 en als Actie nemen we Ingedrukt. De teller moet immers stoppen met tellen van zodra de tastsensor is ingedrukt. Vink
eveneens Teller aan want we gaan dit gebruiken als tijdseenheid.
Deze waarde van de teller tonen we niet alleen op het scherm (regel 3 en vergeet Wissen niet
te ontvinken), we slaan deze waarde ook op in een nieuwe variabele met de naam “Reactie
tijd”. Om een nieuwe variabele te maken ga naar Bewerken in het menu en vervolgens Definieer Variabelen, daarna drukken we op Maken.
63
In het Variabele blok kies je voor
Schrijven en uit de Lijst kies je Reactie tijd. Bij elke herhaling wordt ook
deze variabele Reactie tijd bijgewerkt.
Wanneer je nu de schakelaar indrukt
zal in de variabele Reactie tijd de
laatst opgemeten tijd zitten.
Voeg ook het Wacht blok in dat je instelt op 0,01 seconde. Zo bekomen we dat de teller werkt
met honderdste van een seconde. Zet de waarde van de teller op de derde regel van het
beeldscherm. Test nu deze tweede stap van het programma.
64
Je zal zien dat op de eerste regel nog steeds een nieuw willekeurig getal komt en op de derde
regel komt een getal dat steeds optelt. Wanneer je op de tastsensor duwt zal het tellen stoppen. Proficiat, nu zitten we in de helft.
Voorbeeldprogramma: reactietijd stap 2.rbt
Vergelijk blok
Wanneer de willekeurige gegenereerde tijd gepasseerd is moeten we het startsignaal geven.
We moeten dus de teller gaan vergelijken met het Random getal, we gebruiken hiervoor het
Vergelijk blok .
Maar eerst moeten we de variabele “Random getal” wel uit zijn valies halen. Neem hiervoor
het Variabele blok dat we nu gaan Lezen.
We vragen het Vergelijk blok of A (waarvan het input contact verbonden is met het Variabele blok)
gelijk is aan (=) B (waarvan het input contactpunt verbonden is met de teller output contactpunt).
Deze uitkomst is een logische dataverbinding, We verbinden ze met een Schakeloptie. De
Schakeloptie gaan we controleren op een Logische Waarde. Als deze Goed is dan laten we het
geluidsignaal Start weerklinken.
In de bovenste sequentielijn plaatsen we een Geluid Blok. In dit configuratiescherm kiezen we
voor het bestand Start, we wachten echter niet op voltooiing want anders gaat de teller wachten en dat is niet de bedoeling.
65
De onderste sequentielijn laten we leeg. We testen nu de derde stap van ons programma. Van
zodra de teller, die op de derde regel staat, op het random getal komt zal de NXT “Start” zeggen.
Voorbeeldprogramma: reactietijd stap 3.rbt
Als laatste stap moeten we kijken of we niet te vroeg op de tastsensor hebben gedrukt en berekenen wat onze reactietijd is. Hiervoor gaan we de variabele “Reactie tijd” vergelijken met
“Random getal”. Is de eerste groter (>) dan moeten we het verschil (-) tussen beide maken
en dit op het scherm tonen. Is die conditie echter niet voldaan, dan is de tastsensor te vroeg
ingedrukt en moet er op het beeldscherm “Te vroeg!!!” komen.
We hebben al deze programmeerblokken in dit hoofdstuk gezien. Kan jij de nodige instellingen zelf doen?
Voorbeeldprogramma: reactietijd volledig.rbt
66
Je ziet dat gans het programma redelijk groot is geworden. Om het overzichtelijk te houden
kan je van de 4 stappen dier hier zijn uitgelegd aparte Mijn blokken maken zoals uitgelegd in
hoofdstuk 4.
In het Mijn blok teller zit trouwens de Mijn blok Starsignaal en aan dit blok zijn er automatisch
de nodige contactpunten aangemaakt.
Je hebt dus een toestel gemaakt om de reactietijd op te meten. De reactietijd tijdens het autorijden tussen het zien van een obstakel op de weg en het indrukken van de rem is ongeveer 1
seconde. Op die tijd heb je bij een hoge snelheid al een hele afstand afgelegd en daarbij moet
je de remafstand nog eens bijtellen. Het is dus heel belangrijk om tijdens het rijden voldoende
afstand te bewaren tot de voorligger. Ben je onder invloed van alcohol en drugs of ben je onoplettend aan het rijden neemt de reactietijd gevoelig toe.
Snelheid
Reactie-afstand
Rem-afstand
Totale afstand
50 km
14m
13m
27m
70 km
19m
25m
44m
90km
25m
41m
66m
120km
33m
72m
105m
Totale afgelegde afstand tussen het zien van het obstakel en volledig tot stilstand komen voor een
auto in perfect staat en droog wegdek. Het is dan ook belangrijk voldoende afstand tot je voorligger
te behouden.
67
Hoe meet de LEGO Mindstorms 12
NXT afstanden?
De ultrasone sensor van de NXT heeft precies 2 ogen, maar in het ene oog zit de zender die
de ultrasone geluidsgolven uitzendt en in het ander oog zit de ontvanger. Als er in een kamer
meerdere ultrasone sensors tegelijk gebruikt worden, kunnen ze elkaar storen. De sensor
meet, met een resolutie van ongeveer 3 cm, afstanden tot 250 cm ver. Kleine objecten, afgeronde objecten (zoals een bal) of zachte objecten zijn moeilijker te detecteren omdat daar het
geluid niet zo goed op weerkaatst. Het beste zijn grote harde oppervlakken.
Vind je het ook zo vreselijk als mensen vergeten
het toilet door te spoelen of raak je de knop liever
niet aan? Geef je spoelbak dan, zoals bij sommige openbare toiletten, een automatisch doorspoelsysteem genaamd de LEGO ROBOFLUSH.
De ultrasone sensor detecteert wanneer iemand
gaat zitten en de NXT zal bij het weggaan een mechanisme in werking zetten om door te trekken.
Ultrasone sensor blok
Het Ultrasone sensor blok is terug te vinden onder de complete omgeving tab onder Sensor
De korte datanaaf van het programmeerblok bevat de uitlezing van de afstand in centimeter
en is een getal gelegen tussen 0 en 255.
We gaan deze ultrasone sensor gebruiken om de TRIBOT steeds een bepaalde afstand te
laten bewaren tot zijn voorganger. Gaat zijn voorganger vooruit dan zal de robot ook vooruit
rijden, komt de voorganger echter terug, dan zal de robot achteruit rijden.
68
In hoofdstuk 11 hebben we gezien hoe we variabelen moeten gebruiken. In de variabele,
van type Getal, gaan we de gewenste afstand opslaan. Willen we in de toekomst de afstand
veranderen dan hoeven we dit alleen in het eerste Variabele blok te doen. In dit programma
gebruiken we een afstand van 20 cm. We gebruiken het verschil tussen de werkelijke afstand
en de gewenste afstand om het vermogen van de motor te regelen. Is het verschil in afstand
0, dan stoppen de motoren want dan is de gewenste afstand bereikt. Hoe groter de afstand tot
de voorganger hoe sneller de motoren zullen draaien. De formule voor het motorvermogen is
dus (Sensorwaarde – afstand)x10. We vermenigvuldigen dit verschil met 10 om de robot sneller te doen reageren. Deze waardevergelijken we met 0. Als de sensorwaarde groter is dan
de gewenste waarde zal de robot vooruit moeten rijden, is de sensorwaarde kleiner dan de
gewenste waarde dan moet de robot achteruit rijden. Daarom verbinden we met een logische
dataverbinding de uitkomst van het Vergelijk blok met de richting van het Verplaats blok. Op
het scherm wordt met het onderstaande programma eveneens de afstand tot de voorganger
op het scherm getoond.
Voorbeeldprogramma: ultrasonic volger.rbt
Een ultrasone sensor in je auto
In sommige auto’s kan men als optie parkeersensoren nemen. Dit zijn ultrasone sensoren die
beginnen te piepen als de auto een obstakel te dicht nadert. Het automatische remsysteem
van Volvo meet continue de afstand tot obstakels die voor de wagen gelegen zijn, duikt er een
obstakel op dan zal het voertuig zelf remmen en er juist voor tot stilstand komen. In hoofdstuk 11 hebben we gezien dat het om veiligheidsredenen belangrijk is om voldoende afstand
te houden tot je voorganger. Om het energieverbruik te minimaliseren is het echter beter
om heel dicht bij de voorganger te rijden om de luchtweerstand te verminderen. In iemand
zijn wiel rijden bij het fietsen is minder vermoeiend dan vooraan te moeten rijden. Dit is voor
ons gevaarlijk, maar robots kunnen heel snel reageren en zijn altijd alert. Daarom test men
systemen waarbij het voertuig zelf de snelheid
regelt om heel dicht bij zijn voorganger te
rijden. Enkel de eerste auto moet dan
nog een bestuurder hebben. Jij hebt
met dit programma al getoond dat
dit mogelijk is.
Automatisch remsysteem van Volvo.
© Volvo Car Corporation
69
13
Hoe communiceren een computeR of GSM met de LEGO Mindstorms NXT?
Om je fototoestel, printer, scanner, webcam en andere elektronische apparaten met je computer te verbinden, gebruik je meestal een USB-kabel. Ook je LEGO NXT kan je op deze manier
aan de computer koppelen. Dit laat toe om programma’s, die je op de PC hebt geschreven, uit
te laten voeren door je LEGO robot. De kabel heeft 2 verschillende uiteinden, de platte stekker gaat in je computer, het andere uiteinde, meer vierkant wordt in de bovenkant van de NXT
gestoken. Voor je de NXT aan de computer aansluit moet de NXT-G software geïnstalleerd zijn.
Meestal is de USB-kabel niet zo handig. De lengte van de kabel is beperkt en na een tijdje
rijdt je robotje de kabel in een knoop. Daarom is de robot ook uitgerust met Bluetooth. De
computer en de NXT gaan nu via radiogolven met elkaar communiceren. Niet alle computers
hebben een bluetooth module, let op het bluetooth logo . Heeft je computer geen bluetooth
dan kan je in de computerwinkel verschillende goedkope mogelijkheden kopen om je computer toch via bluetooth t met je robot te verbinden. Ook verschillende mobiele telefoons hebben
bluetooth. Surf naar www.mindstorms.com/bluetooth/ om na te kijken of jou GSM geschikt is
om een programma te installeren waarmee de GSM met de NXT kan communiceren. Zo kunnen de toetsen van de GSM gebruikt worden om de motoren te besturen. De NXT kan de GSM
ook opdracht geven om een foto te nemen, om een muziekje te spelen of een tekstbericht te
verzenden.
Je kan tot 4 NXT’s met elkaar laten communiceren over bluetooth waarin één de master (de
leider) moet zijn en de drie overige de slaves (de onderdanen). Eén van de mogelijkheden is
om verschillende robots te laten samenwerken, maar ook om 1 superrobot te maken met
meer dan 3 motoren en 4 sensoren.
Het centrale brein van de WIMO NXT is een smartphone, dit is een kruising tussen een GSM en een computer die past in je handpalm. Met deze smartphone
kan de robot videobeelden maken en doorsturen naar
een andere PC over WiFi. De robot gebruikt bluetooth
om de NXT te besturen. Om de robot te programmeren
werd gebruik gemaakt van Microsoft Robotics Studio.
© Brian Cross – wimobot.com
70
JOHNNXT 5 is gebouwd naar de fictieve robotheld Johnny 5 uit de films Short Circuit en Short Circuit 2. De robot
heeft 6 servomotoren om de rupsbanden aan te sturen, het hoofd te roteren, het bovenlichaam op en neer te
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
de robot verwerkt die met elkaar over bluetooth communiceren om alles mooi synchroon te laten gebeuren.
© Daniele Benedettelli
71
Hoe geraakt de LEGO Mindstorms 14
NXT het noorden niet kwijt?
Kompas blok
Hi Technic (www.hitechnic.com of via de LEGO online winkel) verkoopt de Compass Sensor
(kompassensor) voor je LEGO robot. Hij bevindt zich in een standaard behuizing zodanig dat
hij overeenkomt met andere Mindstorms NXT sensoren.
Via de website kan je NXT software Compass Block ( ) downloaden om te gebruiken in
de NXT-G software. Vergeet ook niet de Firmware te updaten! Je moet er wel op letten om
het kompas steeds horizontaal te gebruiken. Met het kompas kan je bijvoorbeeld de LEGO
robot steeds rechtdoor laten rijden. Zonder het kompas wijkt de LEGO robot af van zijn rechte
baan. Dit komt omdat er een klein verschil in snelheid is tussen beide wielen. Met het kompas
kan je de baan bijsturen zodanig dat de robot wel op een rechte lijn blijft rijden.
Wij gaan de kompassensor gebruiken zodat de TRIBOT zich steeds naar het noorden zal
draaien, onafhankelijk van hoe we de ondergrond draaien. Vervang hiervoor de geluidssensor
bovenaan door de kompassensor. Het programmeerblok kan twee waarden geven. De eerste is een absolute hoekwaarde met een nauwkeurigheid van 1°. Dus het noorden is 0°, het
oosten 90°, zuiden 180° en westen 270°. Het tweede is een relatieve hoekwaarde waarbij het
verschil gemaakt wordt tussen een opgegeven richtwaarde en de absolute hoekwaarde (relatieve hoekwaarde = richtwaarde – absolute hoekwaarde) . Deze relatieve hoekwaarde gaan
we gebruiken om het motorvermogen te regelen. Hoe meer de robot afwijkt van de gewenste
richting, hoe sneller de robot moet ronddraaien. Is de gewenste richting bereikt dan zal de
relatieve waarde nul zijn en zullen de motoren geen vermogen krijgen. De gewenste waarde
steken we in een variabele.
We gaan eveneens kijken of die relatieve waarde (Relative Reading) binnen de range (Inside
Range) van -180° tot 0° ligt. Is dit zo dan moet de robot naar links om zijn as draaien, is dit
niet het geval dan moet de robot naar rechts om zijn as draaien. Daarom is het Verplaats blok
ingesteld om naar links om zijn as te draaien. Door de conditie dan te koppelen aan de Richting input contactpunt zal de robot naar links draaien indien de relatieve waarde tussen -180°
72
en 0° ligt en naar rechts draaien indien de relatieve hoekwaarde er buiten ligt. Het getoonde
programma toont eveneens de gewenste hoek, de relatieve hoekwaarde en de absolute hoek
waarde op het scherm.
Voorbeeldprogramma: kompas.rbt
Het kompas zorgt ervoor dat de robotboot SERENITY steeds in dezelfde richting blijft varen.
© Brian Davis
73
Waarom valt de LEGO Mind14
storms NXT niet om?
NXT Gyroscoop sensor
Met de NXT gyroscoop sensor (uitgebracht door Hi Technic) meet de NXT de hoekrotatie in
graden per seconde. De sensor meet dus hoeveel graden de sensor gedraaid is om zijn verticale as in één seconde. Hij meet dit enkel rond de verticale as.
De gyroscoop van Hi Technic met bijhorend
programmeerblok.
Deze sensor werd gebruikt om een LEGO NXT Segway
te maken, een robotje dat balanceert op twee wielen.
De sensor meet de hoeksnelheid van de robot en het
programma gaat beide motoren van de wielen zo aansturen dat de het robotje steeds rechtop blijft staan,
zelfs als je er een duwtje tegen geeft of als hij op een
helling rijdt.
NXTWAY-G blijft rechtop rijden met de gyroscoop.
© Ryo Watanabe
74
NXT Acceleration/Tilt Sensor
Hi Technic heeft een NXT Acceleration/Tilt Sensor (versnelling en tilt sensor) om versnellingen te meten. Hij kan volgens de drie richtingen de versnelling meten en dit tussen -2g en +2g.
Zoals je ziet wordt de versnelling uitgedrukt in een aantal g. Dit is de valversnelling en deze is
op het aardoppervlak gelijk aan 9,81m/s². Formule 1 of vliegtuigenpiloten krijgen grote g-krachten te verduren. Dit komt omdat ze zo snel optrekken, afremmen en bochten nemen dat het
lichaam onderworpen is aan grote versnellingen en dus ook aan grote krachten. Via de wet van
Newton (kracht is versnelling maal massa), zijn immers beide aan elkaar gekoppeld. Ook als
je in een achtbaan zit word je onderworpen aan g-krachten. 1g ervaar je bij een vrije val. Bij 2g
wordt de totale kracht op het lichaam tweemaal zo groot al de normale zwaartekracht.
De accelerometer van Hi Technic met
programmeerblok.
De Wii Remote-achtige hendel bevat een Acceleration/
tilt sensor om het LEGO
blokkenkanon te richten.
Via de tastsensor wordt
er gevuurd.
© Paul Tingey
75
16
Extra NXT sensoren
Webcam voor LEGO NXT
Heel wat robots hebben een camera aan boord. Via de website www.mindsensors.com kan je
een webcam voor je LEGO NXT bestellen. Wil je bijvoorbeeld de oranje voetbal detecteren om
mee te doen aan de RoboCup voetbalwedstrijd dan heb je een dergelijke camera nodig. Via de
NXTCamView software verbind je de sensor via een USB kabel met je PC, de NXT heb je dus
even niet nodig. Zo kan je het camerabeeld bekijken, wat niet mogelijk is via de NXT, en de
nodige instellingen doen. Indien je bijvoorbeeld instelt dat het gedetecteerde object de kleur
oranje moet hebben, dan gaat de software de coördinaten geven van de plaats waar zich in
het beeld de gewenste kleur bevindt en dit tot 8 verschillende kleuren.
Via http://nxtcamview.sourceforge.net/ zijn enkele demo’s te bekijken.
© mindsensors.com
© Scott Briscoe
Met de NXT webcam speurt de NXT BRANDBLUSROBOT naar brandhaarden om het met water te blussen.
Klok voor LEGO NXT
Dit blokje, dat aangeboden wordt via www.mindsensors.com, is de
polshorloge voor je LEGO Robot. Hij houdt de tijd, dag, maand, jaar
en dag van de week bij. De NXT-G software laat toe om de juiste
informatie in te stellen en uit te lezen.
© mindsensors.com
Sony PlayStation 2 controller interface
Zou je graag je PlayStation 2 controller gebruiken om je robot te commanderen dan is dit blokje de oplossing. Klik je draadloze ontvanger in en je
kan de 4 joysticks uitlezen alsook de waarde van de 16 knoppen van je
PS2 controller.
© mindsensors.com
76
Druksensor voor LEGO NXT
LEGO Technic heeft verschillende pneumatische onderdelen. Om de druk te meten van de
perslucht kan je de NXT druksensor kopen. Deze sensor sluit je aan op de
pneumatische leidingen van LEGO. Zo is het mogelijk de motor van de LEGO
pneumatische compressor te stoppen als de druk voldoende hoog is en
terug aan te zetten als hij onder een bepaalde waarde zakt.
© mindsensors.com
Infrarood zoeker
Infrarood (IR) licht is onzichtbaar voor het menselijke oog. Maar de infrarood zoeker van Hi
Technic ziet wel dit licht en vertelt je bovendien de richting van de IR-straling. De sensor geeft
een waarde van 0 tot 9 aan. 0 betekent dat er geen bron te vinden is. Een waarde 1 krijg je als
de bron zich links achteraan bevindt, 5 als het voor de sensor is en 9 rechts achteraan. In de
sensor zitten 5 IR sensors, waarvan ieders signaalsterkte beschikbaar is. Een bron van IR
stralen is bijvoorbeeld de afstandbediening van je TV. Je kan
dus de robot zo programmeren dat hij deze tracht te volgen.
Deze sensor heb je nodig wanneer je wil deelnemen aan de
RoboCup Junior voetbalwedstrijd. RoboCup is een voetbalwedstrijd voor robots, bij de junior afdeling spelen ze met
een bal die IR uitstraalt (eveneens te koop bij Hi Technic). Wel
opletten als je robotje in de buurt van fel zonlicht rijdt want
ook de zon zendt infrarode straling uit!
De IR bal voor de RoboCup Junior voetbalwedstrijd.
© HiTechnic
IR Link sensor
IR wordt gebruikt voor gegevensoverdracht. Je afstandsbediening gebruikt bijvoorbeeld IR
om je TV te bedienen. Vroeger had een mobiele telefoon soms een IR poort, maar door de
lage communicatiesnelheid is dat nu grotendeels vervangen door bluetooth. De oude RCX
brick heeft nog wel een IR poort. Met de Infrarood zoeker kan je niet communiceren met de
RCX vermits hij geen IR straling uitzendt. Wil je een draadloze communicatie tot stand brengen tussen de RCX en NXT dan heb je de IR Link sensor nodig. De RCX IR Link Block voor de
NXT-G software is in ontwikkeling. Deze IR Link is ook te gebruiken om de gemotoriseerde
Technic Bulldozer en Monster Dino te commanderen of de LEGO R/C treinen. De IRLink Block
voor de NXT-G software is wel al beschikbaar.
77
RFID Sensor
RFID is een technologie om van op een afstand informatie op te slaan
en voor het lezen van zogenaamde RFID-tags die in of op objecten kunnen zitten. Een RFID tag bestaat in verschillende uitvoeringen, maar
hij kan heel klein gemaakt worden en in zijn geheugen steekt vaak een
uniek identificatienummer. Wanneer ze in de toekomst heel goedkoop
gemaakt kunnen worden, kunnen ze bijvoorbeeld de streepjescode
vervangen. Hierdoor is het voldoende om met je winkelwagentje door
een poort te rijden waardoor de kassier ineens weet wat je allemaal in
je wagentje hebt. De RFID NXT Sensor van Codatex (www.codatex.com)
leest het 5 bytes identificatienummer in van een EM4102 RFID tag,
wanneer het binnen een bereik van 3cm tot de sensor wordt gehouden.
Als een RFID tag gedetecteerd wordt gaat een ingebouwde led een
lichtsignaal geven. Zo kan je bijvoorbeeld in verschillende LEGO auto’s
een RFID tag steken, die je eveneens bij Codatex aanschaft, waardoor
je robot weet met welke auto hij te maken heeft.
RFID sensor waarmee de RFID tags mee gelezen worden.
© Codatex.
NXT Sensor Adaptor
Vernier Software & Technology maakt producten en software om de wiskunde en wetenschappelijke vakken te ondersteunen. Met de NXT Sensor Adaptor is het mogelijk om één van
hun 30 sensoren aan de NXT te koppelen. Hiermee kan je leuke proefjes maken om bijvoorbeeld de chemie of fysica lessen op te fleuren. Eén van de sensoren meet de vochtigheid van
de grond. Deze sensor kan je gebruiken om automatisch de planten water te geven. De vissen
in je aquarium zullen nog nooit zo vrolijk rondzwemmen wanneer hun waterkwaliteit getest
wordt met de NXT AQUARIUM TESTER. De zuurgraad (uitgedrukt in pH) en hoeveelheid zuurstof in het water worden door een Vernier sensor opgemeten en via de NXT Sensor Adaptor
naar de NXT gezonden.
NXT Sensor Adaptor.
© Vernier Software & Technology
NXT AQUARIUM TESTER.
NXT PLANT WATERER.
78
17 Overige NXT-G programmeerblokken
In de vorige hoofdstukken zijn niet alle programmeerblokken aan bod gekomen. Hier is een
overzicht van de overige functionaliteiten van de NXT-G software. Voor een gedetailleerde
beschrijving van deze blokken wordt verwezen naar de handleiding.
Timer blok
De NXT heeft drie ingebouwde timers die je kan resetten of uitlezen. Bovendien
kan het programmeerblok een logisch datasignaal geven indien de waarde al
dan niet boven een activeerpunt komt.
Stop blok
Dit programmeerblok zal je programma en alle werkende motoren, lampen en
geluiden stoppen. Gestopte motoren worden in de vrijloop gezet.
Logisch blok
Dit blok voert logische handelingen uit met logische data. De mogelijke logische
handelingen zijn EN, OF, XOF en NIET.
Bij EN moeten beide ingangen Goed zijn om de uitkomst Goed te hebben. In alle
andere gevallen is de uitkomst Verkeerd. Bijvoorbeeld het moet licht zijn en er
moet voldoende geluid zijn, dan pas mag de robot bewegen. Is er wel licht, maar
niet voldoende geluid, dan is de uitkomst Verkeerd.
Bij OF is het voldoende dat één van twee ingangen Goed is, om de uitkomst Goed
te hebben. Dus enkel indien beide ingangen Verkeerd zijn, is ook de uitkomst
Verkeerd.
Bij XOF moet ofwel de ene Goed zijn, of de andere Goed, maar niet allebei tegelijk
om de uitkomst Goed te hebben. Dus indien beide ingangen Verkeerd zijn of beide
ingangen Goed, dan is de uitkomst Verkeerd.
NIET draait de logisch data om. Dus Goed wordt Verkeerd en Verkeerd wordt
Goed.
79
Reeks blok
Dit blok geeft een logische data als een testgetal tussen of buiten twee getallen A
en B ligt.
Waak blok
De NXT valt na een tijd in slaap. Deze tijd is in te stellen in het menu van de NXT.
Wil je dit voorkomen gebruik dan dit programmeerblok.
Open bestand blok
Met het Open bestand blok kan je data in bestanden in het geheugen van je NXT
schrijven en uitlezen. Het kan zowel een bestand met tekst als getallen zijn. Je
sluit en wist ermee ook het bestanden. Hiermee kan je bijvoorbeeld regelmatig
een sensorwaarde opslaan en op een bepaald moment terug ophalen.
Kalibratie blok
Gebruik dit blok om de minimum en maximum waarde te kalibreren voor de lichtsensor en geluidssensor.
Reset motor blok
In de servomotoren zit een hoeksensor. Met het ingebouwde foutcorrectie mechanisme kan de motor heel precies bewegen. Met het Reset motor blok schakel je
dit uit.
Verzend en ontvang bericht blok
Deze programmeerblokken laten toe om berichten te verzenden en te ontvangen
over bluetooth.
80
Nog niet genoeg programmeer-blokken?
Vind je onder deze programmeerblokken toch nog niet de functies die je zoekt, bijvoorbeeld
om sinussen-cosinussen ( ), machten ( ) of wortels ( ) uit te rekenen. Of wil je dat
het programma weet hoeveel geheugen ( ) of batterij ( ) er nog beschikbaar is, surf
dan naar http://www.nxtasy.org/repository/nxt-g-blocks/. Hier staat een bibliotheek programmeerblokken ontwikkeld door NXT enthousiastelingen die je kan downloaden. Om deze
blokken te installeren heb je wel de Dynamic Block Update nodig (http://mindstorms.LEGO.
com/support/updates/). Gebruik vervolgens Blok Importeren en exporteren wizard dat onder
extra in het menu staat.
Kalibreren van de sensoren
Sensoren moeten soms gekalibreerd
worden. Door omgevingsinvloeden kan
de nauwkeurigheid van de sensoren achteruit gaan. Door ze te kalibreren worden
ze terug juist ingesteld om de juiste aflezing te bekomen. Om de NXT sensoren
te kalibreren moet de NXT aanstaan en
verbonden zijn met de PC. In het menu
ga je naar Extra en dan Kalibratie van
sensoren.
Dialoogvenster om de sensoren te kalibreren.
Updaten Firmware
Firmware is ingeprogrammeerde software in de hardware. De NXT firmware
zorgt er dus voor dat je motoren kan aansturen en sensoren kan uitlezen. LEGO
geeft soms nieuwe versies vrij om functies te verbeteren of softwareproblemen
op te lossen. Zeker als je de NXT pas
gekocht hebt kijk je beter eens na of je
Firmware de laatste versie is. Bovendien
vereisen sensoren van andere fabrikanten dan LEGO (bijvoorbeeld Hitechnic
of Mindsensors) een recente Firmware
versie alvorens de sensor correct zal
werken. Om deze actie te doen moet de
NXT aanstaan en aangesloten zijn aan
de PC. Bovendien moet je een verbinding
met het internet hebben en online zijn.
Kijk vervolgens in de handleiding om de
firmware up te daten.
Venster om de Firmware te updaten.
81
Rubiks kubus, een bekende puzzel, bestaat uit draaibare, kleine
kubusjes met gekleurde vlakken. Je
moet trachten de kubus zo in elkaar
te draaien dat elk van de zes zijden
dezelfde kleur heeft. Er zijn echter
ook wiskundige algoritmes om dit
probleem op te lossen. De webcam
van de NXT RUBIKS KUBUS OPLOSSER bekijkt eerst de 6 zijden van de
kubus en herkent dan met beeld herkenningssoftware de verschillende
kleuren. Deze software draait op een
gewone PC. Dan worden de verschillende acties naar de NXT gestuurd
om een mechanisme in werking te
stellen die de Rubiks kubus oplost.
© Daniele Benedettelli
82
Hoe hack je de LEGO Mind18
storms NXT?
Er bestaan ongelooflijk veel mogelijkheden wat je met de LEGO Technic steentjes en de LEGO
NXT met de 3 motoren en verschillende sensoren kan doen. Misschien wil de elektronicus onder jullie echter graag zijn eigen elektronica aan de LEGO NXT koppelen. Met een beetje handigheid lukt dit wel. Ik waarschuw je wel dat zulke aanpassingen niet door LEGO ondersteund
worden en aanleiding kunnen geven tot het beschadigen van de componenten en dan
vervalt ook je garantie. Alles wat je dus op deze pagina’s leest, valt onder je eigen
verantwoordelijkheid. Om je te helpen verkoopt Hi Technic de NXT Prototype
Sensor Board dat wel door LEGO is goedgekeurd.
NXT Prototype Sensor Board om je eigen elektronica met de NXT te
verbinden.
NXT Prototype Sensor Board
Met dit prototype bord kan je 5 analoge ingangen inlezen en het heeft
6 digitale input/output poorten. Het bord leveren ook 3,3V en 5,0V gereguleerd en 4,3V en 9V ongereguleerd om je elektronica te voeden. Opgelet:
de geleverde stroom is beperkt. Van de webpagina kan je de software van de
NXT-G Prototype Sensor Programming Block downloaden om de analoge waarden in te
lezen, de digitale poorten te lezen of in te stellen met de NXT-G software.
Om snel een schakeling te maken, gebruiken we een experimenteerbord. Ga naar een elektronica winkel in de buurt en ze kunnen je er zeker verder helpen met de nodige componenten. Dit bordje bevat gaatjes waarin je de elektronica componenten kan inprikken en bepaalde
gaatjes zijn elektrisch met elkaar verbonden. Alle gaatjes van de bovenste horizontale lijn zijn
met elkaar verbonden, alsook alle gaatjes van de onderste horizontale lijn. De overige gaatjes zijn per 5 vertikaal met elkaar verbonden. Hierin prikken we het Prototype Sensor Board
zoals aangeduid op de figuur. Met het prototype bordje gaan we nu een schakeling maken.
Hoe meer we aan een knopje gaan draaien, hoe meer lampjes er moeten branden. De eerste
component dat we hiervoor nodig hebben noemt potentiometer en sluiten we aan zoals op de
figuur. Zo staat de analoge ingang A0 in verbinding met de potentiometer. Een potentiometer
varieert de weerstand van 0Ω (spreek uit ohm, de eenheid van weerstand) tot een bepaalde
waarde.
83
We knippen nu een stukje draad af en verwijderen de plastieken isolering voorzichtig aan
beide kanten en prikken die in als volgt. Nu is de onderste lijn volledig verbonden met de
grond (GND). Dikwijls worden er hiervoor zwarte draden gebruikt.
Een tweede zwarte draad gebruiken we om de potentiometer met de grond te verbinden.
Met een rode draad (vaak gebruikt voor de voeding) verbinden we nu de bovenste lijn met de
+3V voedingspin. Een tweede rode draad gebruiken we om de bovenste lijn met de potentiometer te verbinden.
Als je nu met een schroevendraaier aan de potentiometer draait zal de spanning op pin A0
variëren van 0V tot 3,3V en vermits deze pin een analoge ingang is van het Prototype Sensor
Board leest de software deze waarde uit als een getal tussen 0 (voor 0V) en 1023 (voor 3,3V).
84
Maak hiervoor volgend programma met het Prototype sensor blok .
Met volgende instellingen:
De sensor hebben we aangesloten op poort 1 (Port 1) en we wensen een analoog signaal (Read
Analog) te lezen die is aangesloten aan Analog Port 0. Save en download dit programma op
de NXT. Als je nu aan de potentiometer draait zal je de waarde op het scherm zien veranderen.
Voorbeeldprogramma:elektronica potentiometer.rbt
We gaan deze waarde nu gebruiken om een aantal leds (Light Emitting Diode) aan te sturen.
We hebben immers een aantal digitale input/output poorten ter beschikking. Hiervoor moeten
we extra componenten op het experimenteerbord plaatsen. 5 leds heb je nodig en 5 weerstanden. Weerstanden bestaan er echter in verschillende waarden en we zullen een kleine
berekening moeten doen om de juiste weerstandswaarde te vinden. De spanning aan de
uitgang van de digitale output is 3,3V. De spanningsval over de led bedraagt ongeveer 1,2V. We
moeten de stroomsterkte door de led beperken door de weerstand te gebruiken. Een goede
richtwaarde voor de stroomsterkte is 12mA of 0,012A. Om de weerstand te vinden gebruiken
we de wet van Ohm die zegt dat spanning gelijk is aan stroomsterkte maal weerstand of in
formulevorm: V = RxI met V = 3,3-1,2=2,1 en I =0,012. Dus onze gewenste weerstand bedraagt:
R = V/I = 2,1/0,012 = 175. Een weerstand van 175Ω bestaat echter niet, de eerste waarde groter
dan 175Ω is 180Ω. Om de juiste waarde te weten te komen kijk je best in de technische fiche
(datasheet) van de gekochte led. De weerstanden zijn te klein om een leesbare waardeaanduiding erop te drukken, daarom gebruikt men een kleurcode.
zwart bruin rood oranje geel groen blauw violet grijs wit
0 1 2 3 4 5 6 7 8
9
85
De eerste twee banden (soms drie) geven de waarde van de weerstand in ohm weer en de
volgende band het aantal nullen. De overige banden zeggen iets over de precisie van de weerstand. Wij zoeken een weerstand van 180Ω, dus zal de kleurcode van de weerstand bruingrijs-bruin moeten zijn.
De stroom kan maar in één richting door de led stromen, daarom steek je de led met de langste pin aan de kant van de digitale outputpoort (pinnen B0 tot B4) en met de korte kant aan de
weerstand. De andere zijde van de weerstand wordt aan de grond verbonden zoals op de foto
te zien is.
We gaan nu het programma uitbreiden zodanig dat we de leds kunnen aansturen. De waarde
van de analoge ingang delen we door 100. Hierdoor schrappen we de laatste twee cijfers van
de analoge waarde en bekomen we een getal tussen 0 en 10. Vervolgens verbinden we de
uitkomst met het Omschakel blok waar we 11 verschillende mogelijkheden aanmaken.
Bij de waardes van 0-99 (dus 0 na deling) schakelen we alle lampjes uit. Bij de waardes van
100-299 (dus 1 en 2 na deling) schakelen we het eerste lampje in enzovoort tot alle lampjes
aan zijn.
86
Daarvoor moeten we telkens het configuratiescherm van het Prototype sensor blok als volgt
instellen.
De sensor is nog steeds aangesloten aan poort 1 (Port 1) en we gaan de digitale uitgang
instellen, dus Write Digital onder Action. In Digital Out gaan we aanduiden welke poorten als
digitale ingang worden ingesteld en welke als digitale uitgang. Dit moeten we binair aangeven met een 1 voor een uitgang en 0 voor een ingang en dit in de volgorde van de poorten. We
willen poorten B0 tot B4 als uitgang instellen, want daaraan zijn de leds aangesloten en B5
als ingang, dit betekent 111110 in het binair stelstel. Om dit getal naar het decimaal stelsel te
zetten past men volgende formule toe: 1x1+1x2+1x4+1x8+1x16+0x32=31. In Digital Control wordt
dan aangegeven of de uitgang hoog (3,3 V - led aan) of laag (0V - led uit) moet zijn volgens
hetzelfde idee. Om alle leds uit te zetten wordt de formule dus: 0x1+0x2+0x4+0x8+0x16+0x3
2=0, voor de eerste led: 1x1+0x2+0x4+0x8+0x16+0x32=1, twee leds: 3, drie eerste leds: 7, vier
leds: 15 en alle vijf leds: 31.
Download dit programma in de NXT en wanneer je aan de potentiometer draait gaan de leds
één voor één aan en bij het terugdraaien terug uit.
Voorbeeldprogramma:elektronica met leds.rbt
87
Voor de elektronicaspecialisten
Wil je echter dit bord graag zelf maken dan moet je weten hoe de NXT communiceert met de
motoren en sensoren. De servomotoren gebruiken 6-aderige kabels. De NXT heeft 3 identieke servomotor poorten A, B en C. Pinnen 1 en 2 zijn de PWM signalen om de H-brug voor
de servomotoren aan te sturen. Ze kunnen elk continu 700mA leveren en 1A piekstroom. Pin
3 is de aarding (GND). Pin 4 is de 4,3V voeding. Pinnen 5 en 6 zijn de pulsen van de relatieve
hoekencoder en ze hebben beide een Schmitt trigger. Het faseverschil tussen beide signalen
geeft de draairichting weer.
1-wit PWM signaal motor
2-zwart PWM signaal motor
3-rood aarding
4-groen voeding 4,3V
5-geel hoekencoder signaal 1
6-blauw hoekencoder signaal 2
De NXT heeft 4 identieke poorten voor sensoren 1, 2 ,3 en 4, elk voorzien van 6 pinnen. Pin 1 is
de analoge input (0-5V) en is verbonden met een 10bit A/D- convertor. Het is eveneens de 9V
voeding voor de oude RCX sensoren. Je kan dus nog je oude RCX sensoren gebruiken. Hiervoor heb je wel een conversiekabel nodig (ordernummer 8528 bij LEGO) of je kan hem zelf
maken. Installeer ook de Dynamic Block Update en de Legacy Block Library, te downloaden
op de LEGO Mindstorms NXT software update website. Pinnen 2 en 3 zijn de aarding. Pin 4
is de voeding voor de sensor en levert 4,3V. Pinnen 5 en 6 zijn de digitale poorten voor het I²C
seriële bussysteem met een communicatiesnelheid van 9600bit/s. Deze standaard, ontwikkeld door Philips, is uitermate geschikt voor communicatie tussen microcontrollers en een
uitgebreid gamma IC’s met I²C interface. In de LEGO Mindstorms NXT Hardware Developer
Kit (HDK) vind je de nodige documentatie om je eigen sensoren en actuatoren te maken.
1-wit analoge input
2-zwart aarding
3-rood aarding
4-groen voeding 4,3V
5-geel I²C (klok-SCL)
6-blauw I²C (data-SDA)
88
Programmeeromgevingen voor 19 LEGO Mindstorms NXT
Met de meegeleverde software NXT-G is het gemakkelijk en snel om de LEGO NXT te programmeren. Maar na een tijdje zal je ook de limieten ondervinden van het programma. Ingewikkelde berekeningen met wiskundige functies zoals cosinus, sinus, machten en wortels worden al behoorlijk
moeilijk of eindigen in een spaghetti van programmeerblokken en dataverbindingen. Naast NXT-G
bestaan er nog andere pakketten die toelaten om de robot te programmeren. Wie dus geavanceerde programma’s wil schrijven of liever de robot programmeert door code te schrijven in plaats van
programmeerblokken met elkaar te verbinden moet volgende programmeeromgevingen zeker
eens overlopen.
Microsoft Robotics Studio (http://msdn.microsoft.com/robotics/)
Microsoft heeft sinds kort een speciaal pakket ontwikkeld, genaamd Microsoft Robotics Studio
(MSRS), om robots te programmeren en zelfs te simuleren. Je kan dus eerst volledig de werking
van je robot controleren in een virtuele omgeving alvorens de robot in het echt te bouwen en te laten
werken. Leuk hieraan is dat het pakket naast heel wat andere robots ook de LEGO NXT volledig
ondersteund. Bovendien is de software gratis en is het te downloaden van de website van MSRS. Met
deze software hoopt Microsoft een standaard neer te zetten zoals het deed voor de computerindustrie enkele decennia geleden. Nu wordt er immers voor elke robot aparte software geschreven met
weinig of geen standaarden. Met NXT-G kan je enkel de LEGO NXT robot aansturen en bijvoorbeeld
niet de Create van iRobot (de hobbyrobot gebaseerd op hun stofzuigrobot). Dit heeft tot gevolg dat
heel wat software nodeloos herschreven moet worden bij het ontwikkelen van een volgend project
en dus een verlies van tijd en geld. Met MSRS daarentegen programmeer je met hetzelfde softwarepakket verschillende robotplatformen. Bovendien wordt MSRS geleverd met Microsoft Visual Programming Language (MVPL) dat de mogelijkheid biedt om de robot te programmeren met een soort
programmeerblokken zoals in NXT-G, maar dan met veel meer mogelijkheden.
Het gelijkaardig programma om met de ultrasone sensor een voorganger te volgen ziet er in MVPL dan als
volgt uit.
89
Willen we nu dit programma in de toekomst gebruiken met een andere robot dan hoeven we
enkel de service blokken van de ultrasone sensor en de motoren te vervangen, aan de rest
van het programma hoeven we niets te wijzigen.
Gebruik een webbrowser om je code te testen en te debuggen, hier zie je de waarde van de ultrasone
sensor aangesloten op poort 4.
90
De simulator van MSRS berekent de echte fysica, dus met zwaartekracht en botsingen. Rij je
dus te hard tegen een object (hier een Pioneer 3DX robot) dan heb je kans dat de LEGO robot
omkantelt.
BricxCC (http://bricxcc.sourceforge.net)
BricxCC is een programmeeromgeving met Next Byte Codes (NBC) en Not eXactly C (NXC).
NBC is een hogere assembleertaal en NXC is een C-achtige-compiler voor de NXT ontwikkeld
bovenop NBC. Bovendien is dit eveneens gratis.
RobotC (http://www.robotc.net/)
RobotC is een C-gebaseerde programmeeromgeving van de Carnegie Mellon University Robotics Academy. Twee modes zijn beschikbaar: expert en basis. Bij het laatste zijn de geavanceerde functionaliteiten onzichtbaar gemaakt. Hier moet er code geschreven worden, maar
via een menu sleept men wel stukken voorbeeldcode in het programma. Voor deze software
moet je echter wel betalen, je krijgt dan wel een betere documentatie en ondersteuning.
LeJOS (http://lejos.sourceforge.net)
LeJOS gaat de firmware van de NXT vervangen en bevat een kleine Java Virtual Machine
zodanig dat je de robot kan programmeren in Java. Eveneens gratis.
91
HOOFDSPONSOR
9Z Kg^_Z Jc^kZgh^iZ^i 7gjhhZa heZZai Va
bZZg YVc '% _VVg ZZc e^dc^Zghgda ^c
lZiZchX]VehXdbbjc^XVi^Z^c7Za\^…#
:ZcWZaVc\g^_`YZZakVcYZZmeZg"
i^hZkVcYZ8ZaLZiZchX]VehXdb"
bjc^XVi^Z ^h ]Zi j^ilZg`Zc kVc
VVcigZ``Za^_`Z Zc ZYjXVi^Z[ kZg"
VcilddgYZegd_ZXiZckddg_dc\ZgZc
odVah GdWd8je ?jc^dg# L^_ l^aaZc
_dc\ZgZc^ciZgZhhZgZckddglZiZchX]Ve
ZciZX]c^Z`#:ZcdkZgo^X]ikVcdcoZegd_ZXiZc
`Vc_Zk^cYZcdelll#lZiZchX]VehXdbbjc^XVi^Z#WZ#
CVYZGdWd8je?jc^dg`Vc_ZVah&-eajhhZgVVcYZKJ7^c\Zc^Zjgh"
lZiZchX]VeeZc hijYZgZc bZi kV``Zc Vah gdWdi^XV# DcoZ bVVi"
hX]Vee^_hiVVikddg]ZZalVij^iYV\^c\ZclVVgYZZmeZgi^hZkVcYZ
^c\Zc^ZjgkZgZ^hi^h#>c\Zc^Zjgho^_c^c]ZZalViY^hX^ea^cZhVVclZo^\
lVVgdcYZg YZ gdWdi^XV! bVVg ZkZcZZch kddg ]Zi dcil^``ZaZc kVc
kZ^a^\ZgZlV\Zch!b^a^Zjkg^ZcYZa^_`ZZaZ`ig^X^iZ^ih"
XZcigVaZhZc]^\]"iZX]hnhiZbZc#O^_YjlZc
YZ \gZcoZc kVc YZ iZX]cdad\^Z hiZZYh
kZgYZg#DbbZZgiZlZiZcdkZgYZoZde"
aZ^Y^c\ d[ dkZg hijYZgZc VVc YZ Kg^_Z
Jc^kZgh^iZ^i 7gjhhZa! WZodZ` YVc YZ
lZWh^iZ kVc YZ [VXjaiZ^i >c\Zc^Zjgh"
lZiZchX]VeeZclll#kjW#VX#WZ$>G$#
92
HOOFDSPONSOR
DE NATIONALE LOTERIJ IS OOK DAAR
WAAR JE HET NIET VERWACHT.
Soms moet je heel goed kijken om het op te merken. De Nationale
Loterij speelt voortdurend een actieve rol in de samenleving. Elk
jaar creëert ze kansen voor honderden projecten in de sociale,
culturele, wetenschappelijke, humanitaire en sportieve sfeer.
Kansen voor iedereen. En daarom vind je de Nationale Loterij ook
daar waar je het niet verwacht.
93
HOOFDSPONSOR
@j`V
@J@6bVV`igdWdih#6a(*_VVgaVc\#DcoZ
gdWdih adeZc c^Zi gdcY! o^_c c^Zi ha^b Zc
oZ`Zgc^Zi\ZkdZa^\#BVVgdcoZgdWdiho^_c
lZa hiZg`! oZ `jccZc idi &%%%`\ ]Z[[Zc#
:coZo^_chcZa#:coZo^_ccVjl`Zjg^\Zc
oZ o^_c cdd^i bdZ# DcoZ gdWdih ldgYZc
^c\ZoZi db hVV^Z _dWh j^i iZ kdZgZc# D[
\ZkVVga^_`Z _dWh# :c YVi ') jjg eZg YV\!
YV\^c!YV\j^i#OdcYZgiZhideeZc#DcoZgd"
Wdih ldgYZc ^c\ZoZi db VjidÉh iZ WdjlZc! d[
^_h`VhiZc! d[ db YdoZc iZ hiVeZaZc d[ db odkZZa
VcYZgZegdYjXiZciZbV`Zc#
6[ZcidZbV`ZclZdd`VcYZgZgd"
Wdih# GdWdih kddg egZieVg`Zc Wk!
lVVg bZchZc de ZZc hidZa bZZ
gdcY\Zol^ZgYldgYZc#D[gdWdihY^Z
[g^hYgVc`j^ihX]Zc`Zc#:clZbV`Zc
dd`ZZcVVciVakVcYZgdWdihY^Z_Z
^cY^iWdZ`iZgj\k^cYi#
BZZg ^c[dgbVi^Z k^cY _Z de dcoZ
lZWh^iZlll#`j`V#WZ#
@j`V
LEGO-NXT
BINNENSTEBUITEN
©Daniele Benedettelli
Roboticaonderzoekers hebben een fantastische droom: in 2050 de wereldkampioen voetbal verslaan met een ploeg robots. Zover zijn we nog
lang niet, maar ondertussen oefenen de robots reeds in de robotwedstrijd
RoboCup. Je kan zelf ook een robot in elkaar knutselen en deelnemen aan
RoboCup Junior! Surf naar www.robocupjunior.be en je krijgt meer info
over de volgende RoboCup Junior-finale in België of Nederland.
In het boek ROBOTS BINNENSTEBUITEN vergeleken we de werking van
een mens met deze van een robot en zagen we verschillende toepassingen van robots. In dit boek zetten we de volgende stap: zelf met de LEGO
Mindstorms NXT robot experimenteren. Deze bouwdoos biedt de mogelijkheid aan de beginner om zijn eerste stappen binnen de robotica te zetten. Ook heel wat gevorderde hobbyisten beleven nog steeds veel plezier
aan diezelfde LEGO steentjes en bouwen er fantastische projecten mee. In
dit boek staan leuke projecten beschreven die je kennis laten maken met
de verschillende mogelijkheden van deze unieke robot. De ideale start om
jou droomrobot te realiseren!
Bram Vanderborght (28 jaar) is roboticaonderzoeker aan de Vrije Universiteit Brussel en het Italian Institute of Technology. Hij bouwde de
stappende robot Lucy. In Japan deed hij onderzoek op de menselijke
robot HRP-2. Nu werkt hij in Italië mee aan de kindrobot iCub.
Download