Académique Documents
Professionnel Documents
Culture Documents
POLITECNICO
NACIONAL
ESCUELA
SUPERIOR
DE
CMPUTO
Hardware Requerido:
Mdulo
Bluetooth
El
Bluetooth
es
un
estndar
de
comunicacin
inalmbrica
que
permite
la
transmisin
de
datos
a
travs
de
radiofrecuencia
en
la
banda
de
2,4
GHz.
Existen
muchos
mdulos
Bluetooth
para
usarlos
en
nuestros
proyectos
de
electrnica,
pero
los
ms
utilizados
son
los
mdulos
de
JY-MCU,
ya
que
son
muy
econmicos
y
fciles
de
encontrar
en
el
mercado.
Son
mdulos
pequeos
y
con
un
consumo
muy
bajo
que
nos
permitirn
agregar
funcionalidades
Bluetooth
a
nuestro
Arduino.
Estos
mdulos
contienen
el
chip
con
una
placa
de
desarrollo
con
los
pins
necesarios
para
la
comunicacin
serie.
Existen
dos
modelos
de
mdulos
Bluetooth:
el
HC-05
que
puede
ser
maestro/esclavo
(master/slave),
y
el
HC-06
que
solo
puede
actuar
como
esclavo
(slave).
La
diferencia
entre
maestro
y
esclavo
es
que
en
modo
esclavo
es
el
dispositivo
quien
se
conecta
al
mdulo,
mientras
que
en
modo
maestro
es
el
mdulo
quien
se
conecta
con
un
dispositivo.
Fsicamente,
los
dos
mdulos
son
muy
parecidos,
solo
varan
algunas
conexiones.
Los
pins
que
encontraremos
son
los
siguientes:
-Vcc:
Alimentacin
del
mdulo
entre
3,6V
y
6V.
-GND:
La
masa
del
mdulo.
-TXD:
Transmisin
de
datos.
-RXD:
Recepcin
de
datos
a
un
voltaje
de
3,3V.
-KEY:
Poner
a
nivel
alto
para
entrar
en
modo
configuracin
del
mdulo
(solo
el
modelo
HC-05)
-STATE:
Para
conectar
un
led
de
salida
para
visualizar
cuando
se
comuniquen
datos.
Comandos
AT
Los
comandos
AT
son
un
tipo
de
comandos
que
sirven
para
configurar
el
mdulo
Bluetooth
a
travs
de
un
microcontrolador,
un
ordenador
o
con
cualquier
dispositivo
que
posea
una
comunicacin
serie
(Tx/Rx).
Son
unas
instrucciones
que
nos
permiten
cambiar
los
baudios
del
mdulo,
el
PIN,
el
nombre,
etc.
Para
usar
los
comandos
AT
el
mdulo
Bluetooth
no
debe
estar
vinculado
a
ningn
dispositivo
(led
rojo
del
mdulo
parpadeando).
Segn
las
especificaciones
del
mdulo,
el
tiempo
que
se
tiene
que
respetar
entre
el
envo
de
un
comando
AT
y
otro
tiene
que
ser
de
1
segundo.
Si
se
enva
un
comando
AT
y
en
menos
de
un
segundo
se
enva
otro,
el
mdulo
no
devuelve
respuesta.
Ahora
vamos
a
configurar
el
mdulo
Bluetooth
a
travs
de
comandos
AT
enviados
desde
el
Monitor
Serial
del
Arduino.
El
cdigo
del
Arduino
necesario
tanto
por
el
mdulo
HC-05
como
el
HC-06
es
el
siguiente:
CODIGO
ARDUINO
MODULO
BLUETOOTH
#include
<SoftwareSerial.h>
//Librera
que
permite
establecer
comunicacin
serie
en
otros
pins
//Aqu
conectamos
los
pins
RXD,TDX
del
mdulo
Bluetooth.
SoftwareSerial
BT(10,11);
//10
RX,
11
TX.
void
setup()
{
BT.begin(9600);
//Velocidad
del
puerto
del
mdulo
Bluetooth
Serial.begin(9600);
//Abrimos
la
comunicacin
serie
con
el
PC
y
establecemos
velocidad
}
void
loop()
{
if(BT.available())
{
Serial.write(BT.read());
}
if(Serial.available())
{
BT.write(Serial.read());
}
}
CODIGO
ANDROID
import
android.content.BroadcastReceiver;
import
android.content.Context;
import
android.content.Intent;
import
android.content.IntentFilter;
import
android.os.Bundle;
import
android.view.View;
import
android.view.Window;
import
android.view.View.OnClickListener;
import
android.widget.AdapterView;
import
android.widget.ArrayAdapter;
import
android.widget.Button;
import
android.widget.ListView;
import
android.widget.TextView;
import
android.widget.AdapterView.OnItemClickListener;
public
class
DeviceListActivity
extends
Activity{
public
static
String
EXTRA_DEVICE_ADDRESS
=
"device_address";
private
BluetoothAdapter
mBtAdapter;
private
ArrayAdapter<String>
mPairedDevicesArrayAdapter;
private
ArrayAdapter<String>
mNewDevicesArrayAdapter;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.device_list);
setResult(Activity.RESULT_CANCELED);
Button
scanButton
=
(Button)
findViewById(R.id.button_scan);
scanButton.setOnClickListener(new
OnClickListener()
{
public
void
onClick(View
v)
{
doDiscovery();
v.setVisibility(View.GONE);
}
});
mPairedDevicesArrayAdapter
=
new
ArrayAdapter<String>(this,
R.layout.device_name);
mNewDevicesArrayAdapter
=
new
ArrayAdapter<String>(this,
R.layout.device_name);
ListView
pairedListView
=
(ListView)
findViewById(R.id.paired_devices);
pairedListView.setAdapter(mPairedDevicesArrayAdapter);
pairedListView.setOnItemClickListener(mDeviceClickListener);
ListView
newDevicesListView
=
(ListView)
findViewById(R.id.new_devices);
newDevicesListView.setAdapter(mNewDevicesArrayAdapter);
newDevicesListView.setOnItemClickListener(mDeviceClickListener);
IntentFilter
filter
=
new
IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver,
filter);
filter
=
new
IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(mReceiver,
filter);
mBtAdapter
=
BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice>
pairedDevices
=
mBtAdapter.getBondedDevices();
if
(pairedDevices.size()
>
0)
{
findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);
for
(BluetoothDevice
device
:
pairedDevices)
{
mPairedDevicesArrayAdapter.add(device.getName()
+
"\n"
+
device.getAddress());
}
}
else
{
String
noDevices
=
getResources().getText(R.string.none_paired).toString();
mPairedDevicesArrayAdapter.add(noDevices);
}
}
@Override
protected
void
onDestroy()
{
super.onDestroy();
if
(mBtAdapter
!=
null)
{
mBtAdapter.cancelDiscovery();
}
this.unregisterReceiver(mReceiver);
}
private
void
doDiscovery()
{
setProgressBarIndeterminateVisibility(true);
setTitle(R.string.scanning);
findViewById(R.id.title_new_devices).setVisibility(View.VISIBLE);
if
(mBtAdapter.isDiscovering())
{
mBtAdapter.cancelDiscovery();
}
mBtAdapter.startDiscovery();
}
private
OnItemClickListener
mDeviceClickListener
=
new
OnItemClickListener()
{
public
void
onItemClick(AdapterView<?>
av,
View
v,
int
arg2,
long
arg3)
{
//
Cancel
discovery
because
it's
costly
and
we're
about
to
connect
mBtAdapter.cancelDiscovery();
String
info
=
((TextView)
v).getText().toString();
try
{
String
address
=
info.substring(info.length()
-
17);
Intent
intent
=
new
Intent();
intent.putExtra(EXTRA_DEVICE_ADDRESS,
address);
setResult(Activity.RESULT_OK,
intent);
finish();
}catch
(IndexOutOfBoundsException
e)
{
setResult(Activity.RESULT_CANCELED);
finish();
}
}
};
private
final
BroadcastReceiver
mReceiver
=
new
BroadcastReceiver()
{
@Override
Conclusiones.
La
implementacin
este
proyecto
se
realizo
con
ayuda
del
software
que
proporciona
arduino,
este
proyecto
fue
muy
interesante
ya
que
se
podra
anexar
mas
funcionalidades
para
el
desarrollo
de
aplicacin
android,
en
el
creciente
mercado
donde
se
requiere
que
se
combine
hardware
y
software
para
la
implementacin
de
ciertas
necesidades.
Arduino
es
flexibe
ya
que
se
pueden
integrar
sensores
los
cuales
pueden
ser
manejados
desde
un
dispositivo
mvil
y
tener
el
control
del
hardware.
Ademas
arduino
es
libre
es
una
ventaja
grande
ya
que
no
es
muy
costoso
y
se
puede
ampliar
conforme
requerimientos.