quarta-feira, 18 de abril de 2012

Comunicação PC vs Arduino

Para iniciar um projecto muito simples, sendo que podem ser encontradas na Internet diversas soluções idênticas, no entanto tentei tornar esta mais completa e fácil de entender que todas as outras que já analisei.


  Ilustração 1: Diagrama de Ligações 


Este projecto, pretende demonstrar como funciona a comunicação entre o PC e o Arduino via USB, dando a conhecer cada uma das etapas da comunicação de forma completa e clara.

Pretende ainda demonstrar, como se pode criar aplicações Windows, para controlar a comunicação entre o PC e o Hardware externo.



Aplicação Controla Arduino


 Ilustração 2: Aplicação Controla Arduino

 
Controla Arduino, é um pequeno aplicativo Windows, criado com o intuito de dar a conhecer a comunicação entre o PC e o Arduino e vice-versa, permitindo realizar funções básicas, como obter uma resposta por parte do Arduino e permitindo piscar um LED.

Esta foi desenvolvida no Software da Microsoft, Visual Studio 2010 e foi codificada em Visual Basic (VB), esta permite a configuração dos principais parâmetros de comunicação entre o PC e o Arduino, bem como o envio e a receção de caracteres permitindo assim, testar de uma forma muito simples a comunicação entre o PC e o Arduino.

Etapas de desenvolvimentos:

Desenvolver a aplicação em Visual Basic:

Começamos por instalar a aplicação Microsoft Visual Studio caso ainda não o tenhamos instalado no nosso PC para que possamos criar a aplicação Controla Arduino.

  
Ilustração 3: Logo Visual Studio 2010

A aplicação Controla Arduino, é muito simples e foi desenvolvida em VB que permite, estabelecer uma ligação entre o nosso PC e Arduino através da conexão USB.

Esta permite, a configuração dos parâmetros da comunicação muito facilmente, parâmetros estes que vão desde, porta de comunicação (porta COM) ao BitStop. Para tornar esta configuração mais dinâmica foi ainda dotada de um ficheiro que permite guardar as configurações do nosso sistema.

Este ficheiro é denominado de “config.xml”, caso não exista é gerado automaticamente a quando do estabelecimento da ligação entre o PC e o Arduino, e são guardados neste, todos os parâmetros de comunicação ente o PC e o Arduino facilitando assim, a utilização da aplicação, uma vez que da próxima vez que utilizarmos a aplicação esta já vai reconhecer os parâmetros de ligação automaticamente.

Código VB mais relevante:

Estas são as funções que permitem estabelecer e fazer a comunicação entre o PC e o Arduino.

SerialPort2.PortName = COM                               -> código que permite definir a porta COM para a comunicação;
SerialPort2.BaudRate = 9600                                -> código que permite definir a velocidade de comunicação;
SerialPort2.Open()                                               -> código que permite realizar a abertura da porta COM para a comunicação;
SerialPort2.Write(txtEnviar.Text)                           -> código que permite escreve para a porta COM seleccionada;
System.Threading.Thread.Sleep(250)                     -> código que faz o sistema esperar 250 milissegundos até a leitura;
txtResposta.Text = SerialPort2.ReadExisting()         -> código que permite ler da porta COM seleccionada;
SerialPort2.Close()                                              -> código que permite realizar o fecho da porta COM para a comunicação;

Note que, estas funções são utilizadas em separado, sendo que este código serve apenas para apresentar as funções, descrevendo a sua função no código da aplicação Controla Arduino. 

 
Desenvolver do código em C/C++ para o Arduino:

 Ilustração 4: The Arduino Software

 
Este é um código muito simples, que pode ser dividido em duas funções distintas:
  1.  void setup()
  •  É nesta função que se define as configurações do nosso Arduino, neste caso a apenas foi definida a velocidade de comunicação; 

    void setup()                                          // ............... Função Setup .................
    {      
      Serial.begin(9600);          // Definição da Velocidade de comunicação
     }


     2.  void loop()
  •   É nesta função que é desenvolvido o código que irá desempenhar o papel que pretendemos.
  •   Aqui são definidas as funcionalidades que pretendemos ver realizadas pelo Arduino.
o   É enviada para a aplicação Controla Arduino a resposta;
o   O Led 13 do Arduino pisca de acordo com a resposta;

void loop()  // ................. Função Loop .................                      
{
caracter=0; // Inicia  a variável "carácter" a Zero
        if (Serial.available()> 0)  // Verifica se foi recebido algum carácter (código ASCII recebido > 0)
        {
        caracter=Serial.read(); // Se sim -> Ler e guarda o valor enviado pela aplicação
                                        // Controla  Arduino na variável "carácter"
}

        //------ Testa o valor recebido ------
        if (caracter== 97)  // Se for recebido o 97 código ASCII "a"
        {
        Serial.print("b"); // Resposta = "b"
          //------ O LED pisca 1 vez ------
                digitalWrite(13, HIGH);   // LED on
                delay(1000);  // Espera um segundo
                digitalWrite(13, LOW);   // LED off
                delay(1000);  // Espera um segundo
        }
        else if(caracter==98)  // Se for recebido o 98 código ASCII "b"
        ...
}

                       

Aqui podemos ver a parte inicial do código depois repete-se para o caracter “b” e “c”.

 
Testes da aplicação:

Este estudo foi realizado recorrendo à aplicação Controla Arduino e a um Arduino Duemilanove, sendo que a mesmo poderia ter sido realizado com qualquer outro modelo de Arduino.

Após o estabelecimento da ligação entre o PC e o Arduino, esta disponibiliza três testes semelhantes, testes estes que passam pelo envio de caracteres através da aplicação Controla Arduino para o Arduino, e a receção da resposta enviada pelo Arduino para a aplicação, que não é mais que a devolução de outro carácter e o piscar do Led do pino 13 do Arduino.

Testes:
  •  Envio da caracter“a” resposta caracter  “b” Led pisca 1 vez.
  •  Envio da caracter “b” resposta caracter  “c” Led pisca 2 vezes.
  • Envio da caracter  “c” resposta caracter   “abcde” Led pisca 3 vezes.
 
Nota: Apenas são aceites os caracteres “a”, “b” e “c” sendo que qualquer outro caracter introduzido vai gerar uma mensagem de erro.


Vídeo dos testes da Aplicação
 


Links úteis:
 
Ficheiros para Download:

Obrigado

JsCoelho



1 comentário: