Robotic hand voor de Rubber Hand illusie (RHI) (1 / 2 stap)

Stap 1: Arduino code

de timer beginnen
TCNT2 = 99;     Reset timer ct tot en met 99 van 255
TIFR2 = 0X00;    timer2 int vlag reg: timer overloop markering wissen

#include < Servo.h >
int ledPin = 13;
Booleaanse changeData; timer2 onderbreken uitschakelen als de waarde false

Servo servo0; servo-object om een servo 0 voor duim is controle maken
Servo servo1; 1 is voor de index
Servo servo2; 2 is voor de middelvinger
Servo servo3; 3 is voor de ring
Servo servo4; 4 is voor de kleine

int potpin_servo [5]; analoge ingang pin verbonden met de flex-sensor
int tmp;    werkende variabele
int de tijd; wilde vertraging in ms
int in [5];  onthouden van de positie in vector posities waar we de gemeten waarde voor elke servo schrijven
int uit [5]; onthouden van de positie in vector standpunten waar wij het lezen van de gemeten waarde voor elke servo
int hoog [7]; onthouden voor elke vinger de hoogste waarde van weerstand (wanneer de hand wordt gesloten)
int lage [7];  onthouden voor elke vinger de laagste waarde van weerstand (wanneer de hand is open)
int posities [5] [100]; max vertragen 1000ms = en interrupt optreden elke 10ms = > 100 posities max
int f; frequentie van de gewenste beweging in Hz
float tellen;
int posf [5] ;// werken variabele voor opgelegde beweging
int P; prescaller timer

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

int;

VOID Setup
{
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
servo1.attach(3);  de servo op pin 3 hecht aan de servo-object
servo2.attach(5);
servo3.attach(6);
servo4.attach(9);
servo0.attach(10);
lowerAngle = 70;
upperAngle = 100;
tijd = 0; vertraging
f = 100; frequentie in cHz (1 Hz = 100)
Count=(10000/f); voor 1 Hz, tellen = 100 (100 * 10 ms = 1 sec = > temps d'un mouvement!)
P = 99;
belangrijkste tendue:
hoge [0] = 586;
hoog [1] = 576;
hoge [2] = 564;
hoge [3] = 562;
hoge [4] = 528;

belangrijkste rapport
lage [0] = 694;
laag [1] = 764;
lage [2] = 736;
lage [3] = 760;
lage [4] = 738;

for (int i = 0; ik < 5; i ++)
{
in [i] = 0;  intitialization van vector positie van einde en begin met
uit [i] = 0;
potpin_servo [i] = i; Startprogramma: normale modus
posf [i] = tellen;
}

ServoInit(); Stel een aanvankelijke positie van de servo
interrupts();
Timer2init();
changeData = true; geen start totdat het signaal ontvangen vanuit matlab



} ;

VOID ServoInit()
{
servo0.write(upperAngle);
servo1.write(upperAngle);
servo2.write(upperAngle);
servo3.write(upperAngle);
servo4.write(upperAngle);

}

VOID Timer2init()
{
Setup Timer2 overloop te vuren elke 8ms (125Hz)
periode [sec] = (1 / f_clock [sec]) * prescale * (255-telling)
(1/16000000) * 1024 * (255-99) =.00998 sec = 10ms

TCCR2B = 0X00;        Uitschakelen van Timer2, terwijl we het instellen
TCNT2 = P;         Opnieuw instellen van de Timer graaf (255-99) = ev 125-th T/C klok uitvoeren
TIFR2 = 0X00;        Timer2 INT vlag Reg: Duidelijke Timer overloop vlag
TIMSK2 = 0X01;        Timer2 INT Reg: Timer2 Overflow Interrupt Enable
TCCR2A = 0X00;        Timer2 Control Reg A: Wave Gen modus normaal
TCCR2B = 0X07;        Timer2 Control Reg B: Timer Prescaler ingesteld op 1024
};

ISR(TIMER2_OVF_vect)
{

SREG = SREG | B10000000; bit 7 tot en met 1 (global interrupt uitgeschakeld) instellen

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)) / / als we enougth wachten
{

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, reinitialisation van de positie van het schrijven en lezen in vector (tijdig is kleiner na bijvoorbeeld het wijzigen van gegevens)
{

for (int i = 0; ik < 5; i ++)
{
in [i] = 0;
uit [i] = 0;
}
}
anders / / als de gebruiker is het veranderen van variabelen, stop de interrupt (het zal worden gestart aan het einde van de overname van gegevens van de gebruiker)
{

TCNT2 = P;     Reset timer ct tot en met 99 van 255
TIFR2 = 0X00;    timer2 int vlag reg: timer overloop markering wissen
}
};

VOID write_position_on_servo (int number_of_servo, Servo servo)
{
tmp = posities [number_of_servo] [out [number_of_servo]]; lezen van de eerste waarde in de vector met gegevens uit flex sensor
Servo.write(tmp);
uit [number_of_servo] = uit [number_of_servo] + 1; _ / / verhogen getal dat onthouden waar wij moeten lezen
Als (uit [number_of_servo] > = 100) //if einde van array bereikt, gaat u naar het begin
{
uit [number_of_servo] = 0;
}
};

VOID write_position_from_finger (int number_of_servo, int potpin_finger)
{


if(changeData)
{tmp = upperAngle;}
anders
{

if(potpin_finger==9) / / als 9, servo is uitgeschakeld
{
tmp = upperAngle;
}
if(potpin_finger==8) //If 8, verplaatsen alleen modus
{
Als (posf [number_of_servo] > ((count*5)/6)) / / dit aantal hangt af van de snelheid van de servo (is weer daalt het aantal 10ms die de servo "up" voor het besteedt)
{tmp = upperAngle;}
anders als (posf [number_of_servo] > ((count*2)/3))
{tmp = upperAngle-6;}
anders als (posf [number_of_servo] >(count/2))
{tmp = upperAngle-12;}
anders als (posf [number_of_servo] >(count/3))
{tmp = upperAngle-17;}
anders als (posf [number_of_servo] >(count/6))
{tmp = upperAngle-12;}
anders
{tmp = upperAngle-6;}

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

Als (potpin_finger == 0 || potpin_finger == 1 || potpin_finger == 2 || potpin_finger == 3 || potpin_finger == 4).
{
tmp=analogRead(potpin_finger); luiden naar de waarde van flex
tmp >> 1; Bits verschuiving naar de verwaarlozing van de laatste waarde (fout van maatregel)
Serial.println(tmp);
Als (potpin_finger == 0 || potpin_finger == 2 || potpin_finger == 6)
{tmp = kaart (tmp, laag [potpin_finger], hoge [potpin_finger], upperAngle, lowerAngle);

} / / verkeer van servo omkeren
anders
{tmp = kaart (tmp, laag [potpin_finger], hoge [potpin_finger], lowerAngle, upperAngle);}
tmp = kaart (tmp, laag [potpin_finger], hoge [potpin_finger], lowerAngle, upperAngle);

}
}

Als (tmp < lowerAngle) / / bescherming van de servo als analoge input signaal defect
{tmp = lowerAngle;}
if(tmp>upperAngle)
{tmp = upperAngle;}

posities [number_of_servo] [in [number_of_servo]] = tmp;

in [number_of_servo] = in [number_of_servo] + 1; _ / / verhogen getal dat onthouden waar wij gegevens moet voorraad
Als (in [number_of_servo] > = 100) //if einde van array bereikt, gaat u naar het begin
{in [number_of_servo] = 0;}

}

void loop
{

if(Serial.available() > 0) / / als er nog gegevens lezen = > MATLAB envoie qqchose
{
a=Serial.Read();

if(a==1) / / START
{

changeData = false;
} / / pour relancer

if(a==2) / / STOP
{changeData = true;
} //va Blokkeer les acties nl ne relancant pas le timer

if(a==3) / / gegevens wijzigen
{
changeData = true;

while(Serial.available() < 7) / / de recevoir les 7 valeurs woont
{}
delay(2000);

time=Serial.Read();
tijd = tijd * 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);
for (int i = 0; ik < 5; i ++)
{posf [i] = graaf;}

}

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



}

}

Gerelateerde Artikelen

3D-print An Artificial Muscle Robot Hand

3D-print An Artificial Muscle Robot Hand

hier is een kunstmatige spier robot hand die uiteindelijk als een prothetische vervanging kan worden gebruikt voor een menselijke hand. De "beenderen" zijn 3d afgedrukt in PLA en de siliconen rubber kunstspieren en huid werden geworpen in de 3D-
3-fingered Arduino robot hand

3-fingered Arduino robot hand

IntroIn dit instructable zal ik de basics van het bouwen van je eigen robot hand, bestuurd door een arduino uitleggen.De hand maakt gebruik van een handschoen, uitgerust met flex-sensoren die uw handbewegingen zal vangen. De handbewegingen zal worden
DIY Robotic Hand gecontroleerd door een handschoen en Arduino

DIY Robotic Hand gecontroleerd door een handschoen en Arduino

