Je to malý motor s převodovkou, který umí přesně natočit hřídel do určitého úhlu (většinou 0–180°). Uvnitř najdeme:

Zdroj obrázku: https://docs.arduino.cc/tutorials/generic/basic-servo-control/

Zdroj obrázku: https://lastminuteengineers.com/servo-motor-arduino-tutorial/
Servo se ovládá pomocí PWM signálu – konkrétně šířkou impulzu.
Perioda trvá 20 ms (50 Hz). Délka impulzu určuje úhel:
0,5 ms → Servo na 0°
1,5 ms → 90° (střed)
2,5 ms → 180°
Arduino knihovna Servo tuto práci zjednodušuje: servo.attach(pin) — určí, na který pin je servo připojené. servo.write(úhel) — nastaví úhel (0 až 180°).

Zdroj obrázku: https://lastminuteengineers.com/servo-motor-arduino-tutorial/

Zdroj obrázku: https://howtomechatronics.com/how-it-works/how-servo-motors-work-how-to-control-servos-using-arduino/
#include <Servo.h> // Přidáme knihovnu Servo
Servo servo1; // Vytvoříme si objekt serva
void setup() {
servo1.attach(2); // Nastavíme číslo pinu, kde je servo připojeno
}
void loop() {
servo1.write(0); // Nastaví servo do polohy 0°
delay(500); // Počkáme dostatečně dlouho, než servo dosáhne požadované pozice
servo1.write(90); // Nastaví servo do polohy 90°
delay(500); // Počkáme dostatečně dlouho, než servo dosáhne požadované pozice
}
Funkce map() v Arduinu slouží k převedení hodnoty z jednoho rozsahu do druhého. To je užitečné, když máme třeba hodnotu z analogového vstupu (0 až 1023) a chceme ji převést na jiný rozsah, třeba pro servo (0 až 180 stupňů) nebo pro jas LEDky (0 až 255).
Použití funkce:
long map(long value, long fromLow, long fromHigh, long toLow, long toHigh);
value: vstupní hodnota, kterou chceme převést
fromLow, fromHigh: původní rozsah hodnot
toLow, toHigh: nový rozsah hodnot
Příklad použití:
int potValue = analogRead(A0);
int angle = map(potValue, 0, 1023, 0, 180);
servo.write(angle);
analogRead() vrátí hodnotu od 0 do 1023 map() ji převede na úhel od 0 do 180 stupňů pro servo