Stap 7: Testen en Tweak
Test Rig
De eenvoudigste manier om dit te testen is te monteren van de servo's samen zoals in stap 5, en bevestig de camera board met een beetje dubbelzijdige tape. Het kan helpen te monteren eerst de camera van bestuur op een beetje van kunststof (Tic Tac doos) zodat u een goede ondergrond naar tape aan de servo tilt.
Testen
Het gemakkelijkste beacon is een externe IR, maar aangezien die gemoduleerd worden, prestaties is niet zo goed. De camera van de Pixart lijkt beter te reageren op 940-950 nm IR LEDs, die u gewoon rond een munt-batterij knijpen kunt. Ik deed dit wqith zeer goede resultaten met behulp van een 940 nm leidde met een 90 graden zichtbaarheid kegel. Ter verbetering van omnidirectionele zichtbaarheid geclusterd ik ook 3 van hen parallel zoals in de afbeelding hierboven.
Vrij veel een IR-bron binnenshuis zal werken, en u kunt tweak camera gevoeligheid om de beste resultaten met uw setup. Pas op voor gloeilamp verlichting, kaarsen, sigaretten en zonnige windows - zij het torentje kunnen afleiden, totdat u de configuratie hebt afgestemd. U kunt ook overwegen met behulp van de IR-pass filter van de WiiMote, of van een andere IR-sensor (uit een gebroken TV misschien). Beste weddenschap zit voor het hebben van een optische low-pass-filter aan uw baken LEDs, maar dit is verondersteld om een goedkope project :)
Probeer het aandrijven van uw test rig. Het moet eerst zelf centreren, dan wachttijd voor een IR-bron. Stap terug ongeveer 10 voet of zo en gebruiken van het baken. De servo's moeten gaan - ze zijn niet correct hebt verplaatst, de pan probeer en kantelen stekkers op het moederbord.
Tweaken
Pixart Camera-Config
Deze link zal bespaart u een heleboel tijd - ik denk dat alles wat die je moet weten over de configuratie en enkele aanbevolen instellingen zijn er. http://wiibrew.org/wiki/Wiimote
Ik zal kort betrekking hebben mijn ervaring hier.
- Ik gebruikte de fundamentele uitvoer instellen waardoor u 10 bytes van informatie voor maximaal 4 blobs positionering. Er zijn twee andere niveaus die u extra informatie zoals de grootte en de intensiteit krijgt (12 en 18 byte payloads, respectievelijk - u zou moeten verhogen de I2C Lees buffer accordinly), maar ik heb dat hier geen gebruik.
- Tune blob grootte threshholds uitfilteren van ongewenste interferentie van windows, open haarden en gloeiende lichten.
- De maximale blob grootte klein te houden, is een goed begin.
- Hogere winst betekent het zal meer sensistive op een verregaande inmenging van reflections, andere IR bronnen, etc., maar biedt betere nauwkeurigheid in de plaatsing.
Ik heb vrij goede resultaten binnenshuis (en op een bewolkte dag) met de volgende configuratie en de IR-pass-filter die wordt geleverd in de WiiMote.
static const uint8_t wiiCamInitData[14][2] = {{0x30, 0x01},<br>
/* Sensitivity config Block A */ {0x00, 0x00}, {0x01, 0x00}, {0x02, 0x00}, {0x03, 0x00}, {0x04, 0x00}, {0x05, 0x00}, {0x06, 0x90}, // p0: MAXSIZE: Maximum blob size. Wii uses values from 0x62 to 0xc8 {0x07, 0x00}, {0x08, 0x41}, // p1: GAIN: Sensor Gain. Smaller values = higher gain
/* Sensitivity config Block B */ {0x1A, 0x40}, // p2: GAINLIMIT: Sensor Gain Limit. Must be less than GAIN for camera to function. {0x1B, 0x00}, // p3: MINSIZE: Minimum blob size. Wii uses values from 3 to 5
/* Mode config */ {0x33, 0x01}, // mode: 1=basic, 3=extended, 5=full <br>{0x30, 0x08}};
Servo beurt tarief
De camera geeft als resultaat de coördinaten op een 1028 x 768 x / y-vlak. Het heeft een FOV van ongeveer 33 graden over en 23 graden hoog. Het biedt coördinaten op een 1024 x 768-grid, dus één graad ongeveer 30 pixels is. Vanwege de truc van de callback we in tmr2.c gebruikten wij hebben 9 bits precisie voor 4ms (of ongeveer 320 stappen van 0.5ms naar 2.5ms over de 180 graden van servo reizen) met het servo-signaal. De CCPR verhoogd voor een PWM zal de positie beïnvloeden door ongeveer 0,6 graden ondergaan.
Om te voorkomen bewegingsonscherpte die we wilt opgeven van een venster dat wordt beschouwd als het centrum is dus bijhouden gladder en niet hyper-gevoelige. In dit geval hebben we een venster 20 x 20 pixels, dat wordt beschouwd als centrum. U kunt spelen met de grootte van de doos "center" om de resultaten aan uw behoeften.
Als de coördinaten die zijn geretourneerd door de camera buiten dit venster, wij pan of kantelen in die richting. Ik verdeel het verschil pixel door (20 * 3) om het uit en het knik effect voorkomen als u teveel corrigeert. De Camera is terug te keren coördinaten ongeveer 60 keer per seconde hier, dus we glad uit de pan/tilt moeten te houden uit jering helemaal over de plaats.
875 en 375 zijn de PWM-waarden die overeenkomen met 0,5 en 2,5 ms perioden op het servo-signaal (extreem links tot extreem rechts op een servo).
void updatePan(void) { if ((b1x == 0x00) || (b1x == 0xFF)) return; if (b1x > 522) DcPan += (b1x-522)/(20*3); if (b1x < 502) DcPan -= (502-b1x)/(20*3); if (DcPan > 875) DcPan = 875; if (DcPan < 375) DcPan = 375; PWM2DCH = DcPan >> 2; PWM2DCL = DcPan << 6; }
void updateTilt(void) { if ((b1y == 0x00) || (b1y == 0xFF)) return; if (b1y > 394) DcTilt -= (b1y-394)/(20*3); if (b1y < 374) DcTilt += (374-b1y)/(20*3); if (DcTilt > 875) DcTilt = 875; if (DcTilt < 375) DcTilt = 375; PWM3DCH = DcTilt >> 2; PWM3DCL = DcTilt << 6; }
IR-Filter
Met behulp van de IR-filter van de WiiMote is een goed idee als het niet ook up krabde is. Anders kunt u ze in alle soorten afgedankte elektronica.
IR LED
940-950 nm wordt aanbevolen. 880 werkt ook, maar niet zo goed van een afstand.
Veelvoorkomende problemen
Servo heen-en-weer (overdreven corrigeren)
Probeer DcTilt of DcPan te delen door een groter getal en gladstrijken pannen.
Wordt "geplakt"
De servo's kunnen het tekenen van teveel macht - probeer een grotere condensator op de spanningsregelaar.
Reageert niet
Misschien wel in voortdurende reset - de servo's misschien teveel stroom uit, zodat de camera of de IC resetten trekken. Check alle verbindingen en zie als de servo's centreren als u het inschakelt.
Constante resetten
Lage batterij meestal (indien niet een van de hierboven).