Prototyypin rakentaminen: Servojen ohjaus


11.4.2013 klo 17.39

Tehtävän tarkoituksena oli ohjata servomoottoria kahdella eri tavalla, Arduinon sisäisellä Servo-luokalla sekä käsin syöttämällä signaaleja sille suoraan.

Aloitin tehtävän tekemällä vaadittavat kytkennät arduinon ja servon välillä.  Servoni on mallia Tower Pro Micro Serve 9g SG90. Servomoottorissa on normaaleista moottoreista poiketen kolme johtoa: plus-johto johon tulee jatkuva jännite; miinus-johto joka tulee maihin sekä yleensä oranssi signaalijohto, jolla servoa ohjataan.

servokytkenta-bb

servokytkenta-hardware

Kun kytkentä oli tehty, avasin Arduinon kehitysympäristön koneelle ja avasin File -> Examples -> Servo -> Sweep-esimerkkiohjelman servokytkennän testausta varten. Latasin ohjelman piirilevylle ja servo alkoi liikkumaan edes takas juuri niinkuin ohjelma käskee tekemään. Esimerkkiohjelmassa käytetään Arduinon sisäistä Servo-luokkaa servon ohjaamiseen.

arduino-sweep

Servon ohjaaminen manuaalisesti pulsseilla

Servoa on myös mahdollista ohjata itse syöttämällä sille digitalWrite-funktiolla pulsseja tuohon pulse-johtoon. Seuraavalla koodilla sain servon liikkumaan puoli senttiä edestakaisin:

int servopin = 9;

    void setup() {
      pinMode(servopin, OUTPUT);

    }

    void loop() {
      eteenpain();
      delay(2000);
      taaksepain();
      delay(2000);

    }

    void eteenpain() {
      digitalWrite(servopin, HIGH);
      delayMicroseconds(500);
      digitalWrite(servopin, LOW);

    }

    void taaksepain() {
      digitalWrite(servopin, HIGH);
      delayMicroseconds(2200);
      digitalWrite(servopin, LOW);

    }

Ongelmaksi muodostui saada servo liikkumaan varmemmin oikeaan suuntaan sekä saada se laajemmin liikkumaan. Koska en saanut säätämällä edellistä toimimaan paremmin, päätin kokeilla netistä löytynyttä lähdekoodimallia josko se toimisi odotetummin: http://blog.zipwhip.com/2012/03/28/manual-control-of-a-servo-on-the-arduino-for-the-zipwhip-textspresso-machine/

11.4.2013 klo 21.22

Pitkän säätämisen jälkeen tuo netistä löytynyt koodinpätkä toimi vielä huonommin kuin itse kirjoittamani versio aikaisemmin. Servossani on varmaankin jokin omituinen pulssisykli, koska en saanut sitä toimimaan mitenkään järkevästi muulla kuin Arduinon omalla Servo-luokalla.