Deteccion de objeto con cámara

Buenos dias, me podeis ayudar, tengo un problema.
Me han pedido que haga un programilla
El programilla es el siguiente:
me han pedido que una camara detecte un cosa que cuente esa cosa lo que tarda en pasar y despues esperar 1,5s y llevar lo que ha tardado en captar la camara a una especie de asperiador para que se encienda el mismo tiempo detectado
gracias de antemano

Para comenzar he cambiado tu título porque no puedes poner ayuda. Ya te he pedido que leas las normas del foro en tus anteriores hilos asi que te pediré que lo vuelvas a hacer porque no lo has entendido.

Lo que quieres hacer solo es posible con dos shields

  1. usas Arducam video demo
    Solo podras tomar una foto si detectas el cambio.... y no se hasta que punto puedas hacerlo

  2. usas Pixy CAM
    Tiene hardware y software que te ayuda a detectar objetos previamente configurados. La mayoría deben ser de colores conocidos.
    Envia comandos via puerto serie y el Arduino puede comandar lo que necesites. O sea, arduino no actua con la cámara sino que la camara y su hardware hace la detección y envia resultados por puerto serie.

buenos dias es que no encuentro la normas del foro
y me podias ayudar con el codigo?

unsigned long tiempo_retraso;
float Pulso;
float Tiempo = 0;
int pulsador=2;
void setup ()
{
Serial.begin (9600);
}

void loop ()
{

Pulso = pulseIn (pulsador, LOW, 100000000);
Tiempo = Pulso/1000000;


if (Tiempo > 0.05)
{
Serial.print ("Duracion del pulso: ");
Serial.print (Tiempo);
Serial.println (" segundos");
}



}

esto seria el tiempo que lo tengo captando mas o menos

El código que tiene que ver con lo que preguntas?

Te ayudo con las normas
Lo que tienes que hacer es :
Leer las Normas del foro.
Luego ve a More (abajo a la derecha), click, luego Modify y estas en modo EDICION.
**Selecciona todo el código y click en </> arriba del emoticon **

Tags.jpg

buenas,si el codigo tiene que ver con lo que pregunto tengo que hacer que pase 1,5s y despues activar una salida el mismo tiempo que capta el pulsein como lo haria??

no me enciende el led como seria?

void setup ()
{
pinMode(pulsador,INPUT);

pinMode(led,OUTPUT);
digitalWrite(pulsador,HIGH);
Serial.begin (9600);
}

void loop ()
{

Pulso = pulseIn (pulsador, LOW, 100000000);
Tiempo = Pulso/1000000;


if (Tiempo > 0.05)
{
  
Serial.print ("Duracion del pulso: ");
Serial.print (Tiempo);
Serial.println (" segundos"); 


 }
 if (digitalRead(pulsador) == LOW){

  while(digitalRead(pulsador) == HIGH){
  
  retraso= true;
 }
 }
  else {retraso=false;
 }


 if (retraso == true){
  tiempo_retraso=millis();
 digitalWrite(led,LOW);
 }
  if (millis() > (tiempo_retraso+5000)){
    digitalWrite(led, HIGH);
    tiempo_retraso= 0;
}
  }

Si usas pulseIn luego para que usas digitalRead(pulsador)?

El evento ya pasó, y ya lo contaste con pulseIn. Lo demás no tiene sentido

Ahora si tu evento dura tanto tiempo no vale la pena usarpulseIn, usa millis(), cuenta cuando se produce y cuando termina, tienes el tiempo del evento, y puedes seguir con lo demás.

Se comprende?

Si el evento es la detección del objeto, vuelvo a reiterar que no hace falta que uses pulseIn.

declaras dos variables start y stop como unsigned long

y cuentas cuando comienza el evento y cuando termina

Aca te dejo algo rápido que hice

#define pulsador 2 // pin del pulsador
#define led      3
unsigned long start, stop, tiempo_retraso;
bool pvalor, pvalorAnt;
bool enciendoLed = false;
float Tiempo;

void setup () {
 pinMode(pulsador,INPUT);

 pinMode(led,OUTPUT);
 digitalWrite(pulsador,HIGH);
 Serial.begin (9600);
}

void loop () {

 pvalor = digitalRead(pulsador);
 if (pvalor && !pvalorAnt)
    start = millis();     // capturo el momento en que pasó de 0 a 1
 if (!pvalor && pvalorAnt) {
 Tiempo = (millis() - start) / 1000; // expresado en segundos 
 tiempo_retraso = millis() + 5000UL;
 digitalWrite(led,LOW);
 enciendoLed = true;
 }

 if (Tiempo > 0.05) {
 Serial.print ("Duracion del pulso: ");
 Serial.print (Tiempo);
 Serial.println (" segundos"); 
    }

 if (enciendoLed){
 if (millis() > tiempo_retraso) { // superé los 5 seg?
 digitalWrite(led,HIGH);
 enciendoLed = false; // apago led y no se encendera hasta nuevo objeto detectado
 }
 }
}

Ajusta las variables a las tuyas porque en tu código faltaban cosas

muchas gracias lo he probado cambiando las variables y por ahora no funciona ejjejejej pero investigare