You are on page 1of 12

UNIVERSIDAD NACIONAL DE

SAN ANTONIO ABAD DEL CUSCO

FACULTAD DE INGENIERIA ELECTRICA, ELECTRÓNICA, INFORMATICA Y


MECANICA
ESCUELA PROFESIONAL DE
INGENIERÍA INFORMÁTICA Y DE SISTEMAS

INFORME: Controlador de móvil 4wd por medio de bluetooth, sensor


de distancia y acelerómetro.

ASIGNATURA:
ROBÓTICA Y PREOCESAMIENTO DE SEÑAL

DOCENTE:
ING. PILLCO QUISPE, JOSE MAURO

PRESENTADO POR:
CHOQUENAIRA TTITO, JHON 100259
DIAZ CÁCERES, SHERYL YAMILE BO DEREK 130738
PORTUGAL CHURATA, DIANA VERÓNICA 111182

CUSCO – PERÚ
2017
1. MARCO TEÓRICO
1.1. Plataforma móvil 4wd
Esta poderosa plataforma de aluminio diseñada para robots de competencia está equipada
con 4 llantas, una estructura diseñada para proteger los circuitos de los objetos externos y
posee agujeros de acople para sensores, sistemas de control, motores y baterías de todo
tipo, es ideal para amantes de Arduino y muy fácil de utilizar.

1.2. Bluetooth
Bluetooth es una especificación industrial para Redes Inalámbricas de Área Personal
(WPAN) que posibilita la transmisión de voz y datos entre diferentes dispositivos
mediante un enlace por radiofrecuencia en la banda ISM de los 2.4 GHz. Los principales
objetivos que se pretenden conseguir con esta norma son:
 Facilitar las comunicaciones entre equipos móviles.
 Eliminar los cables y conectores entre éstos.
 Ofrecer la posibilidad de crear pequeñas redes inalámbricas y facilitar la
sincronización de datos entre equipos personales.
Especificaciones Técnicas:
 Compatible con el protocolo Bluetooth V2.0.
 Voltaje de alimentación: 3.3VDC – 6VDC.
 Voltaje de operación: 3.3VDC.
 Baud rate ajustable: 1200, 2400, 4800, 9600,
19200, 38400, 57600, 115200.
 Tamaño: 1.73 in x 0.63 in x 0.28 in (4.4 cm x
1.6 cm x 0.7 cm)
 Corriente de operación: < 40 mA
 Corriente modo sleep: < 1mA

1.3. Sensor de Proximidad


El Sensor de Distancia es un dispositivo que permite conocer aproximadamente las
distancia de los objetos que tiene frente.

El sensor de distancia ultrasónico HC–SR04 tiene la capacidad de sensar la distancia por


medio de la diferencia en tiempo entre la transmisión y recepción de una serie de pulsos
que el modulo envía y captura. Este sensor es capaz de sensar fielmente distancias de
entre 2cm y 400cm de manera no invasiva o sin contacto.

CARACTERISTICAS DEL SENSOR

 Fuente de alimentación :5V DC


 Angulo efectivo: <15°
 Distancia efectiva de medición : 2cm – 500 cm/1″ – 16ft
 Resolución : 0.3 cm

1.4. APP Inventor


App Inventor es un entorno de desarrollo de aplicaciones para dispositivos Android. Esta
plataforma pertenece a Google Labs y depende directamente del MIT (Massachusetts
Institute of Technology) que permite de forma visual y simple realizar aplicaciones para
dispositivos móviles desde cualquier dispositivo Android e incluso desde un ordenador
mediante su página web. Su simplicidad permite crear aplicaciones sin que el usuario
necesite demasiados conocimientos de programación, ya que al ser visual, la
programación va en bloques que se van uniendo como un puzzle para realizar el
programa final. Además cuenta con una amplia comunidad y soporte para ayudar a
realizar mejores aplicaciones. El inconveniente de App Inventor es esa misma
simplicidad que lo limita, ya que no permite aplicaciones excesivamente complejas, pero
a pesar de ello abarca infinidad de posibilidades.
1.5. Servomotores
Un servomotor o más comúnmente llamado servo, es un dispositivo electromecánico
parecido a un motor de corriente continua, que es capaz de posicionarse en un punto
concreto de su rango de actuación y mantenerse estable en el mismo. Dependiendo de su
finalidad, se puede controlar tanto su velocidad como su posición.
1.5.1 Características servomotores
- Longitud del cable: 15cm
- Velocidad: 0.14sec/60degree al (4.8V) ~0.12sec/60degree al (6V)
- Fuerza de Torque: 1.3kg.cm.at (4.8V) ~1.5kg.cm.at (6V)
- Tensión: 4.8V ~ 6V
- Compatible conFutaba, JR, Sanwa, Hitec, etc
- Dimensiones: 1,46 x 0,94 en en x 0,47 en - Peso: 0.67 oz = 18.89 g
Ilustración 3. Micro servo Trabajo fin de grado Departamento de electrónica Universidad
Politécnica de Valencia 9 Émili Prieto Antón.

1.6. Acelerómetro
Es el principal responsable de detectar los cambios de orientación en los
terminales, con el fin de que estos puedan rotar el contenido de la pantalla hacia
una posición vertical u horizontal. Aunque existen varios tipos, los más presentes
en smartphones son los capacitivos.
Dos placas metálicas (una fija y otra móvil) y enfrentadas que componen un
condensador son las piezas principales que explican su funcionamiento. A ellas se
suma un material como por ejemplo papel, que sea dieléctrico. La clave está en
que, cuando se produce la aceleración y el teléfono la detecta, cambia la capacidad
del condensador, que comúnmente se confunde con "capacitor o capacitador". Al
producirse el movimiento, la placa del móvil también se desplaza y reduce o
aumenta la distancia.
El papel se encargará de almacenar la energía que llega de las placas. El sensor
cuantificará y enviará la carga al chip para que procese y halle qué aceleración se
ha producido, lo que en última instancia es tenido en cuenta para ejecutar una
acción en el sistema. Desde hace algunos años los acelerómetros también se
emplean para calcular distancia, velocidad o calorías quemadas. Para no confundir
los movimientos del cuerpo con los típicos de uso, los terminales tienen registrada
la carga eléctrica que genera cada movimiento.
2. DISEÑO FÍSICO
2.1. Herramientas a usar
 Modulo Bluetooth Hc-05
 Protoboard
 Pilas recargables cada una de 1.2 v
 Arduino Uno
 Terminal con Bluetooth (App Arduino bluetooth controller)
 Hilos de cable rj45
 Plataforma móvil 4wd
 Sensor de proximidad
 Driver L298N

2.2. Características de los dispositivos


2.2.1. Arduino uno
Especificaciones Técnicas:
 Microcontrolador: ATmega328
 Voltage: 5V
 Voltage entrada (recomendado): 7-12V
 Voltage entrada (limites): 6-20V
 Digital I/O Pins: 14 (de los cuales 6 son salida PWM)
 Entradas Analogicas: 6
 DC Current per I/O Pin: 40
mA
 DC Current parar 3.3V Pin:
50 mA
 Flash Memory: 32 KB
(ATmega328) de los cuales
0.5 KB son utilizados para el
arranque
 SRAM: 2 KB (ATmega328)
 EEPROM: 1 KB (ATmega328)
 Clock Speed: 16 MHz

2.2.2. Driver
Este módulo basado en el circuito integrado L298N permite controlar hasta dos
motores de corriente continua DC o un motor paso a paso bipolar de hasta 2
Amperes.
El módulo cuenta con todos los componentes necesarios para funcionar sin
necesidad de elementos adicionales, entre ellos diodos de protección y un regulador
LM7805 que suministra 5V a la parte lógica del integrado L298N. Cuenta con
jumpers de selección para habilitar cada una de las salidas del módulo (A y B). La
salida A está conformada por OUT1 y
OUT2 y la salida B por OUT3 y OUT4. Los
pines de habilitación son ENA y ENB.
Especificaciones Técnicas:
• Doble Puente H
• Circuito Integrado L298N
• Voltaje lógico: 5V
• Voltaje de operación: 5 – 35V
• Corriente control: 0 – 36mA
• Máxima corriente de operación: 2A (por motor)
• Temperatura de operación: -20 to +135 C
• Máxima potencia a disipar: 25W

2.2.3. 6 Pilas recargables Camelion DX2 NIMH 2500MAH 1.2V


 Especificaciones Técnicas:
Capacidad: 2500 mAh
Composición: Ni-MH (Nickel-Metal Hydride)
Voltaje: 1.2 V
Tipo: D/R20/Mono
Admiten hasta 1000 ciclos de carga/descarga.

2.2.4. 4 Motores DC con llantas de goma (Motor DC de 3-6v con


150 RPM)
Este motorreductor y llanta es ideal para utilizarse la realización de plataformas
robóticas. Pensado para construir robots sumo, un robot seguidor de líneas, o cualquier
robot con tracción diferencial, este juego de llantas de goma es ideal para darle
movimiento a la plataforma robótica. El motoreductor viene con su correspondiente llanta
de goma.
Caracteristicas:
 Motorreductor y llanta para aplicaciones de robótica, maquetas y prototipos
 Excelente tracción sobre una grán variedad de superficies
 Llanta con díametro exterior de 60 mm
 Motorreductor con eje dual (si no hay existencia se envía con eje sencillo)
 Díametro del eje de salida: 5.3mm aplanado a 3.6
 Voltaje de alimentación 3 a 9 volts
 Corriente de operación nominal (sin carga): 250 mA
 Razón de reducción 1:50
