Sandbox/OndrejT/stepper/index

Komponenty

Zdroj Voltcraft FPPS 9-6W

Parametry zdroje

 
5V DC
660mA
5.94 VA

image

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.

image

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.

image

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

image

Stepper motor 28BYJ-48

image

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