lauantai 24. tammikuuta 2015

Animatroninen käsi

Skip to end of metadata
Go to start of metadata

Projekti

Ideamme oli rakentaa robottikäsi, jota ohjataan käyttäjän käden liikkeillä. Alunperin robottikäden sormien oli tarkoitus seurata käyttäjän sormien taipumista 1:1. Lopulta päädyimme kuitenkin yksinkertaisempaan nyrkissä - auki -ratkaisuun. Käytössämme oli ainoastaan kolme taivutusanturia, joten seurasimme vain käyttäjän peukalon, etu- ja keskisormen asentoja.

Komponentit

  • Arduino uno
  • 5 kpl servoja (Turnigy TGY-R5180MG)
  • 3 kpl taivutusantureita *
  • 3 kpl 10k Ω vastuksia *
  • 4700 µF kondensaattori
  • joustoputkea
  • siimaa tai narua
  • käsine
* Ideaalitapauksessa taivutusanturi + vastus -pareja olisi viisi kappaletta. (Yksi joka sormelle.)

Kytkentä



Taivutusanturit on kytketty Arduinon analogipinneihin 0-2 oheisen kuvan mukaisella vastusjaolla.
Servojen signaalijohtimet on kytketty Arduinon digitaalipinneihin 8-12.
Lisäksi käyttöjännitteen ja maan välille on kytketty iso kondensaattori, jottei viiden servon yhtäaikainen käyttö aiheuta liikoja jänniteheilahteluja. Näin kättä voi käyttää pelkästään usb-liitännällä ilman erillistä virtalähdettä.

Koodi


// Servo-kirjasto ja servo-objektien luominen.
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
// Muuttujat painonapille ja taivutus antureille.
// Anturit analog in -pinneihin 0-2, nappi digital-pinni 2.
int nappi = 2;
int etu = 0;
int keski = 1;
int peukalo = 2;
void setup()
{
    Serial.begin(9600); // Alustetaan sarjaliikenne.
    // Asetetaan pinnien suunnat
    pinMode(nappi, INPUT_PULLUP);   // Painonapille ylösvetovastus.
    pinMode(etu, INPUT);
    pinMode(keski, INPUT);
    pinMode(peukalo, INPUT);
    // Liitetään servo-objektit pinneihin 8-12.
    servo1.attach(8);
    servo2.attach(9);
    servo3.attach(10);
    servo4.attach(11);
    servo5.attach(12);
    // Tulostetaan viesti setup-loopin päättymisestä.
    Serial.println("Loop done!");
}
void loop()
{
    // Jos taivutusanturilta saatava arvo on yli asetetun rajan, vedetään servolla sormi koukkuun.
    // Sopiva raja-arvo ja servojen ääriarvot haettu yksitellen testaamalla.
    // Koska taivutusantureita on käytössä vain kolme, ohjaa etusormen anturi myös
    // nimetöntä ja pikkurilliä.
     
    // Peukalo
    if (analogRead(0) < 800) {
        servo2.write(145);
    }
    else {
        servo2.write(55);
    }
    // Etusormi
    if (analogRead(1) < 800) {
        servo3.write(145);
        servo4.write(145);  // Nimetön
        servo5.write(145);  // Pikkurilli
    }
    else {
        servo3.write(55);
        servo4.write(65);  // Nimeton
        servo5.write(55);  // Pikkurilli
    }
    // Keskisormi
    // Servon ääriarvot päinvastoin muihin verrattuna sillä
    // servo on myös fyysisesti eri päin käsirakennelmassa.
    if (analogRead(2) < 800) {
        servo1.write(35);
    }
    else {
        servo1.write(130);
    }
    // Tulostetaan anturien arvot ja yksi erotinrivi.
    Serial.println(analogRead(0));
    Serial.println(analogRead(1));
    Serial.println(analogRead(2));
    Serial.println();
    // 100 millisekunnin tauko ennen seuraavaa looppia.
    delay(100);
} 

Käden ja ohjauksen toteutus

Käden rakentaminen

Käsi rakennettiin instructables.com sivustolta löytyneitä ohjeita soveltaen. Linkki ohjeisiin: http://www.instructables.com/id/Simple-Animatronics-robotic-hand/

Sormet ovat tehty joustoputkesta johon on leikattu lovet nivelten kohdille, jotta putki pääsee taipumaan. Nivelten jäykkyys riippuu jäljelle jätetyn materiaalin määrästä.
Sormien taivutus toimii hieman samaan tapaan kuin ihmissormissa. Sormenpäähän kiinnitetystä "jänteestä", robottikäden tapauksessa narusta, vedettäessä sormi taipuu, koska taivutetun sormen läpi narun tarvitsee kulkea lyhyempi matka. Kun narun jännitys vapautetaan, pyrkii joustoputki palaamaan takaisin suoraksi.
Robottikäden alustana käytettiin Kapa-levyä. Sormet liimattiin kuumaliimalla levyn toiseen päähän avointa kämmentä muistuttavaan asetelmaan. Toiseen päähän levyä aseteltiin servot siten, että niiden vetämät jänteet kulkivat sormilta servoille mahdollisimman suoraan ja toisiinsa sotkeutumatta.

Ohjauskäsine

Ohjauskäsineenä käytettiin viiltosuojakäsinettä jonka sormiin kiinnitettiin ompelemalla taivutusanturit. Anturit täytyy ommella kiinni niin, että ne pystyvät vapaasti liukumaan ompeleiden alla. 

Kehitys

  • Käden rakentamiseen löytyy paljon tyylikkäitä 3d-tulostettuja malleja. Esimerkiksi tämä: http://www.thingiverse.com/thing:17773
  • Ohjaushanskasta tulisi tyylikkäämpi, jos hanskoihin ompelisi kangasputket, joihin sensorit voisi pujottaa. 
'
Kuvassa lähes valmis työ. Lopullisessa työssä anturit ovat kiinni ompeleilla evätkä teipillä.