Psycho Scooter rusning (5 / 17 steg)
Steg 5: Hacka rullstolen
För kommunikation använde vi en arduino att få information från två joysticks och överföra data via xbee radio. Vi spände fast en mottagande xbee/arduino på varje rullstol och används dessa data för att styra rullstolen.
Vi ville behålla så mycket av de ursprungliga kontrollerna som möjligt. Det gör trådbundna vi i handkontrollens joystick. Joysticks på dessa rullstolar är förståeligt avancerade och mer exakt än en normal gaming joystick. De fungerar på principen om en hall effekt och har fyra sensorer inbyggda i dem. Här är joystickens datablad som förklarar pinut, framgår av bilden ovan.
Vi skär 8 strandsatta flatkabeln ansluter joysticken till styrenheten på rullstolen. På det sändande slutet fast vi upp joysticken efter pinut diagrammet så Arduino emot två analoga ingångar (framåt / bakåt, vänster / höger).
Rullstolar startar inte om det inte vettigt att joysticken är ansluten och i en neutral position. För att göra detta, behövde vi för att efterlikna de joystick signalerna med en Arduino. Det visade sig detta var ganska knepigt att göra för Positionsbrytare. Vi hamnade kopplingsschema kontrollstyrelsen till en spänningsavdelare, som vi kontrolleras med hjälp av reläer. Reläerna var fast parallellt med motstånd i spänningsavdelaren så att de kortsluts motståndet när stängt. Använda två reläer fast i den här konfigurationen, kunde vi efterlikna 3 olika joystick positioner från centrum korsningen av spänningsdelare. Detta motsvarade till neutralläge och två extrema ståndpunkter på vardera sidan av neutral. Denna krets upprepades två gånger: en för fram, neutral, tillbaka, och en annan för vänster, neutral, rätt.
Detta fungerade eftersom vi endast ville rullstolen att röra sig i någon av fyra riktningar och inte brydde sig så mycket om de mellanliggande värdena. Rullstolen har någon inbyggd funktion för att förhindra plötsligt stannar och startar, så inte var detta ett problem.
Här är koden ta emot:
#define left 4
#define rätt 5
#define vidarebefordra 6
#define tillbaka 7
byte incomingByte;
void setup() {
DDRD = 0XFF;
PORTD = 0;
Serial.BEGIN(9600);
}
void loop() {
IF(Serial.available() > 0) {//do {
om (Serial.available()) {
incomingByte = Serial.read();
Switch(incomingByte) {
fall 1:
digitalWrite(forward,LOW);
digitalWrite(back,HIGH);
digitalWrite(left,LOW);
digitalWrite(right,HIGH);
bryta;
fall 2:
digitalWrite(forward,LOW);
digitalWrite(back,LOW);
digitalWrite(left,LOW);
digitalWrite(right,HIGH);
bryta;
fall 3:
digitalWrite(forward,HIGH);
digitalWrite(back,LOW);
digitalWrite(left,LOW);
digitalWrite(right,HIGH);
bryta;
fall 4:
digitalWrite(forward,LOW);
digitalWrite(back,HIGH);
digitalWrite(left,LOW);
digitalWrite(right,LOW);
bryta;
fall 5:
digitalWrite(forward,LOW);
digitalWrite(back,LOW);
digitalWrite(left,LOW);
digitalWrite(right,LOW);
bryta;
fall 6:
digitalWrite(forward,HIGH);
digitalWrite(back,LOW);
digitalWrite(left,LOW);
digitalWrite(right,LOW);
bryta;
fall 7:
digitalWrite(forward,LOW);
digitalWrite(back,HIGH);
digitalWrite(left,HIGH);
digitalWrite(right,LOW);
bryta;
mål 8:
digitalWrite(forward,LOW);
digitalWrite(back,LOW);
digitalWrite(left,HIGH);
digitalWrite(right,LOW);
bryta;
mål 9:
digitalWrite(forward,HIGH);
digitalWrite(back,LOW);
digitalWrite(left,HIGH);
digitalWrite(right,LOW);
bryta;
} //end switch
} //end om seriell tillgängliga
} //end gör
medan (Serial.available() > 0))
}