Do nového roku jako lepší programátoři? Znovu otevíráme večerní školu programování. Nette framework, návrhové vzory, testování nebo vůbec poprvé kurzy ASP.NET dostupné odkudkoli v republice.

2. díl - Arduino - Hello World

Hardware PC Arduino Arduino - Hello World

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulém díle jsme si představili Arduino a dnes si již naprogramujeme první program. Než ale začneme programovat, popíšeme si, jak je to s nahráváním programů u jednotlivých modelů.

Většina desek má USB port s převodníkem na sériový (u starších desek byl normální sériový), který se dá u některých desek přeprogramovat, tudíž jej počítač nevidí jako Arduino na sériovém portu, ale třeba jako myš či klávesnici. Tudíž si pomocí Arduina lze vytvořit i vlastní herní ovladač či jiné vstupní zařízení (možná se o tom někdy zmíním). U některých desek ale na převodník nezbylo místo (Lilypad), tudíž je k nim nutno pro nahrání programu připojit destičku s převodníkem.

Arduino Lilypad s převodníkem

Arduino Lilypad s převodníkem

Připojení k počítači proběhne bez problému, Windows si jej načte. K programování nám postačí Arduino IDE, zdarma ke stažení na stránkách Arduina (http://arduino.cc/…ain/Software#toc2). Po jeho spuštění si rozklikneme menu Tool > Board a vybereme naše Arduino. Já budu používat MEGA 2560. Dále si v menu Tools ještě rozklikneme položku Serial Port, kde vybereme port, na kterém je Arduino (pokud nevíte, otevřete správce zařízení a rozklikněte sériové porty, kde by mělo být u některého napsáno Arduino a váš model).

Arduino na portu COM6

Arduino na portu COM6

Arduino IDE

Arduino IDE

Nyní k samotnému programování. Po spuštění uvidíme nahoře pod meny tmavě modrou lištu s 6 tlačítky. První nám ověří zdrojový kód na chyby, druhé jej ověří a nahraje do Arduina. Poté jsou zde tlačítka nový, otevřít, uložit a úplně vpravo pak otevření monitoru sériové linky, kde si můžeme zobrazit data, která po Arduinu odesíláme přes sériovou linku (třeba do počítače). Pod touto lištou je již pás karet, ve kterém můžeme přepínat mezi dalšími soubory aktuálního programu. My se ale většinou vejdeme do jednoho, více jich použijeme jen zřídka. Název karty i celého projektu bude odvozen od dnešního data. Za ním bude poté ještě písmenko abecedy, označující pořadí návrhu (sketche) daného dne. Třeba druhý sketch z 5. července se bude jmenovat sketch_jul05b. Toto se dá změnit, při uložení budete moci zadat svůj název. Arduino IDE nám pro každý projekt vytvoří novou složku (umístěny budou v C:\Users\uziva­tel\Documents\Ar­duino), protože počítá, že budeme používat více souborů.

Níže je bílý prostor, kam budeme psát svůj kód. Jazyk je odvozený s Wiringu, používá standardní syntaxi, tudíž byste s ním neměli mít problém. Pak je zde jíž jen černé okno, kam se vypisuje jak dopadla kompilace či upload do Arduina, velikosti sketche a kolik zbylo na Arduinu a také nalezené chyby.

Představení desky

Než se ale do čehokoliv pustíme, musíme vědět s čím pracujeme.

Arduino MEGA popis
  • USB budeme připojovat do jediného portu (1). Pozor: u desky MEGA 2560 není kabel součástí balení (myslím, že je jen u UNA).
  • Dalším konektorem je napájecí jack (2), schopný pobrat od 6V do 20 V, ale doporučuje se mezi 7 a 12 V. Přes 12 V může dojít k přehřátí, pod 7 zase nemusí být vše stabilní.
  • Dále se zde nachází resetovací tlačítko (3). To program spustí znovu a vymaže hodnoty v proměnných (asi jako když resetujete normální počítač).
  • Uprostřed desce dominuje její hlavní část - Mikroprocesor ATMega 2560 (4). Ten tu podrobně popisovat nebudu, ale bez něj to nejde.
  • Číslem 5 je označena LED dioda L, která se napojena na pin 13. Pod ní jsou diody TX a RX, indikující komunikaci na sériové lince. Na desce se nachází ještě jedna dioda - napájení. Na rozdíl od těchto žlutých svítí zeleně a je umístěna nad tlačítkem reset.
  • Vedle procesoru je ICSP konektor (6), kterým je možné také přistupovat k procesoru, ovšem jsou zde možné pokročilejší úpravy.
  • Dále je tu ještě jeden podobný konektor (7). Ten se nachází jen na modelech MEGA a nabízí nám možnost přeprogramovat převodník sériového portu, aby se tvářil jako třeba myš. Pak už nám zbývají jen piny.
  • Lištička s číslem 8 je napájení. Zprava obsahuje piny, Vin pro vstupní napětí nahrazuje jack konektor. Poté jsou tu dva GND, kam budeme připojovat zem. Poté jsou tu 5V a 3.3V, oba výstupní. Pak už nás z této části zajímá jen pin reset, který plní stejnou funkci resetovacího tlačítka.
  • Lišta 9 obsahuje analogové piny, které slouží jako vstupní a vrací hodnotu mezi 0-1023. Pokud připojíme potenciometr, tak se bude hodnota měnit, jak s ním budeme otáčet.
  • 10 jsou základní piny 2-13 a další GND. Schválně zde nezahrnuji piny 0 a 1, které sice mohou být použity také, ale je na nich sériová linka, takže při každém jejich použití musíme příslušenství odpojit.
  • Desky MEGA mají navíc několik dalších sériových linek (11), které se hodí třeba pro komunikaci s Bluetooth nebo jinými desky.
  • MEGA jsou také rozšířeny o další lištičku pinů (12), kde jich je až do 53 (navazují na předchozí lištičky 10 a 11) a obsahuje další dva GND. Pinů je zde více, jen je nyní nebudeme potřebovat a představíme si je, až na ně přijde řada.

A také pozor na to, co připojujeme. Každý pin je schopen zátěže jen do 20mA, chvilkovou až 40mA. Při překročení v lepším případě zlikvidujeme pin, v horším celou desku. Proto se při náročnějších obvodech používají tranzistory, ale to až někdy příště.

Hello world

Arduino umí posílat data po sériové lince. Takže si od něj necháme vypsat Hello world a čas od spuštění.

Já bych nejdřív napsal kód a potom jej postupně vysvětlil. Rád bych v komentářích viděl, jak vám to bude vyhovovat a podle toho bych pak psal další. Teď program - ten se skládá alespoň z funkcí setup() a loop(). Setup se vykoná jednou při naběhnutí Arduina a po něm se ve smyčce opakuje loop.

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println("Hello world!");
  Serial.print("Funguji jiz: ");
  Serial.print(millis());
  Serial.println("milisekund.");
  delay(1500);
}

A k vysvětlování...

Serial.begin(9600);

Toto nám otevře sériový port s baudrate 9600, který se používá nejčastěji. Jsou možné i jiné, ale doporučuji tento. Serial je v Arduinu přednastavený název pro TX a RX na pinech 1 a 0, které jsou napojeny na USB. Pokud budete chtít využívat i další, tak existuje funkce softwareserial, o které si povíme jindy a umožňuje vytvořit TX a RX i na pinech, které k tomu nejsou primárně určeny (třeba 12 a 11), ale ty nejsou připojeny k USB a hodí se třeba na komunikaci přes BT.

Serial.println("Hello world!");

Pošle odchozí komunikaci (TX). Jedná se o ukončený řádek, takže další text bude na novém řádku.

Serial.print("Funguji jiz: ");

Zas pošle text na sériový port, ale neukončí řádek, tudíž bude další text na stejném řádku.

Serial.print(millis());

Kromě textu můžeme vypsat i proměnné či funkce (kdy se pošle hodnota, kterou funkce vrací). Já zde nechal vypsat funkci milis(), která vrací počet milisekund od spuštění programu. Toto číslo bude stále větší a větší, až někdy 50. dne bude mimo použitelné hodnoty. V tomto bodě program nespadne s chybou, ale hodnota se vynuluje (tedy dle teorie, pokud to někdo chcete zkusit, tak si rád počkám na výsledky :-D)

Serial.println("milisekund.");

Nyní jen napíšeme milisekund a dokončíme řádek.

delay(1500);

Tato funkce program na chvíli pozastaví, ale počítání milisekund od spuštění bude pokračovat. Není nutná, ale je lepší, aby nedocházelo k masivnímu posílání dat.

Tak, Arduino nám něco vypisuje, to je sice hezké, ale nikde nevidíme co. V Arduino IDE se na liště nachází úplně vpravo ikonka lupy. Po kliknutí na ní se ukáže okénko - Serialmonitor. Výsledek poté bude vypadat zhruba takto:

Pokud se vám nezobrazuje nic, nebo nějaké nesmyslné znaky, zkontrolujte, zda máte stejný baudrate (číslo u Serial.begin(); a rozklikávací nabídka baud v Serialmonitoru).

Toto je pro dnešní díl vše, příště zablikáme s diodou a zaměříme se na analogové vstupy/výstupy. Do budoucna mám pak v plánu (ale nezaručuji stejné pořadí) kódový zámek, LCD display, alarm, hodinový modul, komunikaci přes BT, příjem IR signálu z ovladače pro TV, SD kartu, pohrát si se zvukem, ovládat světla přes internet, měřit vzdálenost a spousty dalšího.


 

  Aktivity (1)

Článek pro vás napsal Adam Ježek
Avatar
Autor se převážně věnuje Arduinu a psaní tutoriálů z této oblasti, občas napíše příležitostně nějakou tu zprávičku. Většinu svého volného času momentálně věnuje Linuxu a/nebo Raspberry Pi. Také umí C#, HTML, CSS, PHP a Python.

