terça-feira, 13 de março de 2012

Microcontroladores: ARDUINO



- Hardware e Software -







    O Arduino (acima) é uma plataforma física de computação de código aberto baseada numa simples placa micro controladora, e um ambiente de desenvolvimento para escrever o código para a placa. Com ele é possível criar circuitos interativos através da leitura de dados com sensores conectados a sua placa, controlando uma variedade de luzes, motores ou outras saídas físicas. Projetos do Arduino podem ser independentes, ou podem se comunicar com software rodando em seu computador (como Flash, Processing, MaxMSP). O software de programação de código-livre pode ser baixado de graça.

    Seus mantenedores possuem um serviço de venda do produto pré-montado, mas também é possível ao usuário montar seu próprio sistema, por se tratar de uma plataforma de hardware livre.

    O projeto para sua realização começou na Itália em 2005, com a intenção de criar um sistema de prototipagem mais barato do que os disponíveis naquele momento, para a realização de projetos escolares. Desde então já recebeu uma menção honrosa na categoria Comunidades Digitais em 2006, pela Prix Ars Eletrônica e até 2008 já havia vendido mais de 50.000 placas.

    O Arduino pode ser usado para desenvolver objetos interativos, admitindo entradas de uma série de sensores ou chaves, e controlando uma variedade de luzes, motores ou outras saídas físicas. Projetos do Arduino podem ser independentes, ou podem se comunicar com software rodando em seu computador (como Flash, Processing, MaxMSP.). Os circuitos podem ser montados à mão ou comprados pré-montados; o software de programação de código-livre pode ser baixado de graça.

    O software Arduino é um ambiente de código aberto escrito em Java e baseado na linguagem Processing e Wiring e foi esquematizado com o objetivo de introduzir programação a pessoas não muito familiarizadas com desenvolvimento de softwares.








    Outra característica interessante do Arduino é que ele permite receber vários Shields em camadas. Shields são placas adicionais que podem ser encaixadas sobre o Arduino, permitindo uma infinidade de aplicações, tais como uma placa de rede como mostra a Figura abaixo:


    Placa de rede adicionada sobre o Arduino

    Existem diferentes tipos de Arduino e a tabela abaixo nos fornece alguns destes:


    Tabela Interfaces e diferentes tipos de Arduino
    Modelo
    Descrição e tipo de conexão ao hospedeiro
    Controlador
    Serial Arduino
    Serial DB9 para programação
    ATmega8
    Arduino Extreme
    USB para programação
    ATmega8
    Arduino Mini
    Versão em miniatura do Arduino utilizando montagem superficial
    ATmega168
    Arduino Nano
    Versão menor que o Arduino Mini, energizado por USB e conectada por montagem superficial.
    ATmega168/328
    LilyPad Arduino
    Projeto minimalista para aplicações portáteis, utilizando montagem superficial. Por exemplo projetos e sistemas acoplados a roupas.
    ATmega168
    Arduino NG
    USB para programação
    ATmega8
    Arduino NG Plus
    USB para programação
    ATmega168
    Arduino BT
    Interface Bluetooth para comunicação
    ATmega168
    Arduino Diecimila
    Interface USB
    Atmega168 em um pacote DIL28 (foto)
    Arduino Duemilanove
    Duemilanove significa "2009" em italiano. É energizado via USB/DC, com alternação automática
    Atmega168 (Atmega328 para a versão mais nova)
    Arduino Mega
    Montagem superficial (com mais do que 50 portas)
    ATmega1280 para E/S adicionais e memória
    Arduino Uno
    Utiliza Atmega8U2 para driver conversor Serial-USB, "Uno" significa "Um" em italiano.
    Esta versão é considerada a versão 1.0 do projeto, sendo que as placas que sucederem a esta serão referenciadas.
    ATmega328


    O projeto do Espectrofotômetro utiliza a verão MEGA R3 2560 (pois o microcontrolador é o ATmega2560), até porque trabalharemos com uma placa Ethernet acoplada ao Arduino, além de usarmos, pelo menos 5 sensores - Conversor de Frequência, Ultrassom, Termômetro Digital, LED, além do próprio motor de passo, fatores que requerem mais pinos para serem usados. Daí o MEGA (!!).


    Abaixo algumas informações sobre ele.





    Por aqui, fechamos a descrição do Arduino, usos, sua IDE, software, e tipos utilizados, além de vermos o Arduino que utilizaremos no experimento...


    ...Bom, e na seção a seguir, a relação entre um motor de passo e um scanner, além de entender melhor como usaremos este motor no experimento. Até lá!


    Um scanner e um motor de passo (intro)

    Esqueletos de scanner


    Para o que nos interessa, veremos nesta seção como é a parte de dentro de um scanner, ou seja a anatomia do equipamento.

    Se você for curioso (o que recomendamos grandemente, por sinal - hehe!), você pode ver como o scanner é por dentro ao desmontar um que esteja fora de uso (isso porquê não indicamos que você inutilize o que tem em casa, claro...A não ser que você seja bom o suficiente...), embora aqui não mostraremos como... 

    ...


    OBS1: Na imagem acima, a montagem que tínhamos no início. No lado direito da imagem temo um scanner que desmontamos e utilizamos sua estrutura mecânica para rodar fazer o movimento de ida e volta do experimento.


    Mas vamos ao que interessa: 

    Em geral, um scanner (de mesa) típico apresenta um sensor do dispositivo de carga acoplado (CCD - charge coupled device), espelhos, bandeja de vidro, lâmpada, lente, tampa (óbvio), filtros, barra estabilizadora, fonte, porta(s) de interface, circuitos de controle, e a parte física responsável pela movimentação:
    • cabeça de leitura
    • cinta
    • motor de passo
      • ou pode-se optar por coletar pelo próprio motor de passo, e para isso você tem de saber as relações entre as voltas das polias que conectam a conta ao motor de passo;
      • ou você pode usar um ultrassom, que veremos seu funcionamento em outra seção, que estamos a montar, ainda


    Mas, então você observa e pensa: para que tudo isso...Se eu posso usar somente a cabeça de leitura (que é presa ao motor de passo por cintas) e o motor de passo? Afinal, eu posso ter um robozinho, sem ter que comprar um! (sim, não gostamos muito de sair gastando...)

    O motor é este aqui, um MITSUMI Electronicsmodelo M35SP-7:

    Motor visto por cima, perceba as polia acoplando a cinta do scanner ao motor com a barra estabilizadora passando por cima. 

    OBS2: Percebe-se também os cabos que saem do motor - estes cabos serão ligados ao Arduino.


    E o scanner, a propósito, que utilizamos no experimento é este (PLUSTEK OpticPro 4831P):
     
    visto no início

    visto depois das montagens dos sensores*
    (*é a peça próxima dos cabos coloridos, no canto superior scanner dentro do scanner).


    OBS3: os sensores, scanner, fonte de luz, Cd, e etc.., estão dentro de uma caixa que usamos para tornar o ambiente no scanner escuro o suficiente para captação dos sinais das raias do espectro eletromagnético.



    Foi mais ou menos assim o porque de usarmos um scanner para fazer o movimento de ida e volta do sensor para captar os dados de irradiância...
    Fora que, com o próprio movimento do scanner se coleta os dados de comprimento de onda.



    Bom na seção a seguir veremos o funcionamento do motor de passo. Até lá!

    Estrutura do equipamento - funcionamento do motor de passo (II)


    Motor de Passo Funcionando



    motores de passo

    Bem no tópico anterior vimos o motor de passo do scanner. Agora veremos como ele funciona.


    Se você tiver curiosidade, indico um vídeo produzido por alunos da UNIVASF que explica de modo bem interessante, o funcionamento de um motor de passo, com bobinas, corrente elétrica e uma bússola.


    Motor de passo, o que é? 
    (trecho tirado daqui)


    Um motor de passo por dentro é basicamente assim:
    Um motor de passo é um tipo de motor que como o nome indica, roda em "passos", ou seja em ângulos certos (por norma, escrito no próprio motor).

    Para fazer um passo, deve-se fazer passar bastante corrente pelas bobinas do motor, de modo a criar um campo magnético e a atrair um dos dentes do eixo.

    Na figura, retirada daqui, temos em 1, 2, 3 e 4, solenóides (bobinas) nos quais se passa certa corrente elétrica, de forma que se cria um campo eletromagnético, o qual o atrai os dentes da peça contendo o solenóide em direção a engrenagem, de forma que quando cada solenóide for ativado, a cada passo, se tem o movimento da engrenagem para a direção do passo seguinte. Desta forma temos a seguinte configuração:


    Este desenho é from Wikipedia (embora eu tenha alterado um pouco...)



    • Em I - O solenóide do topo (1) esta ativado, atraindo o dente superior do eixo.
    • Em II - O solenóide do topo (1) é desativado, e o solenóide da direita (2) é ativado, movendo o quarto dente mais próximo à direita. Isto resulta em uma rotação de 3.6°.
    • Em III - O solenóide inferior (3) é ativado; outra rotação de 3.6° ocorre
    • Em IV - O solenóide à esquerda (4) é ativado, rodando novamente o eixo em 3.6°. Quando o solenóide do topo (1) for ativado novemante, o eixo terá rodado em um dente de posição, como existem 25 dentes, serão necessários 100 passos para uma rotação completa.


    O motor utilizado é o M35SP-7T (folha de dados do motor)da MITSUMI. 

    Pela folha de dados:


    Notamos que:
    • Possui 4 fases, sendo
      • 50 ohms/fase (entre 46,5 ohms e 53,5 ohms)
      • 7,5°/passo
    • Excitação de 2 em 2 fases - motor unipolar
    OBS1: Para saber mais sobre os drivers e excitação das bobinas de indução, que definem se o motor é unipolar ou bipolar, acesse a aba de nosso blog: Espectrofotômetro: Componentes


    Isso quer dizer que:

    • dos 5 fios que saem do motor de passo (pela ordem laranja, amarelo, marrom e preto, correspondendo às 2 bobinas):
      • 2 vão ficar com uma tensão mais elevada e 
      • 2 com uma mais baixa (neste caso a GND).
    • Além disso, mais 1 fio (vermelho) segue para alimentação externa (no caso, em geral 18V, mas podendo chegar a 24V)


    Cabe colocar aqui que, pela folha de dados do motor, a indutância de suas bobinas é de 50R/fase, assim, para alimentá-lo com 18V temos que ter no mínimo 360mA/fase. Ou seja, para as 4 fases, ao todo, deveremos ter, ao mínimo, 1,4A (!!!!), que é uma intensidade de corrente bem elevada.



    A corrente que deve passar pelo motor para acioná-lo de nenhum modo poderáser dada pelo Arduino (nele, a corrente é de 40mA por porta), de modo que para acionar o motor, é necessário aumentar o sinal de corrente que sai do Arduino e chega ao motor.


    Mas como se faz isso? - CI's



    É necessário usar o que chamamos de CI (circuito integrado, como o mostrado acima), um componente que associa diferentes transistores SMD em paralelo, de modo a permitir aumento de tensão, corrente, regular sinal, etc..., conforme a necessidade do projeto.

    Neste caso, pode-se utilizar o que é chamado de ponte H (um conjunto de transistores associados de modo a não permitir correntes de fuga):


     
    Ponte H (CI L293D) associado ao motor de passo, vista no programa Fritzing, (acima, à esquerda) e à direita imagem real do CI.



    Ou um CI chamado ULN 2003A (datasheet aqui), que basicamente aumenta o sinal de corrente que sai do Arduino e vai chegar no motor, e ao quals e pode associar o sinal de tensão de 18V sem prejudicar o funcionamento do Arduino:

    Ao centro, imagem do CI ULN2003A


    O CI que utilizamos foi o ULN2003A, devido a questões financeiras e porque em termos de arranjo no experimento ocupa menos espaço e é mais fácil associar os fios. Na ligação com o motor fica mais ou menos assim:




    No lado esquerdo da imagem acima, CI ULN2003A mostrado em detalhe, observa-se do lado esquerdo do CI, os cabos se ligam ao motor e do direito do CI ao Arduino nos pinos em que se deseja realizar o movimento, podendo variar também a velocidade do motor de passo. Para este teste (o da imagem) foi utilizado um diferente do Mitsumi do resultado final, mas com as mesmas especificações. Ao lado direito, imagem mostrando a ligação de um motor de passo ao CI e do CI ao Arduino.


    Falando em associação dos fios entre motor e CI ULN2003A e entre CI e arduino, esta ordem de fios ocorre assim:



    No caso do motor utilizado, a ordem dos fios é esta


    Cor do fio
    Motor de Passo – CI
    CI – Arduino
    Laranja
    16
    8
    Amarelo
    15
    9
    Marrom
    14
    10
    Preto
    13
    11
    Vermelho
    9
    ---


    Modos de Operação

    Os modos de operação variam conforme a necessidade de uso do motor de passo. Por exemplo, no caso do experimento implementado, temos um Conversor de Frequência, associado a estrutura da cabeça de leitura do scanner, o qual deve varrer a extensão dos comprimentos de onda do espectro projetado pela rede de difração. (Veremos adiante sobre redes de difração, e indicamos que acesse a aba Teoria com Simuladores).
    Para tanto, a velocidade do motor de passo deve ser baixa o suficiente para que ele trabalhe com precisão suficiente. Isso porquê, os números de passos que a cabeça de leitura do scanner desloca, deve resultar em um intervalo de distância baixo. Com isso, podemos fazer a coleta do comprimento de onda proporcionalmente precisa.


    Sendo assim, nos testes e no resultado final usamos um Arduino MEGA, o CI ULN2003A, motor de passo Mitsumi M35SP-7.






    Nas imagens acima, temos a montagem do motor associado ao ci e este ao arduino. Na imagem de baixo, detalhe do ci montado em um soquete de 8 16 pinos, e com cabos conectados.

    Para o controle da ida e da volta da cabeça de leitura, basta fazer o motor gira no sentido anti-horário (frente), e a cabeça de leitura faz a ida, ou para o sentido horário (para trás), na qual a cabeça de leitura volta.

    O programa para isso é bastante simples:

    const int stepsPerRevolution = 50; // muda o ajuste de passo por revolução do motor
    char leitura; //comando para o arduino associar a leitura do teclado
    Stepper myStepper(stepsPerRevolution, 4,5,6,7);  // inicia a biblioteca do motor de
                                                                            //passo nos pinos 4 a 7, de modo que a 
                                                                            //função "stepsPerRevolution" dará o 
                                                                            //comando de cada uma das portas 
                                                                            //digitais associadas para o motor girar 
                                                                           //ou para o sentido anti-horário ou 
                                                                           //horário:
    void setup() {
      myStepper.setSpeed(50);  // ajusta a velocidade de giro do motor para 50 rpm:
      Serial.begin(9600);  // inicia comunicação com a porta serial :
    }
    void loop() {
      leitura = Serial.read();
      // uma volta para trás:
       if(leitura == 't') {
          myStepper.step(stepsPerRevolution); //comando para acionar passos para trás
         Serial.println("clockwise = tras"); //imprime o comando "para trás"
            delay(5); //espera 5ms.
       }   
       if(leitura == 'f') {
         myStepper.step(-stepsPerRevolution); //comando para acionar os passos para frente
         Serial.println("anti-clockwise = frente"); // imprime o comando "para frente"
           delay(5); //espera 5ms.
       }
    }

    Como quero atingir uma velocidade baixa, tenho que manter o ajuste de velocidade em um número baixo, e posso utilizar um baixo tempo de espera, pois o motor de passo terá força para arrancar com esta velocidade.

    Desta forma consigo manter velocidade baixa, sem sobrecarga do motor (deste que os fios estejam corretamente ligados, evitando superaquecimento, e retorno de corrente), e faço com que a cabeça de leitura se mova a passos curtos e consiga coletar mais informação.



    Mais detalhes de como funciona um motor de passo, você encontra na aba Espectrofotômetro: Componentes




    No próximo item veremos como é realizado o cálculo do comprimento de onda através do motor de passo


    Espectrofotômetro: Análise de Feixe - Refletido vs Transmitido


    Feixe Refletido e Transmitido: Difração e o Comprimento de Onda



    Para calcular o Comprimento de Onda pelo Motor de Passo, primeiramente devemos saber como o feixe da luz visível (o que vem da lâmpada) é decomposto nas cores do espectro e que formaram as raias visíveis no anteparo. Ou seja, antes de saber como calcular o comprimento de onda, devemos saber:

    "como e porque as raias, que são definidas pelos comprimentos de onda estam ali"

    (e depois de saber, calculamos o dito!)



    Análise do Feixe: Transmitido vs Refletido

    Assim, agora estudaremos como calcular os comprimentos de onda das raias que formam o espectro do feixe que sofreu difração, e de que modo este "desvio" resultará nas raia do espectro. Acontece que a análise do espectro do feixe difratado pode ocorrer com dois tipos de "arquitetura":


    • Análise por Feixe Transmitido: 


      • o feixe de luz sai da fonte, é convergido por uma lente, e sofre difração em uma rede de difração, a partir do qual será transmitido, até que as raias formadas sejam detectadas pelo sensor (um conversor de frequência, no nosso caso), e sabendo os parâmetros geométricos da montagem (como indicado no esquema da figura, o triângulo retângulo DxL), é possível se calcular os valores angulares, e consequentemente, o comprimento de onda.
    Ou

    • Análise por Feixe Refletido

      • feixe de luz sai da fonte, é convergido por uma lente (na imagem ão está representada, embora seja usada para convergir o feixe), e sofre difração na rede de difração (na imagem, representada por um CD). Esta rede é girada (a partir de um motor, ou em um goniômetro nos equipamentos educacionais), de forma a observarmos o ângulo de difração para cada linha. Com posse deste valor se calcula os valores de comprimento de onda, com o veremos no próximo item.  


    Agora sabemos as montagens que podemos utilizar. Devido a questões da estrutura do scanner para ser melhor aproveitado, de forma a se mover o sensor e não a rede de difração, preferimos adotar o primeiro esquema, fazendo a análise do espectro via feixe transmitido. Assim, vamos, ENFIM, aos cálculos do comprimento de onda do espectro.


    Cálculo do Comprimento de Onda


    No esquema, ponto F representa a fenda, θ representa o ângulo de projeção do feixe difratado, x é a distância entre o ponto central (máximo da interferência construtiva) e as raias do espectro (na região de primeira ordem), e D é a distância entre o CD e o CF-TSL235R. Do ângulo formado entre as distâncias D e L:

    senθ = x/L

    Pela figura acima, e como mostrado na figura do primeiro esquema (do feixe transmitido), temos:

    L = (x2 + D2)1/2


    Substituindo na equação do senθ:
    senθ = x/(x2 + D2)1/2


    E como vimos na seção anterior:
    dsenθ =  Nλ

    Nλ = d.[x/(x2 + D2)1/2]

    Como veremos apenas as raias de primeira ordem, N = 1, ou seja:

    λ = d.[x/(x2 + D2)1/2]
    Desta forma, basta que saibamos as distâncias x e que seja medido os parâmetros d e D. 

    • As distâncias x são obtidas por meio das contagens do giro do motor de passo, e podem ser calculadas também por meio de um ultrassom colocado na posição da cabeça de leitura do scanner: 


    ultrassom posicionado na cabeça de leitura, associado ao arduino. Também verifica a posição que se encontra o sensor, apartir do qual se determina a função na programação que começará, se encontra a fenda ou se faz a coleta de dados.
    motor de passo, comanda a movimentação da cabeça de leitura, podendo através dele calcular os valores de comprimento de onda. Também associado ao arduino.


    • Por sua vez, o parâmetro D  é obtido via medição com régua
    • E o parâmetro da rede, d, é obtido via calibração do sistema, como na imagem a seguir:

    Em (A), ponteira LASER, (B), o CD, (C) o trilho para ajuste da base do CD, (D) Cabeça de Leitura, (E) Suporte com o Sensor Conversor de Frequência, e (F) Anteparo para visualização dos pontos do feixe LASER que foram difratados (adotamos o central e o da direita da imagem) 

    Na etapa de calibração do sistema, se utiliza a mesma ideia apresentada no cálculo de comprimento de onda, porém, para obtendo-se o valor de d, já que nesta etapa de calibração é utilizada uma ponteira LASER, com comprimento de onda conhecido (cor vermelha, cerca de 650nm).

    Assim, calculando o valor de d, sabendo o valor D e coletando-se os valores de  x, se calcula (via programação noa arduino), os valores de comprimento de onda λ.


    Agora, sabendo como calcular os valores de comprimento de onda, coletando-se os valores de irradiância e sabendo como e o que é difração, difração com muitas fendas e rede de difração, podemos partir para estudar o funcionamento de um espectrofotômetro, suas aplicações e que tipos existem.


    OBS: por exemplo, os que funcionam analisando espectro de emissão e outros que analisam o espectro de absorção, mais presente na área comercial, devido ao interesse pela caracterização espectral de certas substâncias. 



    Por agora, é só...

    Até lá!