Universidad de Navojoa Trabajo presentado para el cumplimiento de la materias de Control Computarizado Maestro: Ing. Fernando Lopez Alumno: Ricardo Daniel Carrada Peña Portafolio: http://dannyasd.com
Universidad de Navojoa
Trabajo presentado para el cumplimiento de la materias de
Control Computarizado
Maestro:
Ing. Fernando Lopez
Alumno:
Ricardo Daniel Carrada Peña
Portafolio:
http://dannyasd.com
CONTENIDO
Introducción 3
Propuesta 4
Justificacion 5
Objetivo General 5
Objetivo Especifico 5
Marco teorico 6
Módulo Bluetooth 9
Servo Motor 10
Desarrollo 11
Requerimientos del Sistema 11
Ejecucion (Desarrollo del Proyecto,pasos) 11
Avances 14
Código 23
CONTROL (Correccion de fallas) 26
Cierre o PRUEBAS (resultado) 27
Conclución 29
Referencias 29
Anexos 30
INTRODUCCIÓN
En el siguiente trabajo mostraremos el proyecto realizado en el ramo de Introducción a
la Ingeniería, por cierto primer desafío de ingeniería para nosotros, en el cual se nos
pedía realizar un proyecto con Arduino. Antes de llegar a este punto, tuvimos que realizar
proyectos previos, hicimos un proyecto que no ocupara corriente electrica, el segundo
fue, hacer un proyecto que ocupara corriente electrica, pero usando componentes
electronicos, y lo que hicimos fue una puerta automatica. El fin de esta materia es que
pudiesemos comprender que en esta epoca existen proyectos que integran tanto, lo no
electrico, ya sea la mecanica, con lo electrico, que son chips y componentes electronicos.
El primer proyecto que realice fue un brazo, como el de una retroescabadora, manipulada
por pistones de geringas que hacian que el brazo se levantara, el requerimiento de este
proyecto era que no deberiamos usar electricidad. Y para poder realizar este proyecto
vimos historia del control computarizado, vimos que un control computarizado debe tener
un ciclo que haga que sea autonomo. Despues el segundo proyecto fue, una puerta
automatica, simulando la puerta de una tienda, que al sentir la presencia de una persona
la puerta se abriera automaticamente, y que en un sierto tiempo determinado, se cerrara
automaticamente. El siguiente paso era aprender a integrar los circuitos electronicos con
la programacion, e hicimos que un carrito de control remoto, lo pudieramos comandar
desde una computadora, utilizando el puerto paralelo y para esto programamos en java.
Estos fueron algunos de los proyectos que realizamos previo al entrar con Arduino. Ahora
el desafio es realizar un proyecto implementando la tecnologia arduino y la propuesta
que di, fue la de un carro que pueda ser autonomo, que sea capas de esquivar obstaculos
y que tambien pueda manejarse con Androd. Al realizar este proyecto aprenderemos,
como utilizar la tecnologia arduino y sus componentes, y mi deseo es compartir mi
proyecto con ustedes.
PROPUESTA
CARRO RC AUTONOMO CON ARDUINO
La pruesta que tengo, es realizar una
conversion de un carro RC que compre
para que se pueda hacer autonomo.
Caracteristicas:
El carro debe de manejarse solo y tambien
debe de tener una interface para android
manegada por bluetooth
Hacer una conversion de un carro RC a
Arduino, utilizando componentes
electronicos para poder hacerlo autonomo,
Materiales:
Servo Motor Hitec Hs-5745MG
Arduino Uno R3 Atmega328
Puente H
4 Motor DC 5V
Sensor ultrasonido SRF-04
1 shield para sensores
JUSTIFICACION
La necesidad al realizar este proyecto, es ver que podemos automatizar compentes, en
este caso es un carrito RC, este proyecto nos habre un panorama de todo lo que
podemos hacer como ingenieros en sistemas. Para nosotros es un desafio, el poder
implementar nuestros conocimientos en este proyecto, implementaremos tanto lo
electronico como lo programable y buscar estre nuestros conocimientos la solucion mas
favorable para poder realizar este proyecto. En este proyecto se necesita investigar,
diseñar, programar, para poder buscar la solucion mas eficiente al enfrentarnos con los
desafios que lleva este proyecto.
OBJETIVO GENERAL
El obejtivo general de este proyecto es aprender a automatizar un carro a control remoto,
mediante un componente electronico, conocido como Arduino, el cual veremos como
esta compuesto este componente electronico y junto a esto aprenderemos a programar
para este microcontrolador. Este carrito tendra la posibilidad de poder manejarse
automaticamente y al implementarle un sensor ultrasonico, que este sensor se encargara
de detertar que tiene por delante y por detrás ya que este sensor es un sensor de
proximidad, tambien este sensor le mandara los datos que capture haciendo su funcion
al arduino y el arduino se encargara de controlar tanto a los motores y el sensor.
OBJETIVO ESPECIFICO
Hacer un proyecto que nos oblige a la investigacion.
Hacer un proyecto que desafie nuestras capacidades
Aprender a programar en C para arduino.
Hacer modificaciones electricas a los componentes del carro RC
Hacer una coneccion entre sensores, y componentes electricos con el arduino.
Hacer que esteticamente el carro se vea bien, al implementar toda nuestra
tecnologia.
Sobre todo a adquir nuevos conocimientos, tanto en lo hardware y software.
MARCO TEORICO
Describiremos algunas definiciones y conceptos de componentes que utilizamos para
desarrollar este proyecto:
Arduino one.
El Arduino Uno es una placa electrónica
basada en el ATmega328. Cuenta con
14 pines digitales de entrada / salida (de
los cuales 6 se pueden utilizar como
salidas PWM), 6 entradas analógicas, un
16 MHz resonador cerámico, una
conexión USB, un conector de
alimentación, un header ICSP, y un
botón de reinicio. Contiene todo lo
necesario para apoyar el micro controlador; simplemente conectarlo a un ordenador
con un cable USB o el poder con un adaptador de CA o la batería a CC para empezar.
(arduino, 2014)
¿Qué puede hacer Arduino?
Arduino puede detectar el medio ambiente mediante la recepción de la entrada de una
variedad de sensores y puede afectar a sus alrededores por las luces de control,
motores, y otros actuadores. El microcontrolador en la placa se programa mediante
el lenguaje de programación Arduino (basado en Wiring ) y el entorno de desarrollo
Arduino (basado en Processing ). Proyectos de Arduino pueden ser autónomos o
pueden comunicarse con el software que se ejecuta en un ordenador (por ejemplo,
Flash, Processing, MaxMSP ).
Las tablas pueden ser construidos por la mano o comprados preensamblado; el
software puede ser descargado de forma gratuita. Los diseños de referencia de
hardware (archivos CAD) están disponibles bajo una licencia de código abierto, que
son libres de adaptarlas a sus necesidades .
Los fundadores de Arduino son: Massimo Banzi , David Cuartielles , Tom
Igoe , Gianluca Martino y David Mellis .
Un Puente H o Puente en H es
un circuito electrónico que permite a
un motor eléctrico DC girar en ambos
sentidos, avance y retroceso. Son
ampliamente usados en robótica y
como convertidores de potencia. Los
puentes H están disponibles
como circuitos integrados, pero
también pueden construirse a partir
de componentes discretos.
CONEXIÓN HC-06 Y ARDUINO
La conexión que tendrás que hace entre el bluetooth y el Arduino, sera como la que se
muestra a continuación y aunque el modulo que aparece en la imagen no es el mismo
que el HC-06 solo sirve como referencia, ya que nuestro modulo también cuenta con los
mismos 4 pines para su
conexión. Para resolver
cualquier duda con la forma
de conectar, te invito a que
primero veas el vídeo que se
encuentra al final.
(http://ingeerick.weebly.com,
2013).
Los módulos de bluetooth HC-05 y HC-06 son módulos muy populares para
aplicaciones con microcontroladores PIC
y Arduino. Se trata de dispositivos
relativamente económicos y que
habitualmente se venden en un formato
que permite insertarlos en un protoboard
y cablearlo directamente a cualquier
microcontrolador, incluso sin realizar
soldaduras. En esta entrada del blog
vamos a explicar un poco del
funcionamiento de estos módulos y como configurarlos. También abordaremos
las diferencias entre el HC-05 y el HC-06. (Ruben, 2014).
Módulo Bluetooth HC-05
El módulo de bluetooth HC-05 es el que ofrece una mejor relación de precio y
características, ya que es un módulo Maestro-Esclavo, quiere decir que además de
recibir conexiones desde una PC o tablet, también es capaz de generar conexiones
hacia otros dispositivos bluetooth. Esto nos permite por ejemplo, conectar dos módulos
de bluetooth y formar una conexión punto a punto para transmitir datos entre dos
microcontroladores o dispositivos. En otro artículo posterior veremos como configurar
dos módulos HC-05 para que se enlacen entre ellos y podamos transmitir información
de un punto a otro. (Ruben, 2014)
Diferencias HC-05 vs HC-06 y como identificarlos
Muchas personas y tiendas en internet venden el HC-06 y HC-05 como un mismo
módulo, muchas veces uno pide un HC-05 y terminan vendiéndoles un HC-06. Esto se
debe a que esencialmente el hardware es el mismo para ambos módulos. La única
diferencia real es el firmware que viene cargado de fábrica. De hecho, si tenemos
paciencia, podemos convertir un HC-06 a un HC-05 nosotros mismos con solamente
cambiar el firmware de los módulos, pero quedas advertido: ¡Hay que construir la
interfaz de programación!
Existen unos módulos aptos para insertarse en el protoboard que nos permiten una
fácil identificación del módulo soldado antes de comprar. En estos módulos, los HC-05
normalmente tienen dos pines extra (además de TX, RX, VCC, GND) etiquetado como
“Key” y “State”. El pin “key” es necesario para entrar al modo de comandos AT en el
módulo HC-05 (pin 34) y por lo tanto, solo se instala cuando el módulo de bluetooth a
bordo es un HC-05. También podemos identificar si se trata de un HC-05 por la forma
en que se identifican con otros dispositivos bluetooth: El HC-05 se identifica como “HC-
05″, mientras que el HC-06 se identifica como “Linvor” o “HC-06″. (Ruben, 2014).
MÓDULO BLUETOOTH
Se denomina Bluetooth al protocolo de comunicaciones diseñado especialmente para
dispositivos de bajo consumo, que requieren corto alcance de emisión y
basados en transceptores de bajo costo. Opera mediante un enlace por radiofrecuencia
en la banda ISM de los 2,4 GHz. Su uso es adecuado cuando puede haber dos o más
dispositivos en un área reducida sin grandes necesidades de ancho de banda.
Bluetooth tiene la ventaja de simplificar el descubrimiento y configuración de los
dispositivos, ya que éstos pueden indicar a otros los servicios que ofrecen, lo que
redunda en la accesibilidad de los mismos sin un control explícito de direcciones de red,
permisos y otros aspectos típicos de redes tradicionales. El WiFi utiliza el mismo espectro
de frecuencia que Bluetooth con una potencia de salida mayor que lleva a conexiones
más sólidas. (Sánchez, 2012).
SERVO MOTOR
Básicamente un servomotor es un motor de
corriente continua con un potenciometro que le
permite saber la posición en la que se encuentra
y así poder controlarla.
Para controlar el servomotor se le envía pulsos
cada 20 ms es decir 50Hz. La anchura del pulso
es lo que codifica el angulo de giro , es decir lo
que se conoce como PWM, codificación por ancho de pulso. Esta anchura
varia según el servomotor pero normalmente va entre 0.5 y 2.5 ms aunque pueden
variar.
Dependiendo del tamaño del servo y su consumo es posible que no puedas alimentarlo
desde tu placa arduino, en ese caso es necesario una fuente de 5V independiente para
poder moverlo,en mi caso uso un microservo por lo que consume poca corriente y se
puede alimentar directamente por el Arduino . Sobre el peso que pueden levantar se
puede deducir con el par del servo. Normalmente los servos indican el par o torque que
pueden realizar para un servo estándar suele ser 5kg/cm es decir puede mover 5kg a 1
cm de distancia. En caso de querer mover lo a 5 cm el servo solo podrá mover 1kg.
(Sánchez, 2012)
DESARROLLO
REQUERIMIENTOS DEL SISTEMA
Los requerimientos del sistema son los siguientes
1. Hacer un carrito autónomo
2. Hacer Rutas
3. Detectar obstáculos
4. Conectar sensores
5. Modificar el micro controlador del carrito RC
6. Generar mi propio código para poder ejecutar el proyecto.
EJECUCION (DESARROLLO DEL PROYECTO,PASOS)
CONEXIÓN BÁSICA CON ARDUINO
Las conexiones para realizar con arduino son bastante sencillas. Solamente
requerimos colocar como mínimo la alimentación y conectar los pines de transmisión y
recepción serial (TX y RX). Hay
que recordar que en este caso
los pines se debe conectar
cruzados TX Bluetooth -> RX
de Arduino y RX Bluetooth ->
TX de Arduino. La siguiente
imágen muestra las conexiones básicas para que funcione el módulo
Conexión de un módulo HC-06 a Arduino. Hay que revisar la correspondencia de pines
en la serigrafía, ya que puede variar dependiendo del proveedor o lote.
En este caso estamos utilizando el hardware de UART, por lo que la comunicación con
la PC no será posible. Para poder utilizar la UART para comunicarse con la PC
mediante USB, es necesario utilizar un UART emulado por software, de manera que los
pines de comunicación con el módulo bluetooth queden en pines distintos.
El código para la comunicación a través del bluetooth es idéntico al que utilizaríamos
para comunicarnos con la PC vía USB. El siguiente ejemplo permite encender o apagar
el led de la tarjeta arduino mediante el módulo bluetooth. El código funciona de la
siguiente manera:
Al envíar el caracter E, se pone en estado alto la salida del pin 13
Al enviar el caracter A, se pone en estado lógico bajo la salida del pin 13
CONECCION CON SENSOR ULTRASONICO
El código que utilice para poderme orientar al crear mi código para mi carro fue este
#define trigPin 13
#define echoPin 12
#define led 11
#define led2 10
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
}void loop() {
long duration, distance;
digitalWrite(trigPin, LOW); // Added this
line
delayMicroseconds(2); // Added this line
if (distance < 4) { // This is where the
LED On/Off happens
digitalWrite(led,HIGH); // When the
Red condition is met, the Green LED
should turn off
digitalWrite(led2,LOW);
}
else {
digitalWrite(led,LOW);
digitalWrite(led2,HIGH);
}
if (distance >= 200 || distance <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distance);
digitalWrite(trigPin, HIGH);
// delayMicroseconds(1000); - Removed
this line
delayMicroseconds(10); // Added this
line
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
Serial.println(" cm");
}
delay(500);
}
AVANCES
CÓDIGO
Este el el resultado Final de mi código para poder hacer mover mi carrito con un
sensor de proximidad.
const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;
int atras = 12;
int adelante = 11;
int izquierda = 10;
int derecha = 9;
#define Pecho 6
#define Ptrig 7
long duracion, distancia;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin (9600);
pinMode(Pecho, INPUT);
pinMode(Ptrig, OUTPUT);
pinMode(13, 1);
pinMode(adelante, OUTPUT);
}void go_atras()
{ digitalWrite(atras,HIGH);
digitalWrite(adelante,LOW);
}void alto()
{ digitalWrite(atras,LOW);
digitalWrite(adelante,LOW);
digitalWrite(izquierda,LOW);
digitalWrite(derecha,LOW);
go_izquierda();
delay(200);
}void movimiento2()
{ go_adelante();
delay(1000);
go_derecha();
delay(200);
}void loop() {
digitalWrite(Ptrig, LOW);
delayMicroseconds(2);
pinMode(atras, OUTPUT);
pinMode(izquierda, OUTPUT);
pinMode(derecha, OUTPUT);
} void go_adelante()
{ digitalWrite(adelante,HIGH);
digitalWrite(derecha,HIGH);
digitalWrite(atras,LOW);
digitalWrite(izquierda,LOW);
Serial.println("Peligro Objeto Cerca");
}void altoTotal()
{ digitalWrite(atras,LOW);
digitalWrite(adelante,LOW);
digitalWrite(izquierda,LOW);
digitalWrite(derecha,LOW);
}void go_izquierda()
{ digitalWrite(izquierda,HIGH);
digitalWrite(derecha,LOW);
}void go_derecha()
{ digitalWrite(derecha,HIGH); // turn
right motor on
digitalWrite(izquierda,LOW); // tune
left motor off
}void obstaculo()
{ digitalWrite(adelante,LOW);
digitalWrite(Ptrig, HIGH);
delayMicroseconds(10);
digitalWrite(Ptrig, LOW);
duracion = pulseIn(Pecho, HIGH);
distancia = (duracion/2) / 29;
if (distancia >= 101 || distancia <= 0){
Serial.println("Adelante, sin riesgos");
Serial.print(distancia);
Serial.println("cm");
digitalWrite(13, 0);
movimiento2();
delay(1000);*/
go_adelante();
delay(1000);
go_derecha();
delay(500);
go_izquierda();
delay(500);
go_derecha();
delay(500);
go_izquierda();
delay(500);
}
digitalWrite(derecha,LOW);
digitalWrite(izquierda,HIGH);
digitalWrite(atras,HIGH);
}void movimiento1()
{ go_adelante();
delay(1000);
go_derecha();
delay(200);
if (distancia <= 100 && distancia >= 1){
Serial.print(distancia);
Serial.println("cm");
digitalWrite(13, 1);
go_atras();
delay(100);
alto();
delay(4000);
obstaculo();
delay(1000);
} delay(400);
}
CONTROL (CORRECCION DE FALLAS)
Se Modifico toda la carcasa el carro, también se corrigio un problema con la batería del
carro ya que una pila de 9v no daba y se tubo que comprar una pila mas grande para
poder mover el carrito.
CONCLUCIÓN
Se cumplio el objetivo al generar un carrito autonomo capas de detectar movimiento,
tambien los conocimientos se adquirieron al investigar de manera profunda para poder
enterder como funcionaba el codigo arduino y sus componentes. El siguiente paso
conectarle unos servomotores para que el sensor tenga la opcion de detectar izquierda
y derecha.
REFERENCIAS
arduino. (1 de 1 de 2014). Arduino.cc. Obtenido de
http://www.arduino.cc/en/pmwiki.php?n=
http://ingeerick.weebly.com. (11 de 01 de 2013). http://ingeerick.weebly.com. Obtenido
de http://ingeerick.weebly.com/arduino/bluetooth-hc-06-configuracin-con-arduino
Ruben, J. (29 de 3 de 2014). www.geekfactory.mx. Obtenido de
http://www.geekfactory.mx/radio/bluetooth-hc-05-y-hc-06-tutorial-de-
configuracion/
Sánchez, E. L. (1 de 12 de 2012). Diseño de un sistema de control domótico. Valencia,
Valencia, España.
ANEXOS
http://www.instructables.com/id/Autonomous-Control-of-RC-Car-Using-
Arduino/step4/Hack-Into-The-Cars-Electronics/