elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Medir distancia con sensor de ultrasonidos y Python
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Medir distancia con sensor de ultrasonidos y Python  (Leído 3,106 veces)
sejiozosky

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Medir distancia con sensor de ultrasonidos y Python
« en: 5 Mayo 2017, 15:08 pm »

Estoy tratando de medir una distancia con el sensor de ultrasonidos y todo se ve bien, pero cuando dejo el programa de unos minutos (3-4 minutos) de trabajo, el programa detiene la medida de la distancia.

Necesito que el programa no se detiene porque lo necesito para una alarma de seguridad. El programa recoge cada segundo una distancia y lo muestra en scree. Pero si la distancia es más de 10, el programa muestra un mensaje de alerta y no muestran la distancia hasta que es menos de 10. A continuación se puede ver el código:

Código:
import time
import RPi.GPIO as GPIO


# Usamos la referencia BOARD para los pines GPIO
GPIO.setmode(GPIO.BOARD)

# Definimos los pines que vamos a usar
GPIO_TRIGGER = 11
GPIO_ECHO = 13
GPIO_LED = 15

# Configuramos los pines como entradas y salidas
GPIO.setup(GPIO_TRIGGER,GPIO.OUT)  # Trigger
GPIO.setup(GPIO_ECHO,GPIO.IN)      # Echo
GPIO.setup(GPIO_LED ,GPIO.OUT) #Led


# -----------------------
# Definimos algunas funciones
# -----------------------

def medida():
  # Esta funcion mide una distancia
  GPIO.output(GPIO_TRIGGER, True)
  time.sleep(0.00001)
  GPIO.output(GPIO_TRIGGER, False)
  start = time.time()

  while GPIO.input(GPIO_ECHO)==0:
    start = time.time()

  while GPIO.input(GPIO_ECHO)==1:
    stop = time.time()

  elapsed = stop-start
  distancia = (elapsed * 34300)/2

  return distancia

def media_distancia():
  # Esta funcion recoge 3 medidas
  # y devuelve la media de las 3.
  distancia1=medida()
  time.sleep(0.1)
  distancia2=medida()
  time.sleep(0.1)
  distancia3=medida()
  distancia = distancia1 + distancia2 + distancia3
  distancia = distancia / 3
  return distancia


# -----------------------
# Programa principal
# -----------------------


print ("Medida con sensor de ultrasonidos")

# Ponemos el Trigger en falso (low)
GPIO.output(GPIO_TRIGGER, False)
# Ponemos el Led en falso (low)
GPIO.output(GPIO_LED, False)

# Metemos el bloque principal en un Try para asi poder
# comprobar si el usuario presiona Ctrl + C
# y poder ejecutar una limpieza del GPIO, esto tambien
# evita el usuario tener que ver muchos mensajes de error
try:
  while True: # Este bucle se repite siempre

# Lo primero que hago es medir la distancia
      distancia = media_distancia()
# Compruebo si la distancia es menor que 10
# Si es menor que 10 muestro la distancia por pantalla

      if distancia < 10:
        distancia = media_distancia() # Medidos la distancia
        print ("Distancia: %.1f" % distancia, " - " , "Fecha:", time.strftime("%c")) # Mostramos la distancia por pantalla
        GPIO.output(GPIO_LED, False)
        time.sleep(1) # Esperamos 1 segundo
        distancia = media_distancia()
        a = 0 # Utilizo la variable a para poder para el proceso mas adelante

# Pregunto si la variable a es igual a 1
# Si lo es no hago nada y repito el if anterior
      if a == 1:
        pass
# Pero si no es 1 le asigno el valor 0
# Para poder seguir con el IF siguiente
      else:
        a = 0
      if distancia > 10 and a == 0: # Si la distancia es mayor que 10cms
           print ("La distancia es mayor de 10 cms. Alarma activada!!", " - ", "Fecha:", time.strftime("%c")) # Se interrumpe el bucle y se muestra un aviso
           GPIO.output(GPIO_LED, True)  
           a = 1 # Pongo la variable en 1 para parar el proceso y que no se repita
           distancia = media_distancia() # Seguimos midiento la distancia
           while distancia < 10: # Pero si la distancia vuelve a ser menor de 10
             break # Se termina este bucle y volvemos al principio nuevamente

except KeyboardInterrupt: # Si el usuario presiona crtl + C

  # Limpiamos los pines GPIO y salimos del programa

  print ("Apagando LED")
  time.sleep(1)
  GPIO.output(GPIO_LED, False)
  print ("Limpiando GPIO")
  GPIO.cleanup()
  print ("GPIO limpio")
  print ("Saliendo...")
  time.sleep(1)

¿Por qué el programa se detiene después de unos minutos? En realidad, sigue funcionando pero deja de emdir medidas. Pero si presiono control + c para finalizar si que me muestra la secuencia de cierre de programa. Muchas gracias


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
limpiador por ultrasonidos
Electrónica
umbra 0 2,123 Último mensaje 13 Diciembre 2004, 21:39 pm
por umbra
[TUTORIAL] HC-SR04 Sensor ultrasonico de distancia y arduino
Electrónica
79137913 1 18,987 Último mensaje 16 Febrero 2014, 20:48 pm
por Meta
conexión inalambrica a distancia a distancia
Hacking Wireless
MAXIMUS33 2 2,836 Último mensaje 22 Agosto 2013, 16:15 pm
por MAXIMUS33
Ayuda, medir distancia/diámetro
Programación C/C++
carolabeatle 0 1,537 Último mensaje 2 Marzo 2016, 22:58 pm
por carolabeatle
ultrasonidos en arduino
Dudas Generales
3rik 3l rojo 6 5,155 Último mensaje 6 Agosto 2016, 10:12 am
por 3rik 3l rojo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines