Control de un Carro RC controlado por Arduino

Page 1

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

Justificación

5

Objetivo General

5

Objetivo Especifico

5

Marco teorico

6

Módulo Bluetooth Servo Motor Desarrollo

9 10 11

Requerimientos del Sistema

11

Ejecución (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


JUSTIFICACIÓN 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 micro controlador 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 construidas 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, será 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 micro controladores 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 micro controlador, 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 micro controladores o dispositivos. En otro artículo posterior veremos cómo 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 “HC05″, 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 potenciómetro 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 varía 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 micro servo 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.

EJECUCIÓN (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


imagen 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 enviar el carácter E, se pone en estado alto la salida del pin 13

Al enviar el carácter 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

if (distance < 4) { // This is where the LED On/Off happens

#define led 11 #define led2 10

digitalWrite(led,HIGH); // When the Red condition is met, the Green LED should turn off

void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT);

digitalWrite(led2,LOW); } else {

pinMode(echoPin, INPUT);

digitalWrite(led,LOW);

pinMode(led, OUTPUT);

digitalWrite(led2,HIGH);

pinMode(led2, OUTPUT); }void loop() {

} if (distance >= 200 || distance <= 0){

long duration, distance; digitalWrite(trigPin, LOW); // Added this line delayMicroseconds(2); // Added this line

Serial.println("Out of range"); } else { Serial.print(distance);


digitalWrite(trigPin, HIGH);

Serial.println(" cm");

// delayMicroseconds(1000); - Removed

}

this line

delay(500);

delayMicroseconds(10); // Added this line digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1;

AVANCES

}










CÓDIGO Este es el resultado Final de mi código para poder hacer mover mi carrito con un sensor de proximidad. const int buttonPin = 2;

}void go_atras()

const int ledPin = 13;

{ digitalWrite(atras,HIGH);

int buttonState = 0;

digitalWrite(adelante,LOW);

int atras = 12;

}void alto()

int adelante = 11;

{ digitalWrite(atras,LOW);

int izquierda = 10;

digitalWrite(adelante,LOW);

int derecha = 9;

digitalWrite(izquierda,LOW); digitalWrite(derecha,LOW);

#define Pecho 6 #define Ptrig 7

go_izquierda();

long duracion, distancia;

delay(200);

void setup() {

}void movimiento2()

pinMode(ledPin, OUTPUT);

{ go_adelante();

pinMode(buttonPin, INPUT);

delay(1000);

Serial.begin (9600);

go_derecha();

pinMode(Pecho, INPUT);

delay(200);

pinMode(Ptrig, OUTPUT);

}void loop() {

pinMode(13, 1);

digitalWrite(Ptrig, LOW);

pinMode(adelante, OUTPUT);

delayMicroseconds(2);


pinMode(atras, OUTPUT);

digitalWrite(Ptrig, HIGH);

pinMode(izquierda, OUTPUT);

delayMicroseconds(10);

pinMode(derecha, OUTPUT);

digitalWrite(Ptrig, LOW);

} void go_adelante()

duracion = pulseIn(Pecho, HIGH);

{ digitalWrite(adelante,HIGH);

distancia = (duracion/2) / 29;

digitalWrite(derecha,HIGH);

if (distancia >= 101 || distancia <= 0){

digitalWrite(atras,LOW);

Serial.println("Adelante, sin riesgos");

digitalWrite(izquierda,LOW);

Serial.print(distancia);

Serial.println("Peligro Objeto Cerca");

Serial.println("cm");

}void altoTotal()

digitalWrite(13, 0);

{ digitalWrite(atras,LOW);

movimiento2();

digitalWrite(adelante,LOW);

delay(1000);*/

digitalWrite(izquierda,LOW);

go_adelante();

digitalWrite(derecha,LOW);

delay(1000);

}void go_izquierda()

go_derecha();

{ digitalWrite(izquierda,HIGH);

delay(500);

digitalWrite(derecha,LOW);

go_izquierda();

}void go_derecha() { digitalWrite(derecha,HIGH);

delay(500); // turn

go_derecha();

right motor on digitalWrite(izquierda,LOW);

delay(500); // tune

go_izquierda();

left motor off delay(500); }void obstaculo() } { digitalWrite(adelante,LOW);


digitalWrite(derecha,LOW);

if (distancia <= 100 && distancia >= 1){

digitalWrite(izquierda,HIGH);

Serial.print(distancia);

digitalWrite(atras,HIGH);

Serial.println("cm");

}void movimiento1()

digitalWrite(13, 1);

{ go_adelante();

go_atras();

delay(1000);

delay(100);

go_derecha();

alto();

delay(200);

delay(4000); obstaculo(); delay(1000); } delay(400); }


CONTROL (CORRECCIÓN DE FALLAS) Se Modificó toda la carcasa el carro, también se corrigió un problema con la batería del carro ya que una pila de 9v no daba y se tuvo que comprar una pila más grande para poder mover el carrito.


CIERRE O PRUEBAS (RESULTADO)


Este es el resultado Final


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-deconfiguracion/ 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-UsingArduino/step4/Hack-Into-The-Cars-Electronics/


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.