segunda-feira, 30 de março de 2015

Desenvolvimento de espectrofotômetro com Arduino

17/04 - Processo de melhoria
Após os primeiros testes preliminares, decidimos tentar alguns aprimoramentos para nosso protótipo. A primeira delas envolve a programação do servo. Medimos a distância do eixo do servo em relação ao LDR = 3,9 cm. Como o servo segue um movimento circular, decidimos avaliar o espaço percorrido pelo servo, usando a fórmula de comprimento da circunferência (Cc=2.Pi.r) e, depois, por meio de uma regra de 3, calcular o espaço. Concluímos que o espaço percorrido pelo sensor no orifício era de 3,4 cm, a mesma distância total dos pontos medidos pelo colimador. 
Isso nos motivou a refazer o experimento aumentando o ângulo de movimento do servo usando como base as medidas do experimento do led com luz: PI = 0, PC = 2,4 cm e PS = 6 cm, correspondendo a posição do servo inicial em 80º e terminando o movimento em 150º, em apenas um movimento, pois, no teste anterior, o servo ficava indo e voltando, gerando vários números. Para fazer isso mudamos a programação, colocando o movimento do servo no setup. Como toda vez que você liga o Serial Monitor o Arduino reseta, fica mais fácil fazer a curva de leitura. A parte da programação que foi mudada foi em negrito. Não utilizamos amostra neste teste, somente nossa cubeta (tubo de ensaio) vazio.

#include <Servo.h> 

Servo myservo;   
int pos = 80;   

void setup() 
  myservo.attach(9); 
 Serial.begin (9600) //iniciar a comunicação serial
  for(pos = 80; pos <= 175; pos += 1)
  {                                   
    myservo.write(pos);  
    delay(15);                  
//leitura do LDR
   int ldr = analogRead (A0);
//envia dados para o serial monitor
  Serial.print (pos);
  Serial.print ("\t");
  Serial.println ("ldr");
  } 

void loop() 
// Vazio

[Gráficos]

Após realizar este experimento e  analisar os gráficos, decidimos experimentar realizar os experimentos com as informações que tínhamos sobre a posição dos espectros, gerando o gráfico apenas nos pontos onde se formava o espectro, com 3 leituras - PI, PC e PS. 
Por conta disso precisamos calcular as posições onde o servo faria a leitura do sensor de LDR conforme abaixo:

Ponto Inferior (PI) - 0 cm = 80 º até 0,5 cm = 87º
Ponto Central (PC) -  2 cm = 116º até 2,5 cm = 123 º
Ponto Superior (PS) - 4,5 cm = 153º até 5,0 cm = 160º

Segue o programa do experimento realizado;
#include <Servo.h> 

Servo myservo;   
int pos = 80;   

void setup() 
  myservo.attach(9); 
 Serial.begin (9600) //iniciar a comunicação serial
Serial.println (Ponto Inferior);
  for(pos = 80; pos <= 87; pos += 1)
  {                                   
    myservo.write(pos);  
    delay(15);                  
//leitura do LDR
   int ldr = analogRead (A0);
//envia dados para o serial monitor
  Serial.print (myservo.read ());
  Serial.print ("\t");
  Serial.println ("ldr");
  } 
delay (500); // este delay serve para identificar o início da leitura do ldr

Serial.println (Ponto Central);
  for(pos = 116; pos <= 123; pos += 1)
  {                                   
    myservo.write(pos);  
    delay(15);                  
//leitura do LDR
   int ldr = analogRead (A0);
//envia dados para o serial monitor
  Serial.print (myservo.read ());
  Serial.print ("\t");
  Serial.println ("ldr");
  } 
delay (500); // este delay serve para identificar o início da leitura do ldr

Serial.println (Ponto Superior);
  for(pos = 153; pos <= 160; pos += 1)
  {                                   
    myservo.write(pos);  
    delay(15);                  
//leitura do LDR
   int ldr = analogRead (A0);
//envia dados para o serial monitor
  Serial.print (myservo.read ());
  Serial.print ("\t");
  Serial.println ("ldr");
  } 
delay (500); // este delay serve para identificar o início da leitura do ldr


void loop() 
// Vazio

[Colocar os gráficos aqui]


10/04 - Desenvolvimento do primeiro protótipo
Após 2 semanas de trabalho árduo desenvolvemos nosso primeiro protótipo. Primeiro fizemos um colimador usando um tubo de pvc, um laser de loja de bugiganga e uns parafusos para firmá-lo. O objetivo desse aparelho foi determinar a distância do sensor em relação a nossa "cubeta" (tubo de MM), onde está nossa rede de difração (CD), que foi de 3 cm e a distância.


Após essa determinação, usamos um suporte com uma folha branca para determinar a distância entre os sulcos do CD (d), conforme esta metodologia: http://www.pucsp.br/webduino/experimentos/espectrofotometro-remoto-automatizado/faca-voce-mesmo.html.

Identificamos 3 pontos na superfície: o ponto central (PC), maior marca do laser, o ponto superior (PS) e o ponto inferior (PI). A distância entre o PI e o PC foi igual 1,9 cm e a distância entre o PC e o PS foi de 1,5 cm. A distância entre o PI e o PS é igual, portando, a 3,4 cm. Agora estamos na fase de cálculos do d, conforme a fórmula abaixo:
 para N=1.
Fonte: http://www.pucsp.br/webduino/experimentos/espectrofotometro-remoto-automatizado/faca-voce-mesmo.html

Após estes testes não resistimos a tentação de ajustar nosso espectrofotômetro. A primeira coisa que identificamos foi que, nossas distâncias, estavam erradas. Tentamos calcular o ponto focal de nossa lente de 75 mm mas não encontramos um método teórico para isso. Então determinamos o ponto focal da lente usando o método "tabajara": ligamos o led e fomos movendo a lente até achar o ponto focal, o que deu uma distância de 2 metros. Como nosso "equipamento" estava ficando imenso pois estava com quase 3 metros, decidimos tentar usar 2 lentes convergentes, ajustando o foco. Isso fez com que o equipamento ficasse bem menor, 1,5 metros, e resolvesse o problema do tamanho.
Após esse ajuste do ponto focal, decidimos então medir a distância que o espectro formava no anteparo, já sabendo que a distância entre a cubeta e o sensor deveria ser em torno de 3 cm, obtido no experimento do colimador e sulcos do CD. Posicionamos as "partes" do nosso espectro e ajustamos as lentes para o ponto focal ficar sobre a nossa rede de difração (CD) e obtivemos a imagem abaixo:


Como se pode ver, o espectro do PI está meio torto. Mas obtivemos 2 espectros, nas posições encontradas nas posições dos dados obtidos no teste do colimador. Usando a régua, conseguimos obter a posição aproximada do espectro - o espectro inferior está a 1,9 cm do ponto central (PC) e tem cerca de 5 mm, e o espectro superior está a 3,1 cm do PC e tem cerca de 0,5 cm. 
Com estes dados resolvemos automatizar nosso sensor do espectro usando um servo-motor turnigy de posição tg9 que, além de barato, fornece sua posição em graus e tínhamos em nosso "estoque":
Especificação - Servo-motor de posição Turnigy TG9
Dimensão: 23x12.1x21.4mm
Torque: 1.5kg/cm (4.8V), 1.7kg/cm (6.0V)
Velocidade de operação: 0.13sec/60 grau (4.8V), 0.12sec/60 grau (6.0V)
Tensão de operação: 4,8 ~ 6.0V
Faixa de temperatura:-20-60C
Largura de banda Dead: 8US
 Fonte: http://www.hobbyking.com/hobbyking/store/__9549__Turnigy_TG9e_9g_1_5kg_0_10sec_Eco_Micro_Servo.html

Fixamos o LDR no borne do servo. A ideia é controlar o movimento do servo e assim, ter uma leitura precisa da intensidade da luz sobre o LDR. A primeira fase foi ajustar o servo ao espaço do orifício da cubeta. Para isso, usamos a tentativa e erro. Após esse ajuste, fizemos os sensor se deslocar por todo o espaço do orifício determinando o espaço de abertura como sendo de 50º.
Em relação a programação, usamos como base um dos examples do Arduino, o sweep, usando a biblioteca Servo, como base a adicionamos algumas linhas de comando, que estão em negrito:

/* Sweep
 by BARRAGAN <http://barraganstudio.com> 
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://arduino.cc/en/Tutorial/Sweep
*/ 

#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 
                // twelve servo objects can be created on most boards

int pos = 90;    // variable to store the servo position 

void setup() 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
 Serial.begin (9600) //iniciar a comunicação serial

void loop() 
  for(pos = 90; pos <= 140; pos += 1) // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
//leitura do LDR
   int ldr = analogRead (A0);
//envia dados para o serial monitor
  Serial.print (myservo.read ());
  Serial.print ("\t");
  Serial.println ("ldr");
  } 
  for(pos = 140; pos>=90; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
//leitura do LDR
   int ldr = analogRead (A0);
//envia dados para o serial monitor
  Serial.print (myservo.read ());
  Serial.print ("\t");
  Serial.println ("ldr");
  } 

Duas observações:
1- Colocamos a leitura do LDR após o movimento do servo para que o sensor pudesse ser estabilizado e a leitura ser mais precisa.
2- Os dados gerados pelo serial monitor estão em posição inversa, ou seja, usamos o resistor em pull-down e, quanto mais luz o led receber, menor o valor de leitura no serial monitor. Quanto maior o valor lido, menos luz recebida no sensor.

Neste vídeo a gravação já é de um dos testes que fizemos, usando suco de maracujá. Primeiro "calibramos" nosso espectro com água e fizemos uma leitura. Depois fizemos o mesmo processo com o suco de maracujá para comparar. Os resultados de intensidade luminosa x posição do servo estão no gráfico abaixo, feito em excel (obs: usamos o Ctrl C, Ctrl V para copiar as informações do Serial Monitor, marcando o ponto de início e término)
Após esse primeiro teste decidimos tentar usar o led RGB para tentar obter uma cor mais branca do led pois observamos que o mesmo aparentava, nas imagens, um tom azulado, conforme o vídeo abaixo:
Concluímos que o Led RGB não é eficiente para este processo pois os dados não foram conclusivos - quando usamos o anteparo de papel não formou o espectro na posição que havíamos medido.

28/03 - Início do projeto
Devido a uma demanda de nossa equipe de iniciação científica que precisa de um espectrofotômetro para desenvolver o projeto do sobre os efeitos do som audível sobre leveduras. Inicialmente estudamos a possibilidade de uma parceira com as faculdades da região mas não obtivemos resposta.
Pesquisando na internet encontramos duas boas referências sobre a construção de um espectrofotômetro de baixo custo. A primeira (http://www.abq.org.br/cbq/2013/trabalhos/6/2761-16788.html) mostrava o desenvolvimento de um espectrofotômetro caseiro usando materiais do cotidiano. Demos o estilo "Pequenos Cientistas" usando Arduino e outras peças do nosso estoque e o resultado pode ser visualizado abaixo:
Projeto de um espectrofotômetro










1- Montagem da suporte da cubeta: usando uma embalagem de MM´s cortada fizemos um orifício para a passagem da luz e um espaço para colocar a rede de difração (CD).




2- Montagem da rede difração: retirada do adesivo do cd e corte de uma parte longitudinal para formar a rede de difração.



 3- Montagem da rede de difração no suporte da cubeta.

 4- Montagem do led emissor de luz branca e do receptor - aqui usamos um fotodiodo com filtro para luz natural.
 5- Montagem do suporte para a lente convergente que vai concentrar a luz do led.


 6- O espectrofotômetro montado. O fotodiodo foi substituído por um LDR. Ainda sem o ajuste focal.


 7- Os espectros obtidos de uma amostra de água.
 8- Proteção da luz ambiente do LDR usando um tubo de caneta envolvido com fita isolante.

 9- Os primeiros resultados. Ainda sem obter um espectro visível capaz de se fotografar.

 10 - Testando um led vermelho e o espectro gerado.

Vídeo da leitura do espectro usando o simplot e movimentando o LDR.
 

A segunda referência (http://www.pucsp.br/webduino/experimentos/espectrofotometro-remoto-automatizado/faca-voce-mesmo.html) faz uso de um motor de passo e será nossa próxima meta, com a diferença que começaremos com servo-motores. Em breve publicaremos o cronograma do projeto.

Fontes:
http://www.instructables.com/id/A-simple-DIY-spectrophotometer/
http://astro.u-strasbg.fr/~koppen/spectro/experimtse.html
http://en.wikipedia.org/wiki/Absorption_spectroscopy#Absorption_spectrum

2 comentários:

  1. Amigo, acredito que em casas de óptica principalmente as de pequeno porte e possível pedir a eles que façam lentes com distâncias focais definidas. Uma certa vez tive interesse em fazer um telescópio tipo Galileu e precisava de um jogo composto por duas lentes, não me recordo os parâmetros das mesmas, mas precisava de uma mono convexa e uma bi convexa com diâmetros de 50mm e 20mm algo do tipo na época pesquisando encontrei a solução de encontrar um optometrista (pessoas que fazem lentes de óculos) encontrei um mas a empresa era grande não deram muita atenção, mas se você conhece algum de uma cidade pequena ele terá interesse em te ajudar.

    ResponderExcluir
  2. Hola que luz artificial me recomiendas para asemejarse a la luz natural y poder descomponer las longitudes de onda en el prisma

    ResponderExcluir