Vyberte stránku

Blikače jsou velmi potřebné, ať už je máte na signální světla letadýlek nebo federačních či jiných vesmírných lodí. Ukážeme si tři různé způsoby výroby takového blikače. Jedním z nich bude použití Arduina, s kterým blikač uděláte snad nejsnadněji.

Existují sice blikací LED diody, ty nicméně blikají pravidelně (interval svícení a nesvícení je stejný) a proto se nehodí tam, kde má například majáček bliknout a poté delší dobu zůstat zhasnutý než blikne znovu. Právě proto potřebujeme blikače.

 

555 blikačblikac_schema_multisim2

První blikač, který si představíme je poměrně známý 555 blikač, název je odvozen od použitého obvodu 555. Můžete tedy použít například LM555, LF555 nebo NE555, který na gme.cz seženete za 5 Kč. Podívejte se tedy na přiložené schéma. Pro určení času blikání (svícení a nesvícení), tedy intervalu jak dlouho LED bude svítit a jak dlouho bude vypnutá, budeme potřebovat kondenzátory a odpory. Jak zjistíme jaký potřebujeme? Je to jednoduché, můžeme si to spočítat jednoduchým vzorcem:

Tn (čas po který nesvítí) = 0,693 * (R1+ R2) * C1

Ts (čas po který svítí) = 0,693 * R2 * C1

C1 bude 22 mikro Faradu. Pokud tedy chcete, aby LED svítila 0,4s a nesvítila 1,5s použijeme jako R1 68k odpor a jako R2 27k odpor. Pokud by LED měla svítit 0,2s a nesvítit 0,8s bude R1 56k odpor a R2 12k odpor. Výhoda tohoto obvodu je jasná – je poměrně jednoduchý a dá se postavit i ve velmi malých rozměrech.

 

HCF4017BE

Další obvod na kterém můžeme postavit blikač je HCF4017BE. Ten na gme.cz najdeme za necelých 8 Kč. Na rozdíl od předchozího budeme potřebovat nějaké Zenerovy diody, samoblikající LED diodu a dvě normální LED diody. Tento obvod jsem si vybral pro blikač, který střídavě spíná jednu a pak druhou LED diodu – tedy ideální pro Borgský časový vysílač z epizody Voyageru “Timeless”. Opět přikládám schéma. Samoblikající dioda (označena jako LED3) nahrazuje časovač, který byste jinak museli na 14 pin připojit (například zmíněný 555 obvod). Na tomto videu ji bohužel neuvidíte, protože jsem v zásobách žádnou neměl. Nicméně obvod je s ní opravdu funkční a pokud by dioda blikala, ale zbytek obvodu nefungoval, bude to patrně typem samoblikající LED diody a bude nutné (viz. schéma) zapojit 1k odpor.

Schémata na podobné či i zcela jiné blikače založené na 555 nebo HCF4017BE najdete na internetu opravdu všude a pokud jste šikovní, dokážete si podle nich blikač postavit třeba i v SMD (tedy zminiaturizované verzi). Nicméně jsem se chtěl také zabývat Arduinem, kde určitě i ti neposkvrněni elektronikou nebudou mít žádné problémy udělat si blikač.

 

Arduino

S Arduinem nebudete potřebovat kondenzátory ani Zenerovy diody či jiné součástky. Stačí vám samotné arduino a LED diody (a samozřejmě pro jistotu vždy odpor). Navíc si budete moct sami říct, jak má LED dioda blikat, jak dlouho má svítit a jak dlouho má zůstat zhasnutá. K tomu všemu můžete rozblikat další LED diodu úplně jiným tempem, což na jednom obvodu 555 neuděláte. Podíváme se na takový blikač s Arduinem.

Rozblikáme dvě LED diody a přinutíme je, aby blikaly zcela jinak. LED diody tedy připojíme na pin 11 a 12. Druhý konec LED diod přivedeme na GND pin Arduina. Nyní vložíme níže uvedený kód, kde definujeme obě LED diody a jejich časy. Zelená LED označena jako led1 bude mít rozdílné intervaly (svítí je 100 milisekund a nesvítí 1000 milisekund). Oranžová LED označena jako led2 bude blikat stejně (svítí i nesvítí bude 700 milisekund). Obě LED diody budou blikat tedy na jedné desce a obě zcela jinak. Pod kódem se podívejte na video s výsledným efektem.

 

int led1 = 11; // LED na pin 11
int led2 = 12; // LED na pin 12
int value1 = LOW;
int value2 = LOW;
long time1 = millis();
long time2 = millis();
long LED_ON = 100; //LED1 sviti (milliseconds)
long LED_OFF = 1000; //LED1 nesviti
long interval2 = 700; //Interval stejného blikání LED2 (milliseconds)
unsigned long ms;
unsigned long msLast;
boolean ledState;

void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}

void loop()
{
unsigned long m = millis();
ms = millis();
blinkLED();
if (m – time2 > interval2){
time2 = m;

if (value2 == LOW)
value2 = HIGH;
else
value2 = LOW;

digitalWrite(led2, value2);
}
}

void blinkLED(void)
{
if (ms – msLast > (ledState ? LED_ON : LED_OFF)) {
digitalWrite(led1, ledState = !ledState);
msLast = ms;
}
}