blog

Servomoottori Arduinolla – kytkentä, koodi ja projektit

Haluatko lisätä liikettä Arduino-projektiisi? Servomoottori on yksi harrastajaelektroniikan käytetyimmistä komponenteista – ja hyvästä syystä. Se mahdollistaa tarkan kulma-asennon ohjauksen yhdellä signaalilangalla, mikä tekee siitä ihanteellisen robotiikkaan, RC-projekteihin ja automaatioon. Tässä oppaassa käymme läpi kaiken, mitä tarvitset servomoottori Arduino -projektin toteuttamiseen: toimintaperiaatteen, kytkennän, koodiesimerkit ja inspiroivia projektiehdotuksia.

Käytämme esimerkeissä suosittuja MG-995– ja MG996R-servomoottoreita, jotka tarjoavat metallihammasvaihteiston ja riittävän väännön useimpiin harrasteprojekteihin.

Servomoottori Arduino -projekteissa – toimintaperiaate

Harrasteservo koostuu neljästä pääkomponentista:

  • DC-moottori – pyörii suurella nopeudella mutta pienellä väännöllä
  • Hammasvaihteisto – alentaa nopeuden noin 60 kierrokseen minuutissa ja moninkertaistaa väännön
  • Potentiometri – kiinnitetty ulostuloakseliin, mittaa akselin absoluuttisen kulma-asennon
  • Ohjauspiiri – vertaa potentiometrin jännitettä (todellinen asento) signaalin tavoiteasentoon ja ohjaa moottoria H-sillan kautta

Kyseessä on suljetun silmukan takaisinkytkentäjärjestelmä: ohjauspiiri vertaa jatkuvasti haluttua asentoa todelliseen asentoon. Jos eroa on, H-silta pyörittää moottoria oikeaan suuntaan, kunnes virhe on nolla.

PWM-ohjaussignaali

Servomoottorin ohjaus perustuu PWM-signaaliin (Pulse Width Modulation), jonka taajuus on 50 Hz eli jaksonaika 20 ms. Pulssin leveys määrää kulma-asennon:

  • 500 µs → 0°
  • 1000 µs → ~45°
  • 1500 µs → 90° (keskiasento)
  • 2000 µs → ~135°
  • 2500 µs → 180°

MG995- ja MG996R-servot käyttävät tyypillisesti 500–2500 µs:n pulssinleveysaluetta täydelle 180 asteen liikeradalle.

Johtojen värit

MG995- ja MG996R-servoissa on kolme johtoa:

  • Ruskea = GND (maa)
  • Punainen = VCC (käyttöjännite, +5V – +6V)
  • Oranssi = PWM-signaali (ohjaussignaali)

MG995 vs MG996R – kumpi valita?

Molemmat ovat suosittuja metallihammasvaihteisia servomoottoreita, mutta niissä on merkittäviä eroja:

Ominaisuus MG995 MG996R
Tyyppi Analoginen Digitaalinen
Vääntö (6V) 9,4–10 kg·cm 11–13 kg·cm
Nopeus (6V) 0,16–0,17 s/60° 0,14 s/60°
Paino 55 g 55 g
Käyttöjännite 4,8–7,2 V 4,8–7,2 V
Pulssinleveys 500–2500 µs 500–2500 µs
Kuollut kaista 5 µs 1 µs
Liitin JR-tyyppi JR-tyyppi

Kuten taulukosta näkyy, MG996R on käytännössä MG995:n päivitetty versio. Siinä on uudelleensuunniteltu ohjauspiiri ja IC, jotka tarjoavat paremman tarkkuuden, vähemmän tärinää ja paremman iskunkestävyyden. Jos aloitat uuden projektin, MG996R on suositeltava valinta. MG995 on kuitenkin edelleen erinomainen valinta budjettiprojekteihin.

Molemmat servot painavat 55 g, käyttävät samaa JR-tyyppistä liitintä ja sopivat samoihin kiinnikkeisiin – joten vaihto mallista toiseen on helppoa.

Kytkentä Arduinoon

Yksinkertainen kytkentä (vain kevyille kuormille)

Pienillä SG90-tyyppisillä servoilla voit käyttää Arduinon omaa 5V-lähtöä. MG995- ja MG996R-servoilla tämä ei ole suositeltavaa.

  • Servon ruskea johto → Arduino GND
  • Servon punainen johto → Arduino 5V
  • Servon oranssi johto → Arduino digitaalipinni 9

⚠️ Ulkoinen virtalähde – pakollinen MG995/MG996R-servoille

Älä kytke MG995- tai MG996R-servoa suoraan Arduinon 5V-pinniin! Arduinon USB-portti tarjoaa vain noin 500 mA, ja jänniteregulaattori kestää korkeintaan 800 mA. MG996R:n pysäytysvirtakulutus voi olla jopa 2,5 A – tämä aiheuttaa Arduinon uudelleenkäynnistyksiä, servon nykimistä ja pahimmillaan laitevaurioita.

Oikea kytkentä ulkoisella virtalähteellä:

  • Ulkoinen 5–6V virtalähde (+) → Servon punainen johto
  • Ulkoinen virtalähde (−/GND) → Servon ruskea johto
  • Ulkoisen virtalähteen GND → Arduinon GND (yhteinen maa on pakollinen!)
  • Arduinon digitaalipinni 9 → Servon oranssi johto (signaali)

Useamman servon projektissa laske virtatarve: jokainen MG996R voi kuluttaa jopa 2,5 A pysäytystilanteessa. Kahdelle servolle tarvitset vähintään 5 A:n virtalähteen, viidelle servolle vähintään 12 A:n. Hyviä vaihtoehtoja ovat 5V kytkentävirtalähde tai 4× AA-paristot (6V).

Vinkki: Lisää 100–470 µF:n suodatuskondensaattori servon virtajohtojen väliin häiriöiden vähentämiseksi.

Kytkentään sopivat erinomaisesti Dupont-hyppylangat (uros-naaras), joilla servon liitin yhdistetään kätevästi Arduinon pinneihin.

Dupont-hyppylanka 10cm (20kpl) uros-naaras
Dupont-hyppylangat – kätevä tapa yhdistää servo Arduinoon

Arduino Servo-kirjasto

Arduinon Servo-kirjasto on sisäänrakennettu – erillistä asennusta ei tarvita. Se tukee jopa 12 servoa useimmilla Arduino-levyillä (Uno, Nano) ja 48 servoa Arduino Megalla.

Tärkeä huomio: Servo-kirjaston käyttö poistaa analogWrite()-PWM-toiminnon pinneistä 9 ja 10 (Uno/Nano), riippumatta siitä, onko servo kytketty näihin pinneihin. Servo-kirjasto generoi oman ajoituksensa, joten servon signaalijohdon voi kytkeä mihin tahansa digitaalipinniin – ei vain PWM-pinneihin.

Tärkeimmät funktiot

  • Servo myservo; – Luo servo-objekti
  • myservo.attach(pin); – Kiinnitä servo pinniin
  • myservo.attach(pin, min, max); – Kiinnitä mukautetulla pulssinleveysalueella (esim. 500, 2500)
  • myservo.write(kulma); – Aseta asento asteina (0–180)
  • myservo.writeMicroseconds(us); – Aseta asento tarkalla pulssinleveydellä
  • myservo.read(); – Lue viimeksi kirjoitettu kulma
  • myservo.detach(); – Irrota servo (vapauttaa pinnin, lopettaa pulssien lähettämisen)

Koodiesimerkki 1: Sweep-pyyhkäisy

Klassinen esimerkki, jossa servo pyyhkäisee edestakaisin 0–180 astetta. Tämä on paras tapa testata, että servomoottori Arduino -kytkentä toimii oikein.

#include <Servo.h>

Servo myservo;  // Luodaan servo-objekti
int pos = 0;    // Muuttuja servon asennon tallentamiseen

void setup() {
  myservo.attach(9);  // Servo kytketty pinniin 9
}

void loop() {
  // Pyyhkäisy 0 → 180 astetta
  for (pos = 0; pos <= 180; pos += 1) {
    myservo.write(pos);
    delay(15);  // Odotetaan 15 ms servon liikkumista
  }
  // Pyyhkäisy 180 → 0 astetta
  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);
    delay(15);
  }
}

Miten se toimii: For-silmukka kasvattaa pos-muuttujaa 0:sta 180:een yhden asteen askelin. Jokaisen askeleen jälkeen delay(15) antaa servolle aikaa liikkua fyysisesti uuteen asentoon. Yksi pyyhkäisy kestää noin 180 × 15 ms = 2,7 sekuntia.

Koodiesimerkki 2: Potentiometriohjaus

Tässä esimerkissä ohjaat servoa kääntämällä potentiometriä. Tarvitset 10 kΩ:n potentiometrin (ei saatavilla Protocachesta – löytyy elektroniikkaliikkeistä).

#include <Servo.h>

Servo myservo;

int potpin = A0;  // Potentiometri kytketty analogipinniin A0
int val;

void setup() {
  myservo.attach(9);
}

void loop() {
  val = analogRead(potpin);           // Luetaan potentiometrin arvo (0–1023)
  val = map(val, 0, 1023, 0, 180);   // Skaalataan servo-alueelle (0–180)
  myservo.write(val);                 // Asetetaan servon asento
  delay(15);                          // Odotetaan servon liikkumista
}

Kytkentä: Potentiometrin ulommaiset nastat kytketään 5V:iin ja GND:hen, keskimmäinen nasta (liukuva kosketin) Arduinon A0-pinniin. analogRead() lukee arvon 0–1023, ja map()-funktio skaalaa sen 0–180 asteeksi. Servo seuraa potentiometrin asentoa reaaliajassa.

Koodiesimerkki 3: MG995/MG996R mukautettu ohjaus

MG995- ja MG996R-servojen täyden liikeradan hyödyntämiseksi kannattaa käyttää mukautettua pulssinleveysaluetta. Tämä esimerkki liikuttaa servoa kolmeen eri asentoon ja tulostaa tiedot sarjamonitoriin.

#include <Servo.h>

#define SERVO_PIN 6

Servo MG995_Servo;

void setup() {
  Serial.begin(9600);
  // Kiinnitetään servo mukautetulla pulssinleveysalueella (500–2500 µs)
  MG995_Servo.attach(SERVO_PIN, 500, 2500);
  Serial.println("MG995/MG996R servo valmis!");
}

void loop() {
  // Liiku 0 asteeseen
  Serial.println("Asento: 0 astetta");
  MG995_Servo.write(0);
  delay(2000);

  // Liiku 90 asteeseen (keskiasento)
  Serial.println("Asento: 90 astetta");
  MG995_Servo.write(90);
  delay(2000);

  // Liiku 180 asteeseen
  Serial.println("Asento: 180 astetta");
  MG995_Servo.write(180);
  delay(2000);
}

Vinkki: Jos servo ei saavuta täyttä 0–180° liikerataa, säädä attach()-funktion min/max-arvoja. Oletusarvot ovat 544–2400 µs, mutta MG995/MG996R-servoille 500–2500 µs toimii yleensä paremmin. Kokeile eri arvoja löytääksesi omalle servolle optimaaliset asetukset.

Kompaktiin servo-projektiin sopii erinomaisesti ATmega328P Nano -ohjain, joka tarjoaa samat ominaisuudet kuin Arduino Uno mutta huomattavasti pienemmässä koossa.

ATmega328P Nano -ohjain
ATmega328P Nano -ohjain – kompakti valinta servo-projekteihin

Servo-projektiehdotuksia

Kun servo-ohjaus on hallussa, mahdollisuudet ovat rajattomat. Tässä muutamia inspiroivia projektiehdotuksia:

  1. Robottikäsivarsi – Käytä 4–6 MG996R-servoa nivelissä ja ohjaa potentiometreillä tai joystickillä. Erinomainen tapa oppia robotiikan perusteita.
  2. Pan-tilt-kamerateline – Kaksi servoa (vaaka + pysty) mahdollistavat kameran tai ultraäänianturin suuntaamisen. Sopii valvontakameroihin ja FPV-projekteihin.
  3. Automaattinen ovenlukko – Servo kääntää lukon salpaa. Ohjaus näppäimistöllä, RFID-lukijalla tai Bluetooth-yhteydellä.
  4. Aurinkopaneelin seuranta – Servo säätää paneelin kulmaa valosensorien lukemien perusteella, maksimoiden energiantuotannon.
  5. Ultraäänitutka – Servo pyyhkäisee ultraäänianturia 180° kaaressa ja piirtää ympäristökartan sarjamonitoriin tai Processing-ohjelmaan.
  6. Automaattinen lemmikkiruokkija – Servo avaa ja sulkee ruoka-annostelijan ajastimen mukaan.
  7. Robottiauton ohjaus – Servo kääntää etupyöriä, kuten oikeassa autossa. Yhdistä L298N H-silta -ohjaimeen DC-moottoreiden vetoa varten.

Jokainen näistä projekteista on toteutettavissa MG995- tai MG996R-servolla ja ATmega328P Nano -ohjaimella. Useamman servon projekteissa muista mitoittaa virtalähde riittäväksi!

Jos haluat lisätä projektiin Wi-Fi- tai Bluetooth-ohjauksen – esimerkiksi servon etäohjauksen puhelimella – ESP32 DevKitC (WROOM-32) on erinomainen valinta. ESP32 tukee suoraan Servo-kirjastoa ja mahdollistaa langattoman ohjauksen ilman lisämoduuleja.

Robottiautoprojektiin tarvitset servojen lisäksi moottoriohjaimen DC-moottoreille. L298N duaali H-silta -ohjain on suosittu valinta, jolla ohjaat kahta DC-moottoria servon hoitaessa ohjauksen.

Vianetsintä ja vinkit

Servo-projekteissa törmää usein samoihin ongelmiin. Tässä yleisimmät ja niiden ratkaisut:

  • Servo nykii tai tärisee: Lisää suodatuskondensaattori (100–470 µF) servon virtajohtojen väliin. Tarkista, että käytät ulkoista virtalähdettä ja liitokset ovat tukevat.
  • Servo ei saavuta täyttä 180°: Säädä pulssinleveysaluetta attach(pin, min, max) -funktiossa. Kokeile arvoja 500–2500 µs.
  • Arduino käynnistyy uudelleen servon liikkuessa: Virtalähdeongelma – servo kuluttaa liikaa virtaa Arduinon regulaattorilta. Käytä ulkoista virtalähdettä!
  • Servo kuumenee: Älä pidä servoa pysäytysasennossa pitkään kuormitettuna. Vähennä kuormaa tai käytä detach()-funktiota, kun servon ei tarvitse pitää asentoa.
  • Servo humisee mutta ei liiku: Tarkista, ettei servo ole mekaanisesti jumissa. Varmista signaalijohdon kytkentä ja kokeile toista digitaalipinniä.
  • Useampi servo häiritsee toisiaan: Varmista riittävä virtalähteen kapasiteetti. Lisää jokaiselle servolle oma suodatuskondensaattori.

Muista: Servo-kirjasto toimii millä tahansa digitaalipinnillä, ei vain PWM-pinneillä. Kirjasto generoi oman ajoituksensa sisäisesti. Tämä antaa sinulle enemmän joustavuutta kytkennässä.

Suositellut tuotteet servo-projektiin

Tässä kaikki tarvitsemasi komponentit servomoottori Arduino -projektin aloittamiseen:

Yhteenveto

Servomoottori Arduinolla on yksi helpoimmista tavoista lisätä liikettä elektroniikkaprojekteihisi. MG995 ja MG996R ovat erinomaisia valintoja metallihammasvaihteistollaan ja riittävällä väännöllään. Muista nämä kolme tärkeintä asiaa:

  1. Käytä ulkoista virtalähdettä – MG995/MG996R-servot kuluttavat liikaa virtaa Arduinon regulaattorille.
  2. Yhdistä maat – Ulkoisen virtalähteen ja Arduinon GND-pinnit on kytkettävä yhteen.
  3. Hyödynnä attach(pin, min, max) – Mukautettu pulssinleveysalue (500–2500 µs) varmistaa täyden 180° liikeradan.

Tutustu Protocachen MG996R-servoon ja MG995-servoon, ja aloita oma servo-projektisi jo tänään! Löydät valikoimastamme myös ATmega328P Nano -ohjaimen ja kaikki tarvittavat kytkentätarvikkeet.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *