segunda-feira, 5 de maio de 2014

Shield Ethernet + Matlab : Controle de LED

    Bom, esse projeto e a junção de dois projetos daqui do blog. Um deles é o projeto Tutorial Shield Ethernet Arduino -  Parte 3: controle de led's com pagina HTML, onde estudamos como fazer um controle de led pela pagina de internet. Iremos usar novamente o mesmo sketch, mas dessa vez  iremos fazer o controle através do MatLab e a sua interface gráfica (GUIDE), que também é outro projeto que já estudamos aqui no blog.

Para esse projeto iremos precisar:

Material:


    - Arduino
    - Shield Ethernet
    - 1 Led's
    - Fios Jumpers, cabo USB e cabo com conexão RJ-45

Software : MATLAB





Código:


    O código abaixo é que iremos fazer o upload no arduino. Esse código já e conhecido nosso. É o controle de dois leds através de uma pagina em HTML.


  /***************************************************************    
    Tutorial Ethernet Shield    
  Objetivo: Controle de led pela LAN    
  Autor: Felipe Souza Amaral    
  ***************************************************************/    
  #include <SPI.h>    
  #include <Ethernet.h>    
  byte mac[] = {   
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC address    
  IPAddress ip(192,168,0,13); // IP da lan    
  IPAddress myserver(0,0,0,0); // IP do server    
  EthernetServer server(80); //porta de conexão    
  EthernetClient client;    
  String readString;    
  void setup(){    
  pinMode(5, OUTPUT); //pin do LED1    
  pinMode(7, OUTPUT); //pin do LED2    
  Ethernet.begin(mac, ip);    
  server.begin();    
  Serial.begin(9600);    
  Serial.println("server/client 1.0 test");    
  Serial.println("Enviando um g na serial monitor para Client - Test");    
  }    
  void loop(){    
  // checar comunicação Serial    
  if (Serial.available() > 0)    
  {    
   byte inChar;    
   inChar = Serial.read();    
   if(inChar == 'g')    
   {    
   }    
  }    
  EthernetClient client = server.available();    
  if (client) {    
   while (client.connected()) {    
   if (client.available()) {    
    char c = client.read();    
    if (readString.length() < 100) {    
    readString += c;    
    Serial.print(c);    
    }    
    if (c == '\n') {    
    Serial.println(readString); //Mostra no Serial Monitor o debuging    
    // HTML data header    
    if(readString.indexOf('?') >=0) {    
     client.println("HTTP/1.1 Controle de LED's");    
     client.println();    
     client.println();    
    }    
    else {    
     client.println("HTTP/1.1 200 OK"); //send new page    
     client.println("Content-Type: text/html");    
     client.println();    
     /******************************Página em HTML******************************/   
     client.println("<HTML>");    
     client.println("<HEAD>");    
     client.println("<TITLE>Arduino - Teste LED's</TITLE>");    
     client.println("</HEAD>");    
     client.println("<BODY>");    
     client.println("<H1>LED's - ON/OFF</H1>");    
     //Led 1    
     client.println("<h4>Led 1</h4>");    
     client.println("<a href=\"/?led1on\" target=\"inlineframe\">ON</a>");    
     client.println("<a href=\"/?led1off\" target=\"inlineframe\">OFF</a>");    
     //Led 2    
     client.println("<h4>Led 2</h4>");    
     client.println("<a href=\"/?led2on\" target=\"inlineframe\">ON</a>");    
     client.println("<a href=\"/?led2off\" target=\"inlineframe\">OFF</a>");    
     //bloqueio de acesso as páginas{?led2on;?led2off} por exemplo    
     client.println("<IFRAME name=inlineframe style=\"display:none\" >");    
     client.println("</IFRAME>");    
     client.println("</BODY>");    
     client.println("</HTML>");    
    }    
    delay(1);    
    client.stop();    
    /*LED 1*/   
    if(readString.indexOf("led1on") >0) //checa se o led foi aceso    
    {    
     digitalWrite(5, 1); // set pin 5 high    
     Serial.println("Led Off");    
    }    
    if(readString.indexOf("led1off") >0) //checa se o led foi aceso    
    {    
     digitalWrite(5, 0); // set pin 5 low    
     Serial.println("Led On");    
    }    
    /*LED 2*/   
    if(readString.indexOf("led2on") >0)    
    {    
     digitalWrite(7, 1); // set pin 7 high    
     Serial.println("Led Off");    
    }    
    if(readString.indexOf("led2off") >0)    
    {    
     digitalWrite(7, 0); // set pin 7 low    
     Serial.println("Led On");    
    }    
    readString="";    
    readString="";    
    }    
   }    
   }    
  }    
  }    


MATLAB

   Com o MatLab aberto devemos fazer a interface gráfica agora, digite guide na command window.


Em seguida  selecione Blank GUI e faça 4 pushbottons, seleciones as cores respectivas para ligar e desligar e nomeie os botões. 


    Agora chame a função Callback e coloque o seguinte comando 


O comando urlread no MatLab significa:

urlread Retorna o conteúdo de uma URL como uma string. 
     S = urlread ("URL") lê o conteúdo de uma URL em uma string, S. Se o 
     servidor retorna dados binários, a seqüência irá conter lixo. 

     S = urlread ('URL', 'método', params) passa as informações para o servidor como 
     parte do pedido. O "método" pode ser 'get', ou 'post' e PARAMS é um 
     conjunto de células de pares param / ​​valor. 

     S = urlread (..., 'Timeout', T) define um tempo limite, em segundos, quando a função 
     será erro, em vez de continuar a esperar que o servidor para responder ou enviar 
     dados. 

     [S, estado] = urlread (...) pega todos os erros e retorna 1 se o arquivo 
     baixado com sucesso e 0 caso contrário. 

     Exemplos: 
     s = urlread ('http://www.mathworks.com') 
     s = urlread ('ftp://ftp.mathworks.com/README') 
     s = urlread (['file :/ / /' fullfile (prefdir, 'history.m')]) 
  
     Por trás de um firewall, use as Preferências para definir o seu servidor proxy.

Repare também que dentro do comando urlread esta entre ' ' o nº do ip e comando que faz o led ligar ou desligar.

Espero que esse projeto tenha sido interessante, estou a disposição para tentar responder quaisquer dúvida.


Vídeo:














Nenhum comentário:

Postar um comentário