Cita:
Originalmente publicado por gypsylyon
El sitema de deteccion es por pala giratoria con un iman. En la carcasa tiene un sensor de hall que detecta los impulsos magneticos. El detector tiene una salida digital que proporciona pulsos por segundo (PPS) . Aqui la calibracion como ejemplo el modelo FLOW40L0 de Material:Nylon with 30% glass fiber y 3/4 el racor (19 mm) que pienso es el ideal para la entrada de agua salada y solo cuesta 12,9 $
Mounting Method : Horizontal to Vertical
Range of Flow Rate : 2.0 – 60.0 L/min.
Calibration(horizontal mounting) :
Flow rate (lpm) Resolution(pulse/liter)
2.0 – 3.0 290
3.0 – 6.0 315
6.0 – 60.0 330
Accuracy : +/- 10%
Calibration(vertical mounting) :
Flow rate (lpm) Resolution(pulse/liter)
2.0 – 3.0 305
3.0 – 6.0 330
6.0 – 60.0 330
Accuracy : +/- 10%
Es decir con uno de los GPIO de la Raspi contamos el numero de PPS y conocemos el número de litros/min. Lo que no se es si el voltaje de salida sera proporcional al voltaje de entrada (2,4 a 26 voltios). De todas maneras podriamos alimentarlo con 12 voltios y la salida reducirla con un divisor de tension a 3,3 Voltios.
Aqui tienes un ejemplo de como se programa:
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time, sys
FLOW_SENSOR = 23
GPIO.setmode(GPIO.BCM)
GPIO.setup(FLOW_SENSOR, GPIO.IN, pull_up_down = GPIO.PUD_UP)
global count
count = 0
def countPulse(channel):
global count
count = count+1
print count
flow = count / 330 # 6.0 – 60.0 l/m 330 pulsos por litro
print(flow)
GPIO.add_event_detect(FLOW_SENSOR, GPIO.FALLING, callback=countPulse)
while True:
try:
time.sleep(1)
except KeyboardInterrupt:
print '\ncaught keyboard interrupt!, bye'
GPIO.cleanup()
sys.exit()
|
Lo que me temía... esto hace necesario programar un nuevo interface para este tipo de sensores, me explico... (atención que viene tocho

)
Sea cual sea el tipo de comunicación que usa un sensor (I2C, 1W, SPI, pulsos...) puede ir conectado a cualquier pin o grupo de pins. Es por programación que tu le indicas como ha de comportarse ese pin o grupo de pins. Lo que pasa es que para guardar una cierta compatibilidad entre diferentes hats o placas de ampliación de la raspberry que se conectan al puerto GPIO, se establece y recomienda que por ejemplo el pin GPIO4 siempre sea usado para sensores 1W o que los pines GPIO2 y GPIO3 sean siempre usados como conexiones I2C.
Dicho esto, OpenPlotter usa en estos momentos los pines reservados como I2C para sesnores IMU, temperatura del aire, presión y humedad; el pin 1W para multiples conexiones de sensores de temperatura y los pines SPI para los sensores analogicos.
El resto de pines no están reservados y se usan para proposito general. Son los que usamos para conectar interruptores y para activar zumbadores, relés etc.
Para este tipo de sensores por pulsos no hay pines reservados y se usan los de proposito general. Con estos sensores por pulsos no solo podriamos controlar sensores de flujo como los que propones, también podriamos controlar las revoluciones del motor, la velocidad del viento, la cadena que estamos largando... Por todo esto es por lo que digo que se merece tener su propia "pestaña" en OpenPlotter tal como la tienen los sensors I2C, 1W, SPI e interruptores.
Son los sensores más faciles de programar ya que tan solo se trata de contar las veces que se cierra un interruptor pero son los mas dificiles de contextualizar dado el numero de magnitudes diferentes que pueden medir y sus respectivas unidades. Pero lo vamos a intentar no?
De entrada yo añadiría al código que propones el factor tiempo para obtener, a parte de las vueltas que da cualquier eje, cuanto tarda en dar cada vuelta. A esto lo podemos llamar revoluciones y puede aplicarse por igual a cualquier tipo de sensor.
Para poder programar un interface que sirviera para todo tipo de sensor debemos de aplicar otra variable esta mas complicada. En el caso del sensor de flujo que propones sabemos que el valor 330 son los pulsos/vueltas que tiene que dar para que pase un litro; y en el caso de un contador de cadena sabemos que por ejemplo 10 serían las vueltas que tiene que dar el molinete para largar un metro.
A partir de aquí se me plantean estas dudas...
Como ostias llamamos a esta variable que nos sirva para la calibración de una manera generica y que se entienda? es decir cuando el usuario se encuentre un campo donde deberá introducir este valor para diferentes sensores, como carajo le llamamos?
Y mi otra gran duda es que en el caso del sensor de flujo, al tratarse de liquidos entiendo que cuanto más rapido fluye, este valor cambia y por eso tenemos:
Flow rate (lpm) Resolution(pulse/liter)
2.0 – 3.0 290
3.0 – 6.0 315
6.0 – 60.0 330
Y aquí la liamos porque ya no tenemos solo una variable a aportar por el usuario, son tres. Como programo un interface generico para eso? supongo que encontraremos la manera pero está jodido no?