Jak se ti líbí článek?
Celkem (12 hlasů) :
4.916674.916674.916674.916674.91667


 


Miniatura
Předchozí článek
Seznámení s Arduinem
Miniatura
Všechny články v sekci
Arduino
Miniatura
Následující článek
Arduino - Hrajeme si s LEDkami

 

 

Komentáře
Zobrazit starší komentáře (16)

Avatar
ostrozan
Redaktor
Avatar
ostrozan:

Kup si mega2560 a máš vystaráno
Garantuju ti, že program, který by ti sežral 256 k nikdy v životě nenapíšeš.
Ale i 32 k UNA ti vystačí na hodně velké projekty - u toho vidím problém spíš v omezeném počtu I/O
Jo a v absenci debuggeru vidím největší nedostatek arduina.

Editováno 13.2.2016 22:42
 
Odpovědět 13.2.2016 22:40
Avatar
Vesničan
Člen
Avatar
Vesničan:

Asi předbíhám ale budu li postupovat od lekce k lekci narazím někdy na něco co mi umožní přijmout data a uložit je v PC abych je mohl zpracovat v Excelu nebo alespoň vytvořit soubor např. txt. Ten již do xls převést umím. Děkuji.

 
Odpovědět 14.2.2016 3:12
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Vesničan
ostrozan:

To je spíš záležitost aplikace v pc. Kdejakých terminálů je ke stažení spousta - nebo lépe si napiš vlastní, třeba ve WPF.

 
Odpovědět 14.2.2016 8:35
Avatar
heger.m
Člen
Avatar
heger.m:

K čemu slouží, ten napájecí konektor. Nikde jsem se to nedozvěděl. A kdy ho mám použít a jakou V zvolit.

 
Odpovědět 24.7.2016 21:19
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na heger.m
Adam Ježek:

Dalším konektorem je napájecí jack (2), schopný pobrat od 6V do 20 V, ale doporučuje se mezi 7 a 12 V. Přes 12 V může dojít k přehřátí, pod 7 zase nemusí být vše stabilní.

Dá se použít, pokud nechceš (nebo nemůžeš) napájet Arduino přes USB.

Odpovědět 24.7.2016 21:57
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
iqbigbang
Člen
Avatar
iqbigbang:

Zkusil jsem spustit úplně první kód uveden v tomto tutoriálu a napsalo to tohle:
Arduino: 1.8.0 (Windows 10), Vývojová deska: "Arduino/Genuino Uno"

Projekt zabírá 1824 bytů (5%) úložného místa pro program. Maximum je 32256 bytů.
Globální proměnné zabírají 224 bytů (10%) dynamické paměti, 1824 bytů zůstává pro lokální proměnné. Maximum je 2048 bytů.
avrdude: ser_open(): can't open device "\\.\COM1": Systém nemůže nalézt uvedený soubor.

Problém s přenosem dat na vývojovou desku (board). Na http://www.arduino.cc/…ubleshooting#… naleznete další doporučení.
Deska COM1 není podporována

Táto zpráva by měla mít víc informacií v
"Zobrazení podrobného výstupu při kompilaci"
podle zapnuté volby v Soubor -> Nastavení.

EDIT: Pro všechny kteří by měli podobný problém, mě pomohlo přepnout na port COM3.

Editováno 24.12.2016 20:11
Odpovědět 24.12.2016 20:08
Say me, why not?
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na iqbigbang
Adam Ježek:

Z nějakého důvodu se nedaří upload. Věci, co by se mohly pokazit sou zmíněny v tomto vlákně.

Odpovědět 24.12.2016 20:15
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na iqbigbang
ostrozan:

Pokud jsi vůbec četl článek pod který se zapojuješ do diskuze tak by ses dočetl, kde a jak zjistíš který COM port tvému arduinu systém přidělil a nevěřím , že by to byl COM1, dokonce ani COM2 - ty jsou už od pravěku rezervované pro sběrnice RS232 - i když se už dávno nepoužívají - a třeba tebou dopručovaný COM3 na mém ntb využívá touchpad - takže můj systém začína přidělovat od COM4

 
Odpovědět 28.12.2016 20:37
Avatar
mmittak
Člen
Avatar
mmittak:

Ahojte, viem ze uz docela neskoro, ak vytvorim program na blikanie diody vsetko ide OK, ale posielanie cez seriovy port mi akosi neide. Pouzivam COM3, mam Arduino NANO v3.0. Po nahrati programu mi zhasne dioda L ale v akne nevidim ziadnu komunikaciu, kde by mohol byt problem?
Dakujem

 
Odpovědět 11. ledna 15:43
Avatar
mmittak
Člen
Avatar
mmittak:

Prepacte vyriesene, stacilo na chvilku odpojit arduino :-)

 
Odpovědět 11. ledna 15:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 26. Zobrazit vše