Mano robótica de la ilusión de mano de goma (RHI) (1 / 2 paso)

Paso 1: Código de Arduino

iniciar el temporizador
TCNT2 = 99;     restablecer el temporizador ct a 99 de 255
TIFR2 = 0 X 00;    TIMER2 int bandera reg: limpiar bandera de desbordamiento del temporizador

#include < Servo.h >
int ledPin = 13;
changeData Boolean; desactivar la interrupción timer2 si es falso

Servo servo0; crear objeto servo para controlar que un servo 0 es para pulgar
Servo1 servo; 1 es el índice de
Servo servo2; 2 es para el dedo
Servo servo3; 3 es para el anillo
Servo servo4; 4 es por el poco

int potpin_servo [5]; pin de entrada analógico conectado al sensor flex
int tmp;    trabajo variable
int tiempo; retardo deseado en ms
int en [5];  memorizar la posición en las posiciones del vector donde escribimos el valor medido para cada servo
int a [5]; memorizar la posición en las posiciones del vector donde visualiza el valor medido para cada servo
int alta [7]; memorizar para cada dedo el mayor valor de resistencia (cuando se cierra la mano)
int baja [7];  memorizar para cada dedo el valor más bajo de la resistencia (cuando esta abierto)
posiciones de int [5] [100]; Retardo máximo = 1000ms e interrupción ocurren cada 10ms = > 100 posiciones max
int f; frecuencia de movimiento deseado en Hz
recuento de flotador;
posf int [5] ;// de trabajo variable de movimiento impuesta
int P; temporizador de prescaller

int lowerAngle; máximo de Valeur et min des servo: 30 et 160°
int upperAngle;

int a;

void setup()
{
pinMode(ledPin,OUTPUT);
Serial.Begin(9600);
servo1.Attach(3);  se fija el servo en el pin 3 al objeto servo
servo2.Attach(5);
servo3.Attach(6);
servo4.Attach(9);
servo0.Attach(10);
lowerAngle = 70;
upperAngle = 100;
tiempo = 0; retraso inicial
f = 100; frecuencia en el cHz (1 Hz = 100)
count=(10000/f); de 1 Hz, cuenta = 100 (100 * 10 ms = 1 s = > temps d ' un mouvement!)
P = 99;
tendue principal:
alta [0] = 586;
alta [1] = 576;
alta [2] = 564;
alta [3] = 562;
alta [4] = 528;

Pressa principal
bajo [0] = 694;
baja [1] = 764;
baja [2] = 736;
baja [3] = 760;
bajo [4] = 738;

para (int i = 0; i < 5; i ++)
{
en [i] = 0;  intitialization del vector que contiene la posición de fin y principio de
a [i] = 0;
potpin_servo [i] = i; programa inicial: el modo normal
posf [i] = cuenta;
}

ServoInit(); Establecer una posición inicial para servo
Interrupts();
Timer2init();
changeData = true; no comenzar hasta recibir la señal de matlab



} ;

void ServoInit()
{
servo0.Write(upperAngle);
servo1.Write(upperAngle);
servo2.Write(upperAngle);
servo3.Write(upperAngle);
servo4.Write(upperAngle);

}

void Timer2init()
{
Desbordamiento del Timer2 de configuración al fuego cada 8ms (125Hz)
período [s] = (1 / f_clock [s]) * prescaler * (255-cuenta)
(1/16000000) * 1024 * (255-99) =.00998 seg = 10ms

TCCR2B = 0 X 00;        Desactivar el Timer2 mientras que hemos establecido
TCNT2 = P;         Restablecer el temporizador de cuenta (255-99) = ejecutar reloj de ev 125-th T/C
TIFR2 = 0 X 00;        TIMER2 INT bandera Reg: Bandera de desbordamiento claro temporizador
TIMSK2 = 0 X 01;        Reg INT TIMER2: Timer2 desbordamiento interrupción habilitar
TCCR2A = 0 X 00;        TIMER2 Control Reg A: Onda Gen modo normal
TCCR2B = 0X07;        TIMER2 Control Reg B: Prescaler del temporizador se establece en 1024
};

ISR(TIMER2_OVF_vect)
{

SREG = SREG | B10000000; establecer el bit 7 a 1 (global interrupción deshabilitada)

write_position_from_finger(0,potpin_servo[0]);
write_position_from_finger(1,potpin_servo[1]);
write_position_from_finger(2,potpin_servo[2]);
write_position_from_finger(3,potpin_servo[3]);
write_position_from_finger(4,potpin_servo[4]);

if((in[0]-out[0]) > =(time/10) || (out[0]-in[0]) > =(99-(time/10)-1)) / / si esperamos bastante
{

write_position_on_servo (0, servo0);
write_position_on_servo 1, servo1;
write_position_on_servo (2, servo2);
write_position_on_servo (3, servo3);
write_position_on_servo (4, servo4);
}

if(changeData==true) / / changeData = true, reinicialización del posición de la escritura y la lectura en vector (en el tiempo es menor después de cambiar los datos por ejemplo)
{

para (int i = 0; i < 5; i ++)
{
en [i] = 0;
a [i] = 0;
}
}
Else / / si el usuario está cambiando variables, detener la interrupción (se iniciará a finales de la adquisición de datos de usuario)
{

TCNT2 = P;     restablecer el temporizador ct a 99 de 255
TIFR2 = 0 X 00;    TIMER2 int bandera reg: limpiar bandera de desbordamiento del temporizador
}
};

void write_position_on_servo (int number_of_servo, Servo servo)
{
tmp = posiciones [number_of_servo] [out [number_of_servo]]; Lee el primer valor de vector que contiene los datos del sensor flex
servo.Write(TMP);
hacia fuera [number_of_servo] = a [number_of_servo] + 1; incrementa número de memorizar donde debemos leer
Si (a [number_of_servo] > = 100) //if final de matriz, ir al principio
{
hacia fuera [number_of_servo] = 0;
}
};

void write_position_from_finger (int number_of_servo, int potpin_finger)
{


if(changeData)
{tmp = upperAngle;}
otra cosa
{

if(potpin_finger==9) / / si 9, servo está deshabilitado
{
tmp = upperAngle;
}
//If if(potpin_finger==8) 8, mover solo modo
{
Si (posf [number_of_servo] > ((count*5)/6)) / / este número depende de la velocidad del servo (es el número de 10 ms que el servo pasa "arriba" antes de que vuelve a bajar)
{tmp = upperAngle;}
else if (posf [number_of_servo] > ((count*2)/3))
{tmp = upperAngle-6;}
else if (posf [number_of_servo] >(count/2))
{tmp = upperAngle-12;}
else if (posf [number_of_servo] >(count/3))
{tmp = upperAngle-17;}
else if (posf [number_of_servo] >(count/6))
{tmp = upperAngle-12;}
otra cosa
{tmp = upperAngle-6;}

posf [number_of_servo] = posf [number_of_servo] -1;
if(posf[number_of_servo]==0)
{posf [number_of_servo] = cuenta;}
}

Si (potpin_finger == 0 || potpin_finger == 1 || potpin_finger == 2 || potpin_finger == 3 || potpin_finger == 4).
{
tmp=analogRead(potpin_finger); leer el valor de flex
tmp >> 1; Cambio poco a descuidar el último valor (error de medida)
Serial.println(TMP);
Si (potpin_finger == 0 || potpin_finger == 2 || potpin_finger == 6)
{tmp = mapa (tmp, bajo [potpin_finger], secundaria [potpin_finger], upperAngle, lowerAngle);

} / / invertir el movimiento del servo
otra cosa
{tmp = mapa (tmp, bajo [potpin_finger], secundaria [potpin_finger], lowerAngle, upperAngle);}
tmp = mapa (tmp, bajo [potpin_finger], secundaria [potpin_finger], lowerAngle, upperAngle);

}
}

Si (tmp < lowerAngle) / / protección de servo si analógica Entrada señal defectuosa
{tmp = lowerAngle;}
if(TMP>upperAngle)
{tmp = upperAngle;}

posiciones [number_of_servo] [[number_of_servo]] = tmp;

en [number_of_servo] = en [number_of_servo] + 1; incrementa número de memorizar donde debemos disponemos de datos
Si (en [number_of_servo] > = 100) //if final de matriz, ir al principio
{en [number_of_servo] = 0;}

}

void loop()
{

if(serial.Available() > 0) / / si hay datos para leer = > MATLAB envoie qqchose
{
a=serial.Read();

if(a==1) / / Inicio
{

changeData = false;
} / / pour relancer

if(a==2) / / STOP
{changeData = true;
} //va vartias les acciones en ne relancant pas le temporizador

if(a==3) / / cambio de datos
{
changeData = true;

while(serial.Available() < 7) / / atiende de recevoir les 7 valeurs
{}
Delay(2000);

Time=serial.Read();
tiempo = tiempo * 10;
f=serial.Read();
potpin_servo[0]=serial.Read();
potpin_servo[1]=serial.Read();
potpin_servo[2]=serial.Read();
potpin_servo[3]=serial.Read();
potpin_servo[4]=serial.Read();
count=(5000/f);
para (int i = 0; i < 5; i ++)
{posf [i] = cuenta;}

}

if(a==4) / / INIT???
{
//
}



}

}

Artículos Relacionados

Mano robótica modular y brazo (con rango extendido de movimiento) (impresión 3D)

Mano robótica modular y brazo (con rango extendido de movimiento) (impresión 3D)

Hola a todos! Este es mi prótesis de mano y el brazo de prototipo he estado diseñando desde hace varios meses. Es todavía un poco de un trabajo en progreso, y ya que estoy terminando con clases en la Universidad para el semestre aún no he tenido tiem
Proyecto de ciencia de mano robótica

Proyecto de ciencia de mano robótica

Hola,Una pequeña introducción primera. Ser voluntario como profesor de Ciencias en una escuela primaria local, y mi objetivo es inculcar un amor por el aprendizaje en cada niño. Usted puede ver mi blog aquí. Proyectos de Kto6Science .Ahora, a la mano
Una mano robótica Motor tambores sus dedos

Una mano robótica Motor tambores sus dedos

este instructivo te enseña a hacer una mano robótica que sus dedos rítmicamente los tambores en el tablero de madera que se coloca sobre el uso de sólo un motor. El siguiente video muestra el resultado final y puede ayudar enormemente en la comprensi
Dextrus v1.1 mano robótica

Dextrus v1.1 mano robótica

este es un instructivo para mostrar cómo hacer la versión 1.1 de la mano robótica Dextrus del Proyecto abierto de la mano. Asume que usted tiene acceso a una impresora 3D y ha impreso las piezas según las instrucciones en thingiverse y ha comprado to
Mano en garra robótica prostetic basados en arduino barato

Mano en garra robótica prostetic basados en arduino barato

Este proyecto vino a la mente después de ser informado que Medicare no pagará por una parte, solamente el enganche. así que decidí intentar hacer una mano robótica. La partscost total es muy por debajo de $100.servo https://www.Sparkfun.com/products/
Prototipo de mano robótica LEGO Mindstorms NXT

Prototipo de mano robótica LEGO Mindstorms NXT

esta es mi versión de la mano robótica de Lego Mindstorms NXT 1.0. Es accionado por un sistema de Dinamo que consta de un motor servo y manivela. Si te gusta, por favor voten! También, Suscríbete a mi canal para un montón de proyectos interesantes so
Guante de control mano robótica - versión barata y Simple

Guante de control mano robótica - versión barata y Simple

Este proyecto está basado en el instructable mano robótica DIY aquí. Siendo un pobre estudiante sin embargo, no pude pagar repartiendo ~ $500 para un 3D impreso a mano y otros $50 para los servos. Me puse a revisar un diseño alternativo más barato pa
Mano robótica DIY

Mano robótica DIY

Los componentes básicos de la mano son los servos, la plataforma Arty, el guante y los sensores de flexión. El guante está construido con sensores de flexión que tienen resistencias variables que cambian su valor de resistencia al doblado. Está conec
DIY mano robótica controlada por un guante y Arduino

DIY mano robótica controlada por un guante y Arduino

Esta idea de proyecto vino a mí cuando estaba sentada en una cama en una habitación de hotel mientras estaba de vacaciones. Pensé: "Sería muy prolijo que una mano robótica que puedo controlar con mi propia mano!" Al volver a casa, me embarqué en
Mano robótica de DIY $200 - Arduino proyecto

Mano robótica de DIY $200 - Arduino proyecto

diseñado y construido esta mano robótica y el controlador para menos de $200.  Los dedos y el pulgar son controlados por servo motores.  El primer video muestra la mano en acción.  El segundo vídeo muestra cómo hacer la mano.Aquí está la parte 2: $20
Mano robótica de DIY $200 - parte 2: el controlador - Arduino proyecto

Mano robótica de DIY $200 - parte 2: el controlador - Arduino proyecto

diseñado y construido esta mano robótica y el controlador para menos de $200.  Los dedos y el pulgar son controlados por servo motores.  El primer video muestra la mano en acción.  El segundo vídeo muestra cómo hacer el controlador.Visite mi sitio we
Cómo hacer un mando a distancia controlado por una mano robótica con Arduino

Cómo hacer un mando a distancia controlado por una mano robótica con Arduino

Este es mi proyecto escolar para 5 º año de secundaria (yo soy italiana, tenemos 5 años de secundaria).Consiste en una mano artificial controlada por un guante con sensores de flexión. La mano artificial reproduce los movimientos de la mano con el gu
Mano robótica interactiva usando arduino...

Mano robótica interactiva usando arduino...

Esta mano robótica es construida utilizando cuatro servomotores y cuatro potenciómetros como sensores de posición. los sensores de posición se unen a un guante para que se utiliza para controlar el brazo robótico interactivo. La mano robótica represe
Cómo construir una mano robótica con retroalimentación háptica

Cómo construir una mano robótica con retroalimentación háptica

para Feria de Ciencias este año, sentí como algo en vez de hacer un experimento. Todo lo que necesitaba hacer era mirar alrededor Instructables para una idea de proyecto. Me inspiré por mano robótica de njkl44 desde que recuerda mucho de cosas de pel