2.2.5. 2 Chasis acrílico del auto

2.3. DISEÑO

3. DISEÑO LÓGICO

3.1. CODIGO FUENTE (tanto para el acelerómetro como para


el problema del ángulo con los sensores de distancia)

#include <Servo.h> int velmotorgiro1 = 240;


#include<SoftwareSerial.h> int velmotorgiro2 = 240;
Servo myservo;
void adelante() {
SoftwareSerial BT(8, 9); analogWrite(5, velocidadmotor2);
digitalWrite(6, HIGH);
int servoderecha = 0; digitalWrite(7, LOW);
int servoizquierda = 180;
analogWrite(3, velocidadmotor1);
const int Trigger = 13; //Pin digital 2 digitalWrite(2, LOW);
para el Trigger del sensor digitalWrite(4, HIGH);
const int Echo = 12; //Pin digital 3 para }
el Echo del sensor, sensor recto
const int Echoderecha = 11; void parar() {
const int Echoizquierda = 10; analogWrite(3, 255);
digitalWrite(2, LOW);
int velocidadmotor1 = 150;//150 digitalWrite(4, LOW);
//derecha
int velocidadmotor2 = 190;//190 analogWrite(5, 255);
//izquierda digitalWrite(6, LOW);
digitalWrite(7, LOW);
} long medirdistanciaderecha() {
long t; //timepo que demora en llegar el
void girar_derecha() { eco
analogWrite(3, velmotorgiro1); long distancia; //distancia en
digitalWrite(2, LOW); centimetros
digitalWrite(4, HIGH);
digitalWrite(A4, HIGH);
analogWrite(5, velmotorgiro2); delayMicroseconds(20);
digitalWrite(6, LOW); //Enviamos un pulso de 10us
digitalWrite(7, HIGH); digitalWrite(A4, LOW);
}
t = pulseIn(A3, HIGH); //obtenemos el
void girar_izquierda() { ancho del pulso
analogWrite(3, velmotorgiro1); distancia = t / 59; //escalamos el
digitalWrite(2, HIGH); tiempo a una distancia en cm
digitalWrite(4, LOW); return distancia;
}
analogWrite(5, velmotorgiro2);
digitalWrite(6, HIGH); long medirdistanciaizquierda() {
digitalWrite(7, LOW); long t; //timepo que demora en llegar el
} eco
long distancia; //distancia en
void atras() { centimetros
analogWrite(3, velocidadmotor1);
digitalWrite(2, HIGH); digitalWrite(A5, HIGH);
digitalWrite(4, LOW); delayMicroseconds(20);
//Enviamos un pulso de 10us
analogWrite(5, velocidadmotor2); digitalWrite(A5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH); t = pulseIn(Echoizquierda, HIGH);
} //obtenemos el ancho del pulso
distancia = t / 59; //escalamos el
tiempo a una distancia en cm
long medirdistancia() { return distancia;
long t; //timepo que demora en llegar el }
eco
long distancia; //distancia en bool resolver_laberinto() {
centimetros parar();
delay(500);
digitalWrite(Trigger, HIGH); girar_derecha();
delayMicroseconds(20); delay(365);
//Enviamos un pulso de 10us parar();
digitalWrite(Trigger, LOW); delay(500);
long distancia;
t = pulseIn(Echo, HIGH); //obtenemos distancia = medirdistancia();
el ancho del pulso if (distancia > 25) {
distancia = t / 59; //escalamos el adelante();
tiempo a una distancia en cm return true;
return distancia; } else {
} girar_izquierda();
delay(700);
distancia = medirdistancia(); myservo.write(90);
adelante(); //Conexion a bluetooht
return true; BT.begin(9600);
} //Conexion Serial
} Serial.begin(9600);
}
bool resolver_esquina() {
parar(); void loop() {
delay(500); //derecha es el 0
girar_derecha(); //izquierda es 180
delay(365); char c = BT.read();
parar(); if(c == 'e'){
delay(500); adelante();
long distancia; myservo.write(90);
distancia = medirdistancia(); bool estado = true;
if (distancia > 25) { long distancia;
adelante(); while(estado){
return true; myservo.write(90);
} else { delay(200);
girar_izquierda(); adelante();
delay(700); distancia = medirdistancia();
distancia = medirdistancia(); //BT.println(distancia);
adelante(); if(distancia < 35){
return true; estado = resolver_esquina();
} }
} }
}else if( c == 'd'){
void setup() { //myservo.write(90);
//Sensor de distancia derecha long distancia;
pinMode(A4, OUTPUT); distancia = medirdistancia();
pinMode(A3, INPUT); //pin como BT.println(distancia);
entrada }else if(c == 'p'){
//Sensor de distancia izquierda long distancia = 50;
pinMode(A5, OUTPUT); while(distancia>30){
pinMode(Echoizquierda, INPUT); adelante();
//pin como entrada distancia = medirdistancia();
//Sensor de distancia recto BT.println(distancia);
pinMode(Trigger, OUTPUT); //pin }
como salida parar();
pinMode(Echo, INPUT); //pin como }else if(c == 'k'){
entrada myservo.write(90);
//Driver del carro delay(200);
pinMode(2, OUTPUT); //EN1 long distancia;
pinMode(3, OUTPUT); //PWM1 distancia = medirdistancia();
pinMode(4, OUTPUT); //EN2 BT.println("Distancia recto");
BT.println(distancia);
pinMode(5, OUTPUT); //PWM2
pinMode(6, OUTPUT); //EN4 myservo.write(135);
pinMode(7, OUTPUT); //EN3 delay(200);
//servomotor distancia = medirdistancia();
myservo.attach(11); BT.println("Distancia izquierda");
BT.println(distancia); distancia = medirdistancia();
delay(20);
myservo.write(45); BT.println(distancia);
delay(300); if(distancia<20){
distancia = medirdistancia(); parar();
BT.println("Distancia derecha"); girar_izquierda();
BT.println(distancia); delay(130);
delay(200); parar();
}else if(c == 'z'){ delay(50);
//myservo.write() adelante();
adelante(); }
for(int i=0;i<10;i++){ }
myservo.write(90); parar();
delay(200); }else if(c=='y'){
long distancia; adelante();
distancia = medirdistancia(); }else if(c=='b'){
BT.println("Distancia recto"); long distanciarecto = medirdistancia();
BT.println(distancia); long distanciaderecha =
medirdistanciaderecha();
myservo.write(135); long distanciaizquierda =
delay(200); medirdistanciaizquierda();
distancia = medirdistancia(); BT.println("recto");
BT.println("Distancia izquierda"); BT.println(distanciarecto);
BT.println(distancia); BT.println("derecho");
BT.println(distanciaderecha);
myservo.write(45); BT.println("izquierdo");
delay(300); BT.println(distanciaizquierda);
distancia = medirdistancia(); }else if(c=='c'){
BT.println("Distancia derecha"); bool estado = true;
BT.println(distancia); long distancia;
delay(200); long distanciaI;
} long distanciaD;
parar(); adelante();
}else if(c=='r'){ while(estado == true){
adelante(); distancia = medirdistancia();
bool estado = true; if(distancia < 35){
long distancia; estado = resolver_esquina();
while (estado) { }
distancia = medirdistancia();
//BT.println("distancia recto"); distanciaD =
//BT.println(distancia); medirdistanciaderecha();
if (distancia < 30) { if(distanciaD < 20){
estado = resolver_laberinto(); girar_izquierda();
} parar();
} adelante();
}else if(c=='a'){ }
myservo.write(45);
delay(200); distanciaI =
adelante(); medirdistanciaizquierda();
long distancia; if(distanciaI < 20){
for(int i=0;i<100;i++){ girar_derecha();
parar(); }
adelante(); }
} }

3.2. CONTROL DEL CARRO


3.1. PARA EL ACELERÓMETRO
1. Ingresamos a la APP 3. Activamos el sensor

2. Conectamos el bluetooth

3.2. PARA EL PROBLEMA DEL ÁNGULO

Usamos la App Arduino Bluetooth Controller de las siguiente manera:


1. Al abrir la aplicación, nos aparece los dispositivos bluetooth disponibles,
seleccionamos el dispositivo llamado “JHON”.
2. Al seleccionar el dispositivo móvil, nos aparece un menú, en el cual debemos
seleccionar “terminal mode”

3. Estando en terminal mode, digitamos la palabra “c” para que el carro avance.

4. VIDEO TUTORIAL

 Carrito controlado por el acelerómetro del celular


https://www.youtube.com/watch?v=4_Re7nRUIp0&feature=youtu.be
 Carrito con sensor de distancia, moviéndose solo en el laberinto, resolviendo el
problema del ángulo
https://www.youtube.com/watch?v=UiJlCH7gb68&feature=youtu.be

You might also like