Jak nainstalovat integraci Drátek eInk do Home Assistantu
Průvodce instalací integrace Drátek eInk do Home Assistantu pomocí obchodu HACS.
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ů.
Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1686-modulovy-driver-servo-motoru-pro-arduino-pca9685-16-kanalu-12-bit-pwm-1501231841.html
https://dratek.cz/arduino/897-arduino-servo-motor-1420669476.html
Průvodce instalací integrace Drátek eInk do Home Assistantu pomocí obchodu HACS.
Návod, jak jednoduše přidat a nastavit Drátek e-ink displej do Home Assistant