Documente Academic
Documente Profesional
Documente Cultură
autnomo
//Integrantes
Lilian Rosales
201330006-5
Katrina Stamulis
201330003-0
Matko Milovic
201330007-3
Felipe Hurtado
201330010-3
Juan Carlos Cspedes
201330004-9
//Asignatura
Introduccin a la Ingeniera
//Fecha
11 de septiembre de 2013
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
1. Introduccin
En el siguiente trabajo mostraremos el proyecto realizado en el ramo de Introduccin a la
Ingeniera, por cierto primer desafo de ingeniera para nosotros, en el cual se nos peda
realizar un proyecto con la Raspberry Pi.
En este contexto, nos juntamos a discutir la lluvia de ideas acerca de que podra ser nuestro
proyecto. As llegamos a la conclusin de que lo mejor sera hacer un robot que se moviera
y que si es que detectaba un objeto deba girar para de esta manera esquivarlo,
nombrndolo oficialmente en ese momento como Tiguer.bot. Esta idea se nos ocurre
tambin gracias a la experiencia anterior de tres de los integrantes del grupo al realizar un
proyecto similar pero solo con Arduino.
Aqu viene el desafo del proyecto el cual es que la Raspberry Pi sea quien posea la
inteligencia para que el robot sepa si continuar su movimiento recto o girar, esto
incluyendo tambin el uso de un Arduino, pero solo cumpliendo la funcin de ejecutar las
ordenes de Raspberry Pi, y debido a esto fue que se debi cambiar mucho el proyecto
durante el proceso de construccin con respecto a lo pensado en un inicio para obtener el
resultado planteado.
Todo lo anterior se explicar a modo de tutorial con mayores detalles en las prximas
pginas, adems de mostrar una breve descripcin de los materiales utilizados y la
metodologa del trabajo.
2. Objetivos
2.1.
Objetivo General
Objetivos Especficos
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
3. Metodologa
3.1. Hardware utilizado:
Raspberry Pi
Arduino UNO
Sensor de ultrasonido SRF04
Servomotor HS-322
Motor DC
LED
Transistor NP2222
El desafo de este trabajo fue utilizar Raspberry Pi como controlador principal, por lo que
toda la inteligencia del robot, el cdigo principal, se encuentra en la RasPi, y la Arduino
queda relegada a una ejecutora de lo que RasPi ordene. Estas tarjetas estarn conectadas
va puerto serial con un cable micro-USB USB-A. Desde la Arduino se controla el
servomotor y el sensor de ultrasonido, mientras que el RasPi controlar el motor DC y un
par de LEDs.
3.2. Software utilizado:
El software utilizado para este proyecto es el lenguaje de programacin C, junto al lenguaje
propio de Arduino, que resulta casi idntico a C. Estos lenguajes son utilizados a bajo nivel,
especialmente el de Arduino. La Raspberry Pi fue cargada con libreras externas a las de
estndar ANSI-C. Adems de lo mencionado, no se hizo uso de otro software.
3.3. Proceso
-Planteamiento de un objetivo
-Abstraccin de su funcionamiento
-Trabajo terico de procesos y relacin con el medio
-Contrastacin de lo ideal con lo posible
-Ajustes a la teora, para poder llevarla a la realidad
-Realizacin de un prototipo funcional
-Perfeccionar el prototipo para acrcalo al ideal inicial
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
mecnico del robot para lograr incluir todo en el menor espacio posible. Una vez
ensamblado todo, podemos decir que estamos en presencia de Tiguer.bot Alpha
4. Componentes
Raspberry Pi modelo B
Es un minicomputador de bajo costo con
multiples utilidades, que posee una RAM de
512 MB y CPU de 700 Mhz (se le puede hacer
overclocking). Las ventajas de utilizar
Raspberry pi residen en su conectividad,
pudiendo transmitir informacin via internet,
usb, etc.
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Motor DC 5V
Motor de corriente continua de 5V que
utilizamos para dar potencia al robot.
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
5. Tutorial
5.1. En busca de la inteligencia
El primer paso es conocer el algoritmo que se quiere utilizar, el cual ser la
inteligencia que tendr el robot:
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
3,7 v
1 - Linux and the serial port. Dr. Juan Gonzlez Gmez. Enero 2009
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
El trabajo liberado bajo GPL incluye todas las librerias necesarias para activar o desactivar el
puerto serial y para enviar y recibir informacin. Nosotros modificamos parte del cdigo,
especficamente el ejemplo de una mini-terminal.
Por otro lado en Arduino utilizams tres cdigos ejemplo del IDE, blink, knob y Ping. En el
caso de Ping tuvimos que adaptarlo al modelo de sensor que teniamos. Luego de unir todo
dentro de un mismo cdigo y cambiar el tipo de la variable respuesta del sensor, de un
long a un byte. Ese tipo permite 256 niveles de proximidad, siendo representables
como los caracteres de la tabla ASCII.
La comunicacin serial efectuada esta pensada para ir byte a byte, es decir, esta pensada
en char, es por tal razn que modificamos la salida serial con la que se entregaba la
distancia, puesto que es mucho ms fcil analizarlo por byte que juntar todos los bytes
requeridos para una variable long y luego procesarlas para tener su significado. El margen
de distancia con el que trabajamos era suficientemente amplio como para permitir un
pequeo margen de error en la entrega de distancia, el sensor mide hasta 300 cm.,
mientras que el byte nos otorga los 256 niveles en los cuales se repartir la distancia
mxima.
El espectro de accin del robot es de infinito hasta 00011111, que es la representacin
binaria con la cual se procesa las distancias en RPi.
5.4. Descargando el cdigo
Para proceder, se debe descargar el IDE de Arduino para programarlo y las libreras del
trabajo del Dr. Juan Gonzlez Gmez.
Comenzaremos explicando cmo escribir el cdigo para Arduino, se deben declarar donde
estarn los pines, esto es si son salidas o entradas e iniciar la comunicacin serial.
Activar el sensor y obtener la respuesta de la distancia, esta enviarla por el puerto serial y
leer el puerto en busca de comunicacin de entrada, llmese orden a ejecutar. Luego de
eso viene la ejecucin.
Mientras que en RPi deberemos descargar el cdigo ejecutando sudo wget
www.iearobotics.com/wiki/images/4/4b/Serial-1.0-bin.tar.gz y la libreria Wiring Pi
ejecutando git clone git://git.drogon.net/WiringPi
Luego de eso lo que haremos es descomprimir y desempaquetar el primer archivo
descargado, con tar xvf Serial-1.0-tar.gz ; ingresar al directorio creado y dentro al subdirectorio term_ex aqu debemos modificar el archivo term.c para adaptarlo al algoritmo
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
que hemos generado. En nuestro caso, modificamos el cdigo para que al ejecutarlo
pregunte al usuario si desea un control manual, semi-automtico o automtico.
Como se podr ver ms adelante en la documentacin lo que hacemos dentro del cdigo
es adaptar los procesos de lectura, que en el caso manual se omiten y en el semiautomtico solo tienen relevancia en la eventualidad de estar en una distancia corta. En el
caso automtico, la distancia que se lea, implica una orden asociada a la categora en que
se encuentra, es decir, si es distancia larga, el vehculo se autoriza a continuar su trayecto.
En caso contrario RPi ordena el cambio de ruta. En el caso semi-automtico solo se toma en
cuenta la distancia cuando es corta y es la nica orden autnoma que se emite. En el
directorio padre ejecutar make.
5.5. Montaje
Para proceder a crear el auto es necesario darle una estructura que lo soporte y que
idealmente sea ligera, resistente y optimizar al mnimo el espacio requerido. Se puede
utilizar una tabla de poco espesor y resistencia ptima, como sugerencia.
Se debe realizar un esquema de montaje con el fin de acotar el espacio de uso y as tener
presente los pasos para realizar el armado en s.
Figura 1: Este es un modelo de la base para el auto, donde los rectngulos grises
representan espacios vacos donde se debe recortar para alivianar el peso de la tabla y
pasar cables, entre otros usos.
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
7. Otros
7.1 Ventajas/Desventajas
Ventajas
Responde al entorno:
1. Si encuentra un obstculo a cierta distancia es capaz de esquivarlo.
2. Si no encuentra obstculo alguno, sigue su ruta en lnea recta.
Podran implementarse un nmero de Tiguer.bots; esto con el fin de crear una
manada, la cual sea capaz de no chocar entre s, imitando el comportamiento
bsico de un tigre cachorro.
Teniendo en cuenta un motor DC con la fuerza de torque suficiente para mover
el cuerpo del robot, puede llegar a ser bastante veloz y cumplir con su funcin
eficazmente.
Desventajas
El proyecto actualmente tiene un retraso de 5 a 8 segundos entre el instante de
recibir la seal del sensor y en responder ante ste, lo cual entorpece bastante
el comportamiento adecuado de Tiguer.bot.
Al desarrollar el proyecto no se habilitan las mltiples funcionalidades de RPi;
por lo cual se pierde bastante potencial de sta.
El costo de construir un Tiguer.bot es bastante alto, cerca de unos 88 USD
debido a los diversos dispositivos que se utilizan para su correcto
funcionamiento, adems del trabajo de programacin, diseo del robot y
materiales de montaje.
La rentabilidad como negocio es nula, ya que el proyecto fue ideado
enfocndose en los mbitos acadmicos.
Al tener fines acadmicos, el fondo de inversin para un futuro mejoramiento
del proyecto se ve bastante limitado; solo si se cambia el enfoque a un modelo
ms comerciable podra darse el propsito de mantener el proyecto de una
manera un poco ms estable.
La poca funcionalidad de Tiguer.bot, ya que fue pensado solo con el fin de no
colisionar con objetos, manteniendo una distancia mnima predefinida.
7.2. Rentabilidad
El costo unitario de cada bot, fue estimado en 88 USD, un precio bastante elevado para un
dispositivo de caractersticas tan simples. Si bien se puede reducir el precio gracias a la
fabricacin en masa y en serie, tal procedimiento slo conllevara a un descenso de los
costos de manufactura, llmese el recurso humano. La compra en masa de materiales y
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
componentes, aunque es posible, no genera una cada significativa, los primeros, porque su
aporte en el costo final es menor, mientras que el segundo no permite un mayor descenso
en su costo. Finalmente, el valor del producto no justifica el potencial precio con el que
saldra al mercado. Es esta la razn por la cual el proyecto no es comercialmente viable y
sus objetivos son netamente acadmicos.
8. Documentacin
8.1. Cdigo principal en RPi
#include
#include
#include
#include
<termios.h>
<stdio.h>
<stdlib.h>
<string.h>
#include "serial.h"
#include "console_io.h"
//-----------------//-- CONSTANTS
//-----------------//--TIMEOUT in micro-sec
#define TIMEOUT 10000
//-------------------//-- Global variables
//-------------------//-- Serial port descriptor
int serial_fd;
/**************************************************************************/
/* Main loop. When the user press a key, it is sent to the serial port. */
/* When a character is received from the serial port, it is printed on */
/* the screen
*/
/**************************************************************************/
void term(void)
{
char c[1];
char rec[1];
int n;
//-- Main loop
do {
//-- Poll the serial port. A character has been received?
n=serial_read(serial_fd,rec,1,TIMEOUT);
//-- If so, print it on the screen!!
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
if (n==1) {
if(rec[0]<'1')
serial_send(serial_fd,"G",1);
else
serial_send(serial_fd,"F",1);
fflush(stdout);
}
//-- Repeat until the user press the ESC key
} while (c[0]!=ESC);
};
void termm(void)
{
char c[1];
char rec[1];
int n;
//-- Main loop
do {
//-- if there is a key pressed by the user
if (console_io_kbhit()) {
//-- Read the character
c[0]=console_io_getch();
//-- Send the character to the serial port, if different from ESC
if (c[0]!=ESC)
serial_send(serial_fd,c,1);
}
//-- Repeat until the user press the ESC key
} while (c[0]!=ESC);
}
void terms(void)
{
char c[1];
char rec[1];
int n;
//-- Main loop
do {
//-- Poll the serial port. A character has been received?
n=serial_read(serial_fd,rec,1,TIMEOUT);
//-- If so, print it on the screen!!
if (n==1) {
if(rec[0]<'1')
serial_send(serial_fd,"G",1);
else{
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
//-- if there is a key pressed by the user
if (console_io_kbhit()) {
//-- Read the character
c[0]=console_io_getch();
//-- Send the character to the serial port, if different from ESC
if (c[0]!=ESC)
serial_send(serial_fd,c,1);
}
fflush(stdout);
//-- Repeat until the user press the ESC key
} while (c[0]!=ESC);
}
/**********************/
/* MAIN PROGRAM
*/
/**********************/
int main (int argc, char* argv[])
{
char mode,
//-- Check if the serial device name is given
if (argc<2) {
printf ("No serial device name is given\n");
exit(0);
}
//-- Open the serial port
serial_fd=serial_open(argv[1],B9600);
//-- Error checking
if (serial_fd==-1) {
printf ("Error opening the serial device: %s\n",argv[1]);
perror("OPEN");
exit(0);
}
//-- Configure the console for using the keyboard
console_io_open();
//--Ask the mode
printf("What is the mode you want to use?(M,S,A)\n");
scanf("%c",&mode);
//-- Execute the main loop
printf ("Press the ESC key to quit\n");
if(mode == "A")
term();
if(mode == "M")
termm();
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
if(mode == "S")
terms();
//-- Restore the previous console configuration
console_io_close();
//-- Close the serial port
serial_close(serial_fd);
return 0;
}
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
else if(c == 'F'){ //orden seguir adelante
digitalWrite(LED,LOW);
servo.write(90);
}
}
}
byte microsecondsToCentimeters(long microseconds){
return microseconds / 29 / 2;
}
9. Conclusin
En el transcurso de este trabajo adems de todo lo aplicado a la Raspberry Pi y al hecho de
que nos sirvi para poner en practica nuestro aprendizaje en programacin en C, tuvimos la
posibilidad de aplicar y/o aprender ms acerca de la electrnica relacionada con todas las
conexiones necesarias para lograr tener un Arduino y una Raspberry Pi funcionando juntas
con la energa suficiente y tambin para colocar los respectivos motores conectados para
coordinar su funcionamiento. Adems este trabajo nos trajo un inconveniente inesperado a
la hora de disear a Tiguer.bot porque a la hora de tener el algoritmo y el cdigo listo
llego la hora de unir todo el aparataje y esto requiri un diseo previo el cual se nos
complic ms de la cuenta en su momento.
El proyecto mostrado, al utilizar Raspberry Pi como plataforma principal puede tener una
infinidad de usos adicionales al que le dimos nosotros en este caso, esto gracias a la gran
conectividad de Raspberry Pi por su puerto Ethernet y por sus puertos USB, los que
permitiran hipotticamente controlar el Tiguer.bot remotamente mediante conexin
USB a Bluetooth o Wi-Fi, adems de poder conectar algunos otros sensores a la Raspberry
Pi para que esta detecte cambios de otro tipo en el ambiente como un sensor de
temperatura por ejemplo y en ese escenario hacer un cdigo para dicho contexto.
Con todo lo anterior nos qued ms que claro lo til que es este aparato inventado hace
pocos aos y la multifuncionalidad que se puede llegar a obtener de forma compacta.
Tiguer.bot
v.Alpha
Introduccin a la Ingeniera
10. Bibliografa
http://www.iearobotics.com/wiki/index.php?title=Tutorial:Puerto_serie_en_Linux
Linux and the serial port. Dr. Juan Gonzlez Gmez. Enero 2009.