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

segunda-feira, 23 de março de 2015

Reportagem Revista Reagir

Essa reportagem saiu neste fim de semana na revista REAGIR, em comemoração aos 50 anos de nossa cidade...