OUTPUT výstupy - LED, bzučiak



LED na pine č. 13 dosky Arduina

Ako najjednoduchšia možnosť práce s výstupnými pinmi je použiť digitálny pin č. 13, ku ktorému je už priamo na doske Arduina pripojená LED cez sériový rezistor (Pozor na túto skutočnosť pri použití pinu č. 13 ako vstupu!).

Digitálny pin nastavíme ako výstupný príkazom pinMode(cislo_pinu, OUTPUT); na začiatku programu, najčastejšie vo funkcii void setup().

Digital OUTPUT - pin č.13

Po pripojení dosky Arduina k PC a spustení vývojového prostredia môžeme načítať vzorový program z hlavného menu cez File - Examples - 01.Basics - Blink.

V ďalšom texte budeme uvažovať zapojenie vlastných LED na kontaktnom poli.

Hore hájom chodník

LED - digitalWrite()

Najprv treba rozhodnúť, akou hodnotou (HIGH/LOW) priradenou k pinu, kde je LED pripojená, budeme LED rozsvecovať a zhasínať (viď predchádzajúci článok). Ak chceme LED rozsvecovať priradením LOW na pin, je potrebné sériové zapojenie LED a rezistora pripojiť k +5V. Ak chceme LED rozsvecovať priradením HIGH na pin, je potrebné sériové zapojenie LED a rezistora pripojiť k 0V, GND (tento spôsob ovládanaia LED sme vybrali pre ďalšie príklady.

Digital OUTPUT

Na kontaktné pole zapojíme LED a rezistor. Kratšia nožička LED, zrezaný klobúčik, Katóda (-) bude spojená s GND. Anóda bude cez rezistor 1k pripojená na pin č. 9 Arduino dosky.

Digital OUTPUT

S premennou int sme už pracovali. V tomto príklade použijeme premenné typu boolean, byte a word. K ich bližšiemu popisu doporučujeme pozrieť referenčné stránky. Podobne aj k logickej operácii ! (not) v predposlednom riadku programu.

/*
  LED - blikanie
  digitalWrite()
 */

boolean stav=LOW;               // 0 (false) alebo nenula (true)
byte LED_pin=9;                 // od 0 do 255
word cakaj_ms=500;              // od 0 do 65535

void setup() {                
  pinMode(LED_pin, OUTPUT);     // nastavenie vystupneho pinu
}

void loop() {
  digitalWrite(LED_pin, stav);  // zapis hodnoty stav na LED
  delay(cakaj_ms);              // cakanie
  stav=!stav;                   // zmena hodnoty stav
}

Optional

Na kontaktné pole môžeme zapojiť aj viac LED. Katódy všetkých LED pripojíme k GND a ku každej anóde sériovo zapojíme rezistor 1k. každý rezistor potom pripojíme na iný digitálny pin Arduino dosky. Môžeme potom softvérovo vytvárať rôzne vzory rozsvecovania jednotlivých LED, alebo naprogramovať jednoduché binárny sekundový odpočet - stopky.

Binárne stopky

V tomto príklade je použitých 8ks LED pripojených na digitálne piny 2 až 9. V programe je použitá celočíselná premenná typu pole array a pri výpočte prevodu čísla z desiatkovej do dvojkovej sútavy je použitá funkcia % modulo - zvyšok po celočíselnom delení.

//  Binarny odpocet sekund (0-255), Arduino Nano, 8xLED
 
int i, j, k, p[8];

void setup() {  
  for (i=2; i<=9; i++) {        // LED na pinoch 2 az 9 vystupy
    pinMode(i,OUTPUT);          
  }    
}  
 
void loop() {  
  for (i=0; i<=255; i++) {      // cyklus cez cely rozsah
    j=1;  
    for (k=0; k<=7; k++) {      // vypocet a zobrazenie LED    
      p[k]=i/j %2;
      digitalWrite(k+2, p[k]);
      j*=2;   
    }
    delay(1000);                // cakanie 1s
  }  
}



LED na pine PWM - analogWrite()

Niektoré výstupné digitálne piny môžu pracovať v PWM. Príkazom anlogWrite() na príslušný pin môžeme zapísať hodnotu od 0 do 255. Na zapojení s 1 LED pripojenou na pin č. 9 môžeme realizovať ovládanie jasu LED s použitím PWM.

Digital OUTPUT

LED sa bude neustále rozsvecovať a zhasínať.

/*
  LED - zmena jasu
  analogWrite()
 */

int LED_pin=9,                  // LED je pripojena na PWM pin c. 9
    cakaj_ms=10,                // cim vacsie cislo, tym rychlejsia zmena
    jas=0,                      // hodnota PWM    
    zmena_jasu=1;               // delta

void setup() {                
  pinMode(LED_pin, OUTPUT);     // nastavenie vystupneho pinu
}

void loop() 
{
  analogWrite(LED_pin, jas);    // led svieti PWM jas
  delay(cakaj_ms);
  jas += zmena_jasu;
  if (jas==255 || jas==0) zmena_jasu = -zmena_jasu; 
}

Hore hájom chodník

Bzučiak

Aby sme ulahodili nielen našim zrakovým zmyslovým orgánom (očiam), ale aj našim sluchovým zmyslovým orgánom (ušiam) tak môžeme namiesto sériového zapojenia LED a rezistoru zapojiť bzučiak (piezoelektrický akustický menič), ktorý vyhľadáme aj pomocou kľúčových slov buzzer alebo piezo speaker. Dlhšia nožička je kladná (+). Bzučiak môžeme ovládať ako digitálne (digitalWrite()), tak aj PWM (analogWrite()). Doporučujeme neodlepiť papierovú nálepku na bzučiaku.

Bzuciak

Hore hájom chodník

RGB LED

Doteraz sme pracovali iba s jednofarebnou LED. Pri použití troch LED, z ktorých jedna by bola červená, druhá zelená a tretia modrá (Red, Gree, Blue) by sme mohli rôznou intenzitou jednotlivých farebných zložiek dostať rôzne farby (podobne ako keď definujeme farbu v html kóde hodnotami 00-FF (0-255) pre zložky R, G, B).

RGB LED je vlastne spojením takýchto troch farebných LED do jedného púzdra. LED majú spoločnú buď anódu (+) alebo majú spoločnú katódu (-). Pre naše ďalšie experimenty použijeme RGB LED so spoločnou katódou (common cathode). Spoločná katóda je tá najdlhšia nožička a pripájame ju na GND. Rezistory opäť použijeme 1k.

RGB LED

RGB LED

RGB LED

LED sa bude neustále rozsvecovať a zhasínať po jednotlivých farebných zložkách.

/*
  RGB LED (spolocna katoda)
  zmena jasu
 */

int i, j;
int led[3] = {9, 10, 11};           // piny R, G, B
int cakanie=5;                      // ms

void setup() {
  for (i=0; i<=2; i++) {
    pinMode(led[i], OUTPUT);        // vystupne piny
  }
}

void loop() {
  for (j=0; j<=2; j++) {            // pre vsetky 3 farby
    for (i=0; i<=255; i++) {        // rozsvecovanie
      analogWrite(led[j], i);
      delay(cakanie); 
    }
    for (i=255; i>=0; i--) {        // zhasinanie
      analogWrite(led[j], i);
      delay(cakanie); 
    }
  }
}

LED bude svietiť náhodnými farbami. V tomto príklade použijeme nové príkazy randomSeed(), analogRead() a random() pre generovanie náhodných čísel.

/*
  RGB LED (spolocna katoda)
  nahodna farba
 */

int i;
int led[3] = {9, 10, 11};           // piny R, G, B
int cakanie=200;                    // ms

void setup() {
  for (i=0; i<=2; i++) {
    pinMode(led[i], OUTPUT);
  }
  randomSeed(analogRead(0));        // inicializacia nahody
}

void loop() {
  for (i=0; i<=2; i++) {
    analogWrite(led[i], random(0, 255)); // nahodna farba
  }
  delay(cakanie);
}

Optional

Na kontaktné pole môžeme zapojiť aj viac RGB LED. Katódy všetkých RGB LED pripojíme k GND a ku každej anóde každej RGB LED sériovo zapojíme rezistor 1k. každý rezistor potom pripojíme na iný digitálny pin Arduino dosky. Môžeme potom softvérovo vytvárať rôzne vzory rozsvecovania jednotlivých farieb LED, rôznofarebného svetelného hada.

RGB LED svetelný had

Na záver uvedieme ešte fotografie zachytávajúce prácu s LED na kontaktnom poli v záujmovom útvare KoPR na ZŠ s MŠ Chlebnice.

Zväčši ma! Zväčši ma! Zväčši ma! Zväčši ma! Zväčši ma!
Zväčši ma! Zväčši ma! Zväčši ma! Zväčši ma! Zväčši ma!
Zväčši ma! Zväčši ma! Zväčši ma! Zväčši ma! Zväčši ma!
Zväčši ma! Zväčši ma! Zväčši ma! Zväčši ma! Zväčši ma!

Schémy zapojení boli vytvorené v programe Eagle 6.1.0. Obrázky schematického znázornenia obvodov na kontaktnom poli boli vytvorené v programe Fritzing 0.9.0. Html kód príkladov je generovaný pomocou http://tohtml.com/cpp/.

Hore hájom chodník

PaedDr. Karol Pauchly, ZŠ s MŠ Chlebnice, november 2014