Pokud začínáte s Arduinem a chcete se spíše zabývat programováním, protože máte strach ze všech těch rezistorů a drátů, tak právě pro vás se hodí nějaký shield. Za předpokladu, že jste začátečníci, měli byste určitě sáhnout pro nějaký multifunkční Shield, protože vám nabídne spoustu periferií, se kterými si můžete hrát a zkoušet nové věci. V dnešním návodu si představíme výukový multifunkční Shield, který nabízí základní periferii jako tlačítka, LEDky, trimr, ale také piezo bzučák, piny pro serva, nebo segmentový displej. Obsahuje i další zajímavé věci, ale my si teď ukážeme pouze ty základní již zmíněné.
Zapojení
Zapojení výukového shieldu není vůbec složité, pokud máte např. Arduino UNO, tak vám piny přesně sednou. Shield propojíte i s deskou MEGA 2560 s deskou LEONARDO. Desky jako Mini, Micro, či dokonce Nano k shieldu přímo nepřipojíte.
Při zapojení výukového shieldu zkontrolujte, že se žádné vývody zapájených součástek displeje a tlačítka reset nedotýkají konektoru USB Arduino desky. V případě, že se dotýkají, pak přesahující vývody ucvakněte kleštičkami nebo na konektor USB nalepte izolační pásku.
Pokud se na shield podíváte blíže, tak u každé důležité součástky vidíte číslo, ke kterému pinu je připojená. Pokud by vám však dělalo čtení problémy, nebo vám přišlo chaotické, tak v závěru najdete odkaz na více informací o shieldu.
LEDky
První věc, kterou musíte při práci s Arduinem ovládat jsou LEDky, na shieldu najdeme 4 LED. Zkusme si s jednou trošku pohrát. Tento program bude mít za úkol LEDku rozsvítit a poté zase zhasnout. V příkladu máme LED na pinu 11, ale můžete vyzkoušet i jiné. Rozsvícení LOW, zhasnutí HIGH.
// definování čísla pinu LEDky const int ledPin = 11; void setup() { // nastavení pinu, jako výstupní pinMode(ledPin, OUTPUT); } void loop() { // zhasnutí LEDKy digitalWrite(ledPin, HIGH); // počkej 3000 ms (3s) delay(3000); // rozsvícení LEDky digitalWrite(ledPin, LOW); delay(1000); }
Tlačítka
Další věc, kterou musíte rozhodně zvládat jsou tlačítka, ty se obvykle připojují na digitální piny, ale zde jsou na pinech analogových. Funkce však zůstává stejná – tlačítko vrací hodnotu 1, nebo 0, tedy zmáčknuto, nebo nezmáčknuto. Program, který má za úkol zjistil, jestli je tlačítko zmáčknuté a výsledek vypsat do seriál monitoru může vypadat například takto.
// definování čisla pinu tlačítka int const buttonPin = A1; // inicializace proměnné stavu tlačítka (1/0) bool buttonVal; void setup() { // start sériové komunikace Serial.begin(9600); // nastavení pinu, jako vstupní pinMode(buttonPin, INPUT); } void loop() { // čtení hodnoty z pinu a její uložení do proměnné buttonVal = analogRead(buttonPin); // vypiš proměnnou do seriál monitoru Serial.println(buttonVal); // počkej 1000 ms (1s) delay(1000); }
trimr
Trimr (potenciometr) je elektronická součástka, která umí měnit svůj odpor. Ten se v tomto případě nastavuje pomocí šroubku. Rozdíl mezi potenciometrem a klasickým tlačítkem je ten, že potenciometr je schopen vrátit hodnoty v rozmezí 0–1023. Z toho důvodu se musí vždy zapojit na analogový pin Arduina. Tento program zjistí hodnotu z analogového pinu a tu poté vypíše do serial monitoru.
// definování pinu potenciometru int const potPin = A0; // inicializace proměnné pro hodnotu z potenciometru int potVal; void setup() { // start sériové komunikace Serial.begin(9600); // nastavení pinu, jako vstupní pinMode(potPin, INPUT); } void loop() { // čtení hodnoty z analogového pinu potVal = analogRead(potPin); // výpis hodnoty do seriál monitoru Serial.println(potVal); //počkej 1000 ms (1s) delay(1000); }
Piezo bzučák
Jak již název vypovídá, další komponenta, kterou budeme zkoušet je bzučák. Ten ke své funkci využívá piezoelektrický jev, podrobnostmi o jevu se nyní nemusíme zabývat. My potřebujeme vědět hlavně to, že pro bzučák existuje funkce „tone“. Jelikož nejsem hudebník, tak vám nepovím nic o tónech atd. ale ukážu vám, jak donutit bzučák vydávat různé zvuky, právě pomocí funkce tone.
// definování pinu pro bzučák const int piezoPin = 3; // inicializace proměnné int note; void setup() { // nastavení pinu, jako výstupní pinMode(piezoPin, OUTPUT); } void loop() { //cyklus for pro měnění tónu for (note=0; note<=1000; note++) { // funkce tone tone(piezoPin, note, 100); } }
Servo motor
Na shieldu se také nachází lišta s 3 piny (VCC, GND a Signal). Ta se dá využít k ledasčemu, my si ukážeme, jak rozhýbat servo motor. Pro programování servo motoru potřebujeme knihovnu, ta už je ale defaultně obsažena v Arduinu IDE, takže nemusíte nic stahovat. Tento program tedy inicializuje servo a poté sním bude hýbat o 180° tam a zpět.
// importování knihovny #include <Servo.h> // inicializace serva Servo servo1; // definování pinu serva int const servoPin = 5; // inicializace proměnné pozice serva int pos = 0; void setup() { // servo1 je na pinu "servoPin" servo1.attach(servoPin); } void loop() { // cyklus for, servo bude měnit polohu od 0° do 180° for(pos = 0; pos <= 180; pos++) { // pohyb serva na požadovanou pozici servo1.write(pos); // musíme počkat, než se servo otočí delay(10); } // cyklus for, servo bude měnit polohu od 180° do 0° for(pos = 180; pos >= 0; pos--) { // pohyb serva na požadovanou pozici servo1.write(pos); // musíme počkat, než se servo otočí delay(10); } }
Segmentový displej
Zlatý hřeb dnešního návodu bude segmentový displej, který pracuje s obvodem 74HC595. Program už bude trošku složitější ale stále si vystačíme bez knihoven. Abychom měli na displeji co zobrazovat, zprovozníme také trimr. Program bude tedy mít za úkol zobrazovat na segmentovém displeji právě hodnotu z trimru.
Znak "%" v kódu, který pro vás bude možná neznámý je modulo (zbytek po dělení), pokud si o něm chcete něco přečíst, navštivte stránku www.arduino.cc/modulo
// definování pinů pro displej const int latchPin = 4; const int clkPin = 7; const int dataPin = 8; // definování pinu pro potenciometr const int potPin = A0; // inicializace proměnné pro potenciometr int potVal; // pole čísel pro displej od 0 do 9 const byte mapSegment[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90}; // pole číslic na displeji const byte mapNumSeg[] = {0xF1,0xF2,0xF4,0xF8}; void setup() { // nastavení pinů vstupních/výstupních pinMode(latchPin, OUTPUT); pinMode(clkPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(potPin, INPUT); } void loop() { // čtění analogové hodnoty potenciometru potVal = analogRead(potPin); // zapsání hodnoty na displej // volání fuknce (segment, hodnota) // na segment "0" se napíše řád tísícovek writeSeg(0 , potVal / 1000); // na segment "1" se napíše řád stovek writeSeg(1 , (potVal / 100) % 10); writeSeg(2 , (potVal / 10) % 10); writeSeg(3 , potVal % 10); } // uživatelem definovaná funkce pro zápis void writeSeg(byte segment, byte hodnota) { // při přepisování musí být latchPin LOW! digitalWrite(latchPin, LOW); shiftOut(dataPin, clkPin, MSBFIRST, mapSegment[hodnota]); shiftOut(dataPin, clkPin, MSBFIRST, mapNumSeg[segment] ); // jakmile přepisování skončí, pin zase nastavíme na HIGH digitalWrite(latchPin, HIGH); }
Shrnutí pro výukový Shield
V tomto návodu jste se naučili základní práci s výukovým Shieldem pro Arduino. Multifunkční Shield nabízí mnohem více funkcí, které můžete dále samostatně vyzkoušet. Práce bude podobná jako viz výše. Pěkně sepsané informace o výukovém shieldu najdete například na této stránce.
Výukový Shield se hodí skvěle pro začátečníky, nebo pro i zkušenější bastlíře, kteří si chtějí otestovat něco konkrétního. Pokud vás programování zaujalo a chtěli byste vyzkoušet více periferií, tak se podívejte na Tinylab - bastlírnu sbalenou na cesty. 😊