Lekce 21 - Arduino - Elektronická hrací kostka
V předchozí lekci, Zapisovátko Morseovky s Arduinem, jsme sestavili a naprogramovali zapisovač Morseovy abecedy.
V následujícím tutoriálu Arduina si ukážeme, jak se
dá jednoduše postavit elektronická hrací kostka. Kostka
bude generovat náhodná čísla, která následně zobrazíme
na LCD displeji. Našim cílem bude vypracovat úlohu tak, aby
se po stisknutí tlačítka vypsalo náhodné číslo (využijeme funkci
randomSeed()
). V případě, že budeme tlačítko
držet stisknuté, budou se čísla aktualizovat každých 500 ms.
Seznam součástek používaných v úloze
Co budeme potřebovat:
- vývojovou desku (v našem případě to bude Arduino UNO),
- nepájivé kontaktní pole,
- tlačítko,
- 2x odpor 1 kΩ,
- LCD Displej (v našem případě má rozlišení 16x2),
- propojovací kabely.
Součástky máme připraveny a můžeme se pustit do zapojení.
Arduino jako hrací kostka
Nejprve připravíme Arduino. Model Arduina v podstatě nehraje roli, my
budeme používat Arduino UNO. Další věc, kterou budeme jednoznačně
potřebovat, je nepájivé pole. Na nepájivé pole zapojíme náš LCD displej.
Ten má celkem 16 pinů, nám jich ale postačí 12. Potom budeme potřebovat
ještě zapojit tlačítko, abychom mohli dát Arduinu povel, že chceme
vygenerovat nějaké nové číslo (v rozmezí 1-6). Generátor náhodných
čísel se samozřejmě dá naprogramovat ke generování libovolných čísel,
ale jelikož toto má být hrací kostka se šesti stěnami, použijeme jen
dané rozmezí. Nic nám ovšem nebrání naši hračku naprogramovat tak, aby
nám generovala čísla v rozmezí 1-10 (desetistěnná kostka). Všechny naše
komponenty poté propojíme kabely. Doporučujeme rozlišovat barvy
(GND
- černá, +5 V
- červená, dráty pro LCD -
oranžová a pro tlačítko - růžová). Je to z důvodu lepší přehlednosti
v zapojení. K naší hračce si můžeme připojit i LED diodu, abychom
věděli, že tlačítko je stisknuté. Tímto budeme mít celé zapojení
hotové:

Program generátoru čísel
Generování náhodných čísel nám zajistí funkce
randomSeed()
. Do této funkce pouze zadáme číslo pinu, na
kterém se měří elektromagnetický šum. Ten funkci poslouží jako náhodná
vstupní hodnota. Poté použijeme funkci random(min,max)
. V našem
případě random(1,7)
.
Funkce random(min, max)
generuje pseudonáhodné
číslo v rozmezí min
a max - 1
. Proto v ní tedy
máme 1 až 7.
Nyní si otevřeme Arduino IDE (nebo Tinkercad, pokud zapojení jen simulujeme) a můžeme se přesunout k programu:
#include <LiquidCrystal.h> // Nahraje knihovnu pro displej // definujeme piny #define RS_PIN 2 #define E_PIN 3 #define D4_PIN 4 #define D5_PIN 5 #define D6_PIN 6 #define D7_PIN 7 #define TLACITKO 8 LiquidCrystal LCD(RS_PIN , E_PIN , D4_PIN , D5_PIN , D6_PIN , D7_PIN); // Definujeme piny pro displej void setup() { pinMode(TLACITKO, INPUT); // nastavení pinu pro tlačítko LCD.begin(16,2); // zahájí nastavení displeje s dvěma řádky a šestnácti znaky randomSeed(digitalRead(9)); // čte náhodnou hodnotu na digitálním pinu č.9 } void loop() { if (digitalRead(TLACITKO) == HIGH) // když je tlačítko stisknuté { LCD.setCursor(0,0); // nastaví kurzor na 1. znak LCD.print("nahodne cislo:"); // vypíše "náhodné číslo:" LCD.setCursor(5,5); // nastaví kurzor na 5. znak 2. řádky LCD.print("<"); // vypíše "<" na 5. znaku LCD.setCursor(7,5); // nastaví kurzor na 7. znak 2. řádky LCD.print(random(1,7)); // vypíše náhodné číslo v rozmezí 1-6 LCD.setCursor(9,5); // nastaví kurzor na 9. pozici LCD.print(">"); // vypíše ">" na 9. znaku delay(500); // uspí program na 500 ms) } }
Popis funkce programu
První věc, kterou v kódu vidíme, je
#include <LiquidCrystal.h>
. Klíčové slovo
#include
používáme tehdy, když chceme využívat knihovny,
které Arduino nabízí, případně ty, které jsme si vytvořili my sami. My
používáme knihovnu <LiquidCrystal.h>
. Knihovna se
používá při práci s LCD displejem (bez ní by nám displej nemohl
fungovat). Další věcí, kterou jsme museli udělat, bylo definování
konkrétních pinů, které chceme pro displej a tlačítko využívat.
Přesuneme se do do void setup()
. Zde vidíme již známé
nastavení pinu pomocí funkce pinMode()
. Pod ním se nachází
metoda LCD.begin(16, 2)
. Tím definujeme náš displej s
rozlišením 16 znaků na dvou řádcích. Poslední věc, kterou v setupu
najdeme, je funkce randomSeed()
, tato funkce dělá to, že čte
náhodná čísla z pinu číslo 9.
Když se podíváme do void loop()
, najdeme zde podmínku,
která funguje pouze tehdy, je-li tlačítko zmáčknuto. Uvnitř podmínky
poté na začátku nastavíme, kde chceme začít vypisovat náš text pomocí
metody LCD.setCursor()
. Metoda nám určuje, kam chceme začít
vypisovat znaky. V argumentu přijímá dva parametry, a to pozici řádku a
pozici sloupce. Obrazovku displeje si tedy ti kreativnější z nás mohou
představit jako takové 2D pole. Poté pomocí LCD.print()
vypíšeme text a dalším LCD.setCursor()
odřádkujeme. Takto
postupujeme až k výpisu náhodného čísla pomocí
LCD.print(random(1,7))
. Poté výpis stejným způsobem
dokončíme. Na konci podmínky se potom nachází funkce delay()
.
Ta je zde proto, aby se čísla neměnila příliš rychle.
V příští lekci, MPU6050 akcelerometr a gyroskop pro Arduino, budeme pracovat s akcelerometrem a gyroskopem.