0% encontró este documento útil (0 votos)
109 vistas12 páginas

Guía de App para Control de Carro

El documento describe el procedimiento para desarrollar una aplicación móvil de control remoto para un auto mediante Bluetooth. La aplicación se creó en MIT App Inventor utilizando botones con imágenes de flechas y comandos de conectividad Bluetooth. El código vincula los botones con caracteres que el Arduino del auto interpreta para controlar los motores y un sensor de distancia.

Cargado por

Ademir Ildefonso
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
109 vistas12 páginas

Guía de App para Control de Carro

El documento describe el procedimiento para desarrollar una aplicación móvil de control remoto para un auto mediante Bluetooth. La aplicación se creó en MIT App Inventor utilizando botones con imágenes de flechas y comandos de conectividad Bluetooth. El código vincula los botones con caracteres que el Arduino del auto interpreta para controlar los motores y un sensor de distancia.

Cargado por

Ademir Ildefonso
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

PROCEDIMIENTO DE LA APLICACIÓN DE CONTROL REMOTO

El carro se controla a través de una aplicación de teléfono móvil mediante Bluetooth. Esta
aplicación, se desarrolló en el “MIT App Inventor” que es una página web que posibilita la
creación de aplicaciones con comandos muy sencillos. Los pasos para desarrollar la aplicación,
fueron los siguientes:

 Se creó los botones con las formas (flechas) de “PowerPoint”, los cuales, se guardaron
independientemente como imágenes.
 Luego, estas fueron exportadas a la página de “MIT App Inventor”.
 Después, en la página, se creó un proyecto nuevo y se usó el comando “Horizontal
Arrangement” dentro de la opción “Layout” para agregar espacios entre cada una de
las filas. Esto se hizo con distancias medidas en pixeles.
 Posteriormente, se usó el comando “Button” dentro de la opción “User Interface”
para insertar los botones con las respectivas imágenes guardadas de “PowerPoint”.
 Luego, se utilizó el comando “Bluetooth Client” dentro de la opción “Connectivity”
para que posteriormente, quede todos los botones vinculados a este.
 Después, se usó el comando “List Piker” dentro de la opción “User Interface” creando
así, un botón que permita seleccionar al módulo Bluetooth.
 Finalmente, se creó los códigos en la ventana “Blocks” vinculando todo al Bluetooth,
se guardó el proyecto con la extensión “. app” y se instaló el proyecto en el teléfono
móvil.

Los botones y el caracter que representan dentro de la codificación, se muestra a


continuación:

 Flecha Arriba = Caracter 'a'


 Flecha Izquierda = Caracter 'b'
 Botón Octágono = Caracter 'c'
 Flecha Derecha = Caracter 'd'
 Flecha Abajo = Caracter 'e'
 Botón ON = Caracter 'f'
 Botón OFF = Caracter 'g'
 Botón Bluetooth = Es para seleccionar el Modulo Bluetooth a que se va a conectar (El
módulo Bluetooth debe estar previamente sincronizado con el teléfono móvil).

CODIFICACIÓN DE LA APLICACIÓN DE CONTROL REMOTO

La codificación realizada en la página web “MIT App Inventor”, se hace seleccionando


comandos ya preestablecidos y escritos, estos solo se conectan arrastrándolos con el ratón, de
izquierda a derecha, de acuerdo a su ejecución en el programa.

En esencia, la codificación, es hacer un llamado al comando “List Piker” que es un componente


de interfaz de usuario que facilita la visualización de una lista de elementos y que el usuario
haga una selección de esta. En este caso, el elemento seleccionado es el módulo Bluetooth
bajo el nombre de comando “Bluetooth Client” y a este, van a ir conectados todos los códigos
de los botones a través del comando “Button”.
Ahora, de forma específica, la codificación principal se divide en dos grandes partes: el código
para antes de la selección de algún botón y el código para después de la selección de alguno de
estos.

PARA ANTES DE LA SELECCIÓN

 Se busca el comando condicional “When – do, Before Picking” y se selecciona “List


Piker 1” para hacer el llamado de la lista.
 Ahora continúa la selección del conjunto de instrucciones, para lo cual, se busca el
comando “Set – to”, se selecciona “List Piker1, Elements” y se asocia al comando
condicional ya descrito.
 Para finalizar, se asocia al comando “Set – to”, el comando “Bluetooth Client 1,
Addresses and Names”. Este último, permite que posteriormente, cuando se haga la
codificación de cada botón, todos estos códigos queden inmersos dentro de la
conectividad Bluetooth y ninguno se quede fuera.

PARA DESPUÉS DE LA SELECCIÓN

 Se busca el comando condicional “When – do, After Picking” y se selecciona “List


Piker 1” para hacer el llamado de la lista.
 Ahora continúa la selección del conjunto de instrucciones, para lo cual, se busca el
comando “Set – to”, se selecciona “List Piker 1, Selection” y se asocia al comando
condicional ya descrito.
 Después, se asocia al comando anterior, el comando “Call – Connect Address” y se
selecciona “Bluetooth Client 1” para hacer un llamado al módulo Bluetooth.
 Luego, se asocia a este último, el comando “List Piker 1, Selection”, para que quede
codificado la dirección del Bluetooth dentro de la lista.
 A continuación, se hace la codificación de los botones a través del comando
condicional “When – do, Click” y se selecciona “Button 1”, “Button 2”, …, “Button 6” o
“Button 7”. Dependiendo del botón al que se quiera programar basado en la
terminología usada al momento de crear la parte visible de los botones.
 Para finalizar, se conecta al comando anterior, el comando “Call – Send Text” y se va a
seleccionar “Bluetooth Client 1”. A este último, se conecta el comando “Text” en el
que va a ir escrito “ ‘a’ ”, “ ‘b’ ”, …, “ ‘f’ ”, “ ‘g’ ”, todo en forma de carateres entre
comillas simples. Esto se hace para que cada botón represente una letra dentro del
código y esta sea enviada posteriormente a la programación del Arduino.
Figura. Creación de los Íconos para los Botones de la Aplicación.

Figura. Elaboración de la Aplicación en MIT App Inventor.


Figura. Creación del Código de la Aplicación.

Figura. Código Completo de la Aplicación.

CODIFICACIÓN DEL ARDUINO

Para la codificación del Arduino, se va a utilizar los carateres con los que se definió cada uno de
los botones en la codificación de la aplicación. Estos van a servir para que, con los comandos
aquí programados, el carro pueda ejecutar los movimientos descritos por los botones de
dirección y los movimientos totalmente autónomos gracias al sensor de distancia. Los pasos
que se usó para a codificación son los siguientes:

 Primero se definió las variables en función a la posición del motor y su dirección de


giro, es decir, para el motor izquierdo, se denominó “izqA” e “izqB” y para el motor
derecho, “derA” y “derB”. Los valores de cada una de estas variables son los pines
PWM (Modulación por ancho de pulso) del Arduino que se van a utilizar para la
conexión con el puente H
 Después, se definió la variable “vel” que representa la velocidad de los motores. Esta
igual a 255 (se puede escoger un valor entre 0 a 255), debido a que se está trabajando
con los pines PWM. Asimismo, se definió la variable “estado” que representa al estado
inicial del carro, es decir, apagado.
 Luego, se definió las variables “pecho” y “ptrig” que representan al pin echo y al pin
trigger del sensor de distancia, estos van a tener los valores 2 y 3 respectivamente en
los pines del Arduino. De igual manera, se definieron las variables “duración” y
“distancia” que representan, valga la redundancia, la duración y la distancia a la que
va a funcionar el sensor de distancia.
 Posteriormente, se usó la función “void setup ()” para realizar instrucciones que solo y
únicamente se ejecutarán al inicio del programa. Aquí, se definió el puerto serial
“[Link] ()” inicializándose en 9600 baudios para la conexión Bluetooth y
también, la salida (OUTPUT) mediante el código “pinmode ()” de cada una de las
variables representadas por los pines del Arduino, a excepción de la varible “pecho”,
que se define como entrada (INPUT).
 Después, se dio inicio al programa con la función principal “void loop ()”. En él, están
inmersos todos los comandos e instrucciones del proyecto que se irán repitiendo a lo
largo de todo su funcionamiento. Ya declarada la función principal, se inicializa el
programa con el comando condicional “if” para el puerto serial ([Link] ()>0) y
la instrucción va a recaer sobre la variable “estado”. Esto significa que, si hay un
carácter nuevo en el puerto serial y esta cumple la condición, entonces esta se
almacena en la variable “estado”.
 Luego y partir de la definición de la condicional anterior, se viene una serie de
condicionales inmersas dentro de esta. Las condicionales subsiguientes van a
depender del caracter que se almacene dentro de la variable “estado” y de acuerdo a
esta, van a activarse o desactivarse mediante señales digitales (0 o 1) las variables
referidas a los motores (“izqA”, “izqB”, “derA”, “derB”), la velocidad (“vel”) y en un
caso muy particular que se usará cuando el carro funcione con el sensor, a las variables
“pecho”, “ptrig” “duración” y “distancia”. Todas estas, se activan o desactivan con el
comando “analogWrite ()”.
 Posteriormente, se programó las condiciones para cuando el carro utilice el sensor y su
correcto funcionamiento con los comandos “digitalWrite ()”, “delay ()” y “pulseIn”. El
primero, permite enviar un pulso mandándolo a colocar en alto (HIGH) y luego
apagarlo (LOW). El segundo, permite programar el tiempo de disparo medido en
milisegundos. El tercero permite leer cuanto tiempo dura un alto que, para este caso,
este resultado será igualado a la variable “duración”. Este último, permite calcular la
“distancia” que será igual a la mitad de la variable “duración” (porque la señal se
emite y se recepciona) dividida entre 29 (representa la velocidad del sonido medida en
cm/µs, 1cm por cada 29µs). Todo esto dentro de la condicional para el botón “ON”.
 Finalmente, se establece la condicional para la variable “distancia”, la cual debe ser
mayor o igual a 2cm (el sensor tiene un rango de funcionamiento 2cm a 5m) y menor,
para este caso, a 15cm. Un led conectado al Arduino, indicará cuando el sensor
detecte una distancia dentro del rango de la condicional y se apagará cuando deje de
estar en ese rango. Cuando el carro no esté en ese rango, simplemente irá hacia
adelante; pero si, por el contrario, el carro está en el rango; el carro frenará,
retrocederá e irá a la izquierda respectivamente. Esto se logra con los códigos para las
variables referidas a los motores (“izqA”, “izqB”, “derA”, “derB”), la velocidad (“vel”)
y el tiempo de ejecución (“delay ()”) de cada uno.

Tabla. Equivalencia de las Señales Digitales en el funcionamiento de los Motores.

EJECUCIONES derB izqB derA izqA


PARAR 0 0 0 0
AL FRENTE 0 0 1 1
GIRAR 0 0 0 1
IZQUIERDA
GIRAR DERECHA 0 0 1 0
REVERSA 1 1 0 0

CÓDIGO COMPLETO DEL ARDUINO

ARDUINO L293D (Puente H)

5 10

6 15

9 7

10 2

5V 1, 9, 16

GND 4, 5, 12, 13

El motor 1 se conecta a los pines 3 y 6 del Puente H

El motor 2 se conecta a los pines 11 y 14 del Puente H

La fuente de alimentacion de los Motores se conecta a tierra y

el positivo al pin 8 del puennte H.

Conexion del Modulo Bluetooth HC-06 y el Arduino

ARDUINO Bluetooth HC-06


0 (RX) TX

1 (TX) RX

5V VCC

GND GND

!!Cuidado!! Las conexiones de TX y RX al modulo Bluetooth deben estar desconectadas

en el momento que se realiza la carga del codigo (Sketch) al Arduino.

Conexion Sensor Ultrasonido HC-SR04

ARDUINO Ultrasonido HC-SR04

2 Echo

3 Trig

5V VCC

GND Gnd

Conexion Servo SG90

ARDUINO Ultrasonido HC-SR04

11 Signal

5V VCC

GND Gnd

*/

#include <Servo.h> // Incluye la libreria Servo

Servo servo1; // Crea el objeto servo1 con las caracteristicas de Servo

int izqA = 5;

int izqB = 6;

int derA = 9;

int derB = 10;

int vel = 255; // Velocidad de los motores (0-255)

int estado = 'c'; // inicia detenido


int pecho = 2; // define el pin 2 como (pecho) para el Ultrasonido

int ptrig = 3; // define el pin 3 como (ptrig) para el Ultrasonido

int duracion, distancia; // para Calcular distacia

void setup() {

[Link](9600); // inicia el puerto serial para comunicacion con el Bluetooth

pinMode(derA, OUTPUT);

pinMode(derB, OUTPUT);

pinMode(izqA, OUTPUT);

pinMode(izqB, OUTPUT);

pinMode(pecho, INPUT); // define el pin 2 como entrada (pecho)

pinMode(ptrig,OUTPUT); // define el pin 3 como salida (ptrig)

pinMode(13,OUTPUT);

[Link](11,660,1400); // Asocia el servo1 al pin 11, define el min y max del ancho del
pulso

// eso depende del fabricante del servo

void loop() {

if([Link]()>0){ // lee el bluetooth y almacena en estado

estado = [Link]();

if(estado=='a'){ // Boton desplazar al Frente

analogWrite(derB, 0);

analogWrite(izqB, 0);

analogWrite(derA, vel);

analogWrite(izqA, vel);

}
if(estado=='b'){ // Boton IZQ

analogWrite(derB, 0);

analogWrite(izqB, 0);

analogWrite(derA, 0);

analogWrite(izqA, vel);

if(estado=='c'){ // Boton Parar

analogWrite(derB, 0);

analogWrite(izqB, 0);

analogWrite(derA, 0);

analogWrite(izqA, 0);

if(estado=='d'){ // Boton DER

analogWrite(derB, 0);

analogWrite(izqB, 0);

analogWrite(izqA, 0);

analogWrite(derA, vel);

if(estado=='e'){ // Boton Reversa

analogWrite(derA, 0);

analogWrite(izqA, 0);

analogWrite(derB, vel);

analogWrite(izqB, vel);

if (estado =='f'){ // Boton ON, se mueve sensando distancia

digitalWrite(ptrig, HIGH); // genera el pulso de trigger por 10us

delay(0.01);

digitalWrite(ptrig, LOW);
duracion = pulseIn(pecho, HIGH); // Lee el tiempo del Echo

distancia = (duracion/2) / 29; // calcula la distancia en centimetros

delay(10);

if (distancia <= 15 && distancia >=2){ // si la distancia es menor de 15cm

digitalWrite(13,HIGH); // Enciende LED

analogWrite(derB, 0); // Parar los motores por 200 mili segundos

analogWrite(izqB, 0);

analogWrite(derA, 0);

analogWrite(izqA, 0);

delay (200);

analogWrite(derB, vel); // Reversa durante 500 mili segundos

analogWrite(izqB, vel);

delay(500);

analogWrite(derB, 0); // Girar durante 600 milisegundos

analogWrite(izqB, 0);

analogWrite(derA, 0);

analogWrite(izqA, vel);

delay(600);

digitalWrite(13,LOW);

else{ // Si no hay obstaculos se desplaza al frente

analogWrite(derB, 0);

analogWrite(izqB, 0);

analogWrite(derA, vel);

analogWrite(izqA, vel);
}

if(estado=='g'){ // Boton SER, activa el Servomotor

[Link](30); // Gira el servo a 30 grados

delay(1000); // Espera 1000 mili segundos a que el servo llegue a la posicion

[Link](90); // Gira el servo a 90 grados

delay(700); // Espera 700 mili segundos a que el servo llegue a la posicion

[Link](150); //Gira el servo a 150 grados

delay(700);

if(estado=='h'){ //Programacion de los botones 13-10-9-6-5

digitalWrite(13,1);

if(estado=='m'){

digitalWrite(13,0);

if(estado=='i'){

digitalWrite(derB,1);

if(estado=='n'){

digitalWrite(derB,0);

if(estado=='j'){

digitalWrite(derA,1);

if(estado=='o'){

digitalWrite(derA,0);

}
if(estado=='k'){

digitalWrite(izqB,1);

if(estado=='p'){

digitalWrite(izqB,0);

if(estado=='l'){

digitalWrite(izqA,1);

if(estado=='q'){

digitalWrite(izqA,0);

También podría gustarte