Tutorial: Controlando Arduino com o Android Mini PC

Adquira estes componentes na Loja do Lab de Garagem

Neste tutorial mostraremos como utilizar um aplicativo para fazer com que seu Android Mini PC envie comandos para o Arduino via serial.

Faremos como demonstração de aplicação, um acionamento de lâmpada com um Arduino UNO + Módulo Relé feito pela serial do Android Mini PC, a partir do aplicativo.

 

CUIDADO: Evite manusear o Módulo Rele enquanto o mesmo estiver conectado à rede elétrica e remova qualquer tipo de objeto condutivo ou inflamável de perto. Você pode causar um acidente.

 

- Lista de Materiais:

1x Android Mini PC   

1x Arduino Uno   

1x Módulo Relé   

1x Lâmpada 127V com bocal e tomada   

1x Protoboard   

Alguns Jumpers

 

- Aplicativo Android:

lablampada.apk

 

- Lista de Softwares:

Projeto do Aplicativo

Eclipse + Ferramentas Para Desenvolvimento Android

Java JDK

 

OBS:   

 - Após o Download do Java JDK, siga as Instruções desse Vídeo de como configurar o seu PC para rodar o java. Esse vídeo é um entre 116 Aulas sobre Java, fornecido pelo Ricardo Lopes Costa da Universidade XTI.

- SDK: Dentro da pasta descompactada do SDK, execute o SDK Manager para atualizar as ferramentas de desenvolvimento.

1. O Aplicativo

 

O aplicativo foi desenvolvido usando o Eclipse ADT, que é um Eclipse com o plugin Android Development Tools (Ferramentas de Desenvolvimento Android).

 

Abaixo, esta o código do aplicativo onde oferecemos uma breve explicação do funcionamento do App, que foi feito em linguagem java, lembrando que esse não é todo o projeto:

/*Aplicativo criado pelo LDG
para controlar seu Arduino via
Android Mini PC*/


package com.example.lablampada;

///+++Bibliotecas+++
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.Menu;
import android.widget.Toast;
import android.widget.ToggleButton;
import jp.ksksue.driver.serial.FTDriver;
///=================

public class MainActivity extends Activity
{

///+++PERMISSÃO PARA ACESSAR SERIAL+++
FTDriver mSerial;
private static final String ACTION_USB_PERMISSION = "jp.ksksue.tutorial.USB_PERMISSION";
///===================================

///+++CRIADO AUTOMATICAMENTE PELO ADT+++
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
///=====================================

///+++INICIANDO SERIAL+++
mSerial = new FTDriver((UsbManager) getSystemService(Context.USB_SERVICE));
PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
mSerial.setPermissionIntent(permissionIntent);
while (!mSerial.begin(FTDriver.BAUD9600)) //Fica em loop de conexão até o Arduino ser conectado
{
}
Toast.makeText(this, "Conectado", Toast.LENGTH_SHORT).show(); //Exibe mensagem "Conectado" quando reconhecer o Arduino
///=======================

///+++BOTÃO LIGADO/DESLIGADO+++
final ToggleButton bToggle = (ToggleButton) findViewById(R.id.toggleButton1); //Cria uma varíavel para controle do botão
bToggle.setOnClickListener(new View.OnClickListener() //Monitora o botão Ligado/Desligado
{
public void onClick(View v)
{
boolean botao; //Cria uma variável boleana
botao = bToggle.isChecked(); //Quando o botão for clicado guarda o estado dele na variável botao
if(botao == true) //Se o botão estiver no estado "Ligado"
{
Toast.makeText(MainActivity.this, "Lâmpada Acesa", Toast.LENGTH_SHORT).show(); //Exibe mensagem "Lâmpada Acesa"
String wbuf = "l"; //Armazena "l" (Liga) na variável wbuf de escrita
mSerial.write(wbuf.getBytes()); //Envia o valor de wbuf para a serial
}
else //Se o botão estiver no estado "Desligado"
{
Toast.makeText(MainActivity.this, "Lâmpada Apagada", Toast.LENGTH_SHORT).show(); //Exibe mensagem "Lâmpada Apagada"
String wbuf = "d"; //Armazena "d" (Desliga) na variável wbuf de escrita
mSerial.write(wbuf.getBytes()); //Envia o valor de wbuf para a serial
}
}
});
}
///============================

///+++CRIADO AUTOMATICAMENTE PELO ADT+++
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
///======================================

///+++ ENCERRA SERIAL QUANDO O APP EH FECHADO+++
@Override
public void onDestroy()
{
String wbuf = "d"; //Armazena "d" (Desliga) na variável wbuf de escrita
mSerial.write(wbuf.getBytes()); //Envia o valor de wbuf para a serial
mSerial.end(); //Encerra serial
super.onDestroy();
}
///=============================================

}

Se você possuir um breve conhecimento em Java, poderá modificar o programa como quiser, alterando-o no projeto fornecido no início desse tutorial.

2. O Sketch do Arduino

 

/* Sketch para programar o arduino e

ler a serial, onde os comandos são enviados

pelo aplicativo android lablampada.apk

*/

 

char leitura;      // Cria um variável char "leitura"

#define rele 8     // Define o valor 8 à variável rele

 

void setup()

{

  Serial.begin(9600);     //Inicializa comunicação Serial

  pinMode(rele, OUTPUT);   //Seta o pino pelo valor no "#define rele" como saída

  digitalWrite(rele, LOW);   //Mantém rele desligado assim que iniciar o programa

}

void loop()

{

  while (Serial.available() > 0) //Verifica se há conexão com a serial

  {

    leitura = Serial.read(); //Lê o dado vindo da Serial e armazena na variável leitura

    if (leitura == 'l')  //Se a variável leitura for igual a 'l'(Botão "Ligado" no App)

     {

      digitalWrite(rele, HIGH);

     }

    else if (leitura == 'd') //Senão verifica se é igual a 'd' (Botão "Desligado" no App)

   {

      digitalWrite(rele, LOW);

   }

  }

}

3. A Montagem

3.1) Corte um dos fios da tomada e uma das pontas conecte aos pinos C (comum) e a outra no pino NA (Normal Aberto) do módulo Relé, conforme a imagem abaixo.

3.2)  Conecte com jumpers o Pino Vcc(+) e GND(-) do Arduino aos barramentos da Protoboard.

3.3)  Conecte o Pino 8 do Arduino na Protoboard entre Vcc e GND conectados aos barramentos, conforme a figura abaixo.

3.4) Conecte o Módulo Relé à Protoboard e ligue os pinos Vcc e GND, conecte o pino IN do módulo relé ao pino 8 do arduino, conforme a figura abaixo:

 

3.5) Faça as conexões no seu Android Mini PC, conectando também o cabo USB do arduino no USB Host do Android Mini PC.

3.6) Confira as suas conexões

Agora você pode executar seu aplicativo para acender e apagar sua lâmpada ou acionar qualquer dispositivo pelo Android Mini PC, com esse tutorial você pode começar a desenvolver aplicativo para controlar seu Android Mini PC pela serial.

Referências:

- http://labdegaragem.com/profiles/blogs/tutorial-controlando-rele-vi...

- http://github.com/ksksue/FTDriver

http://devmobilebrasil.com.br/android/trabalhando-com-mais-de-uma-t...

- http://ptandroid.com/forum/threads/tutorial-de-desenvolvimento-de-a...

Exibições: 20452

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Laboratório de Garagem em 21 março 2013 às 12:04

Olá Marco!

Testamos sim em Arduinos MEGA2560 e Leonardo.

No MEGA2560 a aplicação rodou perfeitamente, porém no Leonardo não. Acreditamos que o motivo seja o fato do Leonardo não possuir um chip CDC dedicado, e sim o próprio ATMEGA32 que faz esse processamento de CDC.

Comentário de marco em 20 março 2013 às 17:23

Muito bom o tutorial!! E muito obrigado!

Realmente os Mini PCs associados ao uma placa como arduino abrem um mundo de possibilidades.

Olhando os códigos e o driver pude verificar que ele foi desenvolvido para o chip da FTDI, se bem que no código do driver existe uma definição para ACM. Interessante que tenha funcionado para o Arduino UNO que tem o protocolo USB implementado em software. Gostaria de saber se foi testado com outras placas como MEGA2560 e Leonardo.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço