La main robotisée pour l’Illusion de main en caoutchouc (RHI) (1 / 2 étapes)

Étape 1: Code d’Arduino

commencer la minuterie
TCNT2 = 99 ;     réinitialiser la minuterie ct à 99 sur 255
TIFR2 = 0 X 00 ;    TIMER2 int drapeau reg : effacer l’indicateur de débordement timer

#include < Servo.h >
int ledPin = 13 ;
changeData Boolean ; désactiver le timer2 interruption si faux

Servo servo0 ; créer l’objet de servo pour contrôler qu'un servo 0 est pour le pouce
Servo servo1 ; 1 est pour l’index
Servo servo2 ; 2 est pour le doigt du milieu
Servo servo3 ; 3 est pour l’anneau
Servo servo4 ; 4 est pour les petits

int potpin_servo [5] ; entrée analogique broche reliée au capteur flex
int tmp ;    variable de travail
int temps ; voulu délai en ms
int [5] ;  mémoriser la position en positions de vecteur où nous écrire la valeur mesurée pour chaque servo
int [5] ; mémoriser la position en positions de vecteur où nous lisons la valeur mesurée pour chaque servo
int élevé [7] ; mémoriser pour chaque doigt, la valeur la plus élevée de résistance (lorsque la main est fermée)
int faible [7] ;  mémoriser pour chaque doigt, la plus faible valeur de la résistance (lorsque la main est ouverte)
int postes [5] [100] ; retarder max = 1000ms et interruption se produisent chaque 10ms = > 100 postes max
int f ; fréquence du mouvement recherché en Hz
comte de flotteur ;
int FPOS [5];// travail variable pour mouvement imposé
int P ; minuterie prescaller

int lowerAngle ; valeur max et min des servo : 30 et 160°
int upperAngle ;

int a ;

void setup()
{
pinMode(ledPin,OUTPUT) ;
Serial.Begin(9600) ;
SERVO1.Attach(3) ;  s’adapte sur le servo sur la broche 3 l’objet de servo
Servo2.Attach(5) ;
servo3.Attach(6) ;
servo4.Attach(9) ;
servo0.Attach(10) ;
lowerAngle = 70 ;
upperAngle = 100 ;
temps = 0 ; délai initial
f = 100 ; fréquence en cHz (1 Hz = 100)
Count=(10000/f) ; pour 1 Hz, compter = 100 (100 * 10 ms = 1sec = > temps mouvement d'un!)
P = 99 ;
main tendue :
haute [0] = 586 ;
haute [1] = 576 ;
haute [2] = 564 ;
haute [3] = 562 ;
haute [4] = 528 ;

principale fermée
faible [0] = 694 ;
faible [1] = 764 ;
faible [2] = 736 ;
faible [3] = 760 ;
faible [4] = 738 ;

pour (int i = 0; i < 5; i ++)
{
[i] = 0 ;  initialisation du vecteur contenant la position de début et de fin
sur [i] = 0 ;
potpin_servo [i] = i ; programme initial : mode normal
FPOS [i] = count ;
}

ServoInit() ; Définir une position initiale pour servo
interrupts() ;
Timer2init() ;
changeData = true ; aucun départ ne jusqu'à recevoir le signal de matlab



} ;

Sub ServoInit()
{
servo0.Write(upperAngle) ;
SERVO1.Write(upperAngle) ;
Servo2.Write(upperAngle) ;
servo3.Write(upperAngle) ;
servo4.Write(upperAngle) ;

}

Sub Timer2init()
{
Débordement Timer2 installation au feu chaque 8ms (125Hz)
période de [s] = (1 / f_clock [s]) * Prédiviseur * (255-comte)
(1/16000000) * 1024 * (255-99) =.00998 s = 10ms

TCCR2B = 0 X 00 ;        Désactiver le Timer2 tandis que nous avons mis en place
TCNT2 = P ;         Réinitialiser le compteur de Timer (255-99) = exécuter horloge de T/C ev 125-th
TIFR2 = 0 X 00 ;        TIMER2 INT drapeau Reg : Indicateur de débordement Timer clair
TIMSK2 = 0 X 01 ;        TIMER2 INT Reg : Timer2 débordement Interrupt Enable
TCCR2A = 0 X 00 ;        TIMER2 contrôle Reg A: Vague Gen Mode normal
TCCR2B = 0 X 07 ;        TIMER2 contrôle Reg B: Prédiviseur Timer la valeur 1024
};

ISR(TIMER2_OVF_vect)
{

SREG = SREG | B10000000 ; Définissez le bit 7 à 1 (global interrupt désactivé)

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 nous attendons peuvent acceuillir
{

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, réinitialisation de la position d’écriture et de lecture en vecteur (dans le temps est plus faible après avoir modifié les données par exemple)
{

pour (int i = 0; i < 5; i ++)
{
[i] = 0 ;
sur [i] = 0 ;
}
}
else / / si l’utilisateur change variables, arrêter l’interruption (il sera lancé à la fin de l’acquisition de données de l’utilisateur)
{

TCNT2 = P ;     réinitialiser la minuterie ct à 99 sur 255
TIFR2 = 0 X 00 ;    TIMER2 int drapeau reg : effacer l’indicateur de débordement timer
}
};

void write_position_on_servo (int number_of_servo, Servo servo)
{
tmp = postes [number_of_servo] [out [number_of_servo]] ; lire la première valeur de vecteur contenant les données du capteur flex
servo.Write(tmp) ;
Out [number_of_servo] = out [number_of_servo] + 1 ; incrémenter le numéro de mémoriser où nous devons lire
Si (hors [number_of_servo] > = 100) //if fin de tableau atteint, aller au début
{
Out [number_of_servo] = 0 ;
}
};

void write_position_from_finger (int number_of_servo, int potpin_finger)
{


if(changeData)
{tmp = upperAngle;}
d’autre
{

if(potpin_finger==9) / / si 9, servo est désactivé
{
tmp = upperAngle ;
}
if(potpin_finger==8) //If 8, se déplacer seul mode
{
Si (FPOS [number_of_servo] > ((count*5)/6)) / / ce nombre dépend de la vitesse du servo (est le nombre de 10 ms par le servo pour "up" avant il redescend)
{tmp = upperAngle;}
ElseIf (FPOS [number_of_servo] > ((count*2)/3))
{tmp = upperAngle-6;}
ElseIf (FPOS [number_of_servo] >(count/2))
{tmp = upperAngle-12;}
ElseIf (FPOS [number_of_servo] >(count/3))
{tmp = upperAngle-17;}
ElseIf (FPOS [number_of_servo] >(count/6))
{tmp = upperAngle-12;}
d’autre
{tmp = upperAngle-6;}

FPOS [number_of_servo] = FPOS [number_of_servo] -1 ;
if(POSF[number_of_servo]==0)
{FPOS [number_of_servo] = count;}
}

Si (potpin_finger == 0 || potpin_finger == 1 || potpin_finger == 2 || potpin_finger == 3 || potpin_finger == 4).
{
tmp=analogRead(potpin_finger) ; lire la valeur de flex
tmp >> 1 ; Décalage de bits à négliger la dernière valeur (erreur de mesure)
Serial.println(tmp) ;
Si (potpin_finger == 0 || potpin_finger == 2 || potpin_finger == 6)
{tmp = carte (tmp, faible [potpin_finger], haute [potpin_finger], upperAngle, lowerAngle) ;

} / / une inversion de servo
d’autre
{tmp = carte (tmp, faible [potpin_finger], haute [potpin_finger], lowerAngle, upperAngle);}
tmp = carte (tmp, faible [potpin_finger], haute [potpin_finger], lowerAngle, upperAngle) ;

}
}

Si (tmp < lowerAngle) / / protection du servo si analogique entrée signal défectueux
{tmp = lowerAngle;}
if(tmp>upperAngle)
{tmp = upperAngle;}

positions [number_of_servo] [[number_of_servo]] = tmp ;

dans [number_of_servo] = en [number_of_servo] + 1 ; incrémenter le numéro de mémoriser où nous devons stocker des données
Si (dans [number_of_servo] > = 100) //if fin de tableau atteint, aller au début
{[number_of_servo] = 0;}

}

void loop()
{

if(Serial.available() > 0) / / si il n’y a données à lire = > MATLAB envoie qqchose
{
a=Serial.Read() ;

if(a==1) / / START
{

changeData = false ;
} / / pour relancer

if(a==2) / / STOP
{changeData = true ;
} //va bloquer les actions fr ne relancant pas le minuteur

if(a==3) / / modifier les données
{
changeData = true ;

while(Serial.available() < 7) / / s’occupe de recevoir les 7 valeurs
{}
Delay(2000) ;

Time=Serial.Read() ;
temps = temps * 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) ;
pour (int i = 0; i < 5; i ++)
{FPOS [i] = count;}

}

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



}

}

Articles Liés

CupBots - 3D plate-forme robotique imprimé pour Arduino et Raspberry Pi

CupBots - 3D plate-forme robotique imprimé pour Arduino et Raspberry Pi

Voici un projet de robotique du grand week-end d'entreprendre avec des amis ou des gens de votre espace de la machine locale. Vous aurez besoin une imprimante 3D très pratique à la 3D impression les fichiers STL en pièce jointe dans le cadre de la pr
Android Robot commandé pour les débutants (A à Z)

Android Robot commandé pour les débutants (A à Z)

Vous aimez les Robots ? Vous débutez en robotique ? Avez-vous penser à construire un Robot à partir de zéro ? Dans l'affirmative, cette instructables est fait pour vous. Dans cette instructables, je vais vous montrer comment vous pouvez construire un
Arduino ligne Robot suivants pour les débutants

Arduino ligne Robot suivants pour les débutants

* mise à jour GREEN 8 / 2 4 / 2 GREEN 1 voidsetup() {   // a variable created in here doesn't exist in loop } voidloop() {   // a variable created in here doesn't exist in setup } pour inclure plus de prix, source informations et modèles haut/bas/rou
Robot LEGO pour débutants

Robot LEGO pour débutants

je suis arrivé dans la robotique quand on m'a donné un Lego stormers kit de mind pour NoëlJ'ai rapidement construit tous les robots dans le livre et a accroché sur la robotiquePour moi, la meilleure partie était soit capable de prendre un robot conçu
Facile de construire mon propre Robot utile pour moins de 100 $

Facile de construire mon propre Robot utile pour moins de 100 $

Hallo, quiconque est désireux de faire votre propre robot ! J'ai eu un rêve de faire un dispositif utile, où je pourrais utiliser programmation, impression 3D, schémas. Ne me dérange pas la langue, regardez la vidéo ci-dessus comment robot me permet
Chefbot : Un bricolage mobile robot autonome pour servir des aliments dans les hôtels

Chefbot : Un bricolage mobile robot autonome pour servir des aliments dans les hôtels

Comme le titre l'indique, nous allons voir comment construire un robot mobile autonome appelé Chefbot qui est pour servir des aliments et des boissons dans les hôtels et restaurants.Il s'agissait d'un projet de passe-temps et j'ai construit ce robot
Robot poisson (pour l’inspection de la citerne)

Robot poisson (pour l’inspection de la citerne)

Dans ce projet, sera décrit étape par étape, le processus de faire un robot poisson. Il n'est pas facile pour l'électronique de natation de survivre. Ce robot a certains comportements de base, par exemple, lorsque le capteur de nez détecte une collis
Un préhenseur robotique doux pour le MeArm

Un préhenseur robotique doux pour le MeArm

La robotique douce est un jeune domaine de la robotique qui rend les robots de matériaux souples. Bien que de nombreux projets de robotique doux là-bas sont tout à fait douces, doux robotique aura ses impacts plus lorsqu'il est combiné avec des robot
WireBeings beta : un imprimé et Robot extensible pour Arduino avec contrôle Android 3D

WireBeings beta : un imprimé et Robot extensible pour Arduino avec contrôle Android 3D

http://wirebeings.com/Découvrez la vidéo ici :Il s'agit d'un beau projet que vous pouvez continuer de travailler et modifier comme vous apprenez davantage de projets Arduino. Ce Instructable passe par la construction du robot compatible bluetooth dan
Vision robotique FPGA pour tous ceux qui

Vision robotique FPGA pour tous ceux qui

Vous comme moi intéressé par la technologie et toujours voulu utiliser l'une de ces puces lourds appelés FPGA ? Êtes-vous intéressé en vision et robotique ?Mon objectif était d'apporter la vision FPGA au peuple, accessible à tous. J'ai décidé de cons
Faire un Robot RC pour un film

Faire un Robot RC pour un film

bon peut-être que je ne devrais pas être qualifiant un "robot" c'est une marionnette de robotRetour en mai 2005, j'ai reçu un appel téléphonique de collègue à Colpitts Design. Il a été approché pour construire une marionnette du long métrage. Il
Robot Arduino pour moins de $5

Robot Arduino pour moins de $5

Je sais que vous avez toujours rêvé de faire une armée de robots ! Mais alors vous avez trouvé dehors vous ne pouvez se permettre un ou deux.Grâce à cette conception, vous pouvez commencer vos plans infâmes à conquérir le monde. Allez et plaisir à fa
Accueil projet de Robot sentinelle pour le Roadshow d’Ito-Intel à Austin, au Texas par la RoboDorks

Accueil projet de Robot sentinelle pour le Roadshow d’Ito-Intel à Austin, au Texas par la RoboDorks

Étant donné que j'allais être dans la région de Austin, TX pour l'anniversaire de ma fille, j'ai été invité à rejoindre mes amis pour le Roadshow de l'ITO-Intel et Hack-a-thon, mettant en vedette le développement Intel Edison Kit. Les critères du con
Robotique simple pour les débutants !

Robotique simple pour les débutants !

Pour mon tout premier instructable, j'ai décidé de faire quelque chose qui m'avait échappé depuis plusieurs mois sur par où commencer tout à l'heure ;R/C robotique et battlebots.Les composants que j'ai utilisé sont difficiles à trouver maintenant, ma