Go Down

Topic: Sensor Laser (caseiro) (Read 258 times) previous topic - next topic

willian_wcz

Amigos boa noite. Estou fazendo um projeto simples com arduino para fotografia de alta velocidade. Basicamente a idéia é capturar gotas de agua e disparar a camera em seguida para registrar o momento da colisão da gota com a superfície. Uma das hipoteses foi de controlar o disparo das gotas via valvula solenoide ou bomba peristaltica. Porem encontrei um outro projeto que achei interessante. Basicamente a gota seria disparada manualmente(de um conta gotas, por exemplo) e, a partir do momento que a gota cruzasse um sensor, a camera contaria um tempo e faria a imagem de forma automatica. Montei um circuito de testes com um LDR e um laser destes baratinhos, tipo laser point de camelô. Então faço as medições da leitura do feixe de laser incidindo no LDR, deixo um valor bem próximo do obtido para que a leitura fique o mais sensível possível, e carrego o programa pro arduino. Nos testes, a gota dagua tem sido suficiente para interromper o feixe de laser. Ocorre que, a cada vez que eu faço as medições e carrego o código para o Arduino, a medição muda sozinha. Exemplo, se tenho uma medição de 50 na Serial, altero o valor no Sketch para que "qualquer coisa acima de 52" envie o comando para o Arduino. Porém, quando carrego o sketch, a medição muda para 70(por exemplo) e aí eu perco a calibração que acabei de fazer. Em resumo, a leitura do feixe de laser no LDR não tem sido padrão, ela muda a cada carregamento de sketch, mesmo sem mudarem as condições de luminosidade do ambiente. Alguma idéia do que possa estar ocorrendo?

hugo007

Boas
Segundo a lei de newton a lei dos corpos em queda diz que todos os corpos caem com aceleração constante, uma vez que o efeito da aceleração gravitacional, ou seja, da gravidade em todos os corpos, à mesma altura, é igual.
O teu problema será muito provavelmente usares a porta serie para obteres os valores.
A serie é lenta deves rever o teu programa e usares interrupções para obteres melhores resultados e eventualmente no final do evento imprimir para a serie o resultado após tudo ter acontecido e ter sido calculado.
Quando a gota interrompe a ldr disparas uma interrupção.
Fico sem perceber a ordem dos acontecimentos, detectas a gota e depois fazes o quê aguardas um tempo e fazes o disparo da camera?
Como fazes esse disparo no arduino ?
Estas a cronometrar o tempo que a gota passa e depois disparas a camera?
Coloca ai o teu codigo
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

willian_wcz

#2
Sep 27, 2017, 04:03 am Last Edit: Sep 30, 2017, 04:09 pm by willian_wcz
Olá hugo007, obrigado pela resposta.
  De fato só preciso de uma interrupção qualquer e que, quando detectada, aguarde um tempo e dispare a camera. Sim, o tempo é cronometrado manualmente e depois colocado no código, já que a velocidade é constante.
  Agora, como eu faria para que a interrupção fosse reconhecida e pudesse gerar o disparo da câmera?

Quanto ao disparo da camera, liguei um cabo de controle remoto da camera desmontado ao arduino e "solicitei" um nível alto depois de um determinado momento. Mas a ligação da camera ao Arduino, fiz através de um optoacoplador 4N25.

hugo007

Code: [Select]

const byte triggerCameraPin = 5;
const byte sensorPin = 2;
volatile byte state = LOW;
volatile unsigned long triggeredTime = 0;
volatile bool triggered = false;

const unsigned long cameraDelay = 50; //50 miliseconds
void setup() {
  pinMode(triggerCameraPin, OUTPUT);
  pinMode(triggerCameraPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(sensorPin), triggerCameraTimer, FALLING);
}

void loop() {
  cameraManager();
}

void triggerCameraTimer() {
  triggeredTime = millis();
  triggered = true;
}

void cameraManager(){
  if(triggered){
    //Check if the camera delay has passed
    if((millis() -triggeredTime) >= cameraDelay){
      digitalWrite(triggerCameraPin,HIGH);
      delay(100);
      digitalWrite(triggerCameraPin,LOW);
      //reset the flag
      triggered = false;
    }
     
  }
}


Nao testei, tenta assim deve ser algo deste género.
Basicamente quando detecta a gota deve disparar a camera passados pelo menos 50 milisegundos desde o momento que a gota passou no laser.
Tens de adaptar o código para funcionar com a analogica visto estares a usar a LDR

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

willian_wcz

Vou tentar e posto os resultados. Muitíssimo obrigado!!

Go Up