Kit experimental de polarização da luz com múltiplos polarizadores

From wwwelab
Jump to navigation Jump to search

Descrição do kit experimental

Vista explodida do kit experimental.
Vista explodida do kit experimental.

A montagem do kit experimental de polarização da luz com múltiplos polarizadores é composta por três componentes principais: (i) a componente mecânica composta por peças de plástico impressas em 3D, cujos desenhos técnicos estão disponíveis aqui, (ii) um raspberry Pi que executa o software de controlo através da internet e ainda realiza o streaming do vídeo, e (iii) a componente eletrónica do controlador escravo de baixo nível que está responsável pela deteção e motorização do kit experimental.

Montagem Mecânica

Vista de cima do kit experimental
Vista frontal do kit experimental

Nesta parte, a montagem mecânica do kit experimental é explicada em detalhe para poder ser corretamente montada.

Ordem de Montagem

1. Verificar se todas as peças necessárias à montagem estão disponíveis.

Peças necessárias para a montagem

2. Retirar os suportes de impressão das polias com a ajuda de pinças ou de um X-Acto.

Retirar os suportes
Retirar os suportes

3. Colocar as correias nas polias.

Correia na polia

4. Ligar as polias aos suportes dos polarizadores. Ouvir um “click” para saber que estão bem ligados. Adicionalmente, colocar os polarizadores nos suportes. (Não esquecer de retirar as películas protetoras dos polarizadores, caso seja necessário)

Posição de ligação das polias com os polarizadores
Polia e polarizador ligados

5. Repetir os passos 2, 3 e 4 até ter a corrente de polias e polarizadores completa. (Não esquecer de ter as correias nas polias, que não estão representadas na figura.)

Corrente de polias e polarizadores

6. Cortar as camadas finas de suporte que tapam os furos das placas principais da estrutura.

Corte das finas camadas de suporte
Placas principais depois de cortadas

7. Juntar dois dos quatro pilares e colocar as porcas nos buracos específicos no topo dos pilares.

Porcas colocadas nos pilares

8. Ligar os dois pilares colocando os parafusos nos furos específicos.

Parafusos colocados
Pilares ligados

9. Juntar as placas principais nesta posição.

Posicionamento das placas principais (igual ao posicionamento da imagem do passo 1

10. Colocar os pilares ligados no canto da junção das placas principais.

Posicionamento dos pilares ligados na junção

11. Colocar os suportes da corrente no outro lado das placas principais, de modo a que fiquem em lados opostos. Verificar se o suporte da corrente está colocado em cima dos furos hexagonais.

Posicionamento do suporte da corrente
Posicionamento do suporte da corrente

12. Colocar as porcas nas "caixas" mais próximas da "parede" do suporte da corrente.

Posicionamento das porcas

13. Colocar os parafusos nos pilares ligados para aparafusar os pilares às placas e ao suporte da corrente.

Colocar os parafusos nos furos destacados

14. Colocar as porcas no resto das "caixas" do suporte da corrente.

15. Colocar os parafusos através das placas principais para aparafusar o suporte da corrente às placas.

Aparafusar os pilares às placas principais e ao suporte da corrente

16. Repetir os passos 7 e 8.

17. Ir para o lado oposto das placas principais e colocar os pilares aparafusados debaixo dos furos circulares.

18. Colocar as porcas dentro das "caixas" superiores dos pilares aparafusados.

19. Colocar o parafuso através das placas principais de modo a aparafusá-las aos pilares aparafusados.

Aparafusar os outros pilares

20. Ligar a corrente aos suportes da corrente, tanto ao aparafusado como ao solto.

Posição da estrutura (corrente + suportes)

21. Colocar as porcas dentro das "caixas" próprias do suporte da corrente que está solto.

22. Colocar os parafusos através dos furos das placas principais para ligar o suporte da corrente solto às placas principais.

Estrutura da corrente aparafusada

23. Escolher um dos pilares ainda não usados e colocar uma porca na "caixa" do meio.

Porca na "caixa" do meio

24. Colocar o pilar debaixo das placas principais num dos cantos.

25. Colocar um parafuso através do furo nas placas principais para juntá-las ao pilar.

Posicionamento do pilar no canto

26. Repetir os passos 23, 24 e 25 até que os quatro cantos da estrutura estejam suportados.

27. Remover os pequenos pilares que tapam a entrada das porcas nas "caixas" da superfície inferior das placas principais.

Remoção dos pequenos pilares
Remoção dos pequenos pilares

28. Colocar as porcas dentro dessas "caixas".

Colocação das porcas na placa principal
Colocação das porcas na placa principal

29. Colocar o suporte do motor de passo por cima dos furos da placa principal onde se puseram as porcas.

30. Colocar os parafusos através dos furos do suporte do motor de passo de modo a ligá-lo à placa principal.

Colocação do suporte do motor de passo na placa principal

31. Repetir os passos 28, 29 e 30 para os outros quatro suportes do motor de passo.

32. Colocar o motor de passo no suporte do motor de passo, pondo primeiro os cabos através do furo superior e inferior do suporte. Depois, apertar/colocar o motor de passo até se ouvir um click para garantir que este está fixo na posição correta. NOTA: a ligação dos cabos depende do driver, não é confiável usar as cores dos cabos.

Posição de entrada dos cabos

33. Repetir o passo 32 para os outros quatro motor de passo.

Posicionamento do motor de passo

34. Colocar a correia na polia.

35. Ligar a polia (com a correia) ao motor de passo.

Colocação do motor de passo com a correia

36. Apertar a polia do motor de passo.

Apertamento da polia

37. Ajustar a posição do suporte do motor de passo de modo a garantir que a correia está à tensão.

Suporte do motor de passo demasiado perto da corrente (correia está com folga)

38. Apertar os parafusos do suporte do motor de passo de modo a fixá-lo.

Segurador do motor de passo na posição correta

39. Repetir os passos 34, 35, 36, 37 e 38 para os outros quatro suportes dos motores de passo.

40. Montagem Completa.

Circuito Eletrónico

Este kit experimental tem duas componentes eletrónicas principais, (i) os drivers para os motores do motor de passo e (ii) a fonte de luz e deteção.

Montagem da Componente Eletrónica

1. Verificar se todas as peças necessárias à montagem da componente eletrónica estão disponíveis.

Peças necessárias para a montagem da componente eletrónica.

2. Pegar na base esquerda da componente eletrónica (verificar a imagem abaixo) e usar um ferro de solda para inserir os insertos roscados nos furos da base, através do processo de inserção térmica.

Base esquerda da componente eletrónica.
Inserção térmica.

3. Pegar na caixa do Arduino Mega (verificar a imagem abaixo) e aparafusá-la à base da componente eletrónica.

Caixa do Arduino Mega.

4. Usar um ferro de solda para inserir os insertos roscados nos furos da caixa, através do processo de inserção térmica.

Furos da caixa do Arduino Mega.

5. Pegar num dissipador de calor.

Dissipador de Calor.

6. Retirar a película de papel.

Retirar a película de papel.
Retirar a película de papel.

7. Colar o dissipador de calor ao driver do motor de passo.

Colagem do dissipador de calor.
Colocação do dissipador de calor.

8. Repetir os passos 1, 2 e 3 para os cinco drivers.

9. Colocar o driver do motor de passo na placa RAMPS 1.4 (RepRap Arduino Mega Pololu Shield)

Placa RAMPS 1.4.
Placa RAMPS 1.4 (vista do software).

10. Certificar que o driver fica bem colocado, ou seja que a ligação ao ground está como indicado na imagem e que o parafuso (potenciómetro) se encontra do lado oposto à fonte de alimentação (no caso dos drivers verdes ou encarnados) ou do lado da fonte de alimentação (no caso dos drivers roxos).

Modelos de drivers.
Colocação do driver roxo (vista do software).
Colocação do driver verde e roxo.

11. Repetir os passos 5 e 6 para os cinco drivers.

RAMPS 1.4 com os drivers colocados.

12. Ligar os interruptores de curso aos cabos.

Ligação dos interruptores de curso aos cabos.

13. Colocar os interruptores de curso no segurador dos interruptores. Garantir que se houve um "click".

Posicionamento dos interruptores no segurador.

14. Ligar os cabos dos motores de passo e dos interruptores de curso aos drivers através da placa RAMPS 1.4. Verificar a ligação dos cabos aos pinos da placa de acordo com a informação presente na subsecção Drivers dos motores de passo.

Colocação dos cabos na placa RAMPS 1.4.
Colocação dos cabos na placa RAMPS 1.4 (vista do software).
Cabos dos interruptores de curso (verde) e cabos dos motores de passo (azul) (vista do software).

15. Montar o circuito elétrico do fotodiodo e do detetor.

File:Photodiode circuit.jpg
Esquema do circuito elétrico do fotodiodo e do detetor.

16. Colocar o circuito elétrico no canto da caixa, posicionando-a de acordo com os furos, e aparafusá-la.

Posicionamento dos interruptores no segurador.

17. Pegar na parte de cima da caixa do Arduino Mega e aparafusá-la à parte de baixo (ter atenção aos cabos ao fechar a caixa).

Parte de cima da caixa do Arduino Mega.

18. Repetir o passo 2 para a base direita.

Base direita da componente eletrónica.

19. Colocar a fonte de alimentação na base direita e aparafusá-la.

Fonte de alimentação.
Vista de cima da fonte de alimentação.

20. Pegar na parte de baixo da caixa do Raspberry Pi e repetir o passo 4.

Caixa do Raspberry Pi.

21. Aparafusar o Raspberry Pi à caixa.

Raspberry Pi.

22. Prender a parte do meio da caixa do Raspberry Pi à parte de baixo.

23. Colocar a tampa para fechar a caixa.

Drivers dos motores de passo

Numeração das ligações a cabo do motor de passo

Os drivers dos motores de passo podem ter múltiplos designs de output de acordo com cada produtor. Os pinos dos motores de passo estão numerados de 1 a 6, da esquerda para a direita da vista frontal (eixo do montor de frente e conector virado para baixo). A posição dos drivers no arduino relaciona-se com os motores de passo de acordo com o seguinte esquema:

Ligação do driver para o motor de passo
5 3 N/A
1 2 4

Usando um cabo próprio, as ligações devem seguir as indicações da tabela em baixo:

Ligações do driver para o motor de passo
Pinos da motherboard Cor dos cabos Pino do motor de passo (A4988) Pino do motor de passo (DRV8825)
2B Encarnado 6
2A Verde
1A Preto
1B  Azul 4

Fonte de luz e deteção

Esquema para a ligação LED PWM com o pino A4 da placa de controlo e do filtro.

O LED encarnado é alimentado por um pino de output PMW (A4) da placa de controlo principal, o que permite uma intensidade da luz variável. O PWM padrão da placa tem uma modulação de 490Hz em passos de 1/256, permitindo uma resolução inferior a 0.5%.

Após passar pela cascata de polarizadores, o sinal é detetado por um fotodiodo. Este fotodiodo é polarizado inversamente com um resistor ligado ao ground para gerar um sinal nulo quando não há luz presente.

Esta frequência tem de ser filtrada por um filtro RC de primeira ordem passa-baixo. Como a constante do tempo é ~1s, é necessário adiar a primeira aquisição para a configuração das tensões do circuito. Assim sendo, o sinal varia suave e lentamente devido à rotação dos polarizadores, e a sobreamostragem está em vigor, é necessário um tempo de estabilização muito menor.

Caminho Óptico

Caminho óptico mostrando o sistema de colimação que permite que a luz passe através da cascata de polarizadores em raios paralelos.

O caminho óptico consiste numa fonte de luz (1) (LED encarnado) colocado no ponto focal de uma lente semiesférica (2) onde os raios de luz são colimados num feixe de luz paralelo.

Depois a luz é polarizada por um polarizador fixo (3) antes de entrar na cascata de polarizadores com inclinação variável (4). Esta cadeia escurece a luz de acordo com cada ângulo do polarizador e, em seguida, passa pela segunda lente para focalizar no detetor, um fotodiodo (6).

Antes de chegar ao fotodiodo, a luz pode passar por um filtro encarnado (5) para diminuir a largura de banda e limitar o ruído externo. Este filtro não é totalmente necessário e pode ser substituído por um papel celofane encarnado ou simplesmente retirado no caso de uma estrutura plástica totalmente opaca.

Alinhamento do Caminho Óptico

A estrutura principal do kit experimental tem a luz a propagar-se em raios paralelos através da cascata de polarizadores. Estes raios, posteriomente, são centralizados no sensor (fotodiodo). Para obter uma boa leitura da relação sinal-ruído é crucial ter esta estrutura perfeitamente alinhada. Assim sendo, a posição linear do LED emissor e do fotodiodo deve ser ajustada de acordo com o seguinte procedimento:

  1. Primeiramente, montar a fonte de luz (LED) e as lentes da estrutura;
  2. Alimentar o LED e seguir a imagem circular emergente do output, ex. projetá-la numa parede afastada um par de metros;
  3. Mover a posição do LED de modo a obter uma imagem de output o mais próxima do tamanho do círculo de saída possível (~30mm);
  4. Instalar a estrutura para a cascata de polarizadores sem colocar as lentes ou películas polarizadoras;
  5. Para focar a luz no fotodiodo, colocar a segunda lente de colimação;
  6. Usando um voltímetro para ler a intensidade da luz recebida pelos terminais do fotodiodo, mover para trás e para a frente a posição do fotodiodo a fim de maximizar o sinal;
  7. Colar firmemente a fonte de luz e o fotodiodo nas suas posições finais.

Calibração do Caminho Óptico

Assim que a montagem mecânica estiver completa, é necessário calibrar a posição absoluta de cada polarizador; efetivamente todos os polarizadores vão ter um pequeno offset, resultando num erro sistemático. Deste modo, é importante anotar os valores dos ângulos que maximizam a transmissividade.

O primeiro polarizador é fixo e deve ser posicionado com um pequeno offset com o intuito de evitar começar a experiência a partir de um máximo, permitindo uma fácil observação de tal máximo. Aconselha-se colocá-lo entre os 15 e os 30 graus e prendê-lo eficazmente, se necessário usando até cola. Depois, começar o procedimento de calibração inserindo o segundo polarizador e rodando-o até que os máximos serem detetados e medidos (normalmente são dois). Anotar o seu valor e deixar o segundo polarizador nessa posição. De seguida, inserir o terceiro polarizador e repetir o procedimento de deteção e anotação dos máximos. Repetir este passo para todos os restantes polarizadores. Todas as vezes que lentes ou películas polarizadoras são instaladas precisam de ser bem fixas ou coladas. No caso do uso da cola, garantir que não danifica as lentes/películas polarizadoras.

No final, uma tabela com os máximos ângulos de transmissão é obtida, indicando o valor de referência para a intensidade máxima na cascata de polarizadores.

Posteriormente, ao realizar experiências, os valores de offset devem ser tidos em conta de modo a eliminar o erro sistemático do sistema.

Software

Para utilizar corretamente a experiência, os comandos e a recolha de dados têm de estar operacionais. Isto pode ser alcançado de duas formas, atuando através da ligação série ao Arduino Mega.

O firmware existente no Arduino é capaz de (i) configurar a experiência, (ii) executar e recolher os dados gerados, e (iii) executar algumas funções especializadas de forma a testar, calibrar e manter a experiência. Para interagir com o firmware, pode-se usar um código proxy em Python (camada de software de alto nível) capaz de comunicar com o servidor FREE, ou um emulador de terminal como o Minicom, disponível para Linux, que permite enviar e receber dados através da ligação série.

Proxy FREE do Raspberry

O Raspberry Pi é responsável por transmitir o feed de vídeo da experiência e estabelecer a comunicação com o Servidor FREE utilizando uma interface proxy. O FREE aloja a interface gráfica do utilizador (GUI) para os clientes. Esta secção fornece uma visão geral concisa do procedimento utilizado para controlar todos os componentes eletrónicos através do Arduino, bem como dos protocolos de comunicação entre o Arduino e o Servidor FREE.

Modelo de comunicação entre o Servidor FREE e o Raspberry PI

A comunicação entre o servidor e a experiência segue o protocolo estruturado do e-lab que permite a interação e troca de dados em tempo real. O servidor central, Exp Server, atua como um intermediário entre os utilizadores e o aparelho experimental (RPi Server). Os utilizadores interagem com o Exp Server através de uma interface web feita com Django, uma framework web de alto nível em Python, para configurar e controlar os parâmetros da experiência, enquanto o Exp Server retransmite diretamente estes comandos para a configuração experimental.

A comunicação entre o Exp Server e o RPi Server ocorre através da internet utilizando mensagens no formato JSON, garantindo flexibilidade entre diferentes configurações experimentais. A autenticação é realizada na fase de ligação, onde o RPi Server transmite um ID e uma chave secreta para verificação. Uma vez autenticado, o Exp Server envia um ficheiro de configuração específico da experiência para o RPi Server, que depois estabelece a comunicação com o controlador local utilizando o protocolo predefinido [7]. Durante toda a experiência, o RPi Server troca continuamente atualizações de estado, resultados experimentais e mensagens de erro com o servidor XP, garantindo uma operação sincronizada e acessibilidade de dados em tempo real para os utilizadores.

Modelo de comunicação entre o Raspberry PI e o Arduino Mega

Para permitir uma comunicação perfeita entre o Arduino e o Raspberry Pi 4, foi implementado o protocolo ReC Generic Drive 11, permitindo ao utilizador externo ter controlo total sobre a experiência e o seu estado através de um conjunto de comandos. O ReC Generic Drive é um protocolo de comunicação genérico concebido para laboratórios remotos, facilitando a interação entre um controlador de software (driver) e o hardware experimental. Permite uma comunicação contínua através de portas série (RS232), utilizando mensagens estruturadas onde os comandos do driver estão em minúsculas e as respostas do hardware em maiúsculas.

O protocolo garante a sincronização através do "handshaking" de mensagens e do tratamento de tempos limite (timeouts), suportando funções como identificação, configuração, transmissão de dados, configuração da experiência e relatório de erros.

Ao ler a porta série do Arduino a uma taxa de transmissão (baud rate) de 115200 bits por segundo, o utilizador envia uma cadeia de bits (terminando com o carácter \r).

Instruções de Configuração para Administradores

Para implementar uma nova instância da experiência do multi-polarizador, o proxy do Raspberry Pi e o firmware do Arduino devem ser configurados e compilados. Siga estes passos para garantir uma inicialização correta:

  1. Descarregar o repositório da experiência via SSH:
    git clone https://github.com/farrucho/multi-polarizer.git
  2. Modificar o ID da experiência em `main.cpp` para corresponder à configuração do servidor FREE:
    expr.begin("ELAB_FIVEPOLARIZER");
  3. Ajustar as direções dos motores e a tensão de referência em `user_define.cpp`:
    uint8_t resetDir = HIGH; // Direção para acionar o interruptor. Teste movendo para trás para garantir que aciona corretamente.
    uint8_t dirToTop = LOW;
    int vrefMode = 1;
  4. Identificar a porta série do Arduino:
    ls /dev/tty*
    Atualizar o ficheiro `platformio.ini` com a porta correta (ex., `monitor_port = /dev/ttyACM0`).
  5. Compilar e carregar o firmware utilizando o PlatformIO a partir da pasta `e-lab`:
    pio run -t upload -t monitor -t clean
  6. Configurar o script de arranque do proxy editando `/etc/rc.local`:
    sudo nano /etc/rc.local

    Adicionar as seguintes linhas antes de `exit 0`:

    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
      printf "My IP address is %s\n" "$_IP"
    fi
    sleep 120
    cd /home/elab/RPi_Proxy_fivepol
    su elab -c "sh start-wp.sh &"
  7. Ativar o serviço `rc-local` no arranque utilizando o `systemctl`:
    sudo systemctl enable rc-local
    sudo systemctl start rc-local

---

Firmware

A programação foi feita em linguagem C++ sem recurso a bibliotecas externas. Para declarar um componente no código, basta fornecer o pino de entrada correspondente e aceder à função de ativação (enable) para o inicializar, bem como à função `isTrigger` para verificar se o valor lógico lido corresponde ao estado de acionamento do componente. Neste caso particular, o interruptor é ativado com um sinal LOW (baixo). Uma vez que todos os objetos e respetivos componentes precisam de ser inicializados e desligados, cada um possui funções correspondentes de enable/disable. Os componentes ligados a pinos de leitura simples, declarados como `pinMode` (como interruptores e fotodíodos), não requerem uma função de desativação, pois o `pinMode` não impede a leitura dos pinos, servindo antes para definir o tipo de entrada a ser processada.

De modo a rodar os motores de passo, a operação consiste em enviar um pulso cada vez que se pretende uma rotação de 1.8º (0.36º efetivos). Como diferentes valores de RPM requerem diferentes intervalos de pulso, a frequência de pulsos enviados tem de ser calculada em conformidade. Para executar uma sequência discreta de passos com base num dado ângulo em graus, foi implementada a função rotate. O motor roda para o múltiplo inteiro inferior mais próximo de 1.8º em relação ao ângulo fornecido.

O intervalo de aquisição de dados é crucial para a experiência final, uma vez que o objetivo é otimizar a utilização, minimizando os tempos de espera na recolha da intensidade da luz e dos dados do ângulo de varrimento. Para contornar isto, foi utilizada uma RPM global de 600 rotações por minuto. Com um limite de varrimento de 324º, o tempo de aquisição de dados medido experimentalmente para varrer um ou mais polarizadores em simultâneo foi de aproximadamente 40 segundos.

Para refinar ainda mais as leituras de tensão do fotodíodo, foi implementada uma média aritmética de N pontos na função de leitura de tensão do fotodíodo. Ao calcular a média aritmética sobre 13 pontos do valor medido, o desvio padrão desta média reduz o desvio padrão original em ≈ 27.14%. Esta redução foi considerada aceitável para a experiência, uma vez que o ajuste de dados efetuado foi bem-sucedido.

Depuração pelo Utilizador e Comandos Série

Para testes manuais de hardware e calibração, os administradores podem enviar comandos série diretos para o Arduino utilizando um emulador de terminal como o Minicom.

Ligue-se ao terminal utilizando a porta correta identificada anteriormente:

minicom -D /dev/ttyACM0

Ao enviar um ponto de interrogação `?` e pressionar Enter, o firmware irá devolver um menu de ajuda listando todos os comandos disponíveis. Abaixo encontra-se a explicação para cada comando suportado:

Comando Parâmetros Descrição
`cur` Nenhum Retorna os parâmetros configurados atualmente.
`str` Nenhum Inicia o varrimento da experiência com base nos parâmetros configurados previamente.
`stp` Nenhum Para imediatamente a experiência e interrompe todos os movimentos dos motores.
`rst` Nenhum Repõe e move todos os motores de passo para a posição inicial (home), recuando até que os respetivos interruptores de fim de curso sejam acionados.
`ids` Nenhum Retorna a string de identificação do hardware e do firmware.
`cfg` `theta1 theta2 theta3 theta4 theta5` Configura as posições iniciais ou alvo (em passos) para cada um dos 5 polarizadores. Os limites são restringidos por `MAXIMUM_STEP`.
`led` `on [0:255]` ou `off` Controla a intensidade do LED vermelho utilizando Modulação por Largura de Pulso (PWM). O valor varia de 0 (desligado) a 255 (brilho máximo).
`lamp` `on [0:255]` ou `off` Controla a intensidade da fonte de luz auxiliar utilizando Modulação por Largura de Pulso (PWM). O valor varia de 0 (desligado) a 255 (brilho máximo).
`set maxstep` `[0:1000]` Define o limite mecânico máximo permitido para os polarizadores. Por predefinição, 900 passos correspondem ao limite físico de 900*0.36º=324.0º.
`set vref` `[1:3]` Ajusta a tensão de referência do Conversor Analógico-Digital (ADC) para evitar a saturação do fotodíodo dependendo da intensidade da luz. (1: Vref = 1.1V, 2: Vref = 2.56V, 3: Vref = 5V).
`move forward` `polarizer[1:5] steps[0:MAXIMUM_STEP]` Roda manualmente um polarizador específico para a frente pelo número de passos designado.
`move backward` `polarizer[1:5] steps[0:MAXIMUM_STEP]` Roda manualmente um polarizador específico para trás pelo número de passos designado.
`go to origin` `polarizer[1:5]` Comanda um único polarizador específico a regressar à sua posição zero/inicial até acionar o seu interruptor.

Links