Dit idee van het project kwam aan me toen ik zat op een bed in een hotelkamer, terwijl hij op vakantie. Ik dacht: "Het zou echt gaaf om te hebben een robotic hand waarmee ik kan met mijn eigen hand!" Bij thuiskomst, begonnen ik op een reis naar
DIY $200 Robotic Hand - Arduino Project

DIY $200 Robotic Hand - Arduino Project

ik ontwierp en bouwde deze robotic hand en de controller voor minder dan $200.  De vingers en duim worden gecontroleerd door servomotoren.  De eerste video toont de hand in actie.  De tweede video laat zien hoe om de hand te maken.Hier is deel 2: DIY
DIY $200 Robotic Hand - deel 2: The Controller - Arduino Project

DIY $200 Robotic Hand - deel 2: The Controller - Arduino Project

ik ontwierp en bouwde deze robotic hand en de controller voor minder dan $200.  De vingers en duim worden gecontroleerd door servomotoren.  De eerste video toont de hand in actie.  De tweede video laat zien hoe maak je de controller.Bezoek mijn websi
Beheersbare Robotic Hand met Flex sensoren & servo's

Beheersbare Robotic Hand met Flex sensoren & servo's

Dit Instructable zal u tonen hoe maak je een beheersbare robotic hand die wordt gecontroleerd met behulp van de Arduino microcontroller en servo motoren. De robotic hand zal rechtstreeks worden verplaatst met behulp van een hand-handschoen.Voordat we
Rubberen band en Fibre nerveus Robotic Hand

Rubberen band en Fibre nerveus Robotic Hand

Robotic hand maken van materialen om u heen.Toepassingen:Leren wetenschap in lage kosten.Als we alle snaren verbinden en hang het met een saldo (kopje type) met rubber band verbinding. Wanneer de wind waaien automatisch verplaatsen vingers. Net eraan
Robotic Hand gecontroleerd door macht handschoen

Robotic Hand gecontroleerd door macht handschoen

Dit instructable ontstond vervulling de project-eis van de Makecourse bij de Universiteit van Zuid-Florida (www.makecourse.com)Dit project is een robotic hand gemaakt om na te bootsen de beweging van de hand van de gebruiker. Uitvoering van het proje
Modulaire Robotic Hand & Arm (met uitgebreide Range of Motion) (3D afgedrukt)

Modulaire Robotic Hand & Arm (met uitgebreide Range of Motion) (3D afgedrukt)

Hallo iedereen! Dit is mijn prototype hand en arm prothese, die ik heb zijn ontwerpen voor verscheidene maanden nu. Het is nog steeds een beetje van een work in progress, en aangezien ik afwerken van met college klassen voor het semester ik heb nog n
Maken Robot Hand met kunststofbuizen

Maken Robot Hand met kunststofbuizen

De eenvoudigste manier robots zal vertellen de handgemaakte. Robot handen worden meestal afgedrukt met 3D-printers. Het is mogelijk dat de kosten meer. In dit project, zal ik de goedkoopste handgemaakte robots bespreken.Stap 1: materialen:Kunststof s
Project van de wetenschap van de Robotic Hand

Project van de wetenschap van de Robotic Hand

HalloEen kleine introductie eerste. Ik vrijwilliger als wetenschap leraar aan een lokale basisschool, en mijn doel is om een liefde voor leren in elk kind inboezemen. U kunt kijken op mijn blog hier. Kto6Science projecten.Nu, op de robotic hand...Pro
Dextrus v1.1 Robotic Hand

Dextrus v1.1 Robotic Hand

dit is een instructable te laten zien hoe het maken van versie 1.1 van de Dextrus robotic hand uit het Open Hand Project. Het wordt verondersteld u toegang hebben tot een 3D-printer en de onderdelen volgens de instructies hebt afgedrukt op thingivers
Lego Mindstorms NXT robot Hand Prototype

Lego Mindstorms NXT robot Hand Prototype

dit is mijn Lego Mindstorms NXT robot Hand versie 1.0. Hij wordt aangedreven door een dynamo systeem dat bestaat uit een servomotor en crank. Als u bevalt, gelieve te stemmen! Ook, abonneren op mijn kanaal voor allerlei coole projecten over uiteenlop
Handschoen Controlled Robotic Hand - goedkope en eenvoudige versie

Handschoen Controlled Robotic Hand - goedkope en eenvoudige versie

Dit project is gebaseerd off van de DIY Robotic Hand instructable hier gevestigd. Als een arme student maar, ik kon niet veroorloven dishing ~ $500 voor een 3D afgedrukt hand en nog eens $50 voor de servo's. Ik heb uiteengezet te herzien van een goed