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.