Driver servomotorů je výstupní modul pro Arduino. Tento modul obsahuje integrovaný obvod PCA9685, který má 16 kanálů s funkcí PWM. Díky tomu tedy můžeme řídit z tohoto modulu až 16 připojených servomotorů s PWM rozlišením 12 bitů. Na modulu se nachází na vrchní straně napájecí konektor pro externí zdroj napětí pro serva, dále je na spodní straně 16 konektorů pro připojení serv a po bocích piny pro připojení modulu k mikrokontroléru. Na horní straně modulu se ale také nachází pájecí plošky označené jako A0-A5, které slouží pro nastavení I2C adresy. Můžeme totiž za sebou propojovat více těchto PCA9685 modulů a díky 6b adrese to může být až 64 modulů (a díky tomu až 1024 serv!). Pro napájení řídící elektroniky se používá pin VCC, na který se připojuje napětí 5 Voltů. Pro řízení servomotorů pak slouží pin V+ (pin na bocích a zároveň na 2pin šroubovacím konektoru), který zvládá napětí v rozsahu 5-12 Voltů, ale toto napětí je nutné zvolit podle použitých servomotorů. Komunikace mezi driverem a Arduinem probíhá po sběrnici I2C.
Pro úspěšné propojení modulu PCA9685 a Arduino desky stačí zapojit celkem 4 vodiče. Propojíme VCC s 5V Arduina, SDA s pinem A4, SCL s pinem A5 a GND se zemí Arduina. Pro piny SDA a SCL musíme vybrat vždy vyhrazené I2C piny na námi vybrané desce, u Arduino UNO jsou to právě piny A4 a A5. A já jsem také propojil pin V+ s 5V Arduina, protože pro test jsem použil pouze jeden servomotor a vím, že to Arduino zvládne. Pro více motorů by ale už bylo zapotřebí použít externí napájecí zdroj.
Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu PWMServoDriver, návod, jak na to, je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven společně s vytvořením objektu modulu z knihovny, u kterého zadáváme v závorce adresu modulu, kdy ve výchozím stavu je to adresa 0x40. V podprogramu setup zahájíme komunikaci po sériové lince a poté začneme komunikovat s driverem. A jako další krok nastavíme výchozí PWM frekvenci na 60 Hz. V nekonečné smyčce loop jsem uvedl pár příkladů, jak pracovat se připojenými servy. V prvním příkazu tedy vidíme nastavení nultého kanálu (první konektor, číslování je od nuly), přičemž nastavujeme jeho koncovou polohu na 150. Zde je nutné si u Vašich servomotorů vyzkoušet, jaké hodnoty dorazů budou fungovat u různých serv. V dalších dvou ukázkách je nastavení kanálu 1 a 2 na různé hodnoty a u kanálu 3 byly použity dvě for smyčky pro různé nastavení poloh. Vidíme, že první for smyčka prochází hodnoty od 150 do 450 a po ní následuje krátká pauza. Poté projdeme podobnou smyčku, akorát budeme klesat z hodnoty 450 na hodnotu 150 a poté opět počkáme krátký čas před novým během smyčky.
// Driver servomotorů PC9685
// připojení potřebných knihoven
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// vytvoření objektu driveru z knihovny
// se zadanou výchozí adresou 0x40
Adafruit_PWMServoDriver driverPCA = Adafruit_PWMServoDriver(0x40);
void setup() {
// zahájení komunikace po sériové lince
Serial.begin(9600);
// zahájení komunikace s driverem
driverPCA.begin();
// nastavení výchozí PWM frekvence na 60Hz
driverPCA.setPWMFreq(60);
}
void loop() {
// nastavení PWM signálu na:
// servo kanál "0",
// počáteční poloha "0",
// koncová poloha "150"
driverPCA.setPWM(0, 0, 150);
// servo "1", koncová poloha "300"
driverPCA.setPWM(1, 0, 300);
// servo "2", koncová poloha "450"
driverPCA.setPWM(2, 0, 450);
// servo "3", postupně projdeme ve smyčce
// polohy 150 až 450
for (int delkaPulzu = 150; delkaPulzu < 450; delkaPulzu++) {
driverPCA.setPWM(3, 0, delkaPulzu);
}
// pauza mezi pohyby
delay(500);
// servo "3", postupně projdeme ve smyčce
// polohy 450 až 150
for (int delkaPulzu = 450; delkaPulzu > 150; delkaPulzu--) {
driverPCA.setPWM(3, 0, delkaPulzu);
}
// pauza před novým během smyčky
delay(500);
}
Po nahrání ukázkového kódu do Arduino desky s připojeným servo driverem si můžeme postupně vyzkoušet všechny 4 ovládané kanály. Kanály 0 až 2 vždy pouze staticky nastaví servomotor do dané polohy, ale při připojení serva na kanál 3 můžeme pozorovat pravidelné hýbání osičky mezi nastavenými koncovými polohami 150 a 450.
Driver servomotorů PCA9685 je zajímavým doplňkem pro Arduino. Umožňuje nám připojit až 16 serv přes pouhé 2 vodiče sběrnice I2C. A při použití 64 modulů to už dává až 1024 servomotorů. Použití modulu může být v malém počtu serv například pro různé roboty či vozítka, ale při větším počtu by mohlo pomoci například ve výrobních zařízeních a podobně. Jeho výhodou je pak oddělené napájení pro serva a elektroniku, kdy podle použitých servomotorů můžeme použít i vyšší napětí až 12 Voltů.
Motorizovaný kulový ventil. Má široké uplatnění v různých průmyslových a obytných instalacích. Může být integrován do automatických systémů řízení, kde je možné ovládat průtok dálkově nebo automatizovaně podle předem nastavených podmínek.
Motorizované kulové vently s obvodem CR01, CR02, CR03 nebo CR04 je poměrně jednoduché po elektrické stránce správně zapojit. U ventilu s obvodem CR05 je tomu ale trochu jinak - ventil si sám nehlídá krajní polohy otevření, nebo zavření. Z toho důvodu vznikl tento článek, ukazující některé výhody, použití a především správné zapojení ventilu s obvodem CR05.