osobní blog o tom co mě baví, co se děje a kdo se směje :-)

čtvrtek 16. dubna 2015

Arduino revealing - 1 (serial)

18:33 Posted by Sochise No comments
arduino
První díl seriálu okolo Arduina. Co to je a nějaký ten experiment

Sice je to už rok, co jsem si koupil Arduino. Doma jsem si udělal v jednom pokoji pracovnu a řekl jsem si, že bych jí měl nějak využit. Pořídil jsem si tedy vývojovou sadu Arduino, se kterou bych si mohl hrát. Díky ní zkombinujete znalosti jak praktické elektroniky (zapojování, pájení ...), tak i programování. Já osobně mám malé praktické znalosti a zkušenosti s elektronikou a programování nezvládám téměř vůbec. Ale i přesto jsem se do toho pustil. Můžu říct, že mě to baví a dokonce to není ze začátku až tak složité. Sice se poslední půl rok prášilo na skříňku, kde byla celá sada uložena, ale opět jsem se rozhodl do toho vlítnout. To co jsem pochopil předtím jsem nezapomněl a hned sestavil malý, bezvýznamný obvod. A ten tady stručně popíšu.

Co je Arduino?

Vůbec nevím, jak bych odborně popsal tuto vývojovou platformu, proto jsem si našel vhodný text na českém webu zabývající se Arduinem - arduino.cz

"Arduino je nástroj pro tvorbu počítačů, které mají větší kontrolu a cit pro fyzický svět než váš běžný stolní počítač. Jedná se o fyzickou open-source počítačovou platformu, jež je založena na jednoduché mikrokontrolní desce a vývojářské prostředí sloužící k zápisu softwaru.
Pomocí Arduina můžete vyvíjet interaktivní předměty, získávat vstupy od různých spínačů a senzorů a ovládat například světla, motory či jiné fyzické výstupy. Arduino projekty mohou být buď samostatné, nebo ve spojení se softwarem na vašem počítači (např. Flash, Processing, MaxMSP). Desky mohou být sestaveny ručně, či zakoupeny již předem postavené, stáhnutí open-source IDE integrovaného vývojového prostředí) je zdarma.
Programovací jazyk Arduino využívá Wiring, obdobnou fyzickou počítačovou platformu, založenou na multimediálním programovacím prostředí Processing." (Zdroj: arduino.cz)

Otřepaná fráze - "Teorie by bylo už dost"

Experiment

Prvními experimenty s blikáním diody mám už za sebou. Dokonce jsem se dozvěděl, že nepotřebuji k desce připojovat žádné diody a odpory, ale první, nejjednodušší experiment lze provést jen s připojenou deskou k počítači a rozsvítit si diodu, která je už na desce (malá SMD LED) - (Zde naleznete tento experiment). Přeskočením těchto úvodních experimentů, se chci zároveň vyhnout prvotnímu nastavení, připojení, instalace a podobně. Toto naleznete na oficiálních stránkách docela podrobně. Doporučuji řídit se přesně jejich pokyny.
Na Obr.1 je vidět pohled na téměř celý obvod experimentu. Není tam vidět pouze samotná deska Arduina a PS2 joystick, který je však na Obr. 2. Původně jsem chtěl rozepsat, jak jsem k tomuto obvodu došel, ale nakonec to neudělám. Pouze stručně jsem si chtěl vyzkoušet čtení analogových hodnot z joysticku. Hodnoty jsem pak sledoval na Serial monitoru. Ale chtěl jsem udělat něco navíc, tak jsem připojil displej a hodnoty si nechal vypsat na něm. Prostě jednoduchá věc. Pak jsem si už jenom hrál s kalibrací, aby se středová pozice joysticku ukazovala jako 0 a následně se vypisoval textově i směr, kam s joystickem pohybuji. Celý kód pro tento experiment naleznete dole. Taky jsem vložil videa s demonstrací funkčnosti zapojení.
Obr.1 - Experiment


Obr. 3 - kalibrace na střed


