Zajímavý efekt s LED
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zajímavý efekt s LEDZajímavý efekt s LED

 

Zajímavý efekt s LED

Google       Google       23. 11. 2007       57 383×

Ukážeme si, jak pomocí 8 LED řízených jednočipem AT89C2051a motoru vytvoříme nápis, případně jiné grafické prvky v prostoru.

Před několika měsíci jsem si všiml na Internetu efektu s LED, který se mi velmi zalíbil. Minulý týden jsem se rozhodl, že si ho také zrealizuji a poté se s vámi podělím o výsledek mé práce. Předem bych chtěl poprosit, abyste tento článek nebrali jako přesný návod.

Návrh zařízení

Základem je dobře navržené mechanické uspořádání. Moje požadavky byly:

  • jednoduché elektrické zapojení
  • použití součástek ze „šuplíkových zásob“
  • dostatečně výkonný motor bez nutnosti převodovky
  • vhodná hřídel motoru pro snadné připevnění ramena
  • otáčky motoru kolem 1 500 ot./min
  • nízké napájecí napětí motoru (ideálně do 12 V)

Elektronická část

Rozhodl jsem se použít osm LED jako nejjednodušší řešení, ale hlavním důvodem byl malý cuprextit, jenž jsem měl zrovna doma. Navrhl jsem jednoduché schéma zapojení (viz obrázek). Srdcem obvodu je známý mikrořadič firmy Atmel AT89C2051(můžete jej nahradit novější řadou AT89S2051). Oscilátor je tvořen kondenzátory C3 a C4, rezistorem R9 a krystalem Q1. RC člen složený z C5 a R11 slouží pro automatický reset při připojení napájení. Kdybychom jej jej neprovedli, mohl by se mikrořadič dostat do nedefinovaného stavu. Resetem zaručíme, že se program začne provádět od adresy 0. Pro manuální reset je k dispozici tlačítko. Piny P1.0 a P1.1 nejsou opatřeny pull-up rezistory, které definují logickou úroveň 1, proto musíme opatřit piny rezistory R12 a R13 z vnějšku. Nesmíme překročit součet proudů pro všechny výstupy mikrořadiče 80 mA (zkratový proud pinu je 20 mA), tudíž jsem použil obvod 74LS245 jako budič LED, kterými pak může téct proud větší než 10 mA a nemusíme se bát zatížit port P3 při rozšíření zapojení. Pro omezení proudů ledkami slouží rezistory R1 až R8. Uvědomte si, že ledky rozsvěcujeme logickou nulou, je třeba si na toto při programování dát pozor. Na vyhotovenou desku osazujeme nejdříve rezistory, kondenzátory a LED. Pro mikrořadič použijte precizní patice. Délku napájecího kabelu volte tak, aby vám dosáhla na druhý konec ramena, kde bude umístěna baterie. Desku a její osazení si můžete stáhnout.

Mechanická část

Použil jsem stejnosměrný motor 12 V/60 W, který má osu opatřenou závitem, což mi usnadnilo připevnění ramena. Motor jsem přišrouboval k dřevěné desce podložené polystyrenem pro odrušení vibrací. Rameno jsme vyrobil z hliníkového profilu o délce 33 cm. K motoru jsem ho přišrouboval 13 cm od jeho okraje. Na delší konec se přišroubuje osazená deska s LED. Baterii pro napájení elektroniky dobře poslouží plochá 4,5V baterka. Baterii využijeme také jako protizávaží. Umístěte baterku (případně můžete přidat další závaží) na rameni tak, aby bylo rameno vyvážené. Tento krok je velmi důležitý, protože jinak by se vám mohlo stát, že místo několika stovek až tisíc otáček bude mít motor pouhých několik desítek otáček, taktéž se zkracuje jeho životnost. Dále dbejte na velmi pevné připevnění baterie a závaží k rameni, aby se nemohly uvolnit a případně způsobit poranění. Připájejte napájecí kabel od elektroniky k baterii a páskou stáhněte kabel po celé jeho délce k rameni. Jak jste jistě z obrázků poznali, motor napájím z PC zdroje o výkonu 200 W z pětivoltové větve. Motor má při 5 V kolem 635 ot./min. Motor je napájen pouze pěti volty, protože uchycení baterie a závaží není uděláno příliš precizně.

Programová část

Úkolem bude vytvořit program, který zobrazí můj nick XP dokola a jednou za cca 2 sekundy tento text zinvertuje, tedy jestliže svítil text a zbytek nesvítil, pak text bude svítit a zbytek svítit nebude. Nejdůležitější podmínkou, co musíte splnit, je, aby se text vykresloval pokaždé na stejné místo, toho můžete docílit dvěma způsoby – lehčím a těžším. Lehčí způsob spočívá v tom, že budete nastavovat ručně časovou konstantu tak, aby vám text stál na místě nebo mírně popojížděl. Nevýhodou tohoto řešení je, že jakákoliv změna otáček motoru povede k pojíždění textu, tedy jeho nečitelnosti. Těžší způsob spočívá ve snímání otáček motoru; nejjednodušší způsob, který mě napadá, je zespodu ramena namontovat optozávoru, kde bude paprsek světla přerušovat napevno přidělaný plíšek k podložně s motorem. Pak můžete programově podle otáček upravovat časovou konstantu. Já jsem si vybral manuální korekci časové konstanty, ale jakmile budu mít více času, dodělám snímání otáček a o výsledek se s vámi podělím.

Přejděme k vlastnímu popisu programu. Nejdříve, abychom mohli něco vidět, musíme aktivovat 74LS245 logickou nulou na pinu P3.7. Registrem R2 si nastavíme dobu zobrazení efektu. Vypočítáme ji jako součet časů potřebných pro zobrazení jednoho slova vynásobených hodnotou registru R2: zobrazení písmene P + mezera mezi písmeny + zobrazení písmene X + mezera mezi slovy = 3,5 ms + 1 ms + 3,5 ms + 2,5 ms = 10,5 ms. Doba zobrazení efektu: 10,5 ms * R2 = 10,5 ms * 200 = 2,1 s. Jestliže se motor točí po směru hodinových ručiček, pak musíte text vypisovat pozpátku. Jednotlivá písmena vykreslujeme podprogramem drawCH , který má dva parametry. První parametr char určuje vykreslovaný znak, pro znak 'X' je char roven nule a pro 'P' se rovná jedné. Druhý parametr effect určuje, zda se má text invertovat. Písmena 'X' a 'P' jsou uložena v tabulkách charP a charX. Ve funkci drawCH určuje registr R7 aktuální řádek tabulky. Do DPTR se nejdříve uloží adresa tabulky právě vykreslovaného znaku. Obsah registru R7 je přesunut do akumulátoru. Do akumulátoru se pak uloží řádek tabulky daný adresou v DPTR a posunutím v tabulce uloženým v akumulátoru. Ve smyčce pak takto postupně vybíráme jednotlivé řádky tabulky a posíláme je na port P1. Jestliže je nastaven efekt, pak se obsah akumulátoru neguje a odešle se na port P1. Takto vykreslíme znak 'X' a 'P', mezi ně vložíme mezeru o délce 1 ms. Po vypsání písmen 'XP' vložíme mezeru mezi slovy délky 2,5 ms. Tato časová prodleva má druhý a důležitější účel jako časová konstanta, kterou stabilizujeme text na jednom místě. Čas 500 µs je vytvořen časovačem 0 v 16b módu. Jelikož pravděpodobně použijete jiný motor s jinými otáčkami, budete si muset podprogram času upravit podle svého.

;**********************************************************************
;************************* LIGHT 3D EFFECT ****************************
;**********************************************************************
		ORG 0
		char equ R0		;vykreslovaný znak, 0/1 - X/P
		effect equ R1		;volba efektu inverze: 0/0ffh - ano/ne

		CLR P3.7		;aktivace 74LS245
	jj: 	MOV effect,#0		;s efektem
main:		MOV R2,#200		;nastavení doby trvání jednoho efektu t = 200 * 10,5 ms = 2,1 s
	opak:	MOV char,#1		;nastav vykreslovaný znak na P
		CALL drawCH		;vykresli znak
		MOV P1,effect		;mezera mezi písmeny délky 1 ms
		CALL t0m5
		CALL t0m5
		MOV char,#0		;nastav vykreslovaný znak na X
		CALL drawCH		;vykresli znak
		MOV P1,effect		;mezera mezi slovy délky 2,5 ms
		CALL t0m5
		CALL t0m5
		CALL t0m5
		CALL t0m5
		CALL t0m5
		DJNZ R2,opak		
		CJNE effect,#0,jj	;jestliže nebyl nastaven efekt, pak ho nastav a naopak
		MOV effect,#0ffh	
		JMP main

;funkce drawCH ma dva parametry: char - vykreslovaný znak, effect - efekt inverze

drawCH:		MOV R7,#0
		CJNE char,#1,chp
		MOV DPTR,#charP		;adresa tabulky znaku p
		JMP nextCH
	chp:	MOV DPTR,#charX 	;adresa tabulky znaku x
	nextCH:	MOV A, R7	
		MOVC A,@A+dptr		;do akumulátoru ulož aktuální řádek tabulky 
		CJNE effect,#0,cont	;efekt - inverze textu
		CPL A
	cont:	MOV P1,A		;zobraz jeden sloupec znaku
		CALL t0m5		;doba zobrazení jednoho sloupce
		INC R7			;zvyš posunutí v tabulky
		CJNE R7,#7,nextCH 		
		RET

charP:		db 10011111b		;tabulka znaku P
		db 00001111b
		db 00100111b
		db 00100111b
		db 00000000b
		db 00000000b
		db 11111111b	
		
charX: 		db 00111100b		;tabulka znaku x
	        db 00011000b
	        db 11000011b
	        db 11100111b
	        db 11000011b
	        db 00011000b
	        db 00111100b
       
t0m5:		MOV tmod,#1b		;nastav časovač 0 v módu 16bit
		MOV TH0,#0FCh		
		MOV TL0,#25h
		CLR TF0			;vynuluj příznak přetečení
		SETB TR0		;aktivuj časovač
		JNB TF0,$		;čekej dokud se časovač nenaplní - neuběhne 500 us
		RET
       		
		END

A výsledek naší práce

Nakonec jsem vytvořil krátké video, kde můžete shlédnout celý efekt. Kvalita videa není příliš vysoká, video bylo natočeno digitálním fotoaparátem.

Rady na závěr

Uspořádání, které jsem zvolil já, není jediným řešením. Doporučuji oddělit ledky s předřadnými rezistory mimo desku řídící elektroniky, pak budete mít volnost při uspořádání LED. Můžete je například uspořádat do oblouku a vytvořit tak iluzi koule. Je možné, že vám nebude stačit 8 LED, pak můžete využít oba porty 89C2051 nebo použít 89C51 se čtyřmi porty. Další možností, jak ovládat více LED, je rozšířit porty pomocí vhodných obvodů (já používám 74LS573). Jak už jsem zmínil v článku, bylo by vhodné dodělat měření otáček a korekci časové konstanty. Jestliže vás tento článek zaujal a podle něj jste si udělali tento efekt, tak nezapomeňte natočit video, nebo alespoň udělat fotky, a dát odkazy do komentáře pod článkem. Neručím za úraz způsobený elektrickým proudem nebo pohybující se mechanickou částí.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor programuje v C++, Visual Basic. Zajímá se o kvantovou fyziku, robotiku a vědu vůbec.

Nové články

Obrázek ke článku Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý