Pages

Sunday, November 22, 2009

Arduino, Vex receiver and signal splitter















The Setup : The Arduino powers the vex decoder via 5v which in turn powers the vex receiver, no other external power required.

5 volts is sent from the arduino to the signal splitter via the positive output of one the the channel connection. The signal splitter ground connection is connected to the arduino ground.
The 5 volts also flows through the "receiver - splitter" connection.

Vex Properties via the signal splitter
Channel 1,2,3 & 4
range : from 753 to 2241
Center stick position varies between 1480 and 1510


Channel 5 & 6 (digital Channels)
range : off = 753 on = 2241

arduino Code



/*
nikitanicholas@gmail.com
Use freely

Vex transmitter & Vex receiver kit : http://www.vexrobotics.com/vex-robotics-transmitter-receiver-add-on-kit.shtml
Vex signal splitter : http://www.vexrobotics.com/vex-robotics-signal-splitter.shtml

Vex Properties via the signal splitter
Channel 1,2,3 & 4
range : from 753 to 2241
Center stick position varies between 1480 and 1510

Channel 5 & 6 (digital Channels)
range : off = 753 on = 2241
not activated: 1500

The Setup
The Arduino powers the vex decoder via 5v which in turn powers the vex receiver, no other external power required.


*/
#define channelNumber 6 // 6 Channels on the vex

int value[channelNumber];
int val;
int adrinoPin;
void setup()
{
Serial.println("init");
Serial.begin(57600); //Serial Begin
pinMode(2, INPUT); //Pin 2 as input
pinMode(3, INPUT); //Pin 3 as input
pinMode(4, INPUT); //Pin 4 as input
pinMode(5, INPUT); //Pin 5 as input
pinMode(6, INPUT); //Pin 6 as input
pinMode(7, INPUT); //Pin 7 as input


}
void loop()
{
adrinoPin = 2; // start with pin 2
Serial.println("looping......");

for(int x=0; x<=channelNumber-1; x++)//Loop to print the channel readings
{
if (pulseIn(adrinoPin, HIGH) == 0 )
{
Serial.print("No signal on Channel" );
Serial.print(" ");
Serial.print(adrinoPin -1); //Print channel
Serial.println("");
}
else
{
Serial.print("Channel" );
Serial.print(" ");
Serial.print(adrinoPin -1); //Print out the channel number
Serial.print(" = ");
//val = .pulseIn(adrinoPin, HIGH);
val = normalizedPPM(pulseIn(adrinoPin, HIGH));
Serial.print(val); //Print out the value
Serial.print(" ");
}
value[x]=0; //Clear the array after printing
adrinoPin++; // increment pin count

/* Future Project
* Output PWM voltage based on Vex signal pulsein
* The pins marked PWM (pins 3, 5, 6, 9, 10, and 11) can be pulsed using the analogOut()
* Pulsewidth is a value from 0 - 255. 0 corresponds to 0 volts, and 255 corresponds to ~5 volts.
* Every change of one(1) point changes the pseudo-analog output voltage by 5/255, or 0.0196 volts.

When no signal is received from the Vex transmitter or when the transmitter stick prositions are centered
the following should occur : arduino output 50% duty cycle corresponding to approx. 2.5v ( PWM to output pin is 127)

When Pulsein is between 1550 and 2200
the following should occur : arduino output 75% duty cycle corresponding to approx. 3.5v (PWM to output pin is 178)

When Pulsein is between 750 and 1450
the following should occur : arduino output 25% duty cycle corresponding to approx. 1.5v (PWM to output pin is 76)

Available pins 9, 10 , 11
*/


}

Serial.println("");

delay(500);

}

/*
Smoothing out the center channel ( software trimming)
*/
int normalizedPPM(int ppm)
{
if ( ppm > 1480 && ppm < 1510)
return 1500;
else
return ppm;

}



Saturday, November 21, 2009

Robot building


In my earlier blogs I hinted on a robot built with a posting of
Arduino, Vex receiver and signal splitter.



Electric wheelchair inspection and breakdown



I picked up a broken electric wheelchair Jet3 Ultra from the local flea market for $50. It was complete with a broken chair support but not running. I began to strip it down to the bare essentials i.e. remove the seat and support, leg rest arms, fenders and bumpers. I replace the fuse and tinkered around with the controller and finally got it to power up. Here you have it! a complete, powered, really sturdy robot base that can really cut down on development time.












High Level design parameters



1. Keep original wheel chair controller: The controller have a number of built in safe guards such as locking the wheel when not active, power on test, speed control especially when turning at high speeds.

2. Incorporate a wireless control : Arduino, Vex receiver and signal splitter.

3. Computer control: Automation with various sensors such as digital compass, accelerometers, vision, maps, internet, LCD display and whatever I can throw at it.




The original motor controller










The key to success in interfacing with wheelchair motor controller is to tap into the joystick input.

First, we will need a switch to flip between joystick and an alternate source of input: computer and or remote control.










free counters