Stap 5: Hack de rolstoel
Voor de mededeling, hebben we een arduino gebruikt voor de informatie ontvangen twee joysticks en doorgeven van deze gegevens via xbee radio. We een ontvangende xbee/arduino op elke rolstoel vastgebonden en gebruikt deze gegevens om te bepalen van de rolstoel.
We wilden houden zo veel van de oorspronkelijke controles mogelijk. Om dit te doen die we bedraad in de controller joystick. De joysticks op deze rolstoelen zijn begrijpelijk meer geavanceerde en nauwkeuriger dan een normale gaming joystick. Ze werken off van een hall-effect principe en hebben vier sensoren ingebed in hen. Hier is de joystick van gegevensblad waarin wordt uitgelegd van de pinout, gezien in de bovenstaande afbeelding.
We snijden de 8 gestrande lintkabel de joystick aansluiting op de controller op de rolstoel. Aan de verzendende kant bekabeld we de joystick na het pinout diagram zodat Arduino twee analoge ingangen ontvangen (vooruit / achteruit, links / rechts).
De rolstoel wordt niet gestart als het heeft geen zin dat de joystick is aangesloten en in een neutrale positie. Om dit te doen, die we nodig hadden om na te bootsen de signalen van de joystick met een Arduino. Het bleek dit was nogal lastig om te doen voor de positieschakelaars. We eindigden de control board bedrading naar een verdeler van spanning, die wij gecontroleerd met behulp van Relais. De Relais waren bedraad parallel aan de weerstanden in het voltage divider, zodat zij uit de weerstand kortgesloten wanneer gesloten. Met behulp van twee Relais bedraad in deze configuratie, kunnen we 3 verschillende joystick posities uit de kruising van het centrum van de spanning divider nabootsen. Deze kwamen overeen met de neutrale stand en twee extreme standpunten aan beide zijden van de neutrale. Dit circuit werd tweemaal herhaald: één voor vooruit, neutraal, terug, en een andere voor links, neutraal, rechts.
Dit werkte omdat wij alleen de rolstoel te bewegen in een van de vier richtingen gezocht en niet de zorg te veel over de tussenliggende waarden. De rolstoel heeft sommige ingebouwde functies om te voorkomen dat plotseling stopt en begint, dus dit geen probleem was.
Hier is de code ontvangen:
#define left 4 #define right 5 #define forward 6 #define back 7 byte incomingByte; void setup(){ DDRD=0xFF; PORTD=0; Serial.begin(9600); } void loop(){ if(Serial.available() > 0){//do{ if (Serial.available()){ incomingByte = Serial.read(); switch(incomingByte){ case 1: digitalWrite(forward,LOW); digitalWrite(back,HIGH); digitalWrite(left,LOW); digitalWrite(right,HIGH); break; case 2: digitalWrite(forward,LOW); digitalWrite(back,LOW); digitalWrite(left,LOW); digitalWrite(right,HIGH); break; case 3: digitalWrite(forward,HIGH); digitalWrite(back,LOW); digitalWrite(left,LOW); digitalWrite(right,HIGH); break; case 4: digitalWrite(forward,LOW); digitalWrite(back,HIGH); digitalWrite(left,LOW); digitalWrite(right,LOW); break; case 5: digitalWrite(forward,LOW); digitalWrite(back,LOW); digitalWrite(left,LOW); digitalWrite(right,LOW); break; case 6: digitalWrite(forward,HIGH); digitalWrite(back,LOW); digitalWrite(left,LOW); digitalWrite(right,LOW); break; case 7: digitalWrite(forward,LOW); digitalWrite(back,HIGH); digitalWrite(left,HIGH); digitalWrite(right,LOW); break; case 8: digitalWrite(forward,LOW); digitalWrite(back,LOW); digitalWrite(left,HIGH); digitalWrite(right,LOW); break; case 9: digitalWrite(forward,HIGH); digitalWrite(back,LOW); digitalWrite(left,HIGH); digitalWrite(right,LOW); break; }//end switch }//end if serial available }//end do //while (Serial.available() > 0)) }