Bluetooth HC-05 y App Inventor «sensores», Pic C Compiler
Por
/
En esta sección aprenderás a establecer una comunicación inalámbrica en modo simplex, utilizado un módulo Bluetooth HC-05 y el Bluetooth de un teléfono celular. El objetivo es enviar valores a un teléfono celular utilizando una aplicación que se programara en App Inventor para mostrar y graficar el valor de un sensor analógico.
Bluetooth HC-05
El Bluetooth HC-05 es un módulo de comunicación inalámbrico que utiliza la tecnología Bluetooth para establecer un enlace de comunicación serie entre dos dispositivos. Es un dispositivo muy popular en proyectos de electrónica y robótica, ya que permite la comunicación inalámbrica entre un microcontrolador, como Arduino, y otros dispositivos como un ordenador, smartphone o tablet. El HC-05 puede funcionar como maestro o esclavo y utiliza el perfil serial port profile (SPP) de Bluetooth, lo que lo hace compatible con una amplia variedad de dispositivos que soportan este perfil.
Características:
Tecnología: Bluetooth 2.0 + EDR (Enhanced Data Rate)
Alcance de comunicación: hasta 10 metros (en condiciones ideales)
Velocidad de transmisión: 2.1 Mbps máx. en modo EDR, 721 kbps máx. en modo estándar
Frecuencia: 2.4 GHz a 2.4835 GHz banda ISM
Potencia de transmisión: Clase 2, hasta 4 dBm (2.5 mW)
Sensibilidad de recepción: -80 dBm típico
Protocolos de soporte: Bluetooth serial port profile (SPP)
Modo de operación: Maestro o Esclavo
Compatibilidad: Compatible con dispositivos que soportan Bluetooth SPP
Se habilita la lectura en el pin AN0, se hace la lectura del valor y se guarda en la variable «POT1».
set_adc_channel (0);//Lectura Vout del potenciometro en PIN AN0
delay_us(10);
POT1 = read_adc();// lectura del valor
Se utiliza una sentencia «if» para enviar el valor del pin AN0 cada vez que cambie, con esto se evita enviar el mismo valor múltiples veces.
if (pasPOT1 != POT1)
{
printf("POT1%04lu\r",POT1);
pasPOT1 = POT1;
}
La función «printf» envía inicialmente un identificador para indicarle al PIC esclavo que el valor corresponde al «POT2» después se coloca el valor entero de 16 bits utilizando %04lu para especificar que se envíen 4 dígitos «0000» y finalmente se utiliza «/r» para indicar el final de los datos enviados.
printf("POT1%04lu\r",POT1);
Código completo
#FUSES NOMCLR
#use rs232(baud=38400, stop=1, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)
void main()
{
setup_adc(ADC_CLOCK_INTERNAL);
int16 POT1=0; //variable para guardar el valor actual
int16 POT2=0;
int16 pasPOT1=0; //variable para guardar el valor pasado
int16 pasPOT2=0;
while(TRUE)
{
set_adc_channel (0);//Lectura Vout del potenciometro en PIN AN0
delay_us(10);
POT1 = read_adc();// lectura del valor
if (pasPOT1 != POT1)
{
printf("POT1%04lu\r",POT1);
pasPOT1 = POT1;
}
delay_ms(100);
set_adc_channel (1);//lectura Vout del potenciometro en PIN AN1
delay_us(10);
POT2 = read_adc();// lectura del valor
if (pasPOT2 != POT2)
{
printf("POT2%04lu\r",POT2);
pasPOT2 = POT2;
}
delay_ms(100);
}
}
App Inventor
MIT App Inventor es un entorno de programación visual e intuitivo que permite a todos, incluso a los niños, crear aplicaciones completamente funcionales para teléfonos Android, iPhones y tabletas Android/iOS. La herramienta basada en bloques facilita la creación de aplicaciones complejas y de alto impacto en mucho menos tiempo que los entornos de programación tradicionales. El proyecto MIT App Inventor busca democratizar el desarrollo de software al empoderar a todas las personas, especialmente a los jóvenes, para pasar del consumo de tecnología a la creación de tecnología.
En las propiedades del Bluetooth se establece un «DelimiterByte», este es un valor establecido que se encarga de encontrar el final de la cadena de caracteres recibidos, en este caso se coloco el número «13» que identifica el retorno de carro «\r», por lo que una vez que reciba este caracter dará por terminado el mensaje recibido.
Si en el fin de la cadena de caracteres se coloca un salto de linea «\n» se debe colocar el numero «1o».
Se utiliza un reloj para verificar si se reciben datos, se verifica cada milisegundo, por lo que siempre se estará ejecutando.
Blocks 1
Aplicación 2
El tiempo de muestreo de la gráfica se define en «Clock2» y «Clock3», en el «Timerinterval» se establece el tiempo que tarda en actualizar el valor para mostrarlo en la gráfica, en este caso se colocan «100» mili-segundos de tiempo de muestreo. Se puede colocar desde «1» mili-segundo para visualizar más rápido gráfica.
En las propiedades de canvas 1 y 2 se coloca una altura en pixeles correspondiente al valor máximo que se gráfica, en este caso se coloca una altura de «102» pixeles para establecer una relación de 1 a 10, es decir «1023 = 102», para tener un tamaño suficiente para graficar los dos sensores.