Tutorial: Acionamento de Lâmpada via Internet com Android Mini PC e Arduino

 

Olá Garagistas! Dando sequência aos tutoriais com o Android Mini PC, hoje faremos um projeto de automação via web com o Android Mini PC e o Arduino. Iremos controlar o acionamento de uma lâmpada utilizando um aplicativo Android que irá ler um arquivo .txt que foi gerado por um servidor PHP, onde o mesmo recebe ações de botões de uma página e altera o arquivo .txt, com isso a lâmpada é acionada, via comando serial enviado pelo Android Mini PC ao Arduino.

FLUXOGRAMA DA COMUNICAÇÃO

- Página PHP:

- Aplicativo ANDROID:

- Arduino UNO:

- 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

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.

 

- Aplicativos Android:

phpandroid.apk

PAW Server

 

- Páginas HTML:

ldg.zip

 

- Lista de Softwares:

Projeto do aplicativo Android

Eclipse + Ferramentas Para Desenvolvimento Android

Java JDK

 

OBS:  -Para a instalação e configuração do Servidor PHP (PAW Server) acesse este Tutorial.

          -Para a montagem do circuito, siga os passos de montagem deste Tutorial.

 

1. O PAW Server

Após a configuração do PAW Server e a instalação do Plugin como foi feito neste Tutorial. Copie e cole a pasta ldg para seu Android Mini PC e coloque-a dentro do diretório paw/html/:

Exemplo: paw/html/ldg/"arquivos da página"

2. 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 você pode ver uma breve explicação de seu funcionamento. Ele foi feito em linguagem java, lembrando que esse não é todo o projeto (o projeto pode ser baixado no inicio do tutorial):

package com.example.phpandroid;


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


///+++Bibliotecas+++
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import android.hardware.usb.UsbManager;

import android.os.Bundle;
import android.os.Environment;
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.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
import jp.ksksue.driver.serial.FTDriver;
///=========================


public class MainActivity extends Activity
{
//+++DECLARAÇÃO DE VARIÁVEIS UTILIZADAS NO PROGRAMA+++
public TextView txtDir;
public TextView txtLer;
public TextView txtArq;
public String lerlinha;
public String wbuf;
public String nomeArq = "ldg.txt"; //Informa o arquivo que será lido
public Boolean serial;
//====================================================


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


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


///+++CHAMA FUNÇÃO PARA CICLO DE LEITURA DO ARQUIVO+++
cicloleitura();
//====================================================


///+++DIRETÓRIO, ARQUIVO QUE ESTÁ SENDO LIDO E O QUE LEU NO ARQUIVO+++
txtDir = (TextView) findViewById(R.id.dir);
txtLer = (TextView) findViewById(R.id.edtLer);
txtArq = (TextView) findViewById(R.id.textView1);
///====================================================================


///++++RECEBE AS STRING PARA ESCREVER NA TELA++++
txtArq.append(nomeArq);
txtDir.append(GetRoot());
///==============================================


///+++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);
///=======================

///+++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"
{
serial = mSerial.begin(FTDriver.BAUD9600); //Tenta iniciar e guarda resultado na variável serial
if(serial != false) //Se o arduino não tiver conectado, retornará falso
{

Toast.makeText(MainActivity.this, "Arduino Não Conectado", Toast.LENGTH_SHORT).show(); //Exibe mensagem "Arduino Não Conectado"
bToggle.setChecked(false);
}
else //Caso o arduino esteja conectado, retornará verdadeiro
{
Toast.makeText(MainActivity.this, "Serial Ativada", Toast.LENGTH_SHORT).show(); //Exibe mensagem "Serial Inicializada"
}
}

else // Se o botão estiver no estado "Desligado"
{
mSerial.end(); //Encerra serial
Toast.makeText(MainActivity.this, "Serial Desativada", Toast.LENGTH_SHORT).show(); //Exibe mensagem "Serial Finalizada"
}
}
});
}

///=================================================

///+++CICLO PARA LEITURA DO ARQUIVO+++
public void cicloleitura()
{
runOnUiThread(new Runnable()
{
public void run()
{
LerArquivo(); //Quando a Thread é Executada chama a função
Thread timer = new Thread()
{
public void run()
{
try
{
sleep(500);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
cicloleitura();
}
}
};
timer.start();
}
});
}
///================================


///+++FUNÇÃO PARA LEITURA ARQUIVO+++
public void LerArquivo()
{
File arq;
try
{
txtLer.setText("");
arq = new File(Environment.getExternalStorageDirectory(), nomeArq);
BufferedReader br = new BufferedReader(new FileReader(arq));
lerlinha = br.readLine(); //Lê a primeira linha do arquivo
wbuf = lerlinha; //Armazena o que foi lido ("l" ou "d")
txtLer.append(lerlinha); //Mostra na tela do aplicativo o que foi lido no arquivo
mSerial.write(wbuf.getBytes()); //Envia o valor de wbuf para a serial
}
catch (Exception e)
{
}
}
///==================================


///+++EXIBE DIRETÓRIO DO ARQUIVO DA APLICAÇÃO+++
public String GetRoot()
{
File root = android.os.Environment.getExternalStorageDirectory();
return root.toString();
}
///=============================================


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

///+++INICIA SERIAL QUANDO O APP EH EXECUTADO+++
public void onStart(){
super.onStart();
serial = mSerial.begin(FTDriver.BAUD9600);
}
///============================================


///+++PERMITE QUE O APLICATIVO CONTINUE EXECUTANDO MESMO QUANDO MINIMIZADO++++
public void onPause()
{
super.onPause();
LerArquivo();
}
///============================================================


///+++ ENCERRA SERIAL QUANDO O APP EH FECHADO+++
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();
}
///=============================================


}

3. 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);

}

}

}

4. A Montagem

A montagem é a mesma que foi utilizada neste Tutorial.

5. A Execução do Aplicativo

5.1) Execute e Inicie o Servidor com o PAW Server, conforme a figura abaixo.

 

5.2)Execute o aplicativo no seu Android Mini PC e clique no botão "Ativar Serial" para iniciar a comunicação serial do seu Android Mini PC com o Arduino, conforme a figura abaixo:

5.3) Abra seu browser e acesse a página php que foi colocada na sua pasta dentro do servidor php:

Seu.ip.gerado.pelo.paw:server/nome_do_arquivo.php

No nosso exemplo: 192.168.0.107:8080/ldg/lampada.php

5.4) A página conforme a figura abaixo será aberta, e ao acessar a página lampada.php, ela irá criar um arquivo .txt na memória interna do seu Android Mini PC, no nosso exemplo o arquivo é o ldg.txt que será atualizado a cada ação dos botões no nosso WebSever:

5.5) Ao clicar no botão "Ligar", a página l.php(figura abaixo) irá abrir e escrever no arquivo ldg.txt a letra "l"

5.6) Como o nosso aplicativo Android ficará lendo esse arquivo constantemente, ele enviará "l" pela serial.

5.7) O Arduino irá receber a letra "l",  e com isso ligará a lâmpada 

5.8) Quando o botão "Desligar" for clicado, a página d.php(figura abaixo) irá abrir e escrever no arquivo ldg.txt a letra "d"

5.6) Como o nosso aplicativo Android ficará lendo esse arquivo constantemente, ele enviará "d" pela serial.

5.7) O Arduino irá receber a letra "d",  e com isso desligará a lâmpada

Para Alterar o arquivo a ser lido:

1) Será necessário o nome do arquivo na linha "public String nomeArq = "ldg.txt";" que está contida dentro do projeto do nosso aplicativo.

2) Será necessário trocar os arquivos .php nos arquivo do seu servidor PHP alterando o nome do arquivo "ldg.txt" para outro de sua preferência.

Então é isso pessoal, esperamos que tenham gostado desse tutorial, até a próxima!

Referências:

http://pt.wikibooks.org/wiki/Aplicativos_em_PHP/Trabalhando_em_PHP_...

http://escoladeandroid.blogspot.com.br/2012/02/android-trabalhando-...

http://imasters.com.br/artigo/20205/java/how-to-implementando-threa...

http://www.devmedia.com.br/blocos-try-catch/7339

http://desenhosmaiquel.blogspot.com.br/2009/11/desenhos-antigos.html

Exibições: 34816

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 10 maio 2013 às 11:59

Tiago Struck: Testamos algumas classes, não encontramos nenhuma diretamente desenvolvida para  Android.

Felipe Brito: Faça a atualização do seu Android Mini PC seguindo o tutorial: "Tutorial: Novo Firmware Com Mais Recursos Para o Android Mini PC"

Comentário de Tiago Struck em 1 maio 2013 às 12:37

Olá tudo bem?

Uma dúvida, tem algumas classes PHP que fazem a comunicação direta com a porta serial. Não daria para usar numa aplicação como essa? Não sei como funciona a serial do Android... Por isso a dúvida.

Abraços

Comentário de Felipe Brito em 20 abril 2013 às 19:55

Meu arduino não conecta, pode ter alguma relação com a versão que estou?
Atualmente é 4.0.4

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço