LEGO NXT – INTELLIGENTE 4WD OFF ROADER

Bestuur ‘m op afstand met Bluetooth!

 

Een forse bak, hoog op de assen en met extreem veel kracht! (Te veel, maar daar vertel ik later meer over). Inderdaad… ik heb voor een belangrijk deel de materialen van de Lego Technic Extreme Off Roader-2 gebruikt (Model 8297 van eind 2007). Maar ik kan je verzekeren dat dit een totaal andere auto is.

 

Deze vierwiel aangedreven auto is lekker soepel geveerd. Hij heeft dubbele koplampen en ook achterlichten die het echt doen. En… hij wordt gemanaged door een NXT-Module in de achterbak.

 

Door de drie zware motoren en de NXT aan boord weegt het gevaarte totaal 2 kilogram. Daarmee is de snelheid er wel uit. Daarom zijn de tandwielverhoudingen zodanig gekozen dat hij grote hindernissen overwint in een gestaag rijtempo…

 

Het moest er een keer van komen. Na de Pimped 8297 Off Roader nu een auto die met Bluetooth bestuurbaar is zodat je nu eens nauwkeurig kunt sturen (proportioneel), gedoceerd gas kan geven en echt kan remmen als dat nodig is.

 

Bovendien is de auto intelligent met zijn Auto Distance Control” en “Collision Prevention Assistance”. Hij houdt hiermee automatisch afstand op voor hem rijdende auto’s en als er een botsing dreigt grijpt hij in door zelf op de rem te trappen. De bestuurder hoort een waarschuwingsignaal en ziet op het dashboard dat er ingegrepen wordt…

 

Het besturen doe je nu eens niet met een NXT en twee motoren die als sensor fungeren, zoals je dat meestal ziet. Dit keer gaat het met een “Pistool”. Dit pistool heeft een echt dashboard op het display! Je ziet de toerenteller, snelheidsmeter, benzinemeter, richting aanwijzers, automatische versnellingsbak en een paar signaal-“lampjes” bijvoorbeeld als je moet tanken! En dat laatste is geen flauwekul, want de benzinemeter is gekoppeld aan de batterij van je auto!

 

Sturen doe je door voorzichtig aan het stuur te draaien. De voorwielen van de auto volgen precies jouw beweging aan het stuur. Rechts naast de handgreep zit het rempedaal. En de trekker, voor de handgreep van het pistool, fungeert als gaspedaal. Met het rempedaal kan je ook de auto in “zijn achteruit” zetten. De “Reverse” is natuurlijk ook op het Dashboard af te lezen. De toerenteller op het display volgt de beweging van het gaspedaal. De snelheidsmeter is gekoppeld aan de achteras van de wagen.

Automatische Bluetooth Set-Up!

De twee NXT’s zijn in NXC  geprogrammeerd. De belangrijkste reden was omdat ik nu eindelijk eens een automatische Bluetooth verbinding wilde opzetten. Dat wil zeggen dat je de slave NXT (de Auto in dit  geval) alleen maar hoeft aan te zetten, verder niets… niet eens een programma starten… Vervolgens zet je het pistool aan, start het programma en de rest gaat vanzelf. Je hoeft zelf geen Bluetooth verbinding op te zetten, dat doet het Pistool zelf. Ook het programma in de Auto wordt vanzelf opgestart zodra de Bluetooth verbinding vanzelf tot stand is gekomen! Dit klinkt heel eenvoudig maar geloof mij, dat heeft een paar avonden puzzelen gekost. Zie de technische beschrijving over hoe je die problemen kunt voorkomen, zou je het ook eens willen proberen…

 

Bekijk zelf in dit filmpje  hoe de NXT 4WD Off Roader  werkt!

Of bekijk de detailfoto.

 

 

Details over de bouw en werking:

Kort even de kenmerken van dit model op rij:

·         Maten van de auto: LxBxH is 38 x 21 x 26 cm, 2 kilogram.

·         Vierwiel aangedreven met differentieel op voor- en achteras

·         Twee XL-Motoren voor maximale kracht op de wielen

·         Een Power Function - Polariteit Schakelaar (éénmaal instellen, verder niet gebruiken) zodat voorwielen dezelfde kant opdraaien als de achterwielen met gebruik van 1 NXT Output Port voor beide motoren tegelijk.

·         Knoppenwielen voorkomen slippende tandwielen bij haakse overbrenging van wielaandrijving op differentieel

·         Dwarsgeplaatste Mindstorms-NXT Motor voor de stuurinrichting

·         RCX Rotatiesensor voor snelheidmeting op de achteras. (Wegens XL-Motoren ipv NXT motoren op de wielen)

·         Ultra Sonore afstandsmeting vanuit voorbumper.

·         Automatic Distance Control (ADC)
Automatische gaspedaal beperking bij afstand op voorganger van minder dan 30 cm.

·         Braking Assistance (onderdeel van ADC)
Als met meer dan 30% van de maximum snelheid op voorliggend object wordt ingereden wordt eerst automatisch geremd voordat het gaspedaal wordt gedoceerd. (Voor toekomstige snelle modellen, zal ik maar zeggen)

·         Collision Prevention Assistance (CPA)
De auto grijpt in en trapt acuut op de rem (en rijdt ook niet verder meer) als je een object dichter dan op 15 cm hebt benaderd.

·         Automatische verlichting (voor en achter) wordt gedimd als auto 2 seconden niet meer rijdt (altijd aan in reverse mode).

·         Full Dashboard (in de achterbak, ha ha ha) met:

o        Richtingaanwijzers (Knipperen als voorwielen meer dan 30 graden uitsturen)

o        Toerenteller (In werkelijkheid het vermogen dat op de elektromotoren wordt aangebracht)

o        Snelheidsmeter (Gekoppeld aan rotatiesensor op achteras)

o        Benzinemeter (Meet werkelijke output spanning van de batterij in de NXT van de Auto)

o        Waarschuwingsindicatie voor het Tanken (bij minder dan 7165 millivolt batterij output)

o        PRND Status Display voor automatische versnellingsbak (Park, Reverse, Neutral, Drive)

o        ACD / CPA indicatoren op voor- en achterwielen (alleen zichtbaar als er ingegrepen wordt)

·         Automatische stuurrichting initialisatie bij opstart. (Het maakt niet uit hoe de voorwielen staan gericht als je de NXT inschakeld)

·         Geprogrammeerd in NXC met NXT 1.0 Firmware Version 1.04 (From Lego.com)

·         Wacht op opkomende Bluetooth verbinding (via BT-Channel 0) indien auto wordt gestart voordat de afstandbediening actief is. (NO RC FOUND op display)

·         Automatische Remingreep als afstandsbediening buiten bereik raakt (ivm Bluetooth bereik).

·         Gecomprimeerde Bluetooth Data Transfer tussen Auto en Pistool (8 variabelen) ter verhoging van de reactiesnelheid van de auto op de bestuurdersacties en andersom.

 

De specificaties van het afstandsbedieningpistool:

·         Proportioneel gaspedaal (gerealiseerd met RCX Rotatiesensor, verbonden aan de trekker van het pistool)

·         Proportionele stuurinrichting (met een RCX Rotatiesensor verbonden aan het stuurtje)

·         Rempedaal (verbonden met NXT Tast Sensor). Alle vier de wielen worden direct geblokkeerd, ook als je tegelijkertijd gas blijft geven.

·         Reverse mode (achteruit rijden) door rempedaal aan te tikken terwijl auto stil staat. Terug naar “voorwaarts” door rempedaal opnieuw kort aan te tikken als auto stilstaat. De PRND indicator in het Dashboard laat zien of je voor of achteruit zult gaan rijden.

·         Identiek Dashboard, werkt synchroon met dat van de Auto.

·         Geprogrammeerd in NXC met NXT 1.0 Firmware Version 1.07 (From bricxcc.sourceforge.net)

·         SEARCHING CAR op display indien Automatische Bluetooth Setup actief is (Zoekt via Device Nr.0, BT-Channel 1). De beide NXT’s moeten elkaar wel kennen (dus de Passkey heb je ooit al een keer ingevoerd)

·         Vraagt “Attention” als er geen auto gevonden wordt (NO CAR FOUND op Display). De NXT gaat opnieuw zoeken.

·         Gecomprimeerde Bluetooth Data Transfer tussen Pistool en Auto (8 variabelen) ter verhoging van de reactiesnelheid van de auto op de bestuurdersacties en meters op het dashboard van de afstandsbediening.

 

 

 

 

Het oog wil ook wat…

En daarom is de auto ook van binnen afgewerkt met een rond afgewerkt klokkenkastje boven het stuur en ventilatieroosters in het dashboard. Om de suggestie van een echte ruit nog wat te benadrukken zijn er ruitenwisserbladen gemonteerd.

 

De stoelen klappen naar voren zodat je makkelijk bij de kabelbende kunt komen als je iets wilt aan- of loskoppelen aan de NXT Module.

 

De lucht inlaten op de motorkap zullen je ook niet ontgaan zijn.

 

 

Heldere verlichting.

De verlichting (voor en achter) gaat vanzelf aan. Even dacht ik er nog een lichtsensor voor te gaan gebruiken maar eigenlijk is het wel leuker als de lampen het altijd doen.

 

Zodra de auto uit de “Park” stand wordt gehaald gaan de lichten aan. De lichten dimmen 2 seconden nadat de auto weer in de Park stand wordt gezet.

 

De achterlichten zijn gemaakt van een transparante Lift-Arm waardoor ze lekker breed zijn en ook van de zijkant zichtbaar zijn, zoals bij echte auto’s. De koplampen zijn van kleine transparante schotelantennetjes gebouwd. Hierdoor krijg je die mooie krans om de lampen heen!

 

 

Onafhankelijk Chassis.

De auto bestaat duidelijk uit twee delen. Een Chassis voor alle technische zaken. Een Carrosserie voor de afwerking. Deze laatste zit met slechts vier verbindingspunten aan het Chassis vast. Een eenvoudige handeling dus, in geval je iets moet repareren.

 

De NXT rust op het achterste Chassisdeel. Zo veel mogelijk direct op de as zodat de veerelementen niet het volle gewicht van de NXT hoeven te dragen. Als de achterwielen inveren scharniert de NXT netje mee. De NXT beweegt dus op en neer in de achterbak van de auto.

 

Hetzelfde geldt voor de NXT-Motor die dwars op het voorste chassisdeel ligt. Hij ligt dwars zodat hij niet te veel onder de motorkap uit steekt. De breedte van de motorkap aan de binnenzijde is precies zo gemaakt dat de besturingsmotor er in zijn geheel in kan “verdwijnen” als de voorwielen inveren.

 

Het enige dat de Carrosserie moet dragen zijn de lampjes en de Ultra Sonore Sensor die in de bumper is verwerkt.

 

 

Het prototype chassis

Nieuw en zeer flexibel veersysteem.

De vering die ik hier heb gebouwd heb ik nooit eerder in een Lego-model gezien (oktober 2009). Ook niet in de werkelijke wereld trouwens!  Het is opgebouwd uit drie segmenten. Een chassis voor de ophanging van de voorwielen, één voor de achterwielen en een tussenliggend chassisdeel waaraan de carrosserie is gemonteerd. Links zie je het prototype.

De extra sterke veerelementen (geel) drukken de beide chassisdelen links en rechts naar beneden waardoor het middendeel omhoog komt. Door aan beide zijden dezelfde veerkracht te gebruiken blijft het middendeel horizontaal. Overigens werd de gehele constructie zo zwaar dat er 2x 4 gele veerelementen nodig waren om het geheel (2 kilo) omhoog te houden.

 

Maar je ziet misschien al dat er draaiplateaus in het middendeel zitten… Deze zijn nodig in geval slechts één wiel een obstakel moet overrijden.

 

 

 

 

Hier zie je ongeveer het maximaal haalbare. Het is duidelijk dat het voorste en achterste chassisdeel ten opzichte van elkaar moeten kunnen verdraaien.

 

De twee draaiplateaus zorgen dus voor deze vrijheid. De carrosserie houdt mooi het midden tussen de verdraaiing van de vooras en achteras.

 

De veerelementen zorgen voor veerkracht in op- en neerwaartse beweging, maar ook voor het terugdraaien van de draaiplateaus naar de neutrale stand.

 

 

 

Comfortabele Remote Control…

Het was de bedoeling een zo lichtgewicht mogelijke afstandsbediening te bouwen met toch alle bedieningscomfort. Nou, dat is deels gelukt. Echt lichtgewicht is hij niet geworden. De NXT alleen al is toch aardig zwaar aan zo’n pistool. Om het gewicht verder te beperken heb ik geen NXT Motoren gebruikt als sensoren voor het indrukken van het gaspedaal en de precieze stuurverdraaiing. In plaats daarvan zijn twee lichtgewicht RCX Rotatiesensoren toegepast.

 

De omvang van het geheel is toch nog aardig opgelopen (ik had ‘m kleiner willen hebben) doordat ik alle draden netjes weggewerkt wilde hebben terwijl de asjes vrijuit moeten kunnen bewegen.

 

Uiteindelijk is het geheel door de afwerking toch nog aardig zwaar geworden. Een neefje van 6 jaar had er duidelijk moeite mee… (En hij wou zou graag…!) Maar door het stuur vast te pakken heb je natuurlijk ook nog wat steun.

 

Het pistool is gemaakt om met de linkerhand te worden vastgehouden. Ik stuur nu eenmaal het liefst met m’n rechterhand. De greep vereist wat instructie zodat je gas kan geven met de wijsvinger aan de trekker (en eventueel de middelvinger er bij) terwijl je tegelijkertijd de rempedaal kunt bedienen met de duim. De duim druk je gewoon naar beneden.

 

Deze wijze van bedienen is mij goed bevallen. Met weinig bewegingen kan je in rap tempo remmen, schakelen en gas geven tegelijk.

 

Het aangrijpingspunt van het handvat is zodanig ten opzichte van de NXT geplaatst dat het pistool in balans op de hand rust. Hij blijft op de hand liggen als je het handvat los zou laten…  (wel de hand horizontaal houden hè!).

 

Analoge klokjes op het display.

Met RICedit-2 kan je intelligente .ric files editen. Dat wil zeggen dat je “commando’s” kan inbouwen die in de .ric file opgeslagen “objecten” op een gewenste positie plaatsen. Erg aardig, maar vereist weer een studie over die .ric file commando’s. Lui als ik ben heb ik deze klokjes dus gewoon in NXC gemaakt. Belangrijkste reden was dat in de .ric files geen commando’s bestaan om wijzers langs een cirkel te laten bewegen. Die Cirkelbeweging kan alleen gemaakt worden door de wijzer coördinaten vooraf te bepalen. Je zou dat door de NXT kunnen laten berekenen maar dan zal je goniometrische berekeningen moeten uitvoeren op de NXT, hetgeen een programma op zich zou worden en dus veel te traag.

De benodigde coördinaten voor de bewegende wijzers heb ik dus vooraf berekend in een spreadsheetje.  De coördinaten voor de stappen die de wijzerpunt kan maken zijn als een matrix in de programma code ingevoerd. Elk klokje heeft een eigen wijzer-coördinaten-matrix.

De wijzerplaat (achtergrond) wordt als eerste getekend. Daarna worden de wijzers er op geplaatst in de stand zoals berekend. Daarna worden variabele objecten op de wijzerplaat aangebracht. Denk bijvoorbeeld aan de richtingaanwijzers en de PRND-Status van de versnellingsbak. De wijzerplaat en overige objecten zijn in aparte .ric files gedefinieerd.

 

 

Te veel gevraagd….

De XL-Motoren zijn nog eens 3x vertraagd voordat de aandrijving via het knoppenwiel op het differentieel wordt overgebracht. Tijdens een testrit over een aantal heftige obstakels bleek alles toch even te veel te worden… Ook Lego knoppenwielen houden het op een gegeven moment voor gezien….

 

De aandrijving op de achteras begaf het opeens.

 

Later, met een rit door de sneeuw brak er weer een knoppenwieltje, die keer op de vooras... Mocht je de auto na willen bouwen, wees dan voorzichtig met het nemen van hindernissen!

 

 

 

Gecomprimeerde data-transfers tussen beide NXTen

Tijdens de programmeersessies bleek de respons van de auto op mijn stuurbewegingen steeds trager te worden naarmate ik meer Display variabelen over en weer ging sturen. Bovendien kreeg ik synchronisatie problemen bij hoge uitwisselsnelheden. Variabelen werden niet overgestuurd omdat de ene NXT ze sneller wilde aanbieden dan dat de ander deze ontvangen kon.  Omdat de communicatie tussen master en slave a-synchroon is kan je deze problemen ondervangen door verdergaande Hand-Shakes in te bouwen. De master NXT moet de Slave NXT informatie ophalen en krijgt alleen maar die informatie als de slave dit vooraf had “klaar gezet” in een outbox. Voordat je dit doet kan je testen of er informatie beschikbaar is. Maar daarmee werd de informatieoverdracht aanzienlijk trager. De stuurbewegingen kwamen daardoor “schokkerig” over op de auto. Ook de wijzers op het pistool reageerden traag op het gedrag van de wagen.

Daarom een snelle data-overdracht:

Zowel de informatie van Pistool naar Auto als terug wordt in één keer verzonden door alle gegevens in één 32-bits variabele te stoppen. De minst significante bits van deze variabelen worden als volgt gebruikt:

 

20 bits van pistool naar Auto zien er als volgt uit.

18 bits die vanuit de Auto terug worden gestuurd zijn:

Op deze wijze worden in twee stappen 8 variabelen uitgewisseld en blijft de auto zeer adequaat op de bestuurdersbewegingen reageren.

Kijk in de programmacode om te zien hoe dit verder is gedaan.

 

Automatisch een Bluetooth verbinding opzetten.

Dat ging niet zo eenvoudig, eigenlijk omdat de informatie daarover versnipperd te vinden is en soms tegenstrijdig. Hieronder een uitleg van de manier waarop ik het werkend heb gekregen. Mogelijk zijn er inmiddels weer betere manieren, maar alleen het gebruik van wat oudere commando’s bleek voor mij uiteindelijk de oplossing te zijn… Ik sta open voor suggesties overigens!

 

De NXT in het Pistool is als Master gekozen. Vanuit deze NXT wordt daarom de verbinding opgezet. De NXT in de Auto behoeft geen speciale aandacht behalve dan dat het programma netjes moet wachten op een BT-Kanaal indien het handmatig zou worden gestart voordat het Pistool de verbinding tot stand heeft gebracht.

 

Voorbereiding (alléén voor gevorderden) voor de NXT die als Bluetooth Master werkt:

 

Nu kan je starten met het laden van de code in de Remote NXT. Je kan natuurlijk een kijkje nemen in de sourcecode van de programma’s, maar hieronder alvast een korte uitleg hoe ik tot een oplossing gekomen ben:

 

Declareer eerst een SystemCall commando-structuur waarmee je bluetoothcommando’s gaat geven, de mijne heet “CmdStruct”:

    struct CmdStruct {                   

           unsigned int Result;

           byte Cmd;             

           byte Param1;        

           byte Param2;

           byte Param3;

           string Name;

           unsigned int RetVal;

           };

 

Verbind een variabele aan deze commandostructuur, in dit geval de variabele “Args”:

            CmdStruct Args;

 

Vul deze variabele met de waarden die je nodig hebt om het “Connect” commando te kunnen geven:

            Args.Cmd      = INTF_CONNECT;   // Command=BT-Connect

            Args.Param1 = 0;                          // BT-Device Nr. 0 in Device Table

            Args.Param2 = 1;                          // BT-Channel 1 for communication with Slave.

 

De constante “INTF_CONNECT” is een hexadecimale waarde die al binnen je NXC standaard library is gedefinieerd.

 

Creëer nu een programma-lus die net zo lang blijft zoeken naar een verbinding totdat de BlueTooth Status in orde is:

            while (!BluetoothStatus(JOUW_BT_KANAAL)==NO_ERR) {…BODY…}

 

De verbinding kan je nu in de body van de lus opzetten met het commando:

            SysCall(CommExecuteFunction, Args);

 

Mijn ervaring is dat nadat dit commando is uitgevoerd het nog een paar seconden kan duren voordat de verbinding er werkelijk is. Het kan ook zijn dat de NXT in de Auto nog niet aan staat of zo, wacht dan enkele seconden en voer dit commando gewoon opnieuw uit.

 

Is de BT-Communicatie eenmaal opgezet dan kan je vanaf de Remote NXT automatisch het programma in de NXT van de Auto starten, genaamd “4WD_CARmod10.rxe”. Heel simpel met het commando:

            RemoteStartProgram(JOUW_BT_KANAAL, "4WD_CARmod10.rxe");

 

De NXT in de Auto hoeft alleen maar te wachten totdat er een verbinding blijkt te zijn opgebouwd…. Als het goed is dan zal deze er dus al zijn omdat de Remote NXT het programma immers heeft gestart. Maar mocht je toevallig zelf eerst de Auto starten en daarna pas de Remote NXT, dan is er dus geen vuiltje aan de lucht omdat de Auto netjes wacht tot de verbinding op komt:

            while (!BluetoothStatus(JOUW_BT_KANAAL)==NO_ERR) {…BODY…}

 

 

Downloads (rechter muisknop)

Bouwinstructies        : MLcad Chassis / PDF Chassis / Elektrisch schema / Bedrading

                                     MLcad Carrosserie / PDF Carrosserie

Software NXT           : NXC Source code voor Remote en Auto

RIC-Files                   : Graphics voor het dashboard (op beide NXT modulen) 

SoundFiles                : RSO Sound files (uit NXT-G library)

Executable                : Programmafile (.rxe) voor op je Remote NXT Module en Auto

 

 

NXT Bedradingsschema:

 

Remote NXT:

·          Sensor  1 = Touch, voor Remmen en Vooruit/Achteruit schakelen

·          Sensor  2 = RCX-Rotatie, voor het gaspedaal.

·          Sensor  3 = RCX-Rotatie, voor het stuur.

 

Auto NXT:

·          Sensor  1 = RCX-Rotatie, voor snelheidsmeting op achteras.

·          Sensor  2 = Ultrasonisch, voor afstandsmeting vanaf voorbumper.

·          Output A = NXT-Motor voor stuurinrichting.

·          Output B = Aandrijving voor- en achter-as (Twee XL-motoren op 1 poort)

·          Output C = Voor- en achterlichten aan/uit.

Niet geschikt voor NXT-G gebruikers!

NXT-G gebruikers zouden de executables van deze pagina rechtreeks in hun NXT kunnen uploaden. Dat gaat goed bij de auto, maar niet bij het pistool. Het pistool heeft namelijk geen standaard Firmware. Een afwijkende Firmware versie (v1.07) was nodig om toegang te krijgen tot de Bluetooth Systeemcommando’s waarvan de handles  in een beschermd deel van het geheugen blijken te zitten. Probeer je die te benaderen dan loopt het programma vast. Misschien dat het bij NXT 2.0 wel meteen werkt… Ikzelf heb de NXT 1.0

 

Terug naar de TOP