Beruflich Dokumente
Kultur Dokumente
Objetivos
.
ConectarlosmdulosBluetoothaArduino.
PresentarunaaplicacinAndroidllamadaArduDroid.
VercomopodemosusarArduDroidparacontrolarArduinodesdeelmovil.
Montaruncircuitodeejemplo.
Materialrequerido.
ArduinoUNOoequivalente.
UnmduloBlueToothHC05oHC06,
Algunoscablesdeprotoboard,preferiblemente
Dupontmacho/hembramasunaprotoboard
Unaresistenciade330
4LEDs
UnmvilAndroid
TrabajandoconHC05yAndroid
UnavezquehemosvistocmousarloscomandosATparaprogramarlosmdulosBluetooth,enlassesiones
anteriores,podemospasaralapartefcilqueesusarnuestrosmvilesAndroidparacontrolarcualquierproyectocon
BlueTooth.Estansencillocomoconectarnosalmduloyescribirunpequeoprogramaquegobierneelflujodecontrol.
Podramoshacerloconcomandosdetextodirectos,peroesdemasiadopocoeleganteyaqunosgustanlascosas
presentables,porloquevamosausarunprogramadelomssimptico,disponibleparaAndroidquesellama
ArduDroid.
EstescritoporTechBitar,ypodisencontraraqusupginaArdudroid.
BsicamenteesunprogramaAndroidconbotonesydeslizadores,msunesquemadeprogramaArduinoque
podemosusarparaenviaryrecibircomandosdeunaformapresentable,yqueademsfuncionamuybien.
ParaellonecesitaremosquedescarguisArduDroiddelaGooglePlayparaAndroidyloinstalisenvuestrotelfono.
Sientotenerquedecir,denuevo,quelosmdulosHC05yHC06nosoncapacesdeconectarconlosmvilesde
Appleoalmenosyonoloheconseguido
DespusbastaconconectarcualquieradelosdosmdulosanuestrosDuinosconunpardecablesparaGNDyVcc
msRxdyTxd.
Vamosadedicarestasesinavercomoconectamosunodelosmdulosparalaconexinnormaldetrabajoycmo
usarelArdudroidparagobernarmensajesdetexto,pinesdigitalesyyapuestosalgnpinPWM.
Diagramadeconexin
VamosamontarinicialmenteunpequeocircuitocontresdiodosLEDparaqueveamoscmocontrolarlosdesdeel
mvil,yluegoiremoscomplicandounpocomselmontaje(No,noesunaamenaza).
Elmontajedelaprotoboardestrivialparagentetanexperimentada:
ElprogramadecontrolArduDroid
ArdudroidincluyeunprogramaArduino,quepodemosutilizarcomoesqueletoparanuestrospropiosproyectos.Pero
nosotrosvamosahaceralgunoscambiosenlaconexinquelhace,porquenomegustanadaqueusemoslospines
0y1paracomunicarnosconArduino,asquenosotrosusaremoslospines2y3paralaconexinconelmdulo
BlueTooth.
Creoqueyacomentamosquesiusamoslospines0y1nuestrocdigofuncionara,peroanularemoslaconexin
conelPCvaUSB,queusalospines01y1.
Elautor,queesunhombredemundo,notieneproblemas,porquepruebalosprogramasconunsegundomdulo
BT,ycuandotieneelprogramapulido,nonecesitavolverareprogramar,peroyosoyunpocomstorpeyprefiero
nocerraresapuertamantenerabiertoelUSBparamensajesporejemplo.
VamosairpresentandoelprogramadecontroldeArduinoenpequeasdosisparaevitarasustaranadie,yquelos
sufridoslectoreshuyandespavoridos,ydeesemodo,adems,podremosirviendopocoapocolasdiferentes
seccionesdelprograma,queestoyseguroayudaraasumejorcomprensin.
Enprimerlugar,necesitamossaber,queelprogramaArdudroidenvatodosloscomandosconunasintaxissencilla.
Todaslasordenesempiezanpor*yterminanen#,ysilaordenincluyemltiplesdatos,estovienenseparadosporel
smbolo|
CuandoArduDroidenvaunaordentpica,esalgoas:*10|3|2#
Poreso,porquelasrdenesseenvancodificadas,vamosaempezarconalgunasdefinicionesprevias:
#defineSTART_CMD_CHAR'*'
#defineEND_CMD_CHAR'#'
#defineDIV_CMD_CHAR'|'
#defineCMD_DIGITALWRITE10
#defineCMD_ANALOGWRITE11
#defineCMD_TEXT12
#defineCMD_READ_ARDUDROID13
#defineMAX_COMMAND20//maxcommandnumbercode.usedforerrorchecking.
#defineMIN_COMMAND10//minimumcommandnumbercode.usedforerrorchecking.
#defineIN_STRING_LENGHT40
#defineMAX_ANALOGWRITE255
#definePIN_HIGH3
#definePIN_LOW2
AdemsusaremoslalibreraSoftwareSerial,parahablarconelmoduloBlueTooth,mediantelospinesdigitales2y3:
#include<SoftwareSerial.h>
SoftwareSerialBT1(3,2);//RX|TX
Definiremosunasvariablesparacontenerlosvaloresqueleeremosdelcomando:
intard_command=0;
intpin_num=0;
intpin_value=0;
Elcuerpoprincipaldelloopesmuysencillo,Vamosaempezarrecibiendomensajesdetexto:
charget_char='';//ParaleerBT1
if(BT1.available())
{get_char=BT1.read();
delay(25);
if(get_char!=START_CMD_CHAR)
return;//Sinohay*,vueltaaempezar
ard_command=BT1.parseInt();//Leemoslaorden
pin_num=BT1.parseInt();//Leemoselpin
pin_value=BT1.parseInt();//Leemosvalor
RecuerdaqueparseInt(),valeyendocaractereshastallegaraunoquenoesunnumerovalidoyentoncesdevuelveen
unenterolascifrasquehaledo.
Unavezqueleemosard_command,evaluamosquetipodecomandoes,ysilaordenesdetipotexto,llamamosaun
viejoconocidoGetLine()paraconseguirelString:
if(ard_command==CMD_TEXT)//Sielcomandoesdetexto:
{
Strings=GetLine();
Serial.println(s);
}
SiloquerecibimosesunaordenquecorrespondealbotonGetData,enviamosalgo,previamentepactado,porejemplo
lalecturadeA0(Aunquenotenemosnadaconectadoenestemomento:
if(ard_command==CMD_READ_ARDUDROID)
{BT1.print("Analog0=");
BT1.println(analogRead(A0));//LeemosA0
return;//Done.returntoloop();
YsilaordenesundigitalWritedealgnpin:
if(ard_command==CMD_DIGITALWRITE)
processDW(pin_num,pin_value);
}
Hepreferidoprocesarlasrdenesconfunciones,fueradelcuerpoprincipalparaqueseaunpocomslimpioel
programa.
LafuncinGetLineeslahabitual,simplementemodificadaparaleerdeBT1enlugardeSerial:
StringGetLine()
{StringS="";
if(BT1.available())
{charc=BT1.read();;
while(c!=END_CMD_CHAR)//HastaqueelcaracterseaEND_CMD_CHAR
{S=S+c;
delay(25);
c=BT1.read();
}
return(S);
}
}
YencuantoalafuncinprocessDW,quemanejalasrdenesdigitales:
voidprocessDW(intpin_num,intpin_value)
{if(pin_value==PIN_LOW)
pin_value=LOW;
elseif(pin_value==PIN_HIGH)
pin_value=HIGH;
else
return;//Error
digitalWrite(pin_num,pin_value);
return;
}
Paramanejarloscomandosdeescrituraanalogica,mediantePWM,tenemos,otroapartadodelomassencillo:
if(ard_command==CMD_ANALOGWRITE)
{analogWrite(pin_num,pin_value);
//addyourcodehere
return;//Devueltaalloop();
}
AquospongounacopiacompletadelprogramaProg_72_1
Yaqutenesunminivdeoconelresultadodelprograma
Resumendelasesin
HemospresentadoelprogramaArduDroid.Unaaplicacindelomssimpticaparamanejarvuestrosproyectos
atravsdelmvil.
Hemosincluidounejemplodecircuitoparamanejardesdeelmvil.
HemospresentadocomocomplementarlaaplicacinAndroidconunprogramabasequenosproporciona
Ardudroid,paramanejarnuestrosdispositivos.