Ciele cvičenia

Cvičenie je zamerané na prácu s vývojovou doskou Arduino. Náplň učiva sa na rozdiel od predchádzajúceho učiva nezameriava iba na problematiku programovania ale tiež na prácu s hardvérom. 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 a v prostredí Arduino IDE ho nahrať do mikroprocesora. Študent dokáže objektívne zhodnotiť, či zapojenie, ktoré na vývojovej doske implementuje, nemôže spôsobiť zničenie zariadenia a dokáže takým situáciám predchádzať.   

  • Čo je vývojová doska Arduino
  • Možnosti Arduina a funkcie jeho výstupov (pinov)
  • Arduino IDE a prvý program
  • Simulačné prostredie Tinkercad
  • Nebezpečné situácie a ako im predchádzať

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

[1] KPI-FEI-TUKE: Arduino UNO

[2] KPI-FEI-TUKE: Basics of Electronics

[3] Wikipédia: Wiring

[4] Wikipédia: Processing

[5] Etechnophiles:  Arduino UNO Pinout, Pin diagram, Specifications and Features in Detail

[6] Tinkercad:  https://www.tinkercad.com

[7] Drgo P.: POLOVODIČE

[8] Rugged-circuits:10 Ways to Destroy An Arduino


Čo je vývojová doska Arduino

Vývojová doska Arduino je open-source platforma založená na mikroprocesoroch ATMega od spoločnosti Atmel . K programovaniu slúži  grafické vývojové prostredie, ktoré vychádza z prostredia Wiring [3] a Processing [4]. Tento projekt sa stal v komunite študentov a hobby elektrotechnikov veľmi populárnym.  Za svoju popularitu vďačí veľmi intuitívnemu a jednoduchému programovaniu v jazyku C. Pomocou Arduina je možné riešiť jednoduché, ale aj komplexné problémy. V súčasnosti existuje niekoľko verzií vývojových dosiek. Najznámejšie sú UNO, Nano, Micro alebo oveľa výkonnejšia Mega. Je ich naozaj veľa. Ako už bolo uvedené, ide o open-source projekt, teda existuje obrovské množstvo klonov od rôznych výrobcov.  Tiež sa môžeme stretnúť s rôznymi puzdrami mikroprocesoru ATMega328p. Môžeme sa stretnúť s klasicky vyzerajúcim "integráčom" v puzdre  DIP, ktorý je vhodný hlavne pre začiatočníkov, pretože výmena procesora v prípade jeho zničenia je veľmi jednoduchá. Častejšie sa však stretávame s čipom v puzdre TQFP. 



Možnosti Arduina a funkcie jeho výstupov (pinov)

Ako už bolo uvedené vyššie, vývojová doska existuje v mnohých prevedeniach. Ďalej budeme jednotlivé časti popisovať na doske UNO, nakoľko je najrozšírenejšia. Je však potrebné poznamenať, že väčšina uvedených informácií platí aj pre ostatné dosky, ale predtým ako začnete niečo s doskou robiť, naštudujte si ju. Na obrázku je zobrazená doska Arduino UNO a v nej sú vyznačené jednotlivé časti [5], ktoré sa aspoň v obmedzenej miere v nasledujúcom texte pokúsime vysvetliť. Začnime výstupmi, nakoľko práve s týmito budete prichádzať najviac do styku. 

V hornej časti je umiestnený USB-B port, ktorým s pripojí Arduino k PC. Cez tento port je možné priviesť aj napájanie - štandardné napätie USB portu +5V. Ďalej si môžeme všimnúť  2.1 x 5 mm port na privedenie napájania - toto napätie nesmie presiahnuť +20V (odporúča sa do +12V)  a malo by byť vyššie ako +6V. Arduino obsahuje stabilizátor napätia (Voltage regulator), ktorý privedené napätie stabilizuje na hodnotu +5V

V spodnej časti je ISCP konektor, ktorý spravidla nebudeme používať. Pomocou tohto konektoru je možné programovať mikroprocesor priamo (nie ako Arduino). 

V ľavej časti sú vyvedené vývody, ktoré súvisia s napájaním (I/O Ref., Reset, 3.3 a 5V, Zem, Vin) a potom vývody, ktoré predstavujú analógové vstupy (A0 - A5). Tieto analógové vstupy môžu byť tiež využité aj ako digitálne vstupy/výstupy.  

  • I/O Ref.  - Ide o referenčné napätie podľa toho akú logiku Arduino používa. Väčšinou to nebudeme používať. 
  • Reset - Slúži na resetovanie mikroprocesora. Procesor sa resetuje po pripojení tohto pinu na zem.
  • 3.3V - Výstupné napätie zo stabilizátora. Toto napätie je možné použiť pre napájanie senzorov, ktoré pracujú s 3.3V napájaním. Je to výstup, nesmie sa pripojiť na zem alebo na iný zdroj napätia!
  • 5V - Výstupné napätie zo stabilizátora. Toto napätie je možné použiť pre napájanie senzorov, a súčiastok, ktoré pracujú s 5V napájaním. Je to výstup, nesmie sa pripojiť na zem! Smie sa pripojiť na +5V ak Arduino napájame z externého zdroja, ktorý má hodnotu v rozsahu niekde medzi 4.5 - 5V. 
  • Ground - Uzemnenie, ktoré možno použiť pre uzemnenie senzorov či súčiastok. Tiež sa naň môžu pripojiť uzemnenia iných zariadení ak je Arduino súčasťou väčšieho projektu. Nesmie sa sem pripojiť iné napätie! 
  • Vin - Tento pin je prepojený s 2.1 x 5 mm napájacím konektorom. Možno sem priviesť napájacie napätie z rozsahu +6V až +12V (kritická hodnota je 20V).   
  • A0, A1, A3 - Vstupno-výstupné piny. Môžu slúžiť na čítanie analógovej hodnoty napätia (0-5V),  alebo tiež ako digitálne vstupy a výstupy (logická 0 - 0V a logická 1 - 5V).
  • A4, A5 - Vstupno-výstupné piny. Môžu slúžiť na čítanie analógovej hodnoty napätia (0-5V)  alebo tiež ako digitálne vstupy a výstupy. Tiež sa môžu požiť pre pripojenie zariadení a senzorov cez I2C zbernicu. 

V pravej časti sú umiestnené vstupno-výstupné (I/O) piny pre prácu s logickými hodnotami. Označujú sa D0-D13.

  • D0 a D1 - Digitálne vstupy a výstupy. Tiež sa môžu požiť pre pripojenie zariadení a senzorov cez sériovú linku.
  • D2 a D3 - Digitálne vstupy a výstupy. Tiež je cez tieto piny možné vyvolať prerušenie (budeme sa učiť neskôr).
  • D4 - D13 - Digitálne vstupy a výstupy. Pin D13 má k sebe navyše pripojenú malú LED diódu, ktorá svieti ak je pin nastavený na hodnotu logickej 1.  
  • Každý pin označený značkou "~" môže slúžiť aj ako výstup pulzne šírkovej modulácie (PWM)
  • IC2 piny sú prepojené s A4 a A5. 
  • ARef. - Na tento vstup sa môže priviesť kladné napätie do 5V, ktoré slúži ako referenčná hodnota pre analógovo číslicový prevodník (ADC). O ADC sa budete učiť vo vyšších ročníkoch.

Ešte v stručnosti môžeme popísať niektoré súčasti, ktoré vidíme osadené na doske. V pravom hornom rohu je tlačidlo pre vyvolanie resetu. Vľavo nad čipom procesora sú dva filtračné kondenzátory, ktoré pomáhajú vyrovnať pokles napätia pri výkonových špičkách. V hornej časti približne uprostred je kryštál, ktorý zabezpečuje, že procesor bude pracovať s taktom 16MHz a hneď vedľa je ďalší mikroprocesor ATmega16U2, ktorý zabezpečuje komunikáciu medzi PC a hlavným mikroprocesorom. Tento obvod prevádza informácie medzi USB rozhraním a sériovou linkou hlavného mikroprocesora. Vedľa je ďalší konektor ICSP, ktorý ale slúži pre programovanie  mikroprocesora ATmega16U2. Toto ICSP rozhranie takmer s istotou používať nebudeme. Pod mikroprocesorom ATmega16U2 je dvojica LED diód, ktoré blikajú pokiaľ na sériovej linke prebieha nejaká komunikácia. Ďalšími obvodmi osadenými na doske sa v rámci predmetu Programovanie nemusíme zaoberať.  


Arduino IDE a prvý program

Na programovanie Arduina je možné použiť voľne dostupný nástroj ArduinoIDE. Ten je možné stiahnuť na oficiálnej stránke projektu (https://www.arduino.cc/en/software).  Programovanie je v princípe klasické C-čko s istými malými rozdielmi.

  • Každý program musí obsahovať minimálne dve funkcie - setup() a loop(). Naopak program neobsahuje funkciu main().
  • Programy sa ukladajú v súbore s príponou .ino.
  • Vlastné funkcie nie je potrebné deklarovať. Stačí ich definovať. Spravidla pod funkciou loop().
  • Spravidla je možné používať globálne premenné (ale opatrne!).

Na obrázku vpravo je zobrazený editor s kódom, ktorý zabezpečí blikanie diódy pripojenej k pinu D13. Tento kód je tiež uvedený nižšie:

PVJC_ard.ino
// Niekedy je vhodné piny pomenovať cez príkaz #define
#define DIODA 13
// Pri programovaní mikroprocesorov sa spravidla používajú aj globálne premenné. 
// Je možné používať aj dynamickú alokáciu a všetko tak, ako sme sa učili, ale ozaj 
// globálne premenné nie sú problém v tomto prípade.
bool STAV = 0;
void setup() 
{
  // Kód vo funkcii setup sa spúšťa hneď po pripojení Arduina k napájaniu, resp. po resete
  // V tejto funkcii je potrebné vykonať rôzne nastavenia a inicializáciu. Napr. príkaz piMode 
  // nastaví pin do režimu výstupu - output alebo vstupu - input.
  pinMode(DIODA,OUTPUT);   
}
void loop()
{
  // Funkcia loop sa vykonáva dookola a donekonečna. V tejto funkcii je implementovaná rutina.
  blikanie();  // Volanie vlastnej funkcie.
  delay(1000); // Počas tejto funkcie procesor nerobí nič iba čaká, je to neskutočné mrhanie
               // potenciálom procesora. Neskôr sa budeme učiť ako to spraviť lepšie.
}
// Tak ako pri iných programoch aj tu je možné vytvárať vlastné funkcie.
void blikanie()
{
  if(STAV == 1)
    digitalWrite(DIODA,HIGH); // na digitálny pin D13 sa zapíše hodnota 5V   
  else
    digitalWrite(DIODA,LOW);  // na digitálny pin D13 sa zapíše hodnota 0V 

  STAV = !STAV; // Negáciou zmeníme logickú hodnotu
}


Pripojenie Arduina a nahranie kódu

Keď prvý krát pripojíme Arduino k počítaču, mala by zbehnúť inštalácia ovládačov. Potom je možné z programu ArduinoIDE nahrať kód do Arduina. K tomu je prv ale potrebné nastaviť správny typ vývojovej dosky a tiež COM port, na ktorý je táto doska pripojená. Tieto nastavenia sú v hornej lište programu.  Spravidla používame Arduino UNO, ale každý by mal vedieť akú dosku používa. 

Potom je možné spustiť kompiláciu a nahrávanie kódu do procesora. K tomuto účelu slúži tlačidlo (šípka) v hornej lište programu. Ak je kód bez chýb a ak sa nahrávanie podarilo v spodnej časti okna je zobrazená správa o využití pamäte a podobne. 


Simulačné prostredie Tinkercad

Tinkercad je bezplatná online zbierka softvérových nástrojov, ktoré pomáhajú ľuďom na celom svete myslieť, vytvárať a vyrábať [6]. Na tejto platforme je možné vytvárať 3D modely, navrhovať a testovať jednoduché elektronické obvody. Tento nástroj je veľmi výhodný práve pre začiatočníkov s Arduinom, ktorí si môžu vyskúšať jeho programovanie a zapájanie do elektrických obvodov bez toho, aby riskovali jeho zničenie. 

Registrácia: 

1. Tinkercad je web-based platforma a je potrebné zaregistrovať sa (JOIN NOW) na stránke https://www.tinkercad.com/

2. Vytvorte si osobný účet (Create a personal account)

3. Po úspešnej registrácií si vľavo vyberte Circuits a následne Create new Circuit.




Prvý obvod

Ak vyberiete možnosť "vytvoriť nový obvod", vpravo sú rôzne prvky - súčiastky a zariadenia. Určite je potrebné začať s nespájkovateľným poľom, následne je možné pridať Arduino a postupne dopĺňať ďalšie prvky. Kontaktné pole má štruktúru ako je zobrazené na obr. nižšie [2]. Všimnime si, že sloty (dierky) v oblasti okrajov poľa sú v horizontálnom smere spojené po celej dĺžke poľa. Tieto sloty je vhodné použiť pre napájanie. Sloty uprostred sú spojene vo vertikálnom smere. Tieto sloty používame na osadenie súčiastok. Spôsob osadenia je možné vidieť aj na obrázku vpravo. 

Kontaktné pole - prepojenie

Úloha 1. 

Na digitálne porty D1 - D10 pripojte LED diódy, ktoré budú zopínané v sekvenčnom režime. Každá LED musí byť zapojená do série s rezistorom s odporom 200ohm. Predpokladá sa, že rozumiete, ako tá súčiastka pracuje a viete čo je záverný a priepustný smer [7]. Pod sekvenčným režimom si vieme predstaviť známy efekt zo seriálu Knight rider. Teda v danú chvíľu svieti vždy jedná LED dióda. 

Knight Rider KITT (GIF) by Fajar Abriono Putranto on Dribbble

Pri tvorbe svojho dizajnu vždy dbajte na to, aby bol ľahko čitateľný:

  • farebne odlišovať kábliky
  • označovať komponenty
  • kábliky ťahať v pravých uhloch
  • súčiastky rozmiestňovať rozumne 

Editor kódu vyvoláte kliknutím na tlačidlo "Code". Vyberte si textovú formu kódu! Po napísaní kódu môžete spustiť simuláciu a skontrolovať či Váš program robí to, čo ste očakávali. 


Nebezpečné situácie a ako im predchádzať

Musíme si uvedomiť, že pri práci s vývojovou doskou Arduino už pracujeme s hardvérom a práca v Tinkercade je dobrá jedine na pedagogické účely. Pripájame k nej rôzne elektronické obvody, senzory, pasívne prvky a podobne. V neposlednom rade pracujeme s elektrickým napätím a prúdom, ktoré môžu pre zariadenie predstavovať potencionálne riziko poškodenia alebo totálneho zničenia. Preto je potrebné vždy 2x premyslieť, či je obvod zostavený správne a či nemôžu vzniknúť také podmienky, ktoré ho zničia a vy budete z vlastnej skúsenosti rozoznávať ten nezameniteľný zápach zhoreného integrovaného obvodu... V nasledujúcom texte uvedieme niekoľko nebezpečných situácii [8], ku ktorým dochádza pomerne často. 

Skratovanie  vstupno-výstupných pinov na zem 

  • K tejto situácii dôjde vtedy ak je I/O pin nastavený ako digitálny výstup - pinMode(pin, OUTPUT), jeho hodnota je nastavená na logickú jednotku digitalWrite(pin, HIGH)  a následne je tento pin pripojený priamo na zem. Vtedy týmto pinom prejde vysoký prúd, ktorý v tom lepšom prípade zlikviduje iba daný pin.  PREVENCIA: na pin, ktorý má slúžiť ako výstup zapojte rezistor s približnou hodnotou 220ohm.  V prípade, že dôjde ku skratu, tento rezistor zabezpečí to, že pinom pretečie prúd nanajvýš 23mA.

Skratovanie  vstupno-výstupných pinov medzi sebou

  • K tejto situácii dôjde vtedy ak sú dva I/O piny  nastavené ako digitálny výstup - pinMode(pin, OUTPUT) a ich hodnota je u jedného z nich nastavená na logickú jednotku digitalWrite(pin, HIGH)  a u druhého zasa na logickú nulu digitalWrite(pin, LOW). Ak sa tieto dva piny prepoja dochádza ku skratu a ich následnému zničeniu. PREVENCIA:  Rovnaká ako v predošlom prípade.

Pripojenie vyššieho ako povoleného napätia na niektorý z I/O pinov

  • Po pripojení napätia prevyšujúceho 5.5V dôjde k zničeniu portu (napríklad ak chceme merať napätie na analógovom porte).  PREVENCIA:  Paralelne k portu a zdroju napätia pripojte zenerovú diódu (5.1V) a do série s týmto portom zasa rezistor s hodnotou 220ohm.  V prípade vyššieho napätia, zenerová dióda toto napätie stabilizuje na hodnote 5.1V. 

Prepólovanie napájacieho napätia

  • Ak je na vstup Vin pripojený záporný pól napájania a na vstup GND zasa kladné napätie (napr. +5V) dôjde k totálnemu zničeniu oboch mikroprocesorov a stabilizátora napätia - Arduino je možné rovno vyhodiťPREVENCIA:  Nerobte to!

Pripojenie vyššieho napätia na 5V pin

  • V prípade, že je na 5V pin pripojené napätie vyššie ako 5V (stačí už niečo málo okolo 6V) dôjde k zničeniu mikroprocesora a tiež sa toto napätie môže objaviť na USB porte a poškodiť aj ten! PREVENCIA:  Nerobte to! Ak máte zdroj s vyšším nominálnym napätím ako 5V, využite Vin. 

Pripojenie vyššieho napätia na 3.3V pin

  • V prípade, že je na 3.3V pin pripojené napätie vyššie ako 3.6V dôjde k zničeniu všetkých zariadení a senzorov, ktoré sú napájané z tohto pinu. Ak sa pripojí napätie vyššie ako 9V dôjde aj k zničeniu mikroprocesora PREVENCIA:  Najlepšie to nespraviť, ale je možné k portu pripojiť zenerovú diódu (3.3V) a do série nejaký malý odpor (rádovo desiatky ohmov). Treba si však uvedomiť, že to prebytočné napätie, ktoré sa má zraziť, sa prejaví tečúcim prúdom cez diódu. Potom ako sa táto dióda zničí, zničia sa aj ostatné prvky pripojené na tomto výstupe.  

Skratovanie Vin a GND

  • V prípade, že je Arduino napájané cez napájací konektor dôjde k spáleniu blokovacej diódy, ktorá chráni Arduino pred prepolovaním pri napájaní cez napájací konektor. Môže tiež dôjsť k zničeniu niektorej vodivej cesty plošného spoja. 

Používanie Vin pre napájanie záťaže 

  • Vývod Vin je určený výlučne pre pripojenie napájacieho napätia, ktoré sa má ďalej stabilizovať. Ak je Arduino napájané z portu 5V a na Vin je pripojená záťaž, dôjde k zničeniu stabilizátora napätia. 

Pripojenie napätia na vývod Reset

  • Ak je na vývod Reset pripojené napätie vyššie ako 13V dôjde k zničeniu mikroprocesora.

Prekročenie maximálneho celkového prúdu

  • Všetkými I/O vývodmi môže tiecť prúd maximálne 200mA a jedným portom môže pretekať 20mA (krátkodobo 40mA) PREVENCIA:  Prvky s vysokými prúdovými nárokmi nepripájame priamo na vývody Arduina. Na ich spínanie používame tranzistory alebo relé. Ak sa pripojí viac LED diód, tieto je potrebné spínať v sekvenčnom režime.

Zlý zvyk, ktorý nebude akceptovaný!

V posledných rokoch sa medzi študentami rozmohlo, že namiesto regulárnej elektrickej schémy zapojenia, ktorá sa tvorí na základe pravidiel a noriem, študenti vo svojich prácach (semestrálnych projektoch ale aj DP a BP) používajú niečo také, ako je zobrazené na obr. vpravo. Toto NIE JE schéma! Ak sa také niečo objaví v písomnej časti problemsetu, nekompromisne strhávam body! Schéma vyzerá nejako tak, ako je zobrazené na obr. nižšie. Na generovanie schém môžete použiť napríklad nástroj eagle alebo iný voľne dostupný či platený nástroj. 


How to Use SPI Communication on the Arduino - Circuit Basics


  • No labels