Está en la página 1de 6

Mano robotica controlado por una mano.

Este experimento se basa en dos partes importantes.

 primero en implementar los sensores los cuales nos sirven para poder enviar las
señales del movimiento de la mano.
 Segundo en implementar la mano robótica a base de servomotores quienes recibirá los
impulsos que reflejaran la señal enviada por la mano atreves de un mecanismo de
cuerdas y engranes.

SOFWARE:

El lenguaje de programación utilizado en el IDE está basado en Wiring. Como se verá en los dos
siguientes apartados, cualquier sketch de Arduino ha de tener, al menos, dos funciones: setup y
loop. La función setup será la primera en ejecutarse y solamente lo hará una vez. La función
loop, en cambio, contiene la parte principal del código y se ejecutará indefinidamente hasta
que se cargue otro programa, se desconecte la alimentación o se pulse el botón Reset de la
placa. Además, las líneas de código al inicio del sketch para definir variables globales o incluir
librerías.

 Módulo controlador .- Las funciones principales que tiene que asegurar el código
cargado al Arduino del módulo controlador son las siguientes: realizar unas
mediciones precisas de los valores de tensión de los sensores de flexión, convertir
dichos valores en un ángulo de giro (de 0 a 180) y enviarlos inalámbricamente hasta el
brazo robótico.
 Mano robótica.- Las funciones que ha de unir en el sketch, mandar a cada servomotor
la orden de los grados que debe moverse.

HARDWARE:

 Implementación de modulo controlador.

Primero, Montaje del guante:

o Cortar 10 cables de, al menos, 16 cm de largo cada uno.


o Soldar los cables a los extremos de los sensores de flexión (ver figura).

o Coser los sensores de flexión a los dedos del guante.


o Ponerse el guante (ya con los sensores en él), colocar el PCB en la parte inferior
del dorso del guante, doblar los dedos, situar cada cable sobre el agujero que
le correspondería en el PCB.
o Quitarse el guante y cortar cada cable por la marca realizada.
o Soldar los extremos de los cables provenientes de los sensores de flexión a los
orificios (pads) correspondientes del PCB. Cortar 7 cables: 5 de 20 cm de
longitud, 1 de 18.5 cm y otro de 22.5cm.
o Soldar los 5 cables de 20 cm en los 5 agujeros dispuestos en línea
inmediatamente a continuación de las resistencias del PCB, el de 18.5cm en el
pad más alejado de los dedos y el de 22.5cm en el más cercano a ellos. Coser
las 4 esquinas de la placa del PCB a la parte inferior del guante.

o Cargar el sketch al microcontrolador de Arduino.


o Conectar los 7 cables salientes del circuito integrado.

o Finalmente, se ha de conectar la fuente a Arduino, que lo alimentará,


permitiendo que se comience a ejecutar el código cargado.
 Implementación de mano robótica.

Post-procesado de las piezas imprimidas:

Taladrar los agujeros que lo requieran, especialmente los de la mano. El resto


de agujeros de las piezas Palma1, Palma2, así como para los presentes en el pulgar y el
enganche para su unión con Palma1.

Montaje de la mano:
o Pegar las dos partes de las falanges de los dedos entre sí
o Introducir hilo de pescar por los agujeros de la penúltima parte de los dedos. A
continuación, anudarlos generosamente.
Anudado de los hilos en las puntas de los dedos

o Introducir los hilos a través de las falanges de los dedos y por el interior de la palma de
la mano, hasta sacar los 10 hilos por los 3 agujeros con que cuenta la pieza
denominada Palma1 en su parte más cercana a la muñeca.
o Unir las falanges de los dedos entre sí y con la palma de la mano; las dos piezas de
menor tamaño de la palma (denominadas Palma2) con la de mayor tamaño (Palma1)
mediante un tornillo de métrica 8 y 8 cm de longitud y unir el pulgar a la palma
(Palma1) con un tornillo de métrica 8 y 5 cm de longitud.
o Atornillar las covers de la palma y el pulgar.
o Pegar las covers de los dedos índice, corazón, anular y meñique.

Montaje del antebrazo:


o Pegar la muñeca al enganche, pegar la muñeca a la parte del antebrazo destinada al
alojamiento de los servos (denominada Antebrazo Servos), manteniendo las dos partes
unidas por gomas elásticas durante varias horas.
o Introducir, con la ayuda de unas pinzas, los hilos provenientes de los dedos, en primer
lugar por los agujeros del enganche y, posteriormente por los colocados a modo de
guía en la parte superior de la muñeca.
o Pegar las piezas Antebrazo Servos
o Unir el antebrazo con la mano mediante un tornillo de métrica 8 y 6 cm de longitud
que conectará las partes Palma1 y Enganche
Montaje de los servos:
o Anclaje de los 5 servos, extrayendo sus tres cables por el hueco correspondiente en
cada caso.
o Colocar los engranajes impresos en los servos.
o Hacer las conexiones de los servos al arduino. Conectar los servos encargados de
controlar el pulgar, índice, corazón, anular y meñique a los pins 2, 4, 6, 8 y 10 del
shield.
o Tensar los hilos.
o Conectar la alimentación al arduino.

RESULTADOS

Software.

(reemplazar coodigo coompleto)

En las primeras líneas de código se definen 4 variables globales: flexSensor, minim, maxim y
sensorvalue. Cada una de ellas ha de contar con 5 valores, uno por dedo, por lo se han definido
como vectores de longitud 5, obteniéndose en la práctica 20 variables globales. El primer
vector, flexSensor, contiene 5 valores enteros y constantes (const int) que especifican los pins
en los que se ha conectado cada sensor. Debido a que la señal enviada por los sensores es
analógica, se han seleccionado los 5 primeros pins analógicos de la placa Arduino: A0, A1, A2,
A3 y A4. El segundo y tercer vectores serán los encargados de almacenar los valores máximos y
mínimos de tensión detectados por cada sensor. Sus valores serán también números enteros
pero cuyos valores establecidos inicialmente podrán ser modificados más adelante (variable
tipo int). Por último se ha definido un vector vacío de longitud 5 denominado sensorvalue, en
el cual se almacenarán los valores de tensión leídos por los sensores, en forma de números
enteros entre 0 y 1023.

La función setup se utilizará para establecer la velocidad de transmisión de datos en serie


(baud rate) en 9600 bits por segundo y realizar la calibración de los sensores del guante. El
establecimiento de la velocidad de la comunicación en serie se llevará a cabo gracias a la
función Serial.begin.

Mientras que en la calibración, por su parte, se utilizará un bucle while, que solo se ejecutará
si el valor devuelto por la función millis, que mide los milisegundos transcurridos desde el inicio
del programa, es menor que 10000. A continuación existe un bucle for que, como indica la
línea de código entre paréntesis, se ejecutará para los valores 0, 1, 2, 3 y 4 de la variable index,
variable entera (int) creada con el objetivo de posibilitar el acceso a cada una de las posiciones
de los vectores. Tras ello, la función analogRead lee el valor de tensión recibido por cada uno
de los pins analógicos a los que se ha conectado un sensor. Valores que se almacenarán en el
vector sensorvalue, respetando su orden de lectura.

Tras ello, gracias a las dos funciones if se comparará el valor de tensión medido en cada dedo
con los valores mínimo y máximo disponibles hasta el momento para dicho dedo. De esta
forma si el nuevo valor es menor que el mínimo o mayor que el máximo, este se establecerá
como nuevo mínimo o máximo, respectivamente. El último comando de la función setup,
ordena que se repita la lectura del valor de la tensión y su comparación con los máximos y
mínimos disponibles cada 20 milisegundos.

Pasados 10 segundos, los valores máximos y mínimos habrán sido establecidos y se ejecutará la
función loop. La primera acción a realizar es la definición de un nuevo vector vacío
denominado servoposition, encargado de almacenar el número de grados que se debe mover
cada servomotor. Se usa bucle for que, como el anterior, se ejecutará cuando la variable local
index tome los valores 0, 1, 2, 3 o 4. La siguiente línea de código se encargará de leer el valor
de tensión en cada pin mediante el comando analogRead y, del mismo modo que se hacía en la
función setup, de almacenarlos en el vector sensorvalue.

A continuación es necesario transformar el valor de tensión medido, un número entero entre el


mínimo y el máximo de cada sensor, en un número de grados, entre 0 y 180. Para ello se
utilizará la función map, que realizará una interpolación lineal del primer valor entre
paréntesis, que está comprendido entre los dos siguientes (mínimo y máximo, en este orden)
para llevarlo a un nuevo intervalo delimitado por los dos últimos valores entre paréntesis
(mínimo y máximo, respectivamente). Es decir, los argumentos de la función map son (value,
fromLow, fromHigh, toLow, toHigh). Sin embargo, se han sumado 30 puntos al mínimo y se le
han restado 10 al máximo. Esto se ha llevado a cabo para estrechar ligeramente el intervalo,
facilitando que se llegue a las posiciones finales, es decir, el dedo completamente estirado o
completamente encogido, sin necesidad de alcanzar en cada ocasión a los valores extremos.
Debido a que cuando el dedo se encoge tiene que vencer la resistencia añadida debida a su
propio peso, el intervalo se ha reducido en mayor medida por su parte inferior, ya que cuando
el dedo esté encogido, la tensión leída por Arduino será menor. A continuación, mediante la
función constrain, se evitará que existan valores fuera del nuevo intervalo, 0- 180, igualando a
0 los valores por menores que él y a 180 los superiores.

El siguiente paso consistirá en enviar los valores del vector servoposition al brazo robótico.

MANO ROBOTICA
Primero importamos librería servos en el sketch, que permite acoplar y manejar servos
fácilmente gracias a una serie de funciones específicas para ello. En las líneas siguientes se
definen los 5 servomotores que se utilizarán gracias a un vector global de longitud 5,
denominado servo.

Como en el caso del módulo controlador, la función setup tiene dos funciones. La primera de
ellas es establecer la baud rate o velocidad de transmisión de datos en serie igual a la del
emisor, es decir, 9600 bits por segundo. La segunda consiste en la declaración de los pins en los
que se conectará cada servomotor. Para ello, aprovechando una vez más las ventajas que
ofrecen los vectores, se recurre a un bucle for, el cual se ejecutará cuando la variable local i
(que se ha definido simultáneamente a su aplicación en el bucle) tome los valores 0, 1, 2, 3 ó 4.
La función de la librería que permite especificar los pins en los que habrá servomotores
conectados es la attach. Debido a que se ha decidido dejar un pin de separación entre cada
servomotor y a que hay que empezar por el 2 (pues el 0 y el 1 están reservados para la
recepción y transmisión serial de datos, RX y TX, respectivamente) ha sido necesaria la
introducción del algoritmo 2+2i, que asegura que los servos estarán conectados en los pins 2,
4, 6, 8 y 10.

En la función loop, que se ejecutará indefinidamente. se utilizará un bucle for que, como en el
caso anterior, se ejecutará para los valores 0, 1, 2, 3 y 4 de la variable local index. En él se
recurrirá a la función servo.write para enviar a cada servomotor la orden que le indique la
posición (0-180 grados) en que se tiene que colocar.

HARDWARE.

Modulo controlador

(REEMPLAZAR IMAGEN)

Mano robótica

También podría gustarte