Pplware

Amarino – Android com Arduino sem problemas!

Por Rui Pina  para o Pplware

Tutorial realizado no âmbito do Mestrado em Computação Móvel do Instituto Politécnico da Guarda na Unidade Curricular de Seminário

O Amarino toolkit possibilita a comunicação via Bluetooth entre um smartphone com o Sistema Operativo Android e um microcontroladorArduino, permitindo controlar dispositivos ligados a este.O Amarino software toolkit assenta basicamente em dois componentes:Numa aplicação Android que é executada no smartphone e em um “sketch” (programa no Arduino), escrito com as bibliotecas Amarino

Este tutorial mostra como ligar um smartphone Android a um microcontrolador Arduino via Bluetooth, e para exemplificar este funcionamento, foi criada uma aplicação para o smartphone que liga e desliga um LED, ligado ao Arduino.

Material necessário:

O Amarino Software Toolkit pode ser descarregado aqui

O SDK contém:

O modulo Bluetooth usado foi o seguinte:

Indoor Range: 40 m NLOS (Non line of sight)

(Range measured between the Bluetooth module for Arduino and the BT Linksys dongle)

Opções especiais

Para modulo Bluetooth, inicialmente foi configurado diretamente, ou seja sem o ATMEL ligado ao Arduino, e colocando os jumpers em posição USB no Shied XBee onde é colocado o modulo Bluetooth.

O que é preciso fazer?

1. Descobrir e emparelhar o modulo Bluetooth ao smartphone

Para isso usei com seguintes comandos AT (Manual)

Configuração do Putty para a ligação à Serial Port

Comandos AT para configurar o Bluetooth

TODOS OS COMANDOS SÃO SEGUIDOS DE CTRL+M() CTRL+J()

ENVIAR PEDIDO DE EMPARELHAMENTO DO DISPOSITIVO

Se conseguimos emparelhar o dispositivo (smartphone), com estes comandos AT, estes comandos vão ser usados no sketch do Arduino, já com o ATMEL e os jumpers colocados na posição XBee.

2. Criar um ou mais que um evento no Amarino a ser enviado para o Arduino

Poderíamos usar a aplicação Amarino, que já tem alguns eventos predefinidos, mas vamos criar um app, que controla um LED no Arduino.

É preciso importar a Amarino Library Build Path->Configure Build Path->Libraries->Add JARs…no Eclipse.

package rp.toggleled.com;
import rp.ruipina.com.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ToggleButton;
import at.abraxas.amarino.Amarino;
public class ToggleLEDActivity extends Activity implements  View.OnClickListener{

	/* TODO: change the address to the address of your Bluetooth module
	 * and ensure your device is added to Amarino
	 */
	private static final String DEVICE_ADDRESS = "00:03:19:0D:1D:B5";

	private ToggleButton tbOnOff;
	private int on,off;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
		Amarino.connect(this, DEVICE_ADDRESS);

		tbOnOff = (ToggleButton) findViewById(R.id.tbOnOff);
        tbOnOff.setOnClickListener(this);
    }

	@Override
	protected void onStart() {
		super.onStart();
	}
	@Override
	protected void onStop() {
		super.onStop();
		// stop Amarino's background service, we don't need it any more
		Amarino.disconnect(this, DEVICE_ADDRESS);
	}

	public void onClick(View arg0) {
		// TODO Auto-generated method stub	

		if(tbOnOff.isChecked()){
			Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'O', 1);
		}else {
			Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'F', 0);
		}
	}
}

IMPORTANTE: Criar uma pasta com o nome “libs” no projeto e colocar dentro o AmarinoLibrary_v0_55.jar para a aplicação não crashar!!!

IMPORTANTE2: No AndroidManifest.xml colocar a aplicação como debuggable (true)

3. Um sketch (programa Arduino)

Montagem no Arduino

Temos de colocar as bibliotecas do Amarino na pasta do nosso Arduino IDE C:\arduino-1.0.1\libraries.

4. Carregar o sketch para o Arduino


#include 
// declare MeetAndroid so that you can call functions with it
MeetAndroid meetAndroid;
int val = 0;
int led = 13;
void setup()
{
  initProgram();
  // register callback functions, which will be called when an associated event occurs.
  meetAndroid.registerFunction(SwitchOn, 'O');
  meetAndroid.registerFunction(SwitchOff, 'F');
}
void loop()
{
  meetAndroid.receive(); // you need to keep this in your loop() to receive events
}
/*
 * Whenever the LED app changes
 * this functions will be called
 */
void SwitchOn(byte flag, byte numOfValues)
{
  digitalWrite(led, meetAndroid.getInt());
  digitalWrite(led, HIGH);
}
void SwitchOff(byte flag, byte numOfValues)
{
  digitalWrite(led, meetAndroid.getInt());
  digitalWrite(led, LOW);
}
void initProgram()
{
  Serial.begin(115200);
  delay(2000);
  Serial.print("AT+JRES\n\r");                                    // Reset command
  delay(2000);
  Serial.print("AT+JSEC=1,1,1,04,1111\n\r");                      // Enable security command
  delay(2000);
  Serial.print("AT+JDIS=3\n\r");                                  // Discorable command
  delay(2000);
  Serial.print("AT+JRLS=1101,11,Serial Port,01,000000\n\r");     // Register local sevice command
  delay(2000);
  Serial.print("AT+JAAC=1\n\r");                                 // Auto accept connection requests command
  delay(2000);
  Serial.print("AT+JPCR=04,0000\r\n");                		// PIN code reply   
  delay(2000);
  //connect the phone
  pinMode(led, OUTPUT);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(2000);
  digitalWrite(led,HIGH);
  delay(2000);
  digitalWrite(led,LOW);
  delay(3000);
  
  Serial.print("AT+JSCR\r\n");
  delay(3000);
  pinMode(led, OUTPUT);
  digitalWrite(led,LOW);
}

Depois de compilado e executado o sketch o Arduino está pronto a receber comandos do smartphone.

5. Executar a aplicação do Android (Amarino)

Esperamos que tenham gostado deste tema e estamos abertos a sugestões. Num próximo artigo iremos apresentar como realizar a comunicação  Arduino –> Android.

Exit mobile version