sexta-feira, 19 de agosto de 2011

Photogates com LDR

Acabo de montar uma sequencia de LDRs para funcionar como photogates!
O circuito é simples:

Um resistor associado ao LDR em serie. Com LDR no GND e Resistor no +V. Diante de cada LDR colocamos um LED.

Inicialmente faça as leituras nas portas analógicas em cada LDR para verificar o limite que eles devem operar.


Estes limites são importantes porque eles definirão o acionamento da contagem de tempo e o instante de bloqueio em cada LDR.

O código fonte para três photogates segue abaixo
-----------------------------------------------------------------------

int LDR1; // define a variável para o 1o LDR
int LDR2; // define a variável para o 2o LDR
int LDR3; // define a variável para o 3o LDR
int cont=0; // Flag que será utilizada para estabelecer as condições de cada de medida (um //contador)

#define LIMITE_INFERIOR_LDR1 700 // define o limite de acionamento do 1o sensor
#define LIMITE_INFERIOR_LDR2 200 // define o limite de acionamento do 2o sensor
#define LIMITE_INFERIOR_LDR3 100 // define o limite de acionamento do 1o sensor

unsigned long TempoInicial; // variáveis de tempo
unsigned long tempo1; //variáveis de tempo
unsigned long tempo2; // variáveis de tempo


void setup() {
Serial.begin(9600);
pinMode(A0, INPUT); //Ativa pino Analógico 0 para entrada
pinMode(A1, INPUT); //Ativa pino Analógico 1 para entrada
pinMode(A3, INPUT);
}

void loop() {
LDR1= analogRead(A0);
LDR2=analogRead(A1);
LDR3=analogRead(A2);

if (LDR1 > LIMITE_INFERIOR_LDR1 ) { // condição de disparo
TempoInicial = millis();
cont=1; // contagem inicial que será referencia para o próximo LDR
}

if (LDR2 > LIMITE_INFERIOR_LDR2 && (cont==1)) { // condição para leitura de tempo //e apenas apos a leitura do LDR1 " && cont==1 "
tempo1=(millis() - TempoInicial); // faça a diferença do tempo em relação ao tempo //inicial
Serial.println(tempo1);
cont=2;
}
if (LDR3 > LIMITE_INFERIOR_LDR3 && (cont==2)) { // duas condições: limite para //disparo e apos a leitura do LDR2 "&& cont==2" //
tempo2= (millis()-TempoInicial); // faça a diferença entre este instante e o inicial
Serial.println(tempo2);
cont=3;
}
}

------------------------------------------------------------------ Divirtam-se :) :) :)


quinta-feira, 18 de agosto de 2011

Medindo tempo com Photogates no Arduino

O circuito que deve ser utilizado com este código consiste em dois fototransitores conectados através de um resistor em duas portas digitais, no exemplo portas 11 e 12
Quanto a entrada digital for para o estado alto iniciamos a leitura de tempo. Assim que a segunda porta for para o estado alto o cronometro para e fornece o valor do tempo.


const int a = 11;
const int b = 12;
int cont;
int tempo;
int tempo1;
void setup(){
Serial.begin(9600);
pinMode(a, INPUT);
pinMode(b, INPUT);
}

void loop(){
if (digitalRead(a) == HIGH)
{
tempo = millis();
cont = 0;
}
else
{
tempo1 = millis()-tempo;
if ((digitalRead(b) == HIGH) and (cont == 0))
{
Serial.print("Tempo: ");
Serial.println(tempo1);
cont = 1;
}
}
}
-------------------------------- legal :) :)

Calculando a media com o Arduino

Veja o código para calculo da media de varias leituras realizadas em uma porta analógica do Arduino

unsigned long tempo; // float tempo;
float pinoentrada; //declara "pinientrada" como a variavel que fara a leitura da porta analogica (em bits)
float tensao; //declara a variavel que fara a conversao do "pinoentrada" de bits para Volt (em Volts)
char leitura; // declara a variavel que fara a leitura da Serial a partir do teclado
int i = 0; // variavel de contagem
float soma = 0; // variavel que soma os valores obtidos
float media = 0; // variavel que calcula a media


void setup(){
pinMode(A0, INPUT); // declara o pino de entrada
Serial.begin(9600);
}
void loop()
{
leitura = Serial.read(); // faz a leitura do teclado
soma = 0; // forca a variavel soma iniciar com o valor zero
i = 0; // forca a variavel i iniciar com o valor zero

if (leitura =='l') { // inicia a leitura se for teclado l (ele) na Seria

while(i < 10){ // faz dez leituras do pino de entrada

tempo= millis(); // base de tempo para a coleta em microssegundos
pinoentrada = analogRead(A0); // le o pino de entrada
tensao = (pinoentrada*5.00000)/1024.00000; // converte o valor lido para tensao
soma =(soma + tensao); // soma a tensao atual com a anterior

Serial.print("Medida ");
Serial.print(i+1);
Serial.print(" : ");
Serial.print("pino de entrada (bits)");
Serial.print(" : ");
Serial.print(pinoentrada);
Serial.print(" "); // introduz um espaço para as colunas
Serial.print("pino de entrada (volts)");
Serial.print(" : ");
Serial.println(tensao,5); // imprime a tensao com 5 casas decimais e pula uma linha
i++; // soma uma unidade na variavel i
delay(1000); // espera 1 segundo para a proxima leitura
}
media = soma/10; // calcula a media da tensao
Serial.print("Valor Medio (volts): ");
Serial.println(media,5); //imprime a media com 5 casas decimais
}
}

------------------------------ Bom Trabalho :)

terça-feira, 16 de agosto de 2011

Driver para o FTDI - Para conexão USB no Arduino


Segue o link para todos os drivers do FTDI , Lnux, windows, Mac 64 bits, 32 bits . Clique na figura para acessar o site