A equipe do Solucionática está iniciando um projeto com um famoso sensor CCD da Sony, já aposentado, mas que ainda tem muito a contribuir em nossa caminhada.
Na foto 1, ao lado, vemos uma placa contendo o sensor ILX511, propriamente dito, onde dá para notar uma janela de cristal, que permite a passagem da radiação luminosa, até a matriz de fotodiodos, com a qual é feita a aquisição da "imagem".
Na foto 2, percebem-se os inúmeros componentes montados no verso da placa e um push bottom, cuja função é "disparar" a leitura da imagem do código de barras.
Nas fotos 3 temos o restante do circuito, contendo o chip W78E65p, que nada mais é que um microcontrolador da Winbond, compatível com o venerável 8051. Há também uma memória ram LY 6264SN.Na figura 4 temos as duas placas conectadas.
As duas placas foram obtidas de um leitor de código de barras da Elgin. Aquele feixe de laser que faz a leitura é "enxergado" pelo sensor como pontos de máxima intensidade, onde não há barras, e pontos de mínima intensidade, onde estão as barras. Os 2048 pixels do sensor são suficientes para diferenciar as barras estreitas de outras mais largas, recuperando-se, assim, o código formado. Há ainda uma placa contendo quatro leds laser.
O Projeto
Certo, e quais a aplicações do sensor ccd linear nos interressam? Seria um leitor de código de barra para Arduino?
Não, o objetivo do presente projeto é entender o funcionamento do sensor ccd linear e construir um Espectrômetro, instrumento capaz de identificar substâncias por meio da absorção/reflexão de feixes de luz (infravermelha, azul, branca etc).
Outras pessoas conseguiram, aparentemente sem muitas dificuldades, usando o mesmo ILX511, obter o espectro de algumas substâncias. Vejam esses vídeos:
Foto 1 - Sensor ILX511 da Sony em primeiro plano.
Foto 2 - Verso da placa, onde se vê o conector e outros componentes.
Foto 3 - Placa do microcontrolador e memória RAM.
Foto 4 - Placa do sensor e do microcontrolador conectadas.
E o Arduino, onde entra nisso?! Vamos ver como funcionam as placas do leitor de código de barras e, assim, descobrir se o Arduino pode ser útil. Meu palpite é que sim, inclusive gerando uma imagem de vídeo obtida pelo sensor ccd, pois pelo que há no manual do chip, a saída do sinal é compatível com o padrão de uma saída de vídeo convencional.
Hardware
Vamos convencionar que a placa com o sensor é a placa 1 e a do microcontrolador é a placa 2. Desse modo começaremos na placa 1, com o estudo do sensor ILX511, cujo manual é facilmente obtido na internet.
Na figura 6, vemos o diagrama de blocos com a pinagem do sensor. Para nossa satisfação, há poucos pinos para serem ligados. Além disso, sabemos que boa parte da eletrônica já está na placa que contém o sensor!
Figura 6 - Diagrama de blocos do ILX511 da Sony.
Podemos destacar que a alimentação do Vcc é de 5V; que o pino 4 (SHSW) serve para selecionar o modo de operação com ou sem o uso do circuito Sample and Hold, que nada mais é do que um circuito que conecta ou desconecta um capacitor, para armazenar por mais tempo uma amostra do sinal, de modo a facilitar a vida do conversor Analógico/Digital.
O CLK é o clock que é limitado a 2MHz; o ROG é um pino que habilita (liga) um gerador interno de pulsos usados para efetuar a leitura dos fotodiodos.
*** IMPORTANTE ***
Nesse ponto, chegamos a explicação do termo CCD (charged coupled device), ou dispositivo de acoplamento de carga, em uma tradução livre. Trocando em miúdos, a matriz de fotodiodos que forma o sensor ( é uma matriz de 2048 colunas por uma linha) é iluminada (ou não) por uma fonte de luz visível ( ou não, pois pode ser infravermelho).
Ao acionar o pino ROG, por meio de um pulso de tensão (5V) ascendente, é feita uma leitura dos valores de todos os 2048 pixels (fotodiodos), e armazenados em uma memória interna (capacitores), pixel por pixel, em função do CLK. Há um detalhe importante, o sensor tem mais do que 2048 pixels, mas sim 2105 pixels, dos quais 2048 são úteis (estão na janela), assim, o software tem que levar isso em conta e separar os 2048 pixels do restante.
No pino Vout, com ou sem S/H, é que se obtém a saída das leituras efetuadas. Assim, podemos fazer 2, 10 ou 100 leituras, ou samples (amostras) dependendo da natureza dos sinais que queremos obter e da qualidade da digitalização que é limitada pela capacidade do conversor A/D e do microcontrolador que gera esses pulsos. Ou seja, depende da frequência de clock do sistema, que não está limitada a 2MHz, como se podia imaginar.
Esse limite é do sensor. Podemos executar muitas tarefas após as amostras obtidas e assim refinar o resultado final e ainda controlar um display colorido, obtendo-se um instrumento completo.
Na figura 7, logo abaixo, temos um circuito sugerido no manual do ILX511. Como o pino 4 (SHSW) está em Vcc, o circuito de S/H está desativado. A saída - pino 1 Vout - tem sua impedância aumentada com o uso do transistor PNP 2SA1175.
Qual a ideia: conectar as duas placas; alimentar por meio do cabo ps/2 que acompanhou o produto; inserir um fio no conector no pino referente à saída do sinal (ver pinagem do conector) a um Arduino com o sketch Arduinoscope, capaz de mostrar a variação de sinais nas entrada analógicas. Depois disso, estudar a forma do sinal e as variações provocadas pela variação de luminosidade sobre o sensor e aplicar as ténicas de processamento digital de sinais (FFT, p. ex) para obter informações sobre as amostras.
Conclusão: estamos reutilizando um circuito que foi concebido para identificar barras escuras (na verdade o sensor enxerga as barras claras, não é?) do atualmente tão comum código de barras, para obter um sinal retirado da metade desse circuito, no que acreditamos ser a parte analógica (placa 1) e visualizarmos esse sinal com a ajuda do Arduino. Depois dessa etapa, decidiremos que estratégia usar, pois não foi dito, mas os equipamentos aqui propostos são, em geral, portáteis e, preferencialmente, stand alone.
OBS: Pinagem do conector.
O conector que interliga as duas placas (1 e 2, analógica e a digital) tem, felizmente, as funções de cada pino impressas. A saber:
Pino 1 (vermelho) - +Vcc (5V)
Pino 2 (branco) - SOS (nós é que pedimos socorro...mas pode ser start of scan)
pino 3 ( verde) - DTA ( esse é fácil: DATA, é a nossa saída Vout!)
pino 4 (laranja) - PE (não identificado, suspeitamos do Pulse Enable...)
pino 5 (preto) - GND (é o ground, )V!)
pino 6 (marrom) - TRG (também é fácil, TRIGGER...)
Há um porém, dependendo da taxa de amostragem usada pelo circuito, talvez o Arduino não consiga mostrar as variações do sinal, assim nos resta ir a alguém que tenha um osciloscópio para obter as leituras dos sinais de controle e dados do conector. Outro possível problema é que na placa analógica, tenha algum circuito que torne o sinal "quadrado", ou seja , eliminando as variações de amplitude, que são necessárias para o nosso projeto. Se for o caso, há como retirar diretamente do pino 1 do sensor ILX511, com uma pequena solda.
Uma outra possibilidade é usar o sinal como entrada do Arduino como gerador de vídeo.