Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用超声波传感器测量距离?_Python - Fatal编程技术网

如何在Python中使用超声波传感器测量距离?

如何在Python中使用超声波传感器测量距离?,python,Python,我试图用超声波传感器测量距离,一切看起来都很好,但当我离开程序工作几分钟(3-4分钟)后,程序停止了距离测量 我需要程序不要停止,因为我需要它的安全警报。程序每隔一秒钟收集一段距离,并在屏幕上显示。但是如果距离大于10,程序会显示一条警告消息,并且在距离小于10之前不会显示距离。以下是您可以看到的代码: import time import RPi.GPIO as GPIO # Usamos la referencia BOARD para los pines GPIO GPIO.setmo

我试图用超声波传感器测量距离,一切看起来都很好,但当我离开程序工作几分钟(3-4分钟)后,程序停止了距离测量

我需要程序不要停止,因为我需要它的安全警报。程序每隔一秒钟收集一段距离,并在屏幕上显示。但是如果距离大于10,程序会显示一条警告消息,并且在距离小于10之前不会显示距离。以下是您可以看到的代码:

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)
导入时间
将RPi.GPIO导入为GPIO
#美国参考委员会
GPIO.setmode(GPIO.BOARD)
#松树的定义
GPIO_触发器=11
GPIO_回波=13
GPIO_发光二极管=15
#松树和沙柳的配置
GPIO.setup(GPIO_触发器,GPIO.OUT)#触发器
GPIO.setup(GPIO_ECHO,GPIO.IN)#ECHO
GPIO.setup(GPIO_发光二极管,GPIO.OUT)发光二极管
# -----------------------
#阿尔古纳斯函数的定义
# -----------------------
def medida():
#距离功能
输出(GPIO_触发器,真)
睡眠时间(0.00001)
GPIO.output(GPIO_触发器,False)
开始=时间。时间()
当GPIO.input(GPIO_回波)==0时:
开始=时间。时间()
当GPIO.input(GPIO_回波)==1时:
停止=时间。时间()
经过=停止-启动
距离=(经过的*34300)/2
返回距离
定义媒体距离():
#Esta功能记录3 medidas
#这是第三个媒体。
距离1=medida()
睡眠时间(0.1)
距离A2=medida()
睡眠时间(0.1)
距离A3=medida()
距离=距离A1+距离A2+距离A3
距离=距离A/3
返回距离
# -----------------------
#校长
# -----------------------
打印(“Medida con传感器超声波检测”)
#Ponemos el Trigger en falso(低)
GPIO.output(GPIO_触发器,False)
#Ponemos el-Led-en-falso(低)
GPIO.output(GPIO_发光二极管,假)
#梅特莫斯·艾尔布洛克校长正在努力
#按Ctrl+C组合键的组合键
#我的朋友们,我的朋友们
#埃维塔·厄尔乌萨里奥·特内尔(evita el-usuario)是一个错误的人
尝试:
而事实上:#伊斯特·布塞尔·雷皮特·西姆普
#这是一个遥远的世界
距离=媒体距离()
#距离是多少
#这是一个10米长的距离
如果距离小于10:
距离=媒体距离()
打印(“距离:%.1f”%distance,“-”,“Fecha:”,time.strftime(“%c”))#Mostramos la distance por pantalla
GPIO.output(GPIO_发光二极管,假)
时间。睡眠(1)#Esperamos 1 segundo
距离=媒体距离()
a=0#效用变量a在过程中的作用
#Preguto si la变量a为igual a 1
#如果是前面的话,我就不知道该怎么做了
如果a==1:
通过
#这是一个非常重要的问题
#如果是重要的话,那么就把它放在一边
其他:
a=0
如果距离a>10且a==0:#则距离为10厘米
打印(“10厘米长的市长报警!!”、“-”、“Fecha:”、time.strftime(“%c”))#
GPIO.output(GPIO_发光二极管,真)
a=1#Pongo la variable en 1 parar el proceso y que no se repita
距离=媒体距离()
距离<10时:距离小于10秒
在新评估原则的基础上,在口腔和胃的末端休息
键盘中断除外:#Si el-usuario presiona crtl+C
#Limpiamos los pines GPIO和salimos del programa
打印(“阿帕甘多LED”)
时间。睡眠(1)
GPIO.output(GPIO_发光二极管,假)
打印(“Limpiando GPIO”)
GPIO.cleanup()
打印(“GPIO limpio”)
打印(“Saliendo…”)
时间。睡眠(1)
为什么程序会在几分钟后停止?程序正在运行,但不会收集更多的距离