Servo SG90 - manual
Servo motorček - manual
Dostali ste dva druhy servo motorčekov: 180° a 360°. Oba vyzerajú takmer rovnako a ovládajú sa rovnakým spôsobom, ale výsledné správanie je odlišné.
-
Servo motorček 180°
-
Servo motorček 360°
-
Vytlačiteľný držiak pre servo
Ako servo funguje
Servo motorček neriadime priamo napätím ako obyčajný motorček, ale sériou opakovaných elektrických impulzov. Každých približne 20 ms príde jeden krátky impulz, ktorého dĺžka (v mikrosekundách) hovorí servu, čo má urobiť:
- Impulz okolo 1500 µs zodpovedá strednej pozícii (90°).
- Kratší impulz (bližšie k 500 µs) posunie servo k jednému kraju.
- Dlhší impulz (bližšie k 2500 µs) posunie servo k druhému kraju.
Vnútri serva je malý riadiaci obvod, ktorý dĺžku impulzu neustále porovnáva so skutočnou polohou hriadeľa (tú sníma potenciometer) a podľa výsledku dobieha motorček do správnej polohy. Práve toto priebežné porovnávanie je dôvod, prečo servo dokáže polohu aj držať – ak ho niekto rukou pohne, samo sa vráti späť.
Rozdiel medzi typmi je v tom, čo sa vo vnútri serva deje s týmto signálom:
| Typ | Správanie |
|---|---|
| 180° servo | Riadiaci obvod polohu skutočne obmedzuje – servo sa nastaví na presnú pozíciu (napr. 0°, 90°, 180°) a tam zostane |
| 360° servo | Obmedzenie polohy je odstránené – servo namiesto pozície interpretuje signál ako smer a rýchlosť otáčania: hodnota 90° = stoj, pod 90° = točenie na jednu stranu, nad 90° = točenie na druhú stranu (čím ďalej od 90°, tým rýchlejšie) |
Servo dostáva riadiace impulzy v rozsahu 500–2500 µs. Zapojte servo na pin GP12.
Vyskúšaj toto: Nahrajte nasledujúci program. Otvorte sériový monitor (115200 baud), zadajte číslo od 0 do 180 a stlačte Enter. Vyskúšajte si to najprv s 180° servom, potom s 360°. Čo si všimnete?
#include <Servo.h>
#define SERVO_PIN 12
Servo servo;
int position = 90;
//int impulz = 1500;
void setup() {
Serial.begin(115200);
servo.attach(SERVO_PIN, 500, 2500);
servo.write(position);
//servo.writeMicroseconds(impulz);
Serial.print("Motor je na pozicii: ");
Serial.println(servo.read(SERVO_PIN));
}
void loop() {
}
| Novinka | Vysvetlenie |
|---|---|
#include <Servo.h> |
Načítame knižnicu pre ovládanie serva – bez nej by sme museli impulzy generovať ručne |
servo.attach(pin, 500, 2500) |
Pripojíme servo na pin a definujeme rozsah impulzov (500–2500 µs) |
servo.write(uhol) |
Nastavíme servo na požadovaný uhol (0–180°) |
servo.writeMicroseconds(impulz) |
Alternatíva k write() – dĺžku impulzu (v µs) nastavíme priamo, bez prepočtu na uhol. Riadok je v kóde zakomentovaný, môžete si ho vyskúšať namiesto servo.write()
|
Čo sme sa naučili?
- Servo motorček ovládame pomocou knižnice
Servo.ha funkciíservo.write()aservo.writeMicroseconds(). - Poloha serva je zakódovaná v dĺžke opakovaného impulzu (500–2500 µs).
- 180° servo nastavuje presnú polohu, 360° servo ovláda smer a rýchlosť otáčania.
servo.read(SERVO_PIN)zistí, aký smer/pozíciu má servo.