Uitlegsessie 9 maart 2010
Overzicht • Herhaling: het spelverloop • Alles over de sensoren en actuatoren die we gebruiken – Diepgaande informatie over de verschillende types – Aansluiten op het experimenteerbord
• Het programmeren van de robot – – – –
Wat je nodig hebt en waar je het haalt Het gebruik van de programmeeromgeving en het framework Hoe je een eenvoudige regelaar kan schrijven Laden van je programma in het experimenteerbord
• Vraag en antwoord 3
Overzicht • Herhaling: het spelverloop • Alles over de sensoren en actuatoren die we gebruiken – Diepgaande informatie over de verschillende types – Aansluiten op het experimenteerbord
• Het programmeren van de robot – – – –
Wat je nodig hebt en waar je het haalt Het gebruik van de programmeeromgeving en het framework Hoe je een eenvoudige regelaar kan schrijven Laden van je programma in het experimenteerbord
• Vraag en antwoord 4
Spelverloop • De robot kan deelnemen aan verschillende tijdritten, bij het begin van een tijdrit wordt het speelveld aangepast • Deelname van de 3e en volgende tijdritten gebeurt op basis van het algeheel klassement • De robots starten met tussenpauzes van 15 à 60 s • De startvolgorde wordt bepaald op basis van het algeheel klassement • De robot dient het terrein autonoom te overbruggen, hierbij wordt telkens de tijdsduur opgemeten 5
Alles over de sensoren en actuatoren
Lange afstandssensor
Motoren
Voelsprieten
Grondsensoren
Kompas
Servo’s 6
De lange afstandssensor
spanning
• Functie: het zien van hoge obstakels en tegenstanders • Types: GP2D120, GP2D12xxx,... • Kostprijs: EUR 10 • Wat: spanningsvariatie in functie van de afstand => ANALOOG • Aansluitingen: connector met drie pinnen Voorbereiding: • Solderen van kabels aan iedere pin
Afstand
(onthoud: 5V is rood, grond is zwart, uitgang naar keuze)
• Optioneel: stabilisatie voeding, soldeer condensator van 1uF tussen grond en 5V
7
De grondsensoren • Functie: het zien van de afgrond, eventueel ook om obstakels te detecteren • Types: APDS-9103/4 • Kostprijs: EUR 5 voor vier sensoren • Wat: variatie van stroom doorheen de fototransistor => ANALOOG • Voorbereiding omvat het solderen van de weerstanden en kabels aan de juiste pinnen
8
De grondsensoren • Functie: het zien van de afgrond, eventueel ook om obstakels te detecteren • Types: APDS-9103/4 • Kostprijs: EUR 5 voor vier sensoren • Wat: variatie van stroom doorheen de fototransistor => ANALOOG • Voorbereiding omvat het solderen van de weerstanden en kabels aan de juiste pinnen
9
Het kompas • • • •
Functie: het aanhouden van de juiste richting Types: ZCC212N-TTL of andere Kostprijs: EUR 15 Wat: geeft via RS232 een getal tussen 0 en 360 terug => DIGITAAL • Aansluitingen: vijf pinnen waarvan we er slechts vier gebruiken (voeding, grond, TX, RX) • Voorbereiding: • Soldeer 4 kabels aan het kompas (onthoud: 5V is rood, grond is zwart, pinnen Rx en Tx naar keuze)
• Plaats het kompas steeds horizontaal op de robot!
10
De voelsprieten
Functie: detectie obstakels en ghostwalls Types: zelf te ontwerpen 5V GND Kostprijs: gratis Vout Wat: fungeert als een schakelaar, Vout is hoog wanneer de bumper niets raakt, bij indrukking van de bumper komt Vout op 0 te staan => DIGITAAL • Aansluitingen: Vout aansluiten op één van de digitale ingangen 10 kOhm
• • • •
BUMPER
Schakelaar
4,7 à 10 kOhm 5V Vout
GND 11
De motoren • • • •
Functie: aandrijven van de robot Types: Lego® XL-motor of andere DC-motoren Kostprijs: EUR 32 voor Lego® motor pakket Wat: rotatie in functie van de aangelegde spanning (die we met een PWM-signaal laten variëren) • Aansluitingen: vier draden waarvan we er maar twee gebruiken • Voorbereiding: maak de 4 kabeltjes van je connector los en knip de buitenste weg, de middelste twee moet je strippen 12
Servo’s • Functie: versnellingsbak, roteren sensor, springsysteem,... • Types: • Lichte servo (5 euro) • Zware servo (10 euro) • Nauwkeurige middelzware servo (12 euro)
• Wat: positie instelbaar met PWM-signaal • Aansluitingen: • Grond (zwart) en 5V lijn (rood) • Controlelijn voor PWM-signaal (geel, wit, bruin,...)
13
14
15
De uitbreidingsconnector in meer detail
Dwengo-bord
AN0-3
WELEK-bord
AN4
16
Analoge sensoren • Aan te sluiten op een ADC-pin van de uitbreidingsconnector • Deze pinnen hebben de namen ANx (x = 0-4) • Gebruik de 5V-pin en grond-pin om je sensoren te voeden • Uitlezen in je programma met behulp van readADC(x) • Gevorderde gebruikers kunnen deze functie uitbreiden naar meer dan 5 analoge sensoren. Hou er rekening mee dat het LCD-scherm tijdelijk moet uitgeschakeld worden. 17
Digitale sensoren • Kompas: TX- en RX-pin aansluiten op respectivelijk pin RC6 en RC7 van de uitbreidingsconnector • Voelsprieten: gebruik een vrije pin naar keuze bvb RB0, RB1 en RB2 • Gebruik de 5V-pin en grond-pin om je sensoren te voeden • Het kompas kan je uitlezen in je programma met behulp van readCompass() • Voor je voelsprieten moet je een pin eerst configureren: vb TRISBbits.RB0 = 1 (RB0 is nu ingang) en dan kan je lezen met PORTBbits.RB0 18
De servo • De signaaldraad aansluiten op RB5 • Grond (zwart) en 5V-voeding (rood) op juiste manier aansluiten • Voor de nieuwe borden is reeds een speciale connector reeds voorzien • Het aansturen van een servo kan door in het raamwerk de variabele timerServo aan te passen. • De variabele timerServo bepaalt de duty cycle van het PWM-signaal en moet in het interval [62086,64536] liggen zodat de pulsbreedte tussen de 0,7 en 2,3 ms ligt 19
Motoren voor aandrijving • Voor het oude WELEK-bord: aan te sluiten op de motordriver (JP8): ene motor op pinnen 1 en 3, andere motor op pinnen 2 en 4 • Voor het nieuwere Dwengo-bord: aan te sluiten op de motor-connector: ene motor op M1 (motor1), andere motor op M2 • Correct zetten van jumpers: • Activeren driver: JP6 • Selecteren voeding: JP7 (WELEK) pin 2-3 of JP2 (dwengo) pin 1-2 kortsluiten • OPGELET: JP12 van het WELEK-bord of pin 1 en 2 van het Dwengo-bord (clamp) nooit kortsluiten!
20
De voedingsplug • • • •
Te verbinden met de battery-pack (8 x 1,2V of 8 x 1,5V) Het grootste vlak is de grond (zwarte draad) Het kleinste vlak is de 9-12 V ingang (rood) Zorg dat je geen kortsluiting maakt!
21
Het programmeren van je robot
Brain slug
Robot
Geprogrammeerde robot
22
Wat je nodig hebt en waar je het haalt • Programmeeromgeving: Microchip MPLAB IDE en C18 compiler, gratis voor studenten http://www.microchip.com/ Installeer eerst MPLAB IDE en dan pas C18!
• Framework: http://www.ieeesb.ugent.be/nl/robot/2010 • Programma’s naar je robot schrijven: HIDBootloader eveneens op http://www.ieeesb.ugent.be/nl/robot/2010 • Meer informatie op de welek website 23
Een nieuw project beginnen • Start MPLAB IDE • Open de Project Wizard in het menu Project • Klik op Next en selecteer het juiste Device: PIC18F4550 • Klik op Next en selecteer de C18 Toolsuite
24
Een nieuw project beginnen • Als het goed is zijn de links naar de C18-compiler goed weergegeven
25
Een nieuw project beginnen • Klik op Next en kies een naam en locatie voor je project • Klik op Next en voeg de bestanden van het framework toe (.c, .h en .lkr)
26
Een nieuw project beginnen • Klik op Finish, je kan nu de regelaar (Controller.c) aanpassen. Je scherm ziet er als volgt uit:
Build knop
27
Een nieuw project beginnen • Het kan zijn dat er bij het compileren er fouten optreden in de zin van: “could not locate c018i.o” • Dit kan je als volgt oplossen: • Ga naar menu Project > Build Options > Project • Kies daar voor Directories • Voeg daar de links naar de juiste mappen toe: • Include Search Path: C:\MCC18\h • Library Search Path: C:\MCC18\lib • Linker Search Path:
28
Een kort overzicht van het raamwerk • Om het jullie gemakkelijk te maken hebben we een raamwerk voorzien • Dit is vernieuwd tov de vorige jaren en voorzien van volgende functionaliteit: • Sensoren • LCD • Motoren • Wachtroutines • Seriële communicatie • Daarnaast werd een voorbeeld dat reeds de nodige functies omvat om de robot te starten, het kompas te calibreren en het noorden in te stellen
29
Een kort overzicht van het framework • Een voorbeeldje: #ifndef SENSORS_H #define SENSORS_H #include #include <delays.h> #include #define BYTE unsigned char
// Prototypes void initSensors(void); int readSensor(BYTE address); #endif
#include "Sensors.h” void initSensors() { LATA = 0xFF; OpenADC(ADC_FOSC_16 & ADC_RIGHT_JUST & ADC_6_TAD, ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, 0b1010); } int readSensor(BYTE address) { int data; if(address == 0) SetChanADC(ADC_CH0); else if(address == 1) SetChanADC(ADC_CH1); … data = ReadADC(); return data; }
30
Beschikbare functies: de sensors • dwengoADC • void initADC(void); // roep dit op als je de sensors wil gebruiken • int readADC(BYTE adres); // lees sensor • Beschikbare adressen: • 0-3: grondsensoren • 4: lange afstandssensor
• Breidt dit uit naar believen maar hou er rekening mee dat je dan het LCD-scherm (tijdelijk) moet uitschakelen in je code 31
Beschikbare functies: aansturen motoren • dwengoMotor • void initMotors(void); // roep dit op als je de motoren wil gebruiken • void stopMotors(void); // alle motoren moeten stoppen • void setSpeedMotor1(short speed); • void setSpeedMotor2(short speed); • De variabele speed kan variëren van -1023 (maximale snelheid in een richting) tot 1023 (maximale snelheid in een andere richting)
32
Andere beschikbare functionaliteit • LCD en wachtfunctie • Zie dwengoLCD.h en dwengoDelay.h om de functies te leren kennen
• dwengoBoard.h • In dwengoBoard.h staan een aantal zaken gedefinieerd die je programma leesbaarder kunnen maken • #define TRUE 1 #define FALSE 0 • True en false niet gekend in C, dankzij de pragma’s kan je die toch gebruiken • Andere voorbeelden zijn LEDS, SW_C, SW_N, SERVO0,... 33
Tot slot de regelaar zelf • Alle functies worden opgeroepen in de main • Code wordt sequentieel doorlopen void main(void) { short speed = 1023; // init something initSensors(); initMotors(); initLCD(); // do something setSpeedMotor1(speed,FORWARD); setSpeedMotor2(speed,FORWARD); }
34
Tot slot de regelaar zelf • Alle functies worden opgeroepen in de main • Code wordt sequentieel doorlopen void main(void) { short speed = 1023; // init something initSensors(); initMotors(); initLCD();
// do something setSpeedMotor1(speed,FORWARD); setSpeedMotor2(speed,FORWARD); }
void main(void) { short speed = 1023; // init something initSensors(); initMotors(); initLCD(); while(TRUE) { // do something setSpeedMotor1(speed,FORWARD); setSpeedMotor2(speed,FORWARD); } }
35
Extra voorzieningen voor de regelaar • Start-procedure • Instellen van het noorden • Calibreren van de sensoren • De robot starten
• Calibreren • Garandeert een goede werking • Doe dit in een metaalvrije omgeving (net zoals bij parcours) • Minimaal 2 keer rond as draaien in ongeveer 2 minuten tijd
• Noorden instellen • Opslaan globale rijrichting in de variabele compassNorth • Gebruiken om de actuele rijrichting (via readCompass()) van de robot aan te passen 36
Geavanceerdere zaken: interrupts
• Om een servo te gebruiken heb je interrupts nodig • Een interrupt is een verzoek van de hardware om het normale verloop van je programma te onderbreken • In de code is een Timer1 interrupt voorzien om een servo aan te sturen • De code die bij een interrupt opgeroepen wordt is opgenomen in de interrupt handler: YourHighPriorityISRCode() • In de interrupt handler wordt momenteel een PWM-signaal pin RB5 gezet (aansturen servo) • Pas de tijd servoTime aan om de stand van je servo te regel • Let wel: hou je interrupt handler KORT! 37
Compileren en op het bord plaatsen van je zelfgeschreven regelaar • Build je code in MPLAB • Wanneer dit succesvol is wordt er een hex-bestand gemaakt • Dit kan je opladen met de HIDBootloader tool • Start de HIDBootloader tool op (dubbelklikken) • Sluit je experimenteerbord aan met behulp van een USBkabel • Houd de C-knop lang ingedrukt en druk heel even de reset-knop in • Als het goed is gaan er nu twee LEDs pinken • In de HIDBootloader tool verschijnt nu Device attached 38
Experimenteerbord is goed aangesloten
Klik op Open Hex File 39
Laden hex-bestand
Navigeer naar je hex-bestand en klik op Open
40
Programmeren van hex-bestand
Klik op Program/Verify 41
Succesvolle programmatie
Wanneer de groene balk volledig vol is, is je experimenteerbord succesvol geprogrammeerd (het kan zijn dat HIDBootloader vervolgens vastloopt) 42
Agenda • 9 en 10 maart: soldeersessie 2A en 2B, afwerken en testen experimenteerbord, aankopen sensoren • 16 en 17 maart: soldeersessie 3A en 3B, aankopen, voorbereiden en aansluiten van de sensoren op het experimenteerbord • 30 en 31 maart: sessie 4A en 4B, aansluiten sensoren, programmeren, eerste testen robot • 20 en 21 april: sessie 5A en 5B, testen van de robot • 27 april: de mega-super-tijdrit 43
VRAGEN?
44
Vragen? • Website: http://www.ieeesb.ugent.be/nl/robot/2010 • Contact: [email protected] en [email protected] • Of klamp ons gerust aan
45