zaterdag 26 april 2008

Haptic en natural programmeren

Vandaag ben ik van start gegaan voor het vak: Haptic en natural programmeren
Wij kregen de opdracht om een muis om te bouwen zodat deze niet meer op de conventionele wordt gebruikt. Tijdens het uit elkaar halen van de muis (met balletje), ben ik er achter gekomen hoe deze muis nu eigenlijk werkt. Er zitten 2 soort van tandwieltjes bevestigd voor 2 IR lampjes, met aan de andere kant een IR ontvanger. Deze tandwieltjes zijn voorzien van gaatjes die het licht doorlaten of juist blokkeren. Op deze manier kan de muis beweging geregistreerd worden.

Foto's en een update volgen nog!

update 1: ivm de vakantie laat alles een beetje op zich wachten en het feit dat ik gta4 in mijn bezit heb, heeft daar ook niks mee te maken! ^^

update 2:
Jaja dan eindelijk een paar foto's (ja letterlijk een paar).

Zoals je op deze foto goed kunt zien, zit er een wieltje met gaatjes voor de sensor en IR bron, zodat de beweging van de muis geregistreerd kan worden.



Hier zie je hoe ik de muis uiteindelijk heb aangepast. Aan de wieltjes heb ik 2 strookjes geplakt en verzwaard met paperclips. Als je de muis nu omdraait dan zullen de strookjes altijd naar beneden willen gaan. Wanner je de muis dus kantelt, zullen de strookjes naar beneden blijven wijzen waardoor je een soort balance board creeert.



Het volgende progje heb ik vervolgens geschreven om het geheel te registreren.

// start code
stop();

width = 550;
height = 400;

// mouse function
onMouseMove = function() {
// variables x & y coordinates of the mouse
var verT = _ymouse;
var horT = _xmouse;

// output x & y coordinates for feedback
yCoord.text = verT;
xCoord.text = horT;

// new mouse cursor
Mouse.hide();
moveBlock._x = horT;
moveBlock._y = verT;

// update the function
updateAfterEvent();
}

// start hit detection
onEnterFrame = enterFrameHandler;

// onEnterFrame handler
function enterFrameHandler() {
hitDetection();
}

function hitDetection() {
// see if the block hits the blue box
if (centerBlock.hitTest(moveBlock)) {
feedBack.text = "balanced";
outOfBalance = false;
// if not, display message
} else {
feedBack.text = "out of balance" ;
centerBlock._x = moveBlock._x;
centerBlock._y = moveBlock._y;
outOfBalance = true;
}
}

// center the scale
myListener = new Object();
myListener.onKeyDown = function() {
// if ke is pressed, centre the block
if (Key.isDown(Key.CONTROL)) {
centerBlock._x = moveBlock._x;
centerBlock._y = moveBlock._y;
feedBack.text = "centered";
}
}
Key.addListener(myListener);

// listen to key pressing
addListener(myAddlistener);

download source

3 opmerkingen:

Stefan zei

Dat had ik inmiddels ook ontdekt jung. Wel vreemd. In principe zou dat betekenen dat bij een geringe beweging de muis dit niet kan opvangen. Wel grappig trouwens. Misschien kunnen we sowieso wat van de IR sensoren uit muizen slopen. Altijd handig. Is die ouwe meuk nog ergens goed voor.

jB zei

nja de muis telt 't aantal aan/uit signalen en beweegt aan de hand van die info (heb ik mijn pa mij weer laten vertellen...handig die natuurkundige mensen). Dus ook bij een geringe beweging vangt ie dat dus op.

Stefan zei

Doet ie goed die mod. Heb zelf ook wat zitten klooien maar t bleek dat de IR-sensoren niet zo gevoelig waren als ik dacht. Dus een mod waarbij ik een snelheidsmeting doe door een object achtereenvolgens langs 2 sensoren te laten vliegen word moeilijk. Nog maar ff iets anders verzinnen dus.