Датчик расхода Raspberry Pizero W +: Почему частота импульсов кажется нерегулярной? - PullRequest
0 голосов
/ 30 октября 2019

У меня Raspberry Pizero W, подключенный к турбинному расходомеру FT330 производства GEMS (спецификация здесь: https://www.gemssensors.com/~/media/files/resources/na_english/instructionbulletins/instructions_227372.ashx) через соединение SPI GPIO с контактом 17 на Pizero W.

Я используюследующий код:

    # Import required libraries
    import time
    import datetime
    import RPi.GPIO as GPIO

    def sensorCallback(channel):
      # Called if sensor output changes
      timestamp = time.time()
      stamp = datetime.datetime.fromtimestamp(timestamp).strftime('%H:%M:%S')
      if GPIO.input(channel):
        # No magnet
        print("Sensor HIGH " + stamp)
      else:
        # Magnet
        print("Sensor LOW " + stamp)

    def main():
      # Wrap main content in a try block so we can
      # catch the user pressing CTRL-C and run the
      # GPIO cleanup function. This will also prevent
      # the user seeing lots of unnecessary error
      # messages.

      # Get initial reading
      sensorCallback(17)

      try:
        # Loop until users quits with CTRL-C
        while True :
          time.sleep(0.1)

      except KeyboardInterrupt:
        # Reset GPIO settings
        GPIO.cleanup()

    # Tell GPIO library to use GPIO references
    GPIO.setmode(GPIO.BCM)

    print("Setup GPIO pin as input on GPIO17")

    # Set Switch GPIO as input
    # Pull high by default
    GPIO.setup(17 , GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.add_event_detect(17, GPIO.BOTH, callback=sensorCallback, bouncetime=200)

    if __name__=="__main__":
       main()

(Кредит: https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/hall.py)

И после тестирования этой системы я получил такой вывод:

    $ python3 flowmeter_v1.py 
    Setup GPIO pin as input on GPIO17
    Sensor HIGH 17:22:40
    Sensor LOW 17:23:00
    Sensor LOW 17:23:01
    Sensor HIGH 17:23:01
    Sensor HIGH 17:23:01
    Sensor HIGH 17:23:01
    Sensor HIGH 17:23:01
    Sensor LOW 17:23:02
    Sensor HIGH 17:23:02
    Sensor LOW 17:23:02
    Sensor HIGH 17:23:02
    Sensor LOW 17:23:02
    Sensor LOW 17:23:03
    Sensor LOW 17:23:03
    Sensor LOW 17:23:03
    Sensor HIGH 17:23:03
    Sensor LOW 17:23:03
    Sensor LOW 17:23:04
    Sensor LOW 17:23:04
    Sensor HIGH 17:23:04
    Sensor LOW 17:23:04
    Sensor HIGH 17:23:05
    Sensor HIGH 17:23:05
    Sensor HIGH 17:23:05
    Sensor HIGH 17:23:05
    Sensor HIGH 17:23:05
    Sensor LOW 17:23:06
    Sensor HIGH 17:23:06
    Sensor LOW 17:23:06
    Sensor HIGH 17:23:06
    Sensor HIGH 17:23:06
    Sensor HIGH 17:23:07
    Sensor LOW 17:23:07
    Sensor LOW 17:23:07
    Sensor LOW 17:23:07
    Sensor LOW 17:23:07
    Sensor LOW 17:23:08
    Sensor HIGH 17:23:08
    Sensor LOW 17:23:08
    Sensor HIGH 17:23:08
    Sensor LOW 17:23:08
    Sensor HIGH 17:23:09
    Sensor LOW 17:23:09
    Sensor HIGH 17:23:09
    Sensor HIGH 17:23:09

Я пытаюсьЯ понимаю, почему колебания между показаниями HIGH и LOW являются настолько нерегулярными. Я предполагаю, что в соответствии со спецификациями расходомера мне следует последовательно читать HIGH и LOW. Единственная возможность, о которой я могу думать, это то, что лопасти вентиляторана расходомере вращаются слишком быстро для параметра bounceback = 200ms в функции GPIO callback(), чтобы позволить Pizero захватывать каждый импульс. В соответствии со спецификациями, я должен ожидать 10 200 импульсов / галлон в любом месте от 24 до 343 Гц. Это должно датьмне не более 68 импульсов в секунду. Так что я просто пропускаю импульсы, и я должен установить свои bounceback = 0ms?

Любой совет будет оценен! Спасибо!

...