Hallo,
mein Sohn und ich wollen für ein GoCart einen "Bordcomputer" bauen.
Jetzt haben wir den Hall-Sensor KY-024 mit dem Raspberry Pi 4B verbunden:
KY-024 | Raspberry |
G | Pin 9 - Gnd |
+ | Pin 17 - 3,3V |
DO | Pin 18 - GPIO24 |
Unser Programm sieht wie folgt aus:
import RPi.GPIO as GPIO
import time, signal, sys, os, datetime
#Werden die Anschluesse über die Pin Nummern (1-40) (=GPIO.BOARD) oder die GPIO Nummern (GPIO.BCM) angesprochen?
GPIO.setmode (GPIO.BCM)
# LED ist an GPIO17 angeschlossen
LED_GPIOport = 17
GPIO.setup (LED_GPIOport, GPIO.OUT) #Anschluss als Ausgang definieren
HallSensor_GPIOpin = 24
GPIO.setup(HallSensor_GPIOpin, GPIO.IN, pull_up_down = GPIO.PUD_OFF)
#Variablen initialisieren
last_time = time.time()
this_time = time.time()
RPM = 0
diameterTire = 40
tireLength = 3.14159 * diameterTire / 100 # Reifenumfang in m
def EventsPerTime(channel):
global RPM, this_time, last_time, tireLength
this_time = time.time()
#if this_time > (last_time + 0.04):
GPIO.output(LED_GPIOport,True) # LED ein
RPM = (60/(this_time - last_time))
print('Current RPM = ','{:7.1f}'.format(RPM), '1/min ', '{:7.1f}'.format(RPM * tireLength * 60 / 1000), 'km/h ' ,this_time,' ',last_time, ' ' , this_time - last_time)
last_time = this_time
GPIO.output(LED_GPIOport,False) # LED aus
return()
# Interrupt - warten auf GPIO Ereignis
GPIO.add_event_detect(HallSensor_GPIOpin, GPIO.RISING, callback=EventsPerTime, bouncetime=1)
# Programm laufen lassen
try:
for x in range(0,1200):
time.sleep(0.5)
except:
GPIO.output(LED_GPIOport, False)
GPIO.remove_event_detect(HallSensor_GPIOpin)
GPIO.cleanup()
Alles anzeigen
Wir probieren das ganze derzeit über die Raspberry GUI und Thonny 3.3.10 (Phyton 3.7.3 - 32-bit).
Wenn wir jetzt einen Magneten am Sensor vorbeibewegen, kommen diese Ausgaben:
Current RPM = 2.5 1/min 0.2 km/h 1653326807.3179052 1653326783.1268919 24.19101333618164
Current RPM = 20910.5 1/min 1576.6 km/h 1653326807.3207746 1653326807.3179052 0.0028693675994873047
Current RPM = 23790.7 1/min 1793.8 km/h 1653326807.3232965 1653326807.3207746 0.002521991729736328
Current RPM = 23632.1 1/min 1781.8 km/h 1653326807.3258355 1653326807.3232965 0.002538919448852539
Current RPM = 202.6 1/min 15.3 km/h 1653326807.6220145 1653326807.3258355 0.29617905616760254
Current RPM = 50361.9 1/min 3797.2 km/h 1653326807.623206 1653326807.6220145 0.0011913776397705078
Current RPM = 876.4 1/min 66.1 km/h 1653326807.6916697 1653326807.623206 0.06846380233764648
Current RPM = 49823.4 1/min 3756.6 km/h 1653326807.692874 1653326807.6916697 0.0012042522430419922
Current RPM = 58991.6 1/min 4447.9 km/h 1653326807.693891 1653326807.692874 0.0010170936584472656
Die Werte wirken ziemlich unrealistisch. Wir bewegen den Magneten vielleicht ca. 1-2-mal pro Sekunde an dem Sensor vorbei.
Egal, wie wir die Empfindlichkeit am KY-024 einstellen. Wird die Einstellung zu unempfindlich, kommen gar keine Impulse mehr an.
Es wirkt so, als ob der Sensor extrem viele Impulse erfasst. Kennt jemand das Problem?
Wie können wir hier tatsächlich realistische Werte erfassen - ohne das "Prellen"?
Eignen sich ggf. andere Sensoren besser?
Danke für eure Hilfe.