Internet Controlled Robot
Overview¶
In This Project We have designed a robot which can be controlled over the internet.We have designed the GUI which initiates the control signals required to control the robot on a webpage.
We have used an RN-131C Wifly GSX Module as the wifi chip, which accesses the webpage that has the control signals for the robot.
Components¶
- Mbed NXP LPC1768
- RN-131C Wifly GSX module on a breakout board sparkfun
- Magician Chassis Robot
- Dual H-Bridge md08a (pololu TB6612FNG) pololu
- Four AA Batteries connected in series (6V)
- BreadBoard
- Jumper Wires
Connections¶
RN-131C | |
---|---|
wifly pin | Mbed pin |
3.3V RIN | GND |
GND | GND |
VDD BATT | VOUT |
VDD IN | VOUT |
RX | TX |
TX | RX |
GPIO 6 | P26 |
RESET | P25 |
MBED | Dual H-Bridge Breakout | Robot DC Motors | Battery |
---|---|---|---|
Vin | Vmot | + | |
GND | GND | - | |
Vout | Vcc | ||
P21 | PWM B | ||
P8 | BIN 2 | ||
P7 | BIN 1 | ||
P6 | AIN 1 | ||
P5 | AIN 2 | ||
P22 | PWM A | ||
Vout | /STBY | ||
AO1 | LEFT Motor RED | ||
AO2 | LEFT Motor BLACK | ||
BO2 | RIGHT Motor BLACK | ||
BO1 | RIGHT Motor RED |
#include "mbed.h" #include "WiflyInterface.h" #include "motordriver.h" #include "HTTPClient.h" Serial pc(USBTX, USBRX); HTTPClient http; /* wifly object where: * - p9 and p10 are for the serial communication * - p25 is for the reset pin * - p26 is for the connection status * - "mbed" is the ssid of the network * - "password" is the password * - WPA is the security */ WiflyInterface wifly(p9, p10, p25, p26, "enter_the_ssid", "enter_the_password", WPA); DigitalOut f(LED1);//to indicate forward movement of robot DigitalOut b(LED2); DigitalOut l(LED3); DigitalOut r(LED4); Motor A(p22, p6, p5, 1); // pwm, fwd, rev, can brake Motor B(p21, p7, p8, 1); // pwm, fwd, rev, can brake int main() { wifly.init(); // use DHCP while (!wifly.connect()); char buffer[2]; buffer[1]='\0'; char a; while(1) { http.get("http://develop.jissjohn.com/netbot/command.txt", buffer,2); printf("\n%s\n\r", buffer);// for debugging purposes on the usb serialport a=buffer[0]; if(a=='1')// Forward direction {f=1; A.speed(0.4); B.speed(0.4); wait(0.02); } else if(a=='5')//Reverse Direction {b=1; f=0; l=0; r=0; A.speed(-0.4); B.speed(-0.4); wait(0.02); } else if(a=='7')//Turn Left Direction { l=1; f=0; r=0; b=0; A.speed(-0.5); B.speed(0.5); wait(0.02); } else if(a=='3')//Turn Right Direction {r=1; f=0; l=0; b=0; A.speed(0.5); B.speed(-0.5); wait(0.02); } else { A.stop(1); B.stop(1); wait(1); A.coast(); B.coast(); } } wifly.disconnect(); }
Import library
Public Member Functions |
|
WiflyInterface (PinName tx, PinName rx, PinName reset, PinName tcp_status, const char *ssid, const char *phrase, Security sec=NONE) | |
Constructor.
|
|
int | init () |
Initialize the interface with DHCP.
|
|
int | init (const char *ip, const char *mask, const char *gateway) |
Initialize the interface with a static IP address.
|
|
int | connect () |
Connect Bring the interface up, start DHCP if needed.
|
|
int | disconnect () |
Disconnect Bring the interface down.
|
|
char * | getIPAddress () |
Get IP address.
|
http://mbed.org/cookbook/WiflyInterface
Import library
Public Member Functions |
|
Motor (PinName pwm, PinName fwd, PinName rev, int brakeable) | |
Create a motor control interface.
|
|
float | speed (float speed) |
Set the speed of the motor.
|
|
void | coast (void) |
Set the the motor to coast.
|
|
float | stop (float duty) |
Set the motor to dynamicaly brake.
|
|
float | state (void) |
return the current state of the motor
|
http://mbed.org/cookbook/Motor
Import libraryHTTPClient
A HTTP Client for the mbed networking libraries
Troubleshooting!
For some reason, giving username and password as given below didnt work for me,
WiflyInterface wifly(p9, p10, p25, p26, "enter_the_ssid", "enter_the_password", WPA)
so , i had to use the 'configure' program in the wifi interface cookbook page to set the ssid, password, and authentication type, there are a lot of useful commands for the wifi chip, the full list can be found in the reference manual (link given at the top)
Information
In our program, we were accessing a website hosted on a small server, also the wifi on which we tested our project wasnt that good, all these accounted for a big delay(as you can see in the video) between sending the control signals and recieving the control signals at the mbed