13/09/2017, 12:35
Alla fine sono riuscito a far funzionare tutto, sembrerebbe che la nuova libreria da te consigliata non funzioni sul mio raspi.
Adesso il mio codice fa una serie di misure e restituisce il valor medio, il problema è che talvolta fa una falsa misura.
Ad esempio su 10 misure è possibile che 1 o 2 al massimo siano falsate.
Vorrei fare in modo che date le 10 misure lui scarti quelle che si discostano entro un certo range dalle altre e faccia la media solo tra quelle corrette. Qualche consiglio su come potrei fare?
questo è il pezzo di codice incriminato:
Grazie!
Adesso il mio codice fa una serie di misure e restituisce il valor medio, il problema è che talvolta fa una falsa misura.
Ad esempio su 10 misure è possibile che 1 o 2 al massimo siano falsate.
Vorrei fare in modo che date le 10 misure lui scarti quelle che si discostano entro un certo range dalle altre e faccia la media solo tra quelle corrette. Qualche consiglio su come potrei fare?
questo è il pezzo di codice incriminato:
Codice:
# Importazione librerie Python
from __future__ import print_function
import time
import RPi.GPIO as GPIO
# Referenze BCM GPIO anziche i numeri fisici dei pin.
GPIO.setmode(GPIO.BCM)
# Definizione dei GPIO.
GPIO_TRIGGER = 18
GPIO_ECHO = 17
# Velocita del suono in cm/s con temperatura
temperature = 20
speedSound = 33100 + (0.6*temperature)
# Impostazione pin output e input
GPIO.setup(GPIO_TRIGGER,GPIO.OUT) # Trigger
GPIO.setup(GPIO_ECHO,GPIO.IN) # Echo
tot = 0 #inizializzazione somma delle misurazioni
for x in range(1):
# Set trigger to False (Low)
GPIO.output(GPIO_TRIGGER, False)
# Attendi la stabilizzazione del sensore
time.sleep(0.5)
# Invia un impulso di 10us al trigger
GPIO.output(GPIO_TRIGGER, True)
# Aspetta 10us
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()
# Lunghezza impulso
elapsed = stop-start
# La distanza percorsa dall'impulso va moltiplicata
# per la velopcita del suono(cm/s)
distance = elapsed * speedSound
# Distanza effettiva(one-way)
distance = distance / 2
tot=tot+distance
print(distance)
distance=tot/1
print("Distanza : {0:5.1f}".format(distance),"cm")
# Reset GPIO settings
GPIO.cleanup()
Grazie!