Verificar el estado de una entrada durante un tiempo "x"
Publicado por Oscar (3 intervenciones) el 18/05/2017 20:41:09
Buenas tardes.
En mi trabajo han decidido poner en marcha un sistema de vision artificial donde una RaspBerry se encarga de tomar una foto cuando tenemos un evento de detección. Luego se envia la foto a un servidor y se hacen unos algoritmos para verificar el modelo de la pieza.
El caso es que me han encargado colaborar con la empresa que lo esta desarrollando y no he usado nunca una RaspBerry ni he programado nada con Python.
He programado en multitud de lenguajes, en unos mas avanazado como con robots y automatas; en otros mas básico como en C++ o SQL. Con esto quiero decir que tengo nociones de programacion, se lo que quiero hacer pero no se como hacerlo.
Aqui os describo el problema... Tenemos muchos problemas con "ruido" externo que no ha sido posible paliar con pull-ups ya que el dispositivo se encuentra en un entorno industrial con motores muy potentes, trafos de intensidad... Hemos probado con flancos de subida, de bajada, verificaciones dobles del estado de la entrada... nada ha dado un resultado satisfactorio.
Ahora mismo la detección es la siguiente:
GPIO.add_event_detect(port, GPIO.RISING, callback=send_image, bouncetime=1500)
Cuando tenemos el flanco de subida se ejecuta la funcion "send_image" y en esta lo primero que hacemos es incluir un retardo de 200ms y volver a verificar el estado de la entrada. Si es "1" continuamos con la ejecucion.
El bouncetime de 1500ms es para evitar el efecto "ametralladora" que nos genera el ruido externo. El problema de esto es que si durante esos 1500ms se da un flanco real le estamos ignorando.
Lo que me gustaria hacer es iniciar un temporizador cuando la señal esta en "1" y resetearle cuando la señal esta en "0". Cuando este temporizador sea mayor de 200ms, por ejemplo, lanzo la funcion.
En uno de los lenguajes que manejo con soltura sería algo asi...
DO
@utimer temp_001 = 0
WHILE SIG(-1001)
END_DO
IF temp_001 > 200 THEN
CALL send_image
END_IF
Me gustaría saber como hacer esto con Python si es que el lenguaje y la RaspBerry lo permiten.
Espero haberme explicado.
Gracias por vuestra ayuda!!
En mi trabajo han decidido poner en marcha un sistema de vision artificial donde una RaspBerry se encarga de tomar una foto cuando tenemos un evento de detección. Luego se envia la foto a un servidor y se hacen unos algoritmos para verificar el modelo de la pieza.
El caso es que me han encargado colaborar con la empresa que lo esta desarrollando y no he usado nunca una RaspBerry ni he programado nada con Python.
He programado en multitud de lenguajes, en unos mas avanazado como con robots y automatas; en otros mas básico como en C++ o SQL. Con esto quiero decir que tengo nociones de programacion, se lo que quiero hacer pero no se como hacerlo.
Aqui os describo el problema... Tenemos muchos problemas con "ruido" externo que no ha sido posible paliar con pull-ups ya que el dispositivo se encuentra en un entorno industrial con motores muy potentes, trafos de intensidad... Hemos probado con flancos de subida, de bajada, verificaciones dobles del estado de la entrada... nada ha dado un resultado satisfactorio.
Ahora mismo la detección es la siguiente:
GPIO.add_event_detect(port, GPIO.RISING, callback=send_image, bouncetime=1500)
Cuando tenemos el flanco de subida se ejecuta la funcion "send_image" y en esta lo primero que hacemos es incluir un retardo de 200ms y volver a verificar el estado de la entrada. Si es "1" continuamos con la ejecucion.
El bouncetime de 1500ms es para evitar el efecto "ametralladora" que nos genera el ruido externo. El problema de esto es que si durante esos 1500ms se da un flanco real le estamos ignorando.
Lo que me gustaria hacer es iniciar un temporizador cuando la señal esta en "1" y resetearle cuando la señal esta en "0". Cuando este temporizador sea mayor de 200ms, por ejemplo, lanzo la funcion.
En uno de los lenguajes que manejo con soltura sería algo asi...
DO
@utimer temp_001 = 0
WHILE SIG(-1001)
END_DO
IF temp_001 > 200 THEN
CALL send_image
END_IF
Me gustaría saber como hacer esto con Python si es que el lenguaje y la RaspBerry lo permiten.
Espero haberme explicado.
Gracias por vuestra ayuda!!
Valora esta pregunta


0