Servomotory mají obvykle ramena, která lze ovládat pomocí Arduina. Servomotory se skládají z řídicího systému, který zajišťuje zpětná vazba o aktuální poloze hřídele motoru umožňuje tato zpětná vazba pohybovat se s velkou přesností.
Pinout servomotoru
Většina servomotorů má obvykle tři kolíky:
- Pin Vcc (normálně červený 5V)
- GND kolík (normálně černý 0V)
- Pin vstupního signálu (příjem PWM signálu z Arduina)
Provoz servomotoru
Servomotor můžeme ovládat připojením pinu Vcc na 5V a pinu GND na 0V. Na žlutém terminálu poskytujeme a PWM signál, který řídí úhel natočení servomotoru. Šířka PWM signálu nám udává úhel, pod kterým motor otočí rameno.
Pokud se podíváme do Datasheetu servomotorů, dostaneme následující parametry:
- Časová perioda signálu PWM
- Minimální šířka pro PWM
- Maximální šířka pro PWM
Všechny tyto parametry jsou předdefinovány v knihovně Arduino Servo.
Servomotory s Arduinem
Servomotory se s Arduino velmi snadno ovládají díky Servo knihovna což nám pomáhá přizpůsobit náš kód podle potřeby a umožňuje nám otočit rameno serva v požadovaném úhlu.
Všechny tři výše uvedené parametry jsou pevně dané v knihovně serv. Pomocí těchto parametrů můžeme řídit úhel servomotoru následujícím způsobem:
- Pokud je šířka signálu PWM = WIDTH_MAX, servo se otočí o 180o
- Pokud je šířka signálu PWM = WIDTH_MIIN, servo se otočí na 0o
- Pokud šířka signálu PWM leží mezi nimi WIDTH_MAX a WIDTH_MIN servomotor se bude otáčet mezi 0o a 180o
Na některém z pinů Arduina můžeme vygenerovat požadovaný PWM signál. PWM signál bude dán na pin vstupního signálu servomotoru. Připojení zbývajících dvou pinů serva k 5V a GND Arduina.
Jak ovládat servomotor pomocí Arduina
Zde vysvětlím, jak můžeme připojit a naprogramovat náš servomotor pomocí Arduina. Vše co potřebuješ je:
- Arduino UNO
- USB B kabel
- Servomotor
- Startovací dráty
Jak programovat servo s Arduino
Následuje několik jednoduchých kroků:
Krok 1: Zahrnout předdefinovanou knihovnu serv:
# zahrnout < Servo.h >Krok 2: Vytvořit objekt serva:
Servo myservo;Tip: V případě, že ovládáte více než jeden servomotor, musíte vytvořit více servo objektů:
Servo myservo1;Servo myservo2;
Krok 3: Nastavte ovládací kolík (9) na Arduino Uno, který posílá PWM signál do vstupního portu serva:
myservo.připojit ( 9 ) ;Krok 4: Otočte úhel servomotoru na požadovanou hodnotu, například 90o:
myservo.write ( poz ) ;Arduino kód
Otevřete ukázkový program servomotoru z Soubor>Příklad>Servo>Sweep otevře se nové okno s naším náčrtem serva:
#includeServo myservo; // je vytvořen servo objekt pro ovládání servomotoru
int pos = 0 ; // pro uložení polohy serva je vytvořena nová proměnná
neplatné nastavení ( ) {
myservo.připojit ( 9 ) ; // tohle bude soubor Arduino pin 9 pro PWM výstup
}
prázdná smyčka ( ) {
pro ( poz. = 0 ; poz. = 0 ; pos -= 1 ) { // jde od 180 na 0 stupně
myservo.write ( poz ) ; // řekněte servu, aby přešlo do polohy „pos“.
zpoždění ( 5 ) ; // čeká pro 5 ms, aby se servo mohlo dostat do polohy
}
}
Jakmile je program zkompilován a nahrán, servomotor se začne pomalu otáčet od výchozí polohy 0 stupňů do 180 stupňů, jeden stupeň po druhém, stejně jako kroky. Když se motor otočí o 180 stupňů, začne se otáčet v opačném směru ke svému výchozímu bodu, tj. 0 stupňů.
Schémata
Jak ovládat servomotor pomocí potenciometru
Polohu servomotoru můžeme ovládat i ručně. K tomu potřebujeme a Potenciometr . Potenciometr má tři piny. Připojte dva vnější kolíky k 5V Vcc a GND Arduina a prostřední jeden ke kolíku A0 na desce Arduino.
Jak programovat servo s potenciometrem
Většina náčrtu pro potenciometr je stejná jako v předchozím příkladu. Jediným rozdílem je nová proměnná val a připnout je definována před částí kódu nastavení a smyčky.
int potpin = A0;int val;
Analogový pin A0 ve smyčce slouží ke čtení hodnot pro Potenciometr s funkcí analogRead() . Desky Arduino obsahují 10bitový ADC (Analog to Digital Converter), který nám dává hodnoty mezi 0 a 1023 v závislosti na poloze potenciometru:
val = analogPřečíst ( připnout ) ;Nakonec jsme použili mapa() Funkce pro přemapování čísel od 0 do 1023 podle úhlu serva, jak víme, servomotory se mohou otáčet pouze mezi 00 a 1800.
val = mapa ( val, 0 , 1023 , 0 , 180 ) ;Arduino kód
Náčrt otevřeného knoflíku dostupný v Arduino IDE, přejděte na Soubory>Příklady>Servo>Knob . Otevře se nové okno, které nám ukáže náš náčrt knoflíku pro servo:
#includeServo myservo; // Vytvoření názvu objektu servo myservo
int potpin = A0; // definující analogový pin pro potenciometr
int val; // variabilní který vůle číst analogové hodnoty pinů pro potenciometr
neplatné nastavení ( ) {
myservo.připojit ( 9 ) ; // definovaný pin 9 pro PWM vstupní signál serva na Arduinu
}
prázdná smyčka ( ) {
val = analogPřečíst ( připnout ) ; // čte hodnotu z potenciometru ( hodnota mezi 0 a 1023 )
val = mapa ( val, 0 , 1023 , 0 , 180 ) ; // škálovat hodnotu pro použití se servem ( hodnota mezi 0 a 180 )
myservo.write ( val ) ; // nastavuje polohu serva se škálovanou hodnotou
zpoždění ( patnáct ) ; // čeká pro servo, aby se dostalo do polohy
}
Výše uvedený kód nám pomůže ovládat hřídel servomotoru pomocí potenciometru, hřídel se bude otáčet mezi 0 a 180 stupni. Můžeme také udržovat rychlost spolu se směrem serva pomocí toho.
Kruhový diagram
Kolik servomotorů mohu připojit k Arduinu?
Maximální počet servomotorů, které Arduino UNO zvládne, je až 12 s knihovnou Arduino pro servo a max. 48 serv lze propojit s deskami jako Mega.
Spropitné: Můžeme přímo spustit servo pomocí proudu Arduino, ale nezapomeňte, že servomotory odebírají více než 500 mA pak se vaše deska Arduino může automaticky resetovat a ztratit napájení. Pro servomotory se doporučuje vždy používat vyhrazený napájecí zdroj.
Závěr
V tomto tutoriálu jsme probrali ovládací mechanismus servomotorů s Arduinem. Probrali jsme základy ovládání polohy a rychlosti serva pomocí potenciometru. Nyní máte představu o servomotorech a možnosti pro vaši robotiku, RC projekty a automatizaci pomocí serva jsou nekonečné.