Professional Documents
Culture Documents
AGUSTN
FACULTAD DE INGENIERA DE PRODUCCIN Y
SERVICIOS
ESCUELA PROFESIONAL DE INGENIERA
ELECTRNICA
MICROELECTRNICA EN RF
DISEO E IMPLEMENTACIN DE UN BRAZO ROBTICO
CONTROLADO POR ACCESO REMOTO
Docente:
- Ing. Humberto Salazar
Alumno:
- Escalante Quispe, Leonardo Rommel
2012
INTRODUCCIN
Los brazos robticos son creados con el fin de realizar tareas repetitivas, difciles, o
peligrosas; la mayora de usos se dan a nivel industrial donde ejecutan tareas programadas
para la produccin en una compaa. Aunque en algunos casos se crean con fines mdicos.
Muchos de los procesos de produccin llevan un nivel de peligro en algunas tareas, como lo
son la manipulacin de sustancias qumicas corrosivas o el manejo de elementos peligrosos
como materia prima para la elaboracin de fertilizantes, plaguicidas, combustibles y
productos qumicos (cido sulfrico, soda caustica, entre otros), y de haber un error
humano traera consecuencias graves, por esta razn el proyecto es disear y crear un
prototipo de un brazo robtico, con el fin de que pueda llegar a ser utilizado como
herramienta para realizar tareas peligrosas en estos procesos de produccin, y as lograr
minimizar los riesgos y accidentes en la ejecucin de este tipo de trabajos, desde este punto
de vista el brazo robtico puede llegar a tener gran aceptacin en compaas que traten con
productos qumicos. Ahora bien visto desde la parte empresarial la idea a un largo plazo es
poder fabricar estos brazos a partir del prototipo y poderlos alquilar a estas compaas.
JUSTIFICACIN
-
OBJETIVOS
GENERAL
INSTRUMENTOS
Ordenador personal.
Tablet o smartphone.
Mdulo bluetooth JY HC-06.
Arduino UNO.
Software para la creacin de la App.
Software especfico de arduino.
Shield para arduino UNO.
PROCEDIMIENTOS:
brazo).
Diseo del programa del arduino para el control de los servomotores en el entorno
de arduino (programacin en C).
Comprobacin del correcto funcionamiento del programa con los servos.
Configuracin del mdulo bluetooth con el arduino.
Diseo de la App mediante la herramienta App inventor 2 para la comunicacin
con el mdulo bluetooth (programacin por bloques).
Comprobacin del correcto funcionamiento de la App con el mdulo bluetooth y los
motores.
Diseo y construccin de la PCB para el shield del arduino UNO.
Diseo y construccin del brazo robtico (MDF).
Comprobacin del correcto funcionamiento del brazo robtico ya terminado.
Elaboracin de la documentacin del proyecto.
Presentacin del proyecto ms la documentacin.
COMPONENTES Y MATERIALES
BRAZO ROBTICO
-
6 Servomotores.
Cables y conectores.
Material para la estructura
Tornillera.
Arduino UNO.
Mdulo bluetooth.
Tira de zcalos y pines (Shield).
Placa de baquelita (Shield).
UNIDAD EMISORA
-
ESQUEMA
APLICACIN ANDROID
El desarrollo de la aplicacin se ha realizado con Google App Inventor. Es una aplicacin
de Google Labs para crear aplicaciones de software para el sistema operativo Android. De
forma visual y a partir de un conjunto de herramientas bsicas, el usuario puede ir
enlazando una serie de bloques para crear la aplicacin.
El diseo de la aplicacin Android se ha dividido en dos partes o ventanas, la primera
realiza la funcin de introduccin y la segunda contiene los componentes necesarios para el
control del brazo robtico.
MDULO BLUETOOTH
Los pines digitales 0 y 1 de la placa arduino son los que se utilizan para realizar la
comunicacin serie entre el microcontrolador y el mdulo HC-06.
El mdulo bluetooth HC-06 esta acoplado a una placa JY-MCU, la cual regula la de entrada
de 5v a 3,3v, que es con la que trabaja.
PROGRAMACIN DEL ARDUINO UNO
#include <Servo.h>
//Declaramos las variables de la clase servo.
Servo cintura;
Servo hombro;
Servo codo;
Servo munieca;
Servo gMunieca;
Servo pinza;
//Declaramos variables globales.
char comando;
unsigned posicion;
int movTiempo=15;
int angulo=0;
int datoUp=0;
int datoDown=0;
int grado1=0;
int grado2=0;
int grado3=0;
int grado4=0;
int grado5=0;
int grado6=0;
int a=0;
//Zona de configuracin al iniciar el programa.
void setup(){
Serial.begin(9600); // Abrimos puerto serial y establecemos
//velocidad.
cintura.attach(8); //Asociamos la variable servo a un pin del arduino
hombro.attach(9);// siendo los pines que pueden generar
//PWM:3,5,6,9,10 y 11.
codo.attach(10);
munieca.attach(11);
gMunieca.attach(12);
pinza.attach(13);
delay(500);
posreposo(); // Llamamos a una funcin la cual posicionar
// el brazo de una forma determinada.
}
void loop()
{
Serial.flush(); //Vaca el bfer de entrada de datos en serie.
if(Serial.available()>0)//Preguntamos si el puerto serie est
//disponible y si contiene algn dato.
{
comando = Serial.read();//Captura 1 byte como caracter desde el
//puerto serie.
posicion = Serial .parseInt();//Devuelve el primer numero entero
//del puerto serie.
switch(comando)
{
//Movimiento Cintura
case 'A':
movCintura(posicion); //Llamamos a una funcin introduciendo
break; //como argumento el ngulo del servo.
//Movimiento Hombro. //La funcin realizar el movimiento del
//servo a la
case 'B': //posicin introducida.
movHombro(posicion);
break;
//Movimiento Codo.
case 'C':
movCodo(posicion);
break;
//Movimiento Mueca.
case 'D':
movMunieca(posicion);
break;
//Movimiento Cmueca.
case 'E':
movGmunieca(posicion);
break;
//Movimiento Pinza.
case 'F':
movPinza(posicion);
break;
//Movimiento Conexin.
case 'G':
posconectar();
break;
//Movimiento Reposo/Desconexin.
case 'H':
posreposo();
break;
case 'J':
programa();
break;
case 'M':
a=0;
preestablecido();
break;
}
}
}
//Funcin movimiento Reposo/Desconexin.
void posreposo()
{
movPinza(90);
movGmunieca(167);
movHombro(81);
movCodo(87);
movMunieca(112);
movCintura(29);
}
//Funcin movimiento conexin
void posconectar()
{
movCintura(90);
movCodo(90);
movHombro(90);
movMunieca(100);
movGmunieca(90);
movPinza(60);
}
//Movimiento Servomotor cintura
void movCintura(int grado)
{
int patron = cintura.read(); //Primero almacenamos la posicin del
//servo en la variable patro.
if(patron>grado) //Si el valor de la variable patron
//es mayor que la posicin
{ //que le hemos mandado, entra en este
//buble for.
for(int i=patron;i>=grado;i--)//Este ir decrementando la variable
//de control hasta llegar
{ //a la posicin establecida.
cintura.write(i); //Cada decremento de la variable de
//control(i) se utiliza para establecer
delay(movTiempo); // el servo a ese ngulo.
}
}else
{ //Si de lo contrario la variable
//patron es menor que la posicin
for(int i=patron;i<=grado;i++)//a la que queremos que se dirija,
//entra en este otro for que va
{ // evolucionando de manera
//ascendente.
cintura.write(i);
delay(movTiempo);
}
}
}
// Movimiento Servomotor hombro
void movHombro(int grado)
{
int patron = hombro.read();
if(patron>grado)
{
for(int i=patron;i>=grado;i--)
{
hombro.write(i);
delay(movTiempo);
}
}else
{
for(int i=patron;i<=grado;i++)
{
hombro.write(i);
delay(movTiempo);
}
}
}
// Movimiento Servomotor codo
void movCodo(int grado)
{
int patron = codo.read();
if(patron>grado)
{
for(int i=patron;i>=grado;i--)
{
codo.write(i);
delay(movTiempo);
}
}else
{
for(int i=patron;i<=grado;i++)
{
codo.write(i);
delay(movTiempo);
}
}
}
// Movimiento Servomotor Mueca
void movMunieca(int grado)
{
int patron = munieca.read();
if(patron>grado)
{
for(int i=patron;i>=grado;i--)
{
munieca.write(i);
delay(movTiempo);
}
}else
{
for(int i=patron;i<=grado;i++)
{
munieca.write(i);
delay(movTiempo);
}
}
}
}else
{
datoUp=61;
datoDown=68;
}
movIzq(datoUp);
movDer(datoDown);
cont++;
}
}
void movIzq(int dato)
{
movCintura(115);
movHombro(dato);
movCodo(103);
movMunieca(99);
movGmunieca(88);
movPinza(53);
}
void movDer(int dato)
{
movCintura(56);
movHombro(dato);
movCodo(103);
movMunieca(99);
movGmunieca(88);
movPinza(31);
}
void preestablecido()
{
if(a==0){
grado1=88;
grado2=90;
grado3=90;
grado4=90;
grado5=100;
grado6=105;
for(int i = 0; i<=40; i++){
grado1=(grado1 - 0);
grado2=(grado2 - 2);
grado3=(grado3 - 1);
grado4=(grado4 + 0);
grado5=(grado5 - 0);
grado6=(grado6 - 0);
cintura.write(grado1);
hombro.write(grado2);
codo.write(grado3);
munieca.write(grado4);
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
for(int i = 0; i<=5; i++){
grado1=(grado1 - 0);
grado2=(grado2 - 2);
grado3=(grado3 - 1);
grado4=(grado4 + 2);
grado5=(grado5 - 0);
grado6=(grado6 - 0);
cintura.write(grado1);
hombro.write(grado2);
codo.write(grado3);
munieca.write(grado4);
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
for(int i = 0; i<=25; i++){
grado1=(grado1 - 0);
grado2=(grado2 - 0);
grado3=(grado3 - 0);
grado4=(grado4 + 1);
grado5=(grado5 - 0);
grado6=(grado6 - 0);
cintura.write(grado1);
hombro.write(grado2);
codo.write(grado3);
munieca.write(grado4);
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
for(int i = 0; i<=30; i++){
grado1=(grado1 - 0);
grado2=(grado2 - 0);
grado3=(grado3 - 0);
grado4=(grado4 - 0);
grado5=(grado5 - 0);
grado6=(grado6 - 2);
cintura.write(grado1);
hombro.write(grado2);
codo.write(grado3);
munieca.write(grado4);
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
for(int i = 0; i<=10; i++){
grado1=(grado1 - 0);
grado2=(grado2 + 1);
grado3=(grado3 - 1);
grado4=(grado4 - 0);
grado5=(grado5 - 0);
grado6=(grado6 - 0);
cintura.write(grado1);
hombro.write(grado2);
codo.write(grado3);
munieca.write(grado4);
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
for(int i = 0; i<=30; i++){
grado1=(grado1 - 0);
grado2=(grado2 - 0);
grado3=(grado3 - 0);
grado4=(grado4 - 0);
grado5=(grado5 - 0);
grado6=(grado6 + 2);
cintura.write(grado1);
hombro.write(grado2);
codo.write(grado3);
munieca.write(grado4);
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
for(int i = 0; i<=20; i++){
grado1=(grado1 - 0);
grado2=(grado2 + 1);
grado3=(grado3 - 1);
grado4=(grado4 - 0);
grado5=(grado5 - 0);
grado6=(grado6 - 0);
cintura.write(grado1);
hombro.write(grado2);
codo.write(grado3);
munieca.write(grado4);
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
for(int i = 0; i<=10; i++){
grado1=(grado1 + 2);
grado2=(grado2 + 1);
grado3=(grado3 + 2);
grado4=(grado4 - 1);
grado5=(grado5 - 2);
grado6=(grado6 + 0);
cintura.write(grado1);
hombro.write(grado2);
codo.write(grado3);
munieca.write(grado4);
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
for(int i = 0; i<=25; i++){
grado1=(grado1 + 2);
grado2=(grado2 + 2);
grado3=(grado3 + 1);
grado4=(grado4 - 0);
grado5=(grado5 - 0);
grado6=(grado6 + 0);
cintura.write(grado1);
hombro.write(grado2);
codo.write(grado3);
munieca.write(grado4);
gMunieca.write(grado5);
pinza.write(grado6);
delay(50);
}
}
a=1;
}
BRAZO ROBTICO
Este proyecto se basa en la automatizacin de un brazo robtico de 6 grados de libertad, el
cual se realiza mediante la interface conocida como Arduino.
En este Proyecto se unifica tanto la Electrnica con la Informtica, logrando as la
Automatizacin del brazo.
ANLISIS DEL BRAZO
El brazo robtico posee 6 grados de libertad. A continuacin se muestra un esquema con los
seis ejes de giro que posee el brazo. Se puede observar que los ejes q1, q4 y q6 son giros
respecto a la vertical mientras que q2, q3 y q5 son giros respecto a la horizontal.
50cm
Tiene adems de los circuitos de control un potencimetro conectado al eje central del
motor. Este potencimetro permite a la circuitera de control, supervisar el ngulo actual del
servo motor. Si el eje est en el ngulo correcto, entonces el motor est apagado. Si el
circuito chequea que el ngulo no es correcto, el motor volver a la direccin correcta,
hasta llegar al ngulo que es correcto. El eje del servo es capaz de llegar alrededor de los
180 grados. Normalmente, en algunos llega a los 210 grados, pero vara segn el fabricante.
Un servo normal se usa para controlar un movimiento angular de entre 0 y 180 grados. Un
servo normal no es mecnicamente capaz de retornar a su lugar, si hay un mayor peso que
el sugerido por las especificaciones del fabricante.
Los servomotores tienen 3 terminales:
Terminal positivo: Recibe la alimentacin del motor (4 a 8 voltios, son de color Rojo)
Terminal negativo: Referencia tierra del motor (0 voltios, son de color Negro)
Entrada de seal: Recibe la seal de control del motor (son de color Naranja).
ESPECIFICACIONES DE LOS ELEMENTOS A USAR
MG996R
SG90
ARDUINO UNO
COMPRA DE MATERIALES
ARDUINO UNO
SERVOMOTORES
CONEXIONADO
BIBLIOGRAFA
CONCLUSIONES
-
POSIBLES MEJORAS
- Controlar el brazo robot a distancia mediante el sensor Kinect, el cual nos provee un
-