LED‎ > ‎

Nelineárna citlivosť ľudského oka

Ľudské oko nemá rovnakú citlivosť na zmenu jasu. Prejaví sa to tak, že ak si pomocou Arduina odskúšame PWM na LED medzi hodnotami 0 a 255, budeme mať pocit, že sa LED strašne rýchlo rozsvieti a na konci už prakticky nevidíme rozdiel v zmene jasu.
for(int i=0;i<255;i++) {
  analogWrite(3,i);
  delay(10);
}
Toto možno upraviť pomocou exponenciálnej zmeny jasu. V zjednodušenej podobe možno algoritmus zapísať takto.
for(int i=0;i<255;i++) {
  analogWrite(3,funkcia_exponencialna(i));
  delay(10);
}
Pôvodne som chcel napísať celý program na simulovanie tohoto javu pomocou dvoch LED. Na jednej by sa zobrazoval pôvodný algoritmus a na druhej modifikovaný. Ale potom som našiel presne to isté napísané v knihe Michaela Margolisa Arduino Cookbook v kapitole 17.3 Storing and Retrieving Numeric Values in Program Memory.
V tejto ukážke vidíme dve LED, ovládané pomocou PWM. LED vľavo má nastavený jas lineárne od 0 po 255. LED vpravo ju má nastavenú nelineárne, tak aby bola viac prispôsobená citlivosti ľudského oka. Veľmi zreteľne vidíme, že pri lineárnej zmene máme pocit, že sa LED rozsvieti náhle a počas väčšiny času ju vnímame ako trvale svietiacu, aj keď technicky to tak nie je.
Môj fotoaparát nie je úplne nadšený z prudkej zmeny jasu na diódach, takže video nie je dokonalé, ale na urobenie predstavy o tom, čo sa tam deje to hádam postačí.
ċ
nonlinear_human_vision.ino
(2k)
Robo Ulbricht,
12. 10. 2014, 0:02
Comments