Difference between revisions of "Arduino - projekt 1 - Knight Rider"

From DT^2
Jump to: navigation, search
m
m
Line 91: Line 91:
 
== Pre pokročilých ==
 
== Pre pokročilých ==
  
* Vyskúšajte naprogramovať efekt auta KITT s postupne slabnúcimi LEDkami - t.j. jedna svieti najsilnejšie a susedné ešte "celkom nezhasli" - využite funkciu ''analogWrite()'' - ale pozor, musíte ich pripojiť na PWM piny (na [[Arduino - úvod#schema|schéme]] sú označené vlnkou).
+
* Vyskúšajte naprogramovať efekt auta KITT s postupne slabnúcimi LEDkami - t.j. jedna svieti najsilnejšie a susedné ešte "celkom nezhasli" - využite funkciu ''[https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/ analogWrite()]'' - ale pozor, musíte ich pripojiť na PWM piny (na [[Arduino - úvod#schema|schéme]] sú označené vlnkou).

Revision as of 00:19, 30 July 2018

V prvom pojekte si vyskúšame vytvoriť svetelný efekt, ako na známom aute KITT.

  1. Arduino opatrne zasunenieme do Funduino shieldu, tak aby označenie pinov navzájom zodpovedalo
  2. Do kontaktného poľa zastrčíme LEDkový modul na kraj - každý jeho vývod bude v inom riadku kontaktného poľa, kde je vždy každých 5 dierok v tom istom riadku vodivo prepojených
  3. Vývod označený GND spojíme káblikom, ktorý má na jednej strane ihličku a na druhej strane dierku s niektorým z vývodov na Funduino shielde, ktoré sú označené G. Oboje - G aj GND označuje zem, čiže záporný pól zdroja napájania. Všetky zariadenia, ktoré majú navzájom komunikovať musia mať vždy prepojenú zem!
  4. Napokon pomocou šiestich káblikov poprepájame jednotlivé vývody označené na module ako D1-D6 (označujú diódy č.1 až 6) s digitálnymi pinmi Arduina označenými 2-7. Čiže D1 na LED module bude spojené s pinom 2 na Funduino shielde, D2 na LED module bude spojené s pinom 3 na Funduino shielde, atď. až D6 na LED module bude spojené s pinom 7 na shielde. Naschával neprepájame rovnako označené piny preto, že piny 0, 1 Arduina sa používajú na komunikáciu s počítačom.

Malo by to vyzerať takto:

Zapojenie led modulu.jpg

Do prostredia Arduina napíšeme nasledujúci program a štartovacou šípkou ho uploadneme do dosky a tým sa automaticky spustí (keď má Arduino pripojené napájanie, tak na ňom vždy beží program).

 1 void setup() {
 2   pinMode(2, OUTPUT);
 3   pinMode(3, OUTPUT);
 4   pinMode(4, OUTPUT);
 5   pinMode(5, OUTPUT);
 6   pinMode(6, OUTPUT);
 7   pinMode(7, OUTPUT);
 8 }
 9 
10 void loop() {
11   digitalWrite(2, HIGH);
12   delay(300);
13   digitalWrite(2, LOW);
14   digitalWrite(3, HIGH);
15   delay(300);
16   digitalWrite(3, LOW);
17   digitalWrite(4, HIGH);
18   delay(300);
19   digitalWrite(4, LOW);
20   digitalWrite(5, HIGH);
21   delay(300);
22   digitalWrite(5, LOW);
23   digitalWrite(6, HIGH);
24   delay(300);
25   digitalWrite(6, LOW);
26   digitalWrite(7, HIGH);
27   delay(300);
28   digitalWrite(7, LOW);
29 }

Nezabudnite si každý nový program, ktorý začnete písať vždy hneď uložiť do nového súboru, aby ste sa k nemu mohli neskôr vrátiť - využiť z neho nejakú časť a podobne. Robí sa to pomocou File - Save As:

Save as.png

Nazvite si ho napr. 01_ledky.

V programe pozorujme nasledujúce vlastnosti:

  1. každý program pre Arduino sa skladá z dvoch funkcií:
    • funkcia setup() - sa vykoná iba raz na začiatku programu
    • funkcia loop() - sa potom vykonáva znova a znova dookola
  2. vo funkcii setup() nastavujeme, či je príslušný digitálny pin Arduina (to sú tie očíslované 0-13, resp. D0-D13) vstupný alebo výstupný - každý pin je v nejakom presnom okamihu buď vstupný alebo výstupný. Napríklad na to, aby sme rozsvietili LEDky potrebujeme do nich vyslať prúd, takže pin bude výstupný. Príkazom pinMode(číslo_pinu, OUTPUT); nastavujeme pin ako výstupný. Pin by sme nastavili ako vstupný nahradením OUTPUT za INPUT.
  3. vo funkcii loop() používame dva druhy príkazov:
    • digitalWrite(číslo pinu, hodnota), ktorý v danom okamihu keď sa vykoná pošle na zadaný pin požadovanú hodnotu HIGH (alebo 1) vyšle logickú jednotku, čiže napätie +5V a LOW (alebo 0) vyšle logickú nulu, čiže napätie 0V
    • delay(počet milisekúnd) - pozastaví vykonávanie programu na stanovený čas (v našom prípade čakáme 300 ms za rozsvietením každej ďalšej LED)
    • pred zasvietením nasledujúcej LED predchádzajúcu zhasneme, ale udeje sa to tak rýchlo, že pre nás to vyzerá ako keby to bolo naraz (Arduino dokáže vykonať až 16 miliónov inštrukcií za sekundu - procesor pracuje na frekvencii 16 MHz).
  4. za každým príkazom je bodkočiarka - je to preto, že Arduino sa programuje v jazyku C++, kde každý príkaz (okrem zloženého príkazu {...}) je ukončený bodkočiarkou

A teraz úloha pre vás:

  • Auto KITT blikalo svetlom nielen stále na jedným smerom, ale striedavo vľavo a vpravu, upravte program, aby to sedelo!
  • Takto zapísaný program funguje, ale je trochu dlhší, ako by bolo treba - môžeme totiž použiť cyklus for() s počítadlom:
1 for (int premenna=OD; premenna < DO; premenna++)
2 {
3    prikazy
4 }

Tento cyklus sa bude opakovať, dosadzovaním hodnôt OD, OD+1, OD+2, ..., DO-1 do zadanej premennej, ktorú v tele cyklu môžeme využiť, napríklad tento program:

1 for (int i = 1; i < 6; i++)
2 {
3    digitalWrite(2, HIGH);
4    delay(i * 200);
5    digitalWrite(2, LOW);
6    delay(i * 200);
7 }

bude blikať prvou LEDkou postupne dlhšie a dlhšie: začne bliknutím dĺžky 200 ms a postupne sa bude doba predlžovať na 300, 400, ... 5*200=1000 ms, čiže jednu sekundu.

Vyskúšajte si tento program - najskôr si uložte program do súboru 02_cyklus, potom prepíšte funkciu loop() uvedeným kúskom programu a otestujte ho.

Upravte prvý program tak, aby používal cyklus (uložte si ho napr. do súboru 03_led_cyklus).

Pre pokročilých

  • Vyskúšajte naprogramovať efekt auta KITT s postupne slabnúcimi LEDkami - t.j. jedna svieti najsilnejšie a susedné ešte "celkom nezhasli" - využite funkciu analogWrite() - ale pozor, musíte ich pripojiť na PWM piny (na schéme sú označené vlnkou).