Chytrá WiFi zásuvka Sonoff S26
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
Arduino krokový motor s driverem, tedy řídící deskou, je vhodným kompletem pro nejrůznější projekty, které vyžadují řízený mechanický pohyb. Tento návod je konkrétně zaměřen na krokový motor 28BYJ-48 a driver s tranzistorovým polem ULN2003. Zmíněný motor je unipolární a jedná se o elektromechanické zařízení, které přeměňuje elektrické impulzy na mechanický pohyb. Mezi výhody tohoto krokového motoru patří snadné otočení o libovolný úhel, velká síla i v klidné poloze či okamžitá odezva při zastavení či spouštění motoru.
Pro úspěšné propojení s Arduinem je nutné nejprve propojit motor s driverem pomocí pěti-pinového konektoru a dále propojit driver a Arduino desku 6 propojovacími piny. Připojíme IN1 na D8, IN2 na D9, IN3 na D10 a dále z napájecích pinů – na GND a + na 5 V. Napájení je však vhodné při větší zátěži na motor připojit z externího zdroje – například baterie. Výstupní piny INx můžeme samozřejmě připojit na jiné volné piny naší Arduino desky.
Ukázkový kód obsahuje ukázku práce s krokovým motorem a otočením jeho hřídele o plných 360 stupňů. Na začátku kódu nastavíme čísla pinů pro digitální výstupy, vytvoříme proměnnou, pomocí které se nastavuje rychlost – 1 odpovídá nejvyšší rychlosti a s většími čísly (doba mezi spínáními) se rychlost snižuje a také vytvoříme proměnnou na nastavení úhlu otočení hřídele. V podprogramu setup nastavíme všechny digitální výstupy jako výstupy. V loop smyčce pak nejprve pomocí smyčky for provedeme otáčku o nastavený úhel po směru hodinových ručiček, počkáme jednu vteřinu a provedeme rotaci proti směru hodinových ručiček. Dále se už v kódu nachází pouze podprogramy s nastavením jednotlivých kroků a jejich posloupnosti tak, jak udává výrobce motoru.
// Krokový motor a driver // čísla pinů pro digitální výstupy const int in1 = 8; const int in2 = 9; const int in3 = 10; const int in4 = 11; // proměnná pro nastavení rychlosti, // se zvětšujícím se číslem se rychlost zmenšuje int rychlost = 1; // int uhel = 360; void setup() { // inicializace digitálních výstupů pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void loop() { // plná rotace o 360 stupňů = 512 volání // funkce rotacePoSmeru() či rotaceProtiSmeru() for(int i=0;i<(uhel*64/45);i++){ rotacePoSmeru(); } // pauza po dobu 1 vteřiny delay(1000); for(int i=0;i<(uhel*64/45);i++){ rotaceProtiSmeru(); } // pauza po dobu 1 vteřiny delay(1000); } // zde následují funkce pro volání jednotlivých // kroků pro otočení po či proti směru hodinových // ručiček void rotacePoSmeru() { krok1(); krok2(); krok3(); krok4(); krok5(); krok6(); krok7(); krok8(); } void rotaceProtiSmeru() { krok8(); krok7(); krok6(); krok5(); krok4(); krok3(); krok2(); krok1(); } // každý krok obsahuje výrobcem dané pořadí // pro správné spínání motoru a následnou // pauzu, kterou určujeme rychlost otáčení void krok1(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok2(){ digitalWrite(in1, HIGH); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok3(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok4(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok5(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok6(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, HIGH); delay(rychlost); } void krok7(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); } void krok8(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); }
Po nahrání programu do Arduino desky můžeme pozorovat opakující se rotaci hřídele krokového motoru. Poté si můžeme vyzkoušet měnit rychlost otáčení pomocí proměnné rychlost či úhel otočení hřídele pomocí nastavení počtu průběhů for smyčkou. Tento úhel vychází z datasheetu výrobce, který udává, že 512 průběhů odpovídá 360 stupňům. Velikost úhlu je tedy nutné vynásobit číslem 64 a následně podělit hodnotou 45. Je však nutno podotknout, že například u úhlu 100 stupňů by počet průběhů smyčkou vycházel na 142,2. My můžeme provádět ale pouze celá čísla, ve skutečnosti se tedy provede pouze 142 průběhů a skutečný úhel bude 99,84 stupňů.
Seznam použitých komponent:
http://dratek.cz/arduino-vystupni-periferie/832-arduino-krokovy-motor-driver.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
e-Paper displeje už jsou dostupné i pro bastlení za rozumné ceny a pro jejich ovládání se hodí tento Driver.