Obr. 2 - PS2 Joystick
Na začátku dojde k nastavení LCD. Tedy vložení knihovny a definování jeho připojení. 
Void setup jsem nevyužil, jelikož jsem neměl co nastavovat.
Ve void loop pak je zapsán celý cyklus programu. Nejdřív jsem nastavil proměné x, y, d, kterým jsem nastavil analogové piny a nastavil na čtení. Tím jsem zakončil první část programu, díky kterému získám analogovou hodnotu pozice joysticku. Jak jsem psal výše, hodnoty jsem si nechal zobrazovat na Serial monitoru. Tady však popíšu rovnou obvod se zapojeným LCD. Teď už je čas na zobrazení hodnot. Nejdřív se definuje počet sloupců a řádků displeje a nastaví kurzor na pozici 0,0. Teď se už vypisují pouze příkazy k výpisu toho co chci. Aby data byla jasně rozpoznatelná na displeji, nechal jsem si vypsat nejříve X= a za to hodnotu, která je přečtená na analogovém vstupu A5. Při středové pozici joysticku mi displej ukazuje hodnotu 524. Aby se na LCD ukázala 0 při středové poloze, odečtu tuto hodnotu přímo v kódu - (x-524). Stejnou kalibraci provedu i u y-osy. U y-osy je však nastaven kurzor na pozici 0,2. Tedy začátek řádku 2. 
Pokud chci textově vypsat i směr pohybu joysticku, použiji na to podmínky - IF a IF ELSE. Pokud bude hodnota x vyšší než 524, bude se vypisovat pohyb směrem doprava. Když bude hodnota x menší než 524, bude směr vlevo. Při hodnotě rovnající se 524, se vypíše střed. Stejně to platí u y-osy. Do podmínek se musí vložit reálné hodnoty a ne kalibrované na nulu.
Takto si můžete různě pohrát. U prvního videa uvidíte i funkčnost tlačítka joysticku. U druhého videa jsem tlačítko vynechal a zaměřil jsem se pouze na zápis hodnoty osy x a y.
Takže hodně zdaru s pokusy. Na příště vymyslím zase nějakou zbytečnost :-) Pokud by jste něčemu nerozuměli, tak piště komentáře a něco s tím uděláme.




Program experimentu

//první dojde k nastavení LCD displeje
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2);

void setup() {

}

void loop() {
  int x = analogRead(A5); //Analogový vstu A5 nastaven pro čtení osy x
  int y = analogRead(A4); //Analogový vstu A4 nastaven pro čtení osy y
  int d = analogRead(A3); //Analogový vstu A3 nastaven pro čtení tlačítka joysticku
  
  lcd.begin(16, 2);     // nastavení displeje - počet sloupců a řádků 
  lcd.setCursor(0, 0);  // nastavit kurzor na sloupec 0, řádek 0
  lcd.print("X=");      // vypíše na LCD text X=
  lcd.print(x - 524);   // vypíše hodnotu (odečtení čísla 524 je z důvodu kalibrace a vypsaní 0 pro pozici středu

  if (x > 524) {        // pokud je hodnota vyšší než středová vypíše se "vpravo"
    lcd.setCursor(7, 0);
    lcd.print("vpravo");
  }
  else if (x < 524) {  // pokud je hodnota nižší než středová vypíše se "vlevo"
    lcd.setCursor(7, 0);
    lcd.print("vlevo");
  }
  else if (x = 524) {  // pokud se hodnota rovná 0 vypíše se "střed"
    lcd.setCursor(7, 0);
    lcd.print("stred");
  }
  
  lcd.setCursor(0, 2); //pro y platí to stejné jako x
  lcd.print("Y=");
  lcd.print(y - 505);
  if (y > 505) {
    lcd.setCursor(7, 2);
    lcd.print("nahoru");
  }
  else if (y < 505) {
    lcd.setCursor(7, 2);
    lcd.print("dolu");
  }
  else if (y = 505) {
    lcd.setCursor(7, 2);
    lcd.print("stred");
  }

}



LabelPart TypeProperties
LCD1LCD screentyp Character; piny 16
R1Rotary Potentiometer (Small)track Linear; typ Rotary Shaft Potentiometer; pouzdro THT; maximální odpor 10kΩ; velikost Rotary - 9mm
Součástka1Arduino Uno (Rev3)typ Arduino UNO (Rev3)
Součástka2Thumb Joystick





0 komentářů:

Okomentovat