Salvius Robot Project: Robot Web Based Remote Control

Salvius Robot Project

The Open Source Humanoid Robot

proof:pdf xmp.did:F87F11740720681180838E4FEC0BBEE0 xmp.iid:F87F11740720681180838E4FEC0BBEE0 uuid:a82416aa-8f86-e849-8a8d-10757c227e64 xmp.iid:F77F11740720681180838E4FEC0BBEE0 xmp.did:F77F11740720681180838E4FEC0BBEE0 uuid:a82416aa-8f86-e849-8a8d-10757c227e64 proof:pdf saved xmp.iid:F77F11740720681180838E4FEC0BBEE0 2011-07-15T18:59:45-07:00 Adobe Illustrator CS5 / saved xmp.iid:F87F11740720681180838E4FEC0BBEE0 2011-07-15T19:12:41-07:00 Adobe Illustrator CS5 / 2011-07-15T19:12:41-07:00 Adobe Illustrator CS5 2011-07-15T19:12:41-07:00 2011-07-15T19:12:41-07:00 256 256 JPEG /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FVOa4ghFZXCex6/diqDk1qHpDG0h8fsjFUM+p37/Z4Rj2FT+NcVUWmvHNWuH37KeP6sKqZi B+0zN8zirvQj8MVd6EfhirhFT7LMvyOKqqzXiGq3D/7I8v14qqpqd+n2gkg+4/hTAqJj1mA7TI0R 8ftD8P6YqjYriGYVicOPY7/diq/FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqh7m/t rfZ2q/ZF3OKpdNqN5Nsv7lPbdvvxVDCNa8m+Jj1LbnCq7FXYq7FXYq7FXYq7FXYq7FXYqt9Na8lq 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 Adobe PDF library 9.90 image/svg+xml 1 False False 130.000000 130.000000 Pixels Cyan Magenta Yellow Default Swatch Group 0

image/svg+xml

image/svg+xml

Robot Web Based Remote Control


I have been working a lot lately on making it so that I can control Salvius using a wireless internet connection. I still have not finished hooking up the motors and the motor controller but I have managed to get the wireless control code working enough to turn the robot's headlights on and off. More on the relay shield that I used can be found here: http://www.seeedstudio.com/wiki/index.php?title=Relay_Shield


And as always because Salvius is an open source robot here is the code as seen working in the video:


/*  Programmer: Gunther Cox
    http://salviusrobot.blogspot.com
    Created: 12/25/11
    Last Modified: 02/25/12
    Hardware setup instructions:
 
    Plug Ethernet shield into Arduino Uno.
    Plug Seeed Relay Shield into Ethernet Shield.
    Attach 9 volt power supply to GND and +9V plugs of Relay Shield.
    PIR + to arduino 5V, PIR - to arduino GND, PIR OUT to HUB2 D3.
    Connect ethernt shield to wireless router with ethernet cable.
     
    Parts of this code is based on work done by others:
    * Button controls based on code by Minde
    * Navigation buttons based on work by Su Ray Sh
*/

#include <SPI.h>
#include <Client.h>
#include <Ethernet.h>
#include <Server.h>
#include <Udp.h>

// change these to fit your setup:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x00, 0x0F }; // physical mac address
byte ip[] = { 192, 168, 1, 177 };             // ip in lan
byte gateway[] = { 192, 168, 0, 1 };     // internet access via router
byte subnet[] = { 255, 255, 255, 0 };                //subnet mask

  // Initialize the Ethernet server library
  // with the IP address and port you want to use
  // (port 80 is default for HTTP):
  EthernetServer server(80);

byte sampledata=50;            //some sample data - outputs 2 (ascii = 50 DEC)

int pirPin = 3;    // input pin (for PIR sensor)
int relayPin1 = 4; // relay connected to digital pin 4 (D3 on relay shield - on switch)
int relayPin2 = 7; // relay connected to digital pin 5 (D2 on relay shield) - Inferred LEDs
int relayPin3 = 6; // relay connected to digital pin 6 (D1 on relay shield) - Ultraviolte LEDs
int relayPin4 = 5; // relay connected to digital pin 7 (D0 on relay shield) (not used)
//pin 10 - reserved for ethernet shield
//pin 11 - reserved for ethernet shield
//pin 12 - reserved for ethernet shield
//pin 13 - reserved for ethernet shield

// Begin variables for motion sensor
//int pirState = LOW; // we start, assuming no motion detected
//int val;            // variable for reading the pin status
//int pirMode = 0;    // determines if the relay closed already (0 = not closed yet)
// End variabled for motion sensor

String readString = String(30); //string for fetching data from address
boolean FORWARD = false; //relay status flag
boolean BACKWARD = false; //relay status flag
boolean LEFT = false; //relay status flag
boolean RIGHT = false; //relay status flag
boolean LEDON = false; //LED status flag
boolean LED2ON = false; //LED status flag
void setup(){
//start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  pinMode(relayPin3, OUTPUT);  //Set pin 7 to output
  pinMode(relayPin4, OUTPUT);

//  pinMode(pirPin, INPUT);        // declare sensor as input
  pinMode(relayPin1, OUTPUT);    // declare relay1 as output
  pinMode(relayPin2, OUTPUT);    // declare relay2 as output
  pinMode(relayPin3, OUTPUT);    // declare relay3 as output
  pinMode(relayPin4, OUTPUT);    // declare relay4 as output

  //digitalWrite(relayPin1, LOW);
  //digitalWrite(pirPin, LOW);
  //pirState = digitalRead(pirPin); // read the initial state
  //delay(60000);                   // pause before calibrating
}

void loop(){
// Create a client connection
EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
   if (client.available()) {
    char c = client.read();
     //read char by char HTTP request
    if (readString.length() < 100) {
        readString += c; //store characters to string
      }
     
        if (c == '\n') {  //if HTTP request has ended
       
          if (readString.indexOf("?") <0) //dirty skip of "GET /favicon.ico HTTP/1.1"
          {
            //skip everything
          }
          else
       
          // begin drive control
          if(readString.indexOf("N1=Forward") >0)
           {
             //item has to be turned ON
             digitalWrite(relayPin1, HIGH);    // set the item on
             FORWARD = true;
           }else{
             //item has to be turned OFF
             digitalWrite(relayPin1, LOW);    // set the item off
             FORWARD = false;          
           }
         
           if(readString.indexOf("N2=Backward") >0)
           {
             //item has to be turned ON
             digitalWrite(relayPin2, HIGH);    // set the item on
             BACKWARD = true;
           }else{
             //item has to be turned OFF
             digitalWrite(relayPin2, LOW);    // set the item off
             BACKWARD = false;          
           }
         
           if(readString.indexOf("N3=LEFT") >0)
           {
             //item has to be turned ON
             digitalWrite(relayPin3, HIGH);    // set the item on
             LEFT = true;
           }else{
             //item has to be turned OFF
             digitalWrite(relayPin3, LOW);    // set the item off
             LEFT = false;          
           }
         
           if(readString.indexOf("N4=RIGHT") >0)
           {
             //item has to be turned ON
             digitalWrite(relayPin4, HIGH);    // set the item on
             RIGHT = true;
           }else{
             //item has to be turned OFF
             digitalWrite(relayPin4, LOW);    // set the item off
             RIGHT = false;          
           }
          // end drive control
       
          //lets check if LED should be lighted
        if(readString.indexOf("L=ON") >0)//replaces if(readString.contains("L=1"))
           {
             //led has to be turned ON
             digitalWrite(relayPin3, HIGH);    // set the LED on
             LEDON = true;
           }
           else if(readString.indexOf("L2=ON") >0)//replaces if(readString.contains("L2=1"))
           {
             //led has to be turned ON
             digitalWrite(relayPin4, HIGH);    // set the LED on
             LED2ON = true;
           }
           //led has to be turned OFF
           else{
             //led has to be turned OFF
             digitalWrite(relayPin4, LOW);    // set the LED OFF
             LED2ON = false;
             digitalWrite(relayPin3, LOW);    // set the LED OFF
             LEDON = false;
           }
         
          // now output HTML data starting with standart header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<body style=background-color:#FFB880><h1>Web Remote</h1><hr />"); // background color and heading
       
   client.println("<h2>Navigation</h2>");
   client.println("<form method=get name=NAV><table CELLPADDING='10' style=background-color:#CC6600>");
   client.println("<tr><td align=center></td><td align=center><input type=submit name=N1 value=FORWARD></td> <td align=center></td></tr>");
   client.println("<tr><td align=center><input type=submit name=N3 value=LEFT></td><td align=center><input type=submit value=STOP></td><td align=center><input type=submit name=N4 value=RIGHT></td></tr>");
   client.println("<tr><td align=center></td><td align=center><input type=submit name=N2 value=BACKWARD></td> <td align=center></td></tr>");
                  //controlling leds via buttons (address will look like http://192.168.1.177/?L=ON when submited)
          if (LEDON)
          client.println("<tr><td align=center><form method=get name=LED><input type=submit value=OFF></form></td>");
          else
          client.println("<tr><td align=center><form method=get name=LED><input type=submit name=L value=ON></form></td>");

          if (LED2ON)  // begin second LED
          client.println("<td align=center><form method=get name=LED2><input type=submit value=OFF></form></td></tr>");
          else
          client.println("<td align=center><form method=get name=LED2><input type=submit name=L2 value=ON></form></td></tr>");
   client.println("</table></form>");
     
          // Begin print drive status
          if (FORWARD)
              client.println("<font size='4'>DRIVING FORWARD</font>");
           
          else if (BACKWARD)
              client.println("<font size='4'>DRIVING BACKWARD</font>");

          else if (LEFT)
              client.println("<font size='4'>TURNING LEFT</font>");

          else if (RIGHT)
              client.println("<font size='4'>TURNING RIGHT</font>");
           
          else
          client.println("<font size='4'>PROBABLY NOT DRIVING</font>");
          // End print drive status
           
          //printing LED status
          client.print("<font size='4'>LED status: ");
          if (LEDON)
              client.println("<font color='purple' size='4'>ULTRAVIOLET ON</font>");
           
          else if (LED2ON)
              client.println("<font color='red' size='4'>INFERRED ON</font>");
           
          else
          client.println("<font color='grey' size='4'>OFF</font>");
          // end second LED
       
          client.println("<hr />");
          client.println("<hr />");
          client.println("</body></html>");
          //clearing string for next read
          readString="";
          //stopping client
          client.stop();
            }
          }
        }
      }
 }

//void loop() {
//  // code to do auto activation
//  val = digitalRead(pirPin);  // read input value and store it in val
//  if(digitalRead(pirPin) == HIGH) {
//    if (pirMode == 0) {
//      if (val != pirState) {            //look for 2 inconsistant readings
//          // turn main computer on
//        digitalWrite(relayPin1, HIGH);  // sets relay1 on
//        delay(1000);                    // waits for 1 second
//        digitalWrite(relayPin1, LOW);   // sets relay1 off
//        pirMode = pirMode + 1;   // relay has been on    
//        //delay(50);
//      }    
//    }
//  }
//}