#include <Stepper.h>
#define ECHOPIN 6 // Pin to receive echo pulse
#define TRIGPIN 7 // Pin to send trigger pulse
char leitura;
char leitura2;
const int stepsPerRevolution = 64; // passos por volta (28BYJ48)
// Pinos utilizados para a comunicacao
// (8 e 9 de um lado, 10 e 11 do outro)
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
int i,VLDR,;
float ,MVLDR,dX,componda,D,d,x,xo;
char leitura;
void setup ()
{ Serial.begin(9600);
pinMode(A0, INPUT);//leitura do LDR
pinMode(12, OUTPUT);//led vermelho
pinMode(11, OUTPUT);//led verde
pinMode(10, OUTPUT);//led azul
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
Serial.println("Digite I para iniciar o ponto a posição inicial de x");
Serial.println("Digite L para obter as leituras de posição e comprimento de onda");
// velocidade (60 RPM):
myStepper.setSpeed(60);
// initialize the serial port:
Serial.begin(9600);
}
void loop()
{
leitura = Serial.read();//lê o que foi digitado
if (leitura =='A') { // sentido horario
// rotacao em sentido horario
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(1);
}
if (leitura =='S') { // Sentido anti-horario
//Agora em direcao oposta, os 200 passos
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(1);
}
VLDR=analogRead(A0);// leitura da tenção sobre o LDR entre 0 a 1023, que equivale de 0 a 5V
x=- //equação que transforma os passos em posição no eixo x
dX=x-xo; // dá a diferença entre a posição inicial e posição atual
dX=sqrt(dX*dX); // dá o módulo da diferença da posição
componda=(d*dX)/(sqrt(dX*dX+D*D)); // calcula o comprimento da onda
if(componda<450)// determina que os leds fiquem apagados para comprimentos de ondas menores que 450nm
{
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(12,LOW);
}
if (componda>725) //desliga os leds para frequencias acima de 750nm
{
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(12,LOW);
}
if (leitura == 'I')// Dá as condições iniciais quando teclar a tecla I
{
VLDR=analogRead(A0);
digitalWrite(TRIGPIN, LOW); // Set the trigger pin to low for 2uS
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH); // Send a 10uS high to trigger ranging
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW); // Send pin low again
float tempo, distancia
tempo= pulseIn(ECHOPIN, HIGH);
distance= ((tempo * 340)/10000)/2; // Distância entre o anteparo e a rede de difração
Serial.println(distance);
delay(50);
d=1687.3;//rede de difração em nm
xo=
}
if (leitura == 'L')//leitura dos dados
{
VLDR = analogRead(A0);
VPOT = analogRead(A1);
MVPOT=VPOT;
MVLDR=VLDR;
for (i=0;i<=100;i++)// realiza 100 medias consecutivas dos dados de entrada
{
VLDR = analogRead(A0);
MVLDR=(MVLDR+VLDR)/2;//devolve a média dos 100 valores do LDR
delay (20);
}
x=
dX=x-xo;
dX=sqrt(dX*dX);
componda=(d*dX)/(sqrt(dX*dX+D*D));
Serial.print(VLDR); //envia o valor da tenção do LDR para o tela
Serial.print(" ");
Serial.print(dX,2); // Envia o valor da distancia entre o ponto central e a primeira franja de difração para a tela
Serial.print(" ");
Serial.print(componda,2);// envia o valor do comprimento da onda para a tela
Serial.println ( "\t");
if (componda>=601,componda<=725)// acende o led vermelho para indicar a faixa do vermelho da franja de difração
{
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(12,HIGH);
}
if (componda>=501,componda<=600)//acende o led verde para indicar a faixa do verde da franja de difração
{
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
}
if (componda>=450,componda<=500)//acende o led azul para indicar a faixa do azul da franja de difração
{
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
}
}
}
segunda-feira, 5 de novembro de 2012
Kit para estudo do comportamento ondulatório da Luz com Arduino
Código de programação:
Assinar:
Postagens (Atom)