UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE INFORMÁTICA GUILHERME DA SILVA VIOLADA LEONARDO MESQUITA DA SILVA RAFAEL DE FARIAS MEURER Matriz de LEDs sensores Oficina de Integração 2 CURITIBA 2011 GUILHERME DA SILVA VIOLADA LEONARDO MESQUITA DA SILVA RAFAEL DE FARIAS MEURER Matriz de LEDs sensores Monografia apresentada à disciplina de Oficina de Integração II do 4º período do curso Computação de Engenharia da Universidade Tecnológica Federal do Paraná. Orientador: Juliano Mourão Vieira Curitiba 2011 de Lista de figuras Figura 1 Representação bidimensional da rede cristalina de silício ...... 7 Figura 3 Silício dopado com arsênio...................................................... 9 Figura 4 Figura 3 Silício dopado com boro .......................................... 10 Figura 5 Representação de um diodo.................................................. 10 Figura 6 Diodo inversamente polarizado. ............................................ 11 Figura 7 Diodo diretamente polarizado. ............................................... 11 Figura 8 Alguns modelos de LEDs ...................................................... 12 Figura 9 Representação simbólica do LED.......................................... 12 Figura 10 LED RGB. ............................................................................ 13 Figura 11 Polarização reversa em um LED ......................................... 14 Figura 12 Primeiro modelo da matriz de LEDs .................................... 17 Figura 13 Problema com a primeira Matriz de LEDs ........................... 18 Figura 14 Segundo modelo de matriz de LEDs ................................... 19 Sumário 1 Proposta ............................................................................................. 5 2 Motivação ........................................................................................... 5 3 Objetivos ............................................................................................. 5 4 Fundamentação teórica ...................................................................... 6 4.1 Condutores, semicondutores e isolantes ..................................... 6 4.2 Semicondutores dopados............................................................. 8 4.2.1 Semicondutor tipo n ............................................................... 9 4.2.2 Semicondutor tipo p ............................................................... 9 4.3 Diodos ........................................................................................ 10 4.3.1 Diodos emissores de luz (LEDs).......................................... 11 4.4 LEDs polarizados reversamente ................................................ 13 5 Metodologia ...................................................................................... 15 5.1 Plataforma Arduino..................................................................... 15 5.2 LEDs .......................................................................................... 15 5.3 Montagem ...................................................................................... 16 7 Conclusões ....................................................................................... 20 6 Referências ....................................................................................... 21 Apêndices ............................................................................................ 22 Código fonte do programa utilizado no projeto................................. 22 5 1 Proposta Este projeto tem como proposta a verificação e manipulação de propriedades pouco exploradas dos diodos emissores de luz, ou LEDs. Serão exploradas basicamente: A utilização da característica capacitiva que passa a adquirir ao ser polarizado reversamente e a geração de foto-corrente para diminuição do tempo de descarga de tal capacitor, explorando estes dois fatores pretendemos ligar um LED, por exemplo, apenas apontando uma lanterna em sua direção. Atingindo-se tal objetivo passaremos a uma nova fase do projeto, na qual será implementada uma pequena matriz de LEDs de alto brilho onde possibilitaremos que sejam “desenhados” diferentes formas sobre a superfície à medida que o usuário desloque a lanterna sobre os LEDs. 2 Motivação Temos por motivação um projeto semelhante ao apresentado anteriormente na mesma disciplina intitulado “Interface Humano-Computador Baseada em LEDs”. O projeto tinha por objetivo ligar um LED se utilizando das mesmas características citadas anteriormente na Proposta, no entanto, não atingiu plenamente seus objetivos encontrando empecilhos em vários pontos no decorrer do semestre, como por exemplo, na escolha do micro controlador adequado, ficando incompleto na sua conclusão, apesar das conquistas obtidas. Tendo despertado nosso interesse e munidos dos diversos erros e acertos do projeto anterior a nossa equipe passou a desejar concluí-lo assim como expandi-lo com a adição de novas ideias dos integrantes. 3 Objetivos 1) Verificação de conceitos físicos referentes à utilização de diodos emissores de luz como sensores de luz capacitivos, assim como a 6 influência de uma foto corrente gerada por uma pequena fonte de luz no tempo de sua descarga; 2) Ativar um LED utilizando-se justamente da medida do tempo de descarga do capacitor citado no item 1; 3) Implementar uma matriz de LEDs RGB na qual o usuário poderá selecionar a cor que deseja e “desenhar” sobre a superfície, ou seja, os LEDs serão ativados juntamente com o deslocamento da fonte luminosa dando a sensação de se estar desenhando com luz. 4 Fundamentação teórica 4.1 Condutores, semicondutores e isolantes Nesta seção utilizaremos o elemento silício para exemplificarmos alguns conceitos. Para isso, necessitamos saber sua configuração eletrônica. O silício possui 14 prótons e 14 elétrons. Sua distribuição eletrônica é: 2 elétrons na primeira camada, 8 na segunda e, na terceira, possui 4 elétrons. Esta ultima, é a camada de valência. Essas camadas referem-se à quantidade de energia que um elétron possui. Quanto maior a energia de um determinado elétron, maior o nível que ele ocupa e mais distante se localiza do núcleo do átomo. O fornecimento de mais energia acarretará em uma maior excitação do elétron, que “pulará” uma quantidade de níveis relativos à energia adquirida. Nessa passagem de um nível para outro superior, o elétron deixa um espaço vazio na camada a qual pertencia, este espaço é denominado de lacuna. Ao voltar para seu estado original, a energia adicional que ele possui deve ser liberada, tal liberação pode ocorrer sob forma de calor, luz ou outra forma de radiação Em um cristal, as órbitas de um átomo se misturam com as órbitas de outro átomo. Isso faz com que se forme uma região de encontro entre os níveis e uma órbita acaba interferindo nas outras. Essas regiões são chamadas de nuvens ou bandas. Podemos ver estas bandas na Figura 1 7 Figura 1 Representação bidimensional da rede cristalina de silício Fonte: http://www.sc.ehu.es/sbweb/electronica/elec_basica/tema2/Paginas/Pagina3.htm Há três configurações que estas bandas podem possuir. Elas podem estar totalmente preenchidas, parcialmente preenchidas ou vazias. Esta configuração da banda de valência determina as propriedades de condução em um sólido cristalino. Quando a banda de valência está totalmente preenchida, a banda acima dela será chamada de banda de condução. Quando ela esta parcialmente preenchida, a própria banda de valência será a banda de condução. A diferença entre condutores, semicondutores e isolantes está na configuração da banda de valência. Quando ela está parcialmente preenchida, é mais fácil fazer com que um elétron passe para um nível maior. É assim que acontece nos condutores, como exemplo, o cobre. [1] Um material isolante, por outro lado, tem uma banda de valência cheia e o espaço entre a banda de valência e a de condução é grande. Esse espaço é denominado de band gap, termo em inglês que significa intervalo entre bandas. [2] Com isso, os elétrons não podem adquirir energia facilmente de um campo elétrico e, portanto, participarem da condução elétrica. Os semicondutores são sólidos onde o band gap é pequeno. Caso sejam resfriados ao zero absoluto, os elétrons ocuparão os níveis energéticos mais baixos possíveis. A banda de condução estará completamente vazia e o material será um isolante perfeito. Porém, à temperatura ambiente, alguns 8 elétrons podem ser termicamente excitados e levados da banda de valência para a banda de condução e nessa condição o material pode conduzir eletricidade. A condutividade observada situa-se entre a dos condutores e dos isolantes, sendo denominado, portanto um semicondutor, a exemplo do que é o silício. [2] A Figura 2 mostra esta diferença entre condutores, semicondutores e isolantes onde temos, no condutor, a banda de valência parcialmente preenchida, no isolante a banda está totalmente preenchida e com band gap alto. No semicondutor vemos a banda totalmente preenchida e um band gap mais baixo. Figura 2 Relação entre as bandas de condução e de valência em vários materiais Fonte: http://www.cesarzen.com/FIS1057Lista16.pdf 4.2 Semicondutores dopados A dopagem consiste em colocar, em um cristal, átomos de um elemento diferente. Isso torna um cristal puro, chamado de intrínseco, em um cristal extrínseco, com impurezas. Como em uma rede cristalina pura não há elétrons livres suficientes para formar uma corrente utilizável, utiliza-se a 9 dopagem para aumentar o número de elétrons livres ou o número de lacunas. [3] 4.2.1 Semicondutor tipo n Uma forma de dopagem ocorre quando utilizamos uma impureza que tem mais elétrons na camada de valência em relação ao elemento a ser dopado. Esta dopagem é feita quando se pretende conseguir mais elétrons na banda de valência. Como exemplifica a Figura 3, pode-se dopar silício com átomos pentavalentes (5 elétrons na camada de valência) de arsênio. Quando as ligações entre os elétrons dos dois elementos se formam, temos um elétron do arsênio sobrando. Esse elétron é forçado a pular para a banda de condução. Quando o silício é dopado desta maneira, ele é chamado de semicondutor tipo n, onde n significa negativo, já que temos um excesso de cargas negativas. Neste caso, os elétrons são denominados de portadores majoritários e as lacunas de portadores minoritários. Outros elementos que podem ser usados são o antimônio e o fósforo. [3] Figura 3 Silício dopado com arsênio Fonte: http://educacao.uol.com.br/fisica/ult1700u61.jhtm 4.2.2 Semicondutor tipo p Outra forma de dopagem ocorre quando utilizamos uma impureza que possui menos elétrons na camada de valência em relação ao elemento a ser dopado. A Figura 4 mostra a rede cristalina de silício sendo dopada com um átomo de boro, que possui 3 elétrons na camada de valência (átomo trivalente). Neste caso, 3 elétrons do boro fazem ligações com elétrons adjacentes de 10 silício, mas, um quarto elétron de silício não faz ligação. Assim, temos uma lacuna formada em cada átomo de boro. Assim, temos um semicondutor do tipo p, onde p significa positivo, pois temo excesso de lacunas. As lacunas serão os portadores majoritários e os elétron serão os minoritários. Alumínio e gálio são outros elementos que podem ser usados neste tipo de dopagem. [3] Figura 4 Figura 3 Silício dopado com boro Fonte: http://educacao.uol.com.br/fisica/ult1700u61.jhtm 4.3 Diodos É possível produzir um cristal com dopagem parte tipo p e parte tipo n, denominado cristal p-n ou diodo. Figura 5 Representação de um diodo. Fonte: [4] A tendência, quando não temos um potencial elétrico externo aplicado sobre o diodo, é que as cargas da parte negativa da junção sejam atraídas pela parte positiva e vice-versa. Isso faz com que uma região “equilibrada” se forme entre os semicondutores, onde o número de portadores livres é pequeno. Esta região é chamada de região de depleção. Como visto na Figura 5, um campo elétrico E se forma, opondo-se ao movimento destas cargas, Assim, temos uma “barreira de potencial” que estabiliza este processo de combinação de cargas. [4] Esta região de depleção cresce quando aplicamos um potencial 11 elétrico no diodo na forma mostrada na Figura 6. Assim, a corrente que passa é próxima a zero e dizemos que o diodo está inversamente polarizado. Figura 6 Diodo inversamente polarizado. Fonte: [4] Por outro lado, pode-se diminuir a região de depleção quando aplicamos um potencial externo na forma mostrada na Figura 7. Assim, essa região “quebra” e ocorre o fluxo livre de cargas. Tem-se, então, uma corrente passando pelo diodo, e diz-se que ele está diretamente polarizado. Figura 7 Diodo diretamente polarizado. Fonte: [4] 4.3.1 Diodos emissores de luz (LEDs) Do inglês, Light-emitting diode, estes diodos são amplamente utilizados no mundo. Por ser um diodo, os LEDs não passam de um conjunto de junções pn. Mas como essa junção pode emitir luz? Quando um elétron na base da banda de condução de um semicondutor cai em uma lacuna no topo da banda de valência, uma energia é liberada. Essa energia pode ser transformada em energia interna da rede cristalina em vibração. Isso geralmente acontece em semicondutores de silício. Porém, em alguns materiais semicondutores, a energia emitida pode aparecer como uma radiação eletromagnética. [5] LEDs comerciais projetados para a região visível do espectro são normalmente baseados em material semicondutor que é um composto de gálioarsênico-fósforo. Ajustando-se a razão entre o fósforo e o arsênico, a largura 12 do band gap e, consequentemente, o comprimento de onda da luz emitida, pode ser alterada. Figura 8 Alguns modelos de LEDs Fonte: http://www.infoescola.com/eletronica/led-diodo-emissor-de-luz/ Se luz é emitida quando um elétron passa da banda de condução para a banda de valência, então a luz daquele mesmo comprimento de onda será absorvida quando um elétron se mover no outro sentido. Com esse conceito é possível verificar que, para aumentar a corrente no sentido reverso da polarização é necessário emitir uma luz que tenha o mesmo comprimento da qual está sendo gerada pelo LED. Para evitar que os fótons emitidos sejam absorvidos, é necessário um grande excesso de elétrons e lacunas. É por esse motivo que se usa uma junção pn. Um simples semicondutor intrínseco não pode ser usado em LEDs. [5] A representação simbólica do LED está representada na Figura 9. ‘A’ indica anodo, ‘P’ positivo, ‘N’ significa negativo e ‘C’ catodo. Figura 9 Representação simbólica do LED. Fonte: http://tienemigalacosa.blogspot.com/2009/03/como-funciona-diodoled.html 13 Vale citar, também, dois tipos de LEDs que foram utilizados em nosso projeto. O primeiro é o LED de alto brilho. A diferença dele com o comum é que, além de ter a cápsula transparente, é revestido internamente com um silicone funcionando como lente para concentrar a luz emitida pela cápsula. O segundo tipo é o LED de alto brilho RGB, que é o padrão de cores Red (vermelho), Green (verde), Blue (azul), em um mesmo LED. Isso acontece porque há as três cores dentro do encapsulamento e para cada cor há um ânodo, sendo apenas um cátodo para os três, como mostra a Figura 10. Figura 10 LED RGB. Fonte: http://blog.bsoares.com.br/wp-content/uploads/2009/04/5mm_rgb_ledcolor-especification.jpg acesso 26/04/2011 4.4 LEDs polarizados reversamente A base do nosso projeto é um conceito ainda pouco explorado. Os diodos quando polarizados inversamente possuem uma propriedade capacitiva (acúmulo de cargas) e, nos LEDs, a incidência de luz altera esta propriedade. Esta capacitância é muito pequena, por este motivo, estabelecer uma relação entre a incidência luminosa e a capacitância torna-se difícil. Porém, na polarização inversa, o LED se comporta como um capacitor em paralelo com uma fonte de corrente dependente da incidência luminosa, como mostrado na Figura 11. Um aumento na incidência de luz sobre LED gera um aumento da corrente, que por sua vez descarrega o capacitor equivalente mais rapidamente. [6] 14 Figura 11 Polarização reversa em um LED Fonte: [6] Uma maneira de quantificar a intensidade luminosa percebida pelo LED é medindo o tempo de descarga da tensão armazenada nele quando polarizado inversamente. Inicialmente, o LED é polarizado inversamente, o que equivale a carregar o capacitor. O capacitor ficará carregado com a tensão do cátodo do LED. Depois, a porta onde está o cátodo do LED deve ser levada à alta impedância, e assim o capacitor descarregará através da fonte de corrente dependente da luz sem interferência do circuito externo. Quanto maior a incidência de luz sobre o LED, mais rapidamente o capacitor será descarregado, e mais rapidamente cairá a tensão no cátodo do LED. Usando uma espécie de temporizador, que nada mais é que uma variável incrementada continuamente é possível medir o “tempo” que a tensão no cátodo (ou seja, a tensão do capacitor) demora para ir do valor inicial até um valor praticamente nulo. Ou seja, primeiro o capacitor é carregado na polarização inversa do LED. Em seguida, o cátodo do LED é levado a alta impedância, e nesse instante o temporizador é iniciado, e monitora-se a tensão no cátodo. Quando essa tensão for menor ou igual a um valor estipulado, o temporizador é parado. Quanto maior for a incidência de luz no LED, mais intensa será a foto corrente, mais rapidamente o capacitor será descarregado e o tempo medido será menor. Ou seja, o tempo de descarga do LED é inversamente proporcional à incidência de luz. 15 5 Metodologia Nesta parte faremos uma breve apresentação dos materiais e componentes utilizados, bem como, a descrição dos testes realizados ao longo do semestre. 5.1 Plataforma Arduino É uma plataforma de prototipação eletrônica flexível e de fácil utilização. A plataforma possui um circuito eletrônico que pode ser ligado ao computador por meio da porta USB. O hardware é baseado no microcontrolador ATmega e contém pinos de entradas/saídas digitais, sendo que algumas podem ser utilizadas como saída PWM (Pulse Width Modulation), entradas analógicas, conectores USB e de energia, botão reset e uma barra de pinos ICSP (In-Circuit Serial Programming). Possui uma IDE (Integrated Development Environment) baseada em Processing e desenvolvida para pessoas não tão familiarizadas com programação, onde é possível editar código, compilar e transferir firmware serialmente para o hardware. Pode ser utilizada em sistemas operacionais como Windows, Linux e MacOS. A linguagem de programação (open-source) é derivada do Wiring, uma linguagem semelhante ao C. Uma das grandes vantagens de utilizar o Arduino é a facilidade tanto para conectar vários sensores às entradas do circuito quanto para controlá-los ou monitorá-los. [7] 5.2 LEDs Para realizar os testes usamos três tipos de LEDs, com invólucro colorido, alto brilho e RGB. Com cada um fizemos os testes para analisar o tipo de comportamento. 16 5.3 Montagem Nesta seção, para um melhor entendimento, disponibilizamos o código do programa que escrevemos na seção de apêndices. O código está comentado, facilitando a leitura. Inicialmente, fizemos alguns testes com um LED de invólucro colorido. Optamos, inicialmente, por este LED pelo seu baixo custo, buscando analisar seu comportamento capacitivo quando aplicado sobre ele polarização reversa. Nosso principal objetivo nesses testes era verificar o tempo de descarga do LED. Utilizamos para isso o Arduino. Vimos que não era possível medir o tempo da descarga, propriamente dito, devido a valores que atingiam escalas de tempo surpreendentemente baixas, mas, no entanto, seria possível utilizar de uma variável com o objetivo de estimar tal tempo, incrementando-a constantemente até que a tensão na porta de saída se tornasse zero, o que corresponderia à descarga total do capacitor. Incidindo luz, quando o LED estava polarizado reversamente, percebemos que esse valor reduzia, sendo assim, o valor obtido variava de acordo com a intensidade de luz incidindo sobre o LED. Com o valor sendo alterado com a luz, resolvemos testar se a resistência, que estava em série com o LED, teria influência no tempo da descarga. Colocando valores distintos de resistências, o valor da variável não era alterado, verificando a validade dos conceitos já descritos anteriormente sobre polarização reversa aplicada em LEDs. Concluídos os testes iniciais, que serviram para verificar os conceitos básicos, iniciamos a montagem da matriz. Ela foi elaborada como mostra a Figura 12, com vários LEDs na mesma porta dos catodos e anodos. Seria necessário observar o comportamento dos LEDs RGB. Inicialmente, polarizamos todas as entradas do LED reversamente. A primeira cor a ser testada foi o vermelho. Incidindo luz nele pudemos comprovar que era necessária uma intensidade menor de luz. Pensamos que esta diferença era devida ao encapsulamento. Por ser transparente, faria com que a incidência de luz fosse menor, mas, ao realizarmos testes com azul e verde, percebemos 17 uma diferença entre eles. O vermelho é o mais sensível a luz, seguido do verde e azul. Esse fato demonstra exatamente o que foi dito na seção 4.3.1, onde para circular uma maior corrente no sentido inverso era necessário emitir luz no mesmo comprimento de onda. A luz que usamos era branca, que contém todos os comprimentos de onda, isso fez com que nós pudéssemos provar o conceito, pois o vermelho que necessita de um menor comprimento de luz foi o mais sensível enquanto que o azul temo comprimento de onda maior. Para a montagem da matriz utilizamos o formato apresentado na Figura 12. Optamos por esse estilo pelo fato de ser a mais utilizada em matrizes de LEDs. Nessa montagem, o número de portas digitais e de fios é menor pelo fato de termos apenas um ânodo e um cátodo para vários LEDs. Desse modo, a utilização do LED RGB seria viável. Para esse modelo é necessário que o loop do microcontrolador seja suficientemente rápido para que os olhos humanos não percebam o LED piscando. Figura 12 Primeiro modelo da matriz de LEDs Fonte: Autoria própria 18 Ao iniciarmos a montagem, era preciso colocar todas as portas em nível alto, para que outros LEDs não fossem carregados e não influenciassem na entrada da porta. Porém, mesmo considerando esse fato, como nossa análise da variável era feita na porta do cátodo, ao declararmos a porta em modo de entrada ela iria para zero (nível baixo). Por esse motivo, a porta de entrada nunca chegava a zero por causa das correntes que passavam pelos outros LEDs. A Figura 13 exemplifica o problema comentado, onde, para verificar o LED na posição (1,1) é necessário colocar a porta no modo input e o ânodo em zero, e ao fazermos isso há a passagem de corrente, em vermelho, que vão diretamente à porta de entrada, fazendo com que a porta de entrada nunca chegasse ao um valor zero. Figura 13 Problema com a primeira Matriz de LEDs Fonte: Autoria própria Ao falarmos com o professor orientador, achamos a solução de colocar um circuito integrado que geraria alta impedância nos outros ânodos, mas ao 19 ler mais sobre o Arduino vimos que ele mesmo podia gerar esta alta impedância nas portas. Munidos deste artifício, realizamos novos testes em nossa matriz e obtivemos bons avanços. Porém, esbarramos em outro obstáculo. Pelo grande número de portas sendo alteradas, o microcontrolador não possuía velocidade suficiente para que fosse feita a varredura da matriz sem que o olho humano percebesse que, na verdade, os LEDs estavam piscando. Para resolvermos o problema tivemos que implementar outro tipo de matriz, apresentado na Figura 13. Esse método utiliza mais portas e fios, mas funciona perfeitamente, pois o loop será somente para verificar se há luz incidida em cada LED individualmente, quando há luz incidida o LED acende e não torna a apagar até ser inicializada novamente a matriz. Isso ocorre porque tratamos aqui os LEDs de forma independente. Com isso, tivemos que tomar outros rumos no projeto. Utilizaremos apenas LEDs de alto brilho azul, economizando portas digitais e possibilitando um aumento no tamanho da matriz. Figura 14 Segundo modelo de matriz de LEDs Fonte: Autoria própria 20 Ao iniciarmos a montagem da matriz da figura 14, vimos que, com o aumento do seu tamanho, a varredura ficava muito lenta. Após vários testes vimos que ao colocar um break, dentro do while que fazia a contagem na porta do catodo até zerar, a varredura ficava mais rápida, isso fez com que nós retornássemos ao primeiro modelo de matriz. Depois de mais testes, conseguimos fazer que a varredura fosse suficiente para que os olhos não pudessem ver os LEDs piscando. Mas isso só é possível quando a matriz for de no máximo 4x4 para LEDs de alto brilho verde. Observamos no experimento em sala que em uma matriz de 7x4 os LEDs piscavam. Com as matrizes funcionando, implementamos uma de LEDs de alto brilho verde e azul. Vimos que com o mesmo valor do value sendo comparado, os LEDs verdes acendiam e com o azul nada acontecia. Ao alterarmos o valor da comparação do value, um valor maior, os LEDs azuis acendiam normalmente. Esse aumento no value faz com que o tamanho da matriz seja alterado. Isso porque, com um valor maior do value, mais contagens são feitas dentro do while gastando mais tempo. 7 Conclusões Concluindo, vimos que para a montagem de matriz de LEDs sensores é necessário estar atento em cada detalhe, e realizar inúmeros testes, pois como não é um conceito muito utilizado tivemos que passar por várias etapas até a conclusão do projeto. Fica como uma idéia de continuação do projeto a utilização de um microcontrolador que tenha uma velocidade maior e mais portas, para que mais LEDs possam ser incluídos. Pode-se também trabalhar com LEDs RGB fazendo com que o usuário escolha a cor que gostaria que o LED emitisse. 21 6 Referências [1] VASCONCELLOS, Prof. César Augusto Zen. Lista temática e de problemas nº 16 - Teoria de bandas em física do estado sólido. Teoria de bandas. Universidade Federal do Rio Grande do Sul. Disponível em: < http://www.cesarzen.com/FIS1057Lista16.pdf> Acessado em: 02/06/2011 [2] LEE, John David. Química Inorgânica não tão concisa. Editora Edgard Blücher. 5ª Edição, 1999. [3] CARRILHO, Prof. Eduardo. Introdução aos semicondutores. Instituto Militar de Engenharia. Disponível em: <http://www.ime.eb.br/~aecc/FundEngEle/Semicondutores.pdf> Acessado em: 02/06/2011 [4] SOARES, Marco. Diodos semicondutores I. Disponível em: < http://www.mspc.eng.br/eletrn/semic_210.shtml> Acessado em: 04/07/2011. [5] HALLIDAY, DAVID; RESNICK, ROBERT; WALKER, JEARL. Fundamentos de Física. Editora LTC. 5ª Edição. Vol. 4, 2004 [6] DIETZ, P. H.; YERAZUNIS, W. S.; LEIGH, D. Very low-cost sensing and communication using bidirectional leds. In: Ubicomp. [S.l.: s.n.], 2003. p. 175–191. [7] ARDUINO. Disponível em: <http://arduino.cc/>. Acessado em: 04/07/2011 [8] ANDREATTA, Caio Nogara; PAIVA, Lucas Campiolo; RIBEIRO, Luiz G. C. Interface Humano-Computador Baseada em LEDs, Monografia, 2008. 22 [9] MILLMAN, JACOB; HALKIAS, CHRISTOS C. Eletrônica Dispositivos e Circuitos. Volume 1. Editora Mcgraw Hill, 1981. Apêndices Código fonte do programa utilizado no projeto /* MATRIZ DE LEDs SENSORES Guilherme da Silva Violada Leonardo Mesquita da Silva Rafael de Farias Meurer */ // inicializa as portas dos anodos e catodos. int anodos[] = {9,8,7,6,}; int catodos[] = {26,12,11,10}; // matriz auxiliar para dizer já foi inserido luz. int on[4][4]; // variável auxiliar para verificar se no LED foi inserido luz. int value; void setup() { _SFR_IO8(0x35) |= 4; _SFR_IO8(0x35) |= (1<<4); // inicializa as portas e a matriz auxiliar em 0. for(int i = 0; i < 4;i++) { pinMode(anodos[i],OUTPUT); } for(int a = 0;a < 4;a++) { pinMode(catodos[a],OUTPUT); } for(int i = 0;i < 4;i++) for(int j = 0;j < 4;j++) on[i][j] = 0; // inicia todas as portas em ALTO. for(int a=0;a<4;a++) { digitalWrite(anodos[a],HIGH); } for(int a=0;a<4;a++) 23 { digitalWrite(catodos[a],HIGH); } Serial.begin(9600); } void loop() { // dois 'for' para percorrer a matriz for(int a = 0; a < 4; a++) { for(int c = 0; c < 4; c++) { value = 0; // a cada passagem do for o value volta a ser zero. if(on[a][c] == 0) // se o LED da posição a, c não foi inserido luz entra no if. { // inicializa todos os anodos em modo de entrada que zera uma alta impedancia, menos o qual está sendo utilizado no LED // isso serve para que nenhuma corrente atrapalhe o descarregamento do LED. for(int k = 0; k<4; k++) { if( k != a) { pinMode(anodos[k],INPUT); } } // inicializa o anodo da posição em BAIXO, para carregar o LED, já que o catodo // está em ALTO, não precisa ser alterado. digitalWrite(anodos[a], LOW); // inicializa o catodo do LED em input para medir o descarregamento pinMode(catodos[c],INPUT); // while que executa até o valor da porta do catodo ser zero. while(digitalRead(catodos[c]) != 0) { // incrementa o value para analisar o valor da porta value++; // se o valor for maior que 43 sai do while, porque para verificar se foi inserido luz ou não // o valor do value tem que ser menor do que 40, então não é necessário um valor maior do que isso. if(value > 43) { break; } } // o anodo volta a estar em ALTO digitalWrite(anodos[a], HIGH); 24 // catodo volta a estar no modo de saída pinMode(catodos[c],OUTPUT); // coloca todos os catodos que estavam em modo de entrada (alta impedância) para modo de saída. for(int k = 0; k<4; k++) { pinMode(anodos[k],OUTPUT); } // compara se o valor do value é menor do que 40, se for quer dizer que luz foi inserida no LED. if( value < 40) { // muda o valor da posição do LED na matriz auxiliar para 1 para que ele possa ser ligado. on[a][c] = 1; } } // caso não seja 0 no if entra no else, fazemos isso para acender o LED. else { // para que não haja outros LEDs sendo ligado, colocamos todos os outros anodos em BAIXO for(int k = 0; k<4; k++) { if( k != a) { digitalWrite(anodos[k],LOW); } } // liga o LED por um instante de tempo, o suficiente para ver que está completamente aceso e depois o apaga digitalWrite(anodos[a], HIGH); digitalWrite(catodos[c], LOW); delay(0.99999998); digitalWrite(anodos[a], HIGH); digitalWrite(catodos[c],HIGH); } } } }