Servomotor
Beskrivelse
En servomotor er en type motor som kan dreie akslinga til en bestemt vinkel eller rotere med en definert fart.

Dreiningen skjer ved at servoen mottar pulser. Lengden på pulsen bestemmer dreievinkelen. En pulslengde på 1,5 ms (1,5 millisekund) gir en vinkel på 90 grader, som er midtstilling.
Pulsene må gjentas med jevne mellomrom, omtrent som når vi pulsbreddemodulerer et signal. I det illustrerte eksempelet under sendes signalet ut hvert 20. millisekund. Det vil da si at signalet oppdateres med en frekvens på 50 Hz, altså 50 ganger i sekundet.
Vi kopler derfor styreledninga til servomotoren til en utgang som har funksjon for pulsbredde (PWM), f.eks. port 9. Pinner som kan benyttes med PWM-signal, er merka med tegnet ~.
Bruksområder
En servomotor kan brukes som en aktuator for en mikrokontroller. Vanligvis roterer den kun 180 grader, den går ikke konstant rundt som en vanlig motor.

Servomotorer brukes for eksempel
i modellfly for å styre side- og høyderor og vingeklaffer
i ventilasjonsanlegg i biler for å justere luftstrømmen
i mange roboter som har bevegelige armer
i ventilasjonsluker på varmepumper og i ulike låsemekanismer
Klarer du å finne andre eksempler på apparater og maskiner der en servomotor er montert?
Kopling

En servomotor har tre tilkoplinger:
Den skal ha 5 V (pluss) spenning inn.
Den skal koples til GND (jording).
Den skal motta et styresignal fra en digital PWM-port. I dette tilfellet har vi valgt port 9.
Hvis en skal benytte mange servomotorer, kan det være hensiktsmessig å montere et spesialdesigna skjold på Arduinoen som kan styre flere servomotorer.

Koplingsskjema
Under finner du et eksempel på et koplingsskjema. I skjemaet er det tegna inn en servomotor som er kopla til en Arduino på punktene 5V, GND og D9. Det er også montert en motstand på 1 kΩ (kiloohm) i GND-kretsen.

Programmering
Ved bruk av en servomotor må programmet hente inn et forhåndslaga program (et bibliotek) med flere spesialtilpassa kommandoer. Denne programkoden vises ikke, men den ligger i bakgrunnen og gjør det enklere å programmere bevegelsen til motoren.
De fleste servomotorer styres av biblioteket "Servo.h". I programeksempelet nedenfor roterer servoen fram og tilbake mellom 0 og 180 grader. Dette gjøres ved at det legges til 1 på variabelen pos. hver gang programmet kjøres.
Når servomotoren når 180 grader, begynner programmet å trekke 1 fra variabelen hver gang programmet kjøres. Når variabelverdien er nede i null igjen, starter prosessen på nytt.
Kodeeksempel
#include <Servo.h> // Henter inn bibliotek for servomotorer
int pos= 0; // Setter startposisjon til posisjon 0
Servo servo_9; // Valg av pinne for styringssignal for servomotor
void setup()
{
servo_9.attach(9, 500, 2500); //Setter styring på pinne 9, og angir minimum og maksimum pulsbredde i mikrosekunder for henholdsvis 0 og 180 grader
}
void loop()
{
// Roterer servoen med ei oppløsing (indeksering) på 1 grad
for (pos= 0; pos <= 180; pos += 1) {
// Gir servomotoren beskjed om å gå til posisjonen lagra i variabelen 'pos'
servo_9.write(pos);
delay(15); // Venter i 15 millisekunder slik at servomotoren kommer til riktig posisjon
}
for (pos= 180; pos >= 0; pos -= 1) {
// Gir servomotoren beskjed om å gå til posisjonen lagra i variabelen 'pos'
servo_9.write(pos);
delay(15); // Venter 15 millisekunder slik at servomotoren kommer til riktig posisjon
}
}