You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

Cvičenie je zamerané na prácu s vývojovou doskou Arduino. Cvičenie je orientované na základné programovanie mikroprocesora. V rámci cvičenia budú demonštrované spôsoby obsluhy tlačidiel, I2C zbernice, sériovej linky, analógových a digitálnych vstupov a piezoelektrických akustických meničov. Po osvojení si učiva, študent dokáže realizovať základné zapojenia s využitím vývojovej dosky Arduino, skúšobného nespájkovateľného poľa a pasívnych elektronických prvkov (rezistor, dióda, a pod.). Študent dokáže napísať jednoduchý zdrojový kód pre obsluhu mikroprocesora Atmega328P.   

  • Digitálne vstupno-výstupné piny
  • Analógové vstupné piny
  • Všetko podstatné o tlačidlách 
  • Sériová linka 
  • I2C zbernica a displej 
  • Bzučiaky a zvuky
  • Pulzne-šírková modulácia PWM

Odporúčaná literatúra a dôležité odkazy

[1] KPI-FEI-TUKE: 

[2] KPI-FEI-TUKE:  

[3]  

[4]   


Digitálne vstupno-výstupné piny

 Ako už bolo na predchádzajúcom cvičení a tiež aj na prednáške, Arduino Uno obsahuje 14 digitálnych pinov zvyčajne označených ako D0 - D13. Tiež bolo povedané, že aj analógové piny A0 - A5, ktoré primárne slúžia ako analógový vstup  je možné použiť ako dgitálne. Pri práci s digitálnym pinom je potrebné si osvojiť minimálne tieto príkazy:

  • pinMode(pin, nastavenie)  - Spravidla túto funkciu voláme vo funkcii setup() a pomocou nej určujeme či budeme pin používať ako výstup - OUTPUT, vstup - INPUT alebo vstup so vstavaným pull-up rezistorom INTERNAL_PULLUP (vysvetlíme pri tlačidlách). 
  • digitalWrite(pin, hodnota) - Slúži na zápis logickej hodnoty na daný pin.
  • digitalRead(pin) - Slúži na prečítanie logickej hodnoty z daného pinu.

Vstup či výstup?

Je potrebné si uvedomiť, že zle nastavený režim pinMode() môže spôsobiť nesprávne chovanie sa zariadenia a vo špecifických prípadoch aj jeho zničenie!

  • Pokiaľ na digitálny pin chceme pripojiť záťaž ako je napríklad dióda, relé ale aj tranzistor (ten ozaj nepredstavuje veľkú záťaž) a podobne, je potrebné, aby z/do procesora tiekol pomerne veľký prúd (max 20mA!). Vtedy sa vnútorná štruktúra procesora musí na tento stav pripraviť. Docieli sa to tak, že daný pin sa prepne do režimu nízkeho odporu. Toto dosiahneme s príkazom pinMode(pin,OUTPUT). Pozor na stav ak je pin nastavený ako výstup a pripojí sa priamo na zem alebo +5V. Môže dôjsť k jeho zničeniu!
  • Pokiaľ pin hodláme použiť ako digitálny vstup, spravidla nechceme, aby ním pretekal vysoký prúd. V elektronike je zvykom, že ak je niečo vstupom má to mať vysoký (teoreticky nekonečne veľký) odbor. Je to preto, že samotným meraním nechceme ovplyvniť chovanie sa meraného obvodu. V konečnom dôsledku na I/O pinoch procesora meriame hodnotu napätia (či už logickú 0 (0V) - 1 (5V) alebo analógovú hodnotu v nejakom rozsahu), teda je nežiadúce aby pinom tiekol prúd. Vtedy použijeme pinMode(pin, INPUT). Vstupu je stále možné v programe priradiť digitálnu hodnotu 0 alebo 1.    

Nasledujúci príklad simuluje situáciu kedy je Arduino použité na monitorovanie či slučka obvodu nie je prerušená. Napríklad si môžeme predstaviť bezpečnostný snímač na okne či dverách. Ak sú dvere otvorené tento sa rozpojí a preruší sa kontrolovaný obvod. 


void setup()
{
  // Pin 13 bude výstup, lebo na neho pripojíme LED diódu, ktorú potrebujeme napájať
  pinMode(13, OUTPUT);
  // Pin 10 bude vstup. Pripojíme naň spínač cez, ktorý sa pin pripojí na zem 
  // alebo zdanlivo bude "vo vzduchu".
  pinMode(10, INPUT);
  // Ono by sa mohlo zdať, že pin nie je pripojený k ničomu ak je spínač v polohe vľavo.
  // Nie je to pravda. Nasledujúcim príkazom tento pin vo vnútri procesora pripojíme
  // cez vysoký odbor na +5V a teda ak je spínač v pozícií vľavo, na pine bude logická 1.
  // Ak je spínač v pozícii vpravo, spínačom potečie veľmi maličký prúd smerom na zem ale, 
  // ale na pine bude hodnota logickej 0. 
  digitalWrite(10, HIGH);
}

void loop()
{
  // Ak sa na pine nachádza logická 1 LED svieti.(Okno je otvorené - obvod bol prerušený )
  if( digitalRead(10) == 1)
    digitalWrite(13, HIGH);
  else // Ak sa na pine nachádza logická 0 LED nesvieti.(Okno je zatvorené)
    digitalWrite(13, LOW);
}

Definícia

 


  • No labels