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.
Description
Mbed Section
In This Project we are accessing a webpage which has the control signals to control the robot. The Web page is a text file which keeps updating depending upon which button we press in the GUI. The GUI is implemented in another webpage. Once we get the read the command from the text file, it is used to control the appropriate DC motor so that the robot moves in the desired Direction. The Internet access is made possible by using an RN 131C Wifly module. We have Configured the wifly chip using the virtual USB serial port in the mbed. We have used teraterm as the serial terminal on the pc.
GUI Controller Section
The robot controller interface is implemented using HTML, CSS and JS. The GUI is designed to work cross-platform(iOS, Android, PC) and cross-browser(Safari, Chrome, Firefox). For desktops, the keyboard can be used. W,A,S,D/Arrow keys can be used for direction control while spacebar for braking. The JS updates the server side script with the control signals every 3 seconds. The server side script receives the control data and writes it into the txt file.
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 |
Import programInternetControlledRobot
Control a robot via a web browser, by routing the control signals via a web server.
#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.
To reduce the delay, we can implement the internet communication using websockets. The browser(controller interface) can run in the 'wo' mode while the mbed can run on the 'ro' mode.
Please log in to post comments.