Teensy 3.2 a Arduino Due PWM

Zápisník experimentátora

Tento článok sa sústreďuje na rýchlejšie verzie Arduina. Obe vyžadujú napájanie 3,3 V a obe majú dostatočný počet PWM výstupov, aby sa s nimi dali robiť pohodlné efekty bez doplňujúsich obvodov. Sústredíme sa na tri algoritmy, ktoré budú ovládať LED diódy. Budú to drobné variácie na tému Knight Rider alebo Larson Scanner.

Kde si ich zaobstarať

Arduino Due mám z Aliexpresu, ale dnes je najvýhodnejšia cena asi na Banggood. Teensy 3.2 som si kúpil ako doplnok ku výrobe plošného spoja na OSH Park. A kvôli pohodlnosti používam pomocný plošný spoj s ôsmimi LED diódami a ôsmimi rezistormi, aby som nemal skúšobné pole také zapratané vodičmi.

  • Arduino Due z Banggood
  • Teensy z OSH Park
  • SMD 8 LED board Používam modré LED, ktoré svietia aj pri minimálnom prúde. Ak chcete použiť iné LED, pravdepodobne bude potrebné mierne zodvihnúť PWM hodnotu pre vypnuté LED, ináć budú asi úplne vypnuté.

3 algoritmy

Všetky tri algoritmy budú na tému Knight Ridera. Tak ten blikajúci efekt nazývame u nás. Američania mu hovoria Larson Scanner, pretože tam viac pozerali aj seriál Battlestar Galactica, kde bolo niečo podobné použité.

Obe Arduina majú dostatok PWM výstupov, takže sa dá celý efekt pohodlne vytvoriť. Líšia sa medzi sebou ina číslami pinov, ktoré podporujú PWM. Budeme potrebovať 8 pinov.

  1. Jednoduchý posun bodov tam a naspäť.
  2. PWM posun bodov tam a naspäť, pričom zhasnuté body nejdú úplne do čiernej. Mierne svietia, čo vytvára krajší efekt.
  3. PWM posun bodov tam a naspäť, pričom zhasnuté body nejdú úplne do čiernej. Mierne svietia, čo vytvára krajší efekt. Svietiaci bod má po okrajoch ešte dva trošku tmavšie body, čo vytvára ešte krajší efekt.

Takto vyzerá tretí algoritmus na Arduino Due.

Takto vyzerá tretí algoritmus na Teensy.

Programovanie

Základom je vytvoriť si pole pinov, ktoré predstavujú LED diódy s PWM výstupmi.

Arduino Due ich má napríklad takto.

const int led[]={3,4,5,6,7,8,9,10};
const int ledsize=sizeof(led)/sizeof(int);

Teensy 3.2 ich má napríklad takto.

const int led[]={3,4,5,6,9,10,23,22};
const int ledsize=sizeof(led)/sizeof(int);

Zvyšok programu je už v oboch prípadoch rovnaký. Tu sa prejavuje sila knižníc Arduina, ktoré vďaka dobre navrhnutej abstrakcii dokážu fungovať na úplne rozdielnych mikrokontroléroch.

Nastavenie konkrétneho algoritmu a rýchlosti animácie.

// select algorithm
#define algo_digital
//#define algo_analog1
//#define algo_analog2

// speed in millis (500-slow, 100-normal, 10-fast)
#define spd 100

Samotné algoritmy.

void setup()
{
for(int i=0;i<ledsize;i++)
  pinMode(led[i], OUTPUT);
}

void loop()                     
{
for(int i=0;i<ledsize;i++)
  {
  // simple moving LED
  #if defined(algo_digital)
  digitalWrite(led[i], i==pos ? HIGH : LOW);
  #endif
  
  // active LED is brighter, inactive LED is lighter
  #if defined(algo_analog1)
  analogWrite(led[i], i==pos ? 40 : 1);
  #endif
  
  // 3 different light intesities
  #if defined(algo_analog2)
  int val=0;
  switch(abs(i-pos))
    {
    case 0: // active
      val=40;break;
    case 1: // one to the left and one to the right
      val=10;break;
    default:// inactive
      val=1;break;
    }  
  analogWrite(led[i], val);
  #endif
  }
  
pos+=dir;
if(pos==0)
  dir=1; // move to the right
if(pos==ledsize-1)
  dir=-1; // move to the left
delay(spd);
}

S parametrami programov sa dá podľa vlastnej chuti experimentovať, toto berte iba ako vzor, ktorý mal poslúžiť na oboznámenie sa s týmito výkonnými mikrokontrolérmi.



Download

11.10.2015


Menu