Jak na výukový multifunkční Shield?

Jak na výukový multifunkční Shield

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 funkcetone“.  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. 😊