Hallo zusammen,
Nachdem meine Ersteinrichtung mit dem Raspberry Pi 4b 4GB gut geklappt hat, habe ich mich gleich ins Python3-getümmel und an das Thema Sensorik herangenwagt.
Es klappt auch schon einzeln alles super, jedoch hänge ich an einem wichtigen punkt, nämlich dem Zusammenfassen der einzelnen Abfragen in einem einzelnen Programm.
Zum Aufbau:
Über die seriellen Pins des GPIO (TXD, RXD) wird ein TFMini Plus Lidarsensor angesteuert. Dieser arbeitet mit rund 100Hz
Weiterhin sind noch zwei HX711 Wägezellenverstärker angeschlossen über normale Pins am GPIO
Programmziel: Ich möchte gerne direkt hintereinander die Werte der Sensoren synchron abfragen und den die gemessenen Werte mit einem identischen Zeitstempel versehen. Abschließend sollen die Werte in eine TXT geschrieben werden.
Aktueller stand: Die Wägezellen als auch den Lidar kann ich in einzelnen Programmen abfragen, und auch die Sache mit dem Zeitstempel und das Schreiben in eine Datei klappt schon wunderbar.
Problemstellung: Der Lidar arbeitet mit rund 100HZ, die Wägezellen aktuell mit 12Hz (für 80Hz muss ich noch was umlöten). Lasse ich das nachfolgende Programm laufen passiert folgendes:
Es kommt keine Fehlermeldung. Das Programm läuft dann mit der Frequenz der Wägezellen. Der Lidar bildet seine Werte auch ab, jedoch stark Zeitverzögert. Es scheint so als würden alle Werte des Lidarsensors weiterhin mit 100hz erfasst, in einen Speicher geschrieben. Diese Werte allerdings nur mit 12Hz abgefragt und dann in die Datei geschrieben werden.
Vielleicht kennt jemand ja eine mögliche Lösung für diese Herausforderung Ich würde mich sehr über konstruktive Hilfe und Kritik freuen. Ich bin noch nicht so lange beim programmieren dabei
Hier noch der Programmcode:
import serial
import time
import RPi.GPIO as GPIO
import sys
from hx711 import HX711 #import der beiden Wägezellen
from hx711_2 import HX711_2
GPIO.setwarnings(False)
ser =serial.Serial('/dev/serial0',115200,timeout = 1)# Einstellungen für den Seriellen Port
#ser.write(0x42)
ser.write(bytes(b'B'))
#ser.write(0x57)
ser.write(bytes(b'W'))
#ser.write(0x02)
ser.write(bytes(2))
#ser.write(0x00)
ser.write(bytes(0))
#ser.write(0x00)
ser.write(bytes(0))
#ser.write(0x00)
ser.write(bytes(0))
#ser.write(0x01)
ser.write(bytes(1))
#ser.write(0x06)
ser.write(bytes(6))
zaehler = 0
start_time = time.perf_counter()
hx = HX711(5, 6)
hx_2 = HX711_2(27, 22)
hx.set_reference_unit(-45)
hx_2.set_reference_unit(-43)
hx.set_reading_format("MSB", "MSB")
hx_2.set_reading_format("MSB", "MSB")
hx.reset()
hx_2.reset()
hx.tare()
hx_2.tare()
print("Tare done! Programm Start!")
#name = input("Bitte Name für Messdatei angeben:"+'\n')
#print(name)
#file = open(name,'a')
while(True):
#while(ser.in_waiting >=9):
#print(ser.read())
if((b'Y' == ser.read()) and ( b'Y' == ser.read())):
end_time = time.perf_counter()
testtime = end_time - start_time
zaehler = zaehler +1
Dist_L = ser.read() # Auslesen des Lidarsensors und Umrechnung in die Distanz
Dist_H = ser.read()
Dist_Total= (ord(Dist_H)* 256) + (ord(Dist_L))
ser.read()
val = hx.get_weight(1) #Gewichte abfragen
val_2 = hx_2.get_weight(1)
print(zaehler, round(testtime,2), Dist_Total, round(val,2), round(val_2,2)) #Werte in Konsole anzeigen
file.write(str(zaehler)+" "+str(round(testtime,2)) +" "+ str(Dist_Total) + '\n') #Werte in Datei schreiben
Alles anzeigen