Sandbox/OndrejT/stepper/index
Komponenty
Zdroj Voltcraft FPPS 9-6W
Parametry zdroje
5V DC
660mA
5.94 VA
Arduino UNO
Arduino UNO je programovatelná deska s čipem ATmega328p. Na desce je vyvedeno 14 digitálních i/o pinů (přičemž piny 1 a 0 jsou rezervovány pro sériovou komunikaci) a 6 analogových input pinů, USB konektor a power jack.
Arduino Ethernet Shield W5100 R3
Arduino Ethernet Shield je rozšiřující deska pro Arduino umožňující komunikaci přes ethernet. Produktů sloužící jako ethernet shield je vícero. Pro toto řešení byl využit Arduino Ethernet Shield W5100 R3. Tato deska nese čip Wiznet W5100 který podporuje protokoly IPv4, TCP, UDP a další. Na desce se také nachází slot pro SD kartu.
Shield se do Arduina zapojí z vrchu tak aby ethernetový port byl na stejné straně jako USB port a power jack na Arduinu.
Díky rozšířeným možnostem komunikace je na ethernet shieldu několik digitálních pinů vyhrazeno jistým účelům:
Pin 2 — ?
Pin 4 — je rezervován pro SPI CS SD slotu
Pin 10 — je rezervován pro SPI CS ehternetu
Pin 13 — SPI Serial Clock
Ovládací deska k motoru
Stepper motor 28BYJ-48
Zapojení
Desku je třeba připojit ke zdroji napájení a k ethernetu.Pokud Arduino ještě není naprogramované, nebo byla provedena změna programu je potřeba připojit Arduino k počítači přes USB k počítači a program do něj nahrát (viz níže).
Dále je třeba propojit motor s jeho ovládací deskou (6-pin konektord do 6-pin socketu) a tuto desku pak připojit k Arduinu. Zapojení napájení motoru:
- na desce motoru propojíme s Gnd na arduinu
+ na desce motoru propojíme s 5V na arduinu
Input piny IN1 IN2 IN3 IN4 na desce motoru je nutné propojit s digitálními I/O piny na Arduinu následovně:
IN1 — 6, IN2 — 9, IN3 — 7, IN4 — 8
Poznámka k zapojení IN pinů
Toto zapojení input pinů je nesprávné a nemělo by fungovat. Při správném zapojení (IN1 — 6, IN2 — 7, IN3 — 8, IN4 — 9) lze s motorem otáčet pouze na jednu stranu. Po příkazu k obrácení směru zařízení nereaguje i přes to, že kód by měl být v pořádku. Byla provedena kontrola proměnných a ty, těsně před vložením do funkce otáčející s motorem, byly nastaveny správně.
Program
Před prvním použitím a při každé změně je potřeba porgram do Arduina nahrát. To je realizováno skrz vývojové prostředí které lze stáhnout ze stránek https://www.arduino.cc/en/Main/Software. Arduino musí být připojené k počítači z kterého je program nahráván přes USB. Nedoporučuji využívat porty USB 3.0 a vyšší. Před nahráváním je nutné zkontrolovat zda-li je v panelu nástroje (tools) nastavený správný port a správnou desku (Arduino/Genuino Uno). Poté už stačí jen kliknout na tlačítko nahrát a počkat než se program zkompiluje a nahraje do Arduina. Základní obsluha motoru pak probíhá skrze protokol HTTP. Deska reaguje na požadavky typu GET volané na cestu /
, kde očekává počet kroků jako dotaz. Celé URL má formát http://<ip-adresa-desky>/?<pocet-kroku>
, kde počet kroků je kladné či záporné číslo podle žádaného směru otáčení motoru.
Popis kódu
Na začátku musí být zavedeny rozšiřující knihovny, které jsou v programu využity. Konkrétně se jedná o tyto knihovny: //* Stepper — Funkce sloužící k ovládání motoru
Ethernet — Funkce Ethernet shieldu.
Dále musíme arduinu určit IP adresu.
IPAddress ip(192, 168, 2, 236);
Zadefinování proměnných:
zacatekCteni — určuje kdy má arduino začít číst data
anti — pokud true - opačný směr otáčení
Steps2Take — počet kroků
inString — přečtená data
Zapíšeme, že budeme komunikovat přes ethernet
Ethernet.begin(mac, ip);
Vytvoření serveru
mujSvr.begin();
Vytvoření klienta
EthernetClient client = mujSvr.available();
Server a klient spolu komunikují pomocí protokolu HTTP. Na začátku komunikace zašle klient serveru požadavek. Server požadavek zpracuje a odesílá odpověď v HTML tvaru s vhodnou HTTP hlavičkou.
HTTP požadavek, klient něco odesílá
while (client.connected() && client.available())
Odeslání hlavičky
if (!hlavickaPoslana) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
hlavickaPoslana = true;
}
Dokud klient něco odesílá přečte byte od klienta a zanamená ho do proměné c
while (client.connected() && client.available()){
. . .
char c = client.read();
. . .
}
Pokud program narazí na otazník začneme zanamenávat do proměnné inString
if (c == '?') {
zacatekCteni = true;
}
if (zacatekCteni&&isDigit(c)) {
inString += c;
}
Pokud narazí na – nastaví proměnou anti na true, což způsobí, že se motor bude otáčet na druhou stranu
if (zacatekCteni && c== '-') {
anti= true;
}
Pokud narazí při čtení na mezeru ukončíme zánamenávání.
if (zacatekCteni && c == ' ') {
zacatekCteni = false;
Převod proměnné inString, která je datového typu char, na typ int a vlklad do proměnné Steps2Take.
Steps2Take = inString.toInt();
Určení směru otáčení.
if (anti == true){
Steps2Take = -Steps2Take;
}
A nakonec se provede samotné otáčení motoru a vynulují se proměnné.
small_stepper.setSpeed(420);
small_stepper.step(Steps2Take);
client.print("ok");
Steps2Take= 0;
inString= "";
c="";
anti= false;
Zdroje
Foto - Arduino UNO s popisem
https://2.bp.blogspot.com/-TZE2kSfhXSY/Vu5OOmBvIXI/AAAAAAAAAyQ/rGBwLgUPvj0ObZlnfT0OhXTfgw3kuNarw/s1600/arduino-uno-pins-51.png
Nákres - Zapojeí shieldu do Arduina
http://smartinteractionlab.com/wp-content/uploads/2013/08/3smartshield_illustration.jpeg
Foto - Ovládací deska motoru
https://arduino-info.wikispaces.com/file/view/SmallStepperBoard2.jpg/229496680/400x300/SmallStepperBoard2.jpg
Foto - Motor
http://www.botnroll.com/4800-thickbox_default/-motor-de-passo-5v-compacto-de-alto-torque-28byj48-.jpg