Quellcode für sensor

"""Modul zum Auslesen der Wägezelle.

Das Modul sensor.py verwendet die **HX711** Bibliothek als Grundlage und 
ermöglicht es den auf die Optikoberfläche wirkenden Druck (ferner die Kraft) zu 
messen. Mit der Bibliothek **RPi.GPIO** werden die GPIO Pins 20 und 16, 
konfiguriert über welche eine 2-Wire Verbindung mit dem HX711 aufgebaut wird.

Note: 
    Mehr Informationen zur HX711 Bibliothek sind unter: 
    https://github.com/gandalf15/HX711 zu finden.
"""

import RPi.GPIO as GPIO  # import GPIO
from hx711 import HX711  # import the class HX711


[Doku]class Drucksensor:
[Doku] def __init__(self, grundeinstellungen): """Wird aufgerufen, wenn ein Drucksensor-Objekt erzeugt wird. Grundeinstellungen wie Pin-Konfiguration und Kalibrierwerte der Wägezelle werden ausgelesen und in lokale Variabeln gespeichert. Args: grundeinstellungen (dict): Aus dem Config-File eingelesene Grundeinstellungen des Roboters. """ # GPIO Mode setzen GPIO.setmode(GPIO.BCM) # Pinkonfiguration self.dout_pin = int(grundeinstellungen['gpio_hx711_dout']) self.pd_sck_pin = int(grundeinstellungen['gpio_hx711_sck']) # Anzahl der zu erfassenden Samples für den Mittelwert self.samples = int(grundeinstellungen['wz_samples']) # Kalibrierwerte self.tare_wert = 0 self.maximale_tare_abweichung = int( grundeinstellungen['wz_tare_abweichung']) self.kalibriergewicht_in_gramm = float( grundeinstellungen['wz_kalibriergewicht_g']) self.kalibriergewicht_rohwert = int( grundeinstellungen['wz_kalibriergewicht_roh']) # Druckvariablen initialisieren self.aktueller_druck = 0.000 self.letzter_druck = 0.000 # Objekt zum Auslesen des HX711 self.hx = HX711(self.dout_pin, self.pd_sck_pin)
[Doku] def drucksensor_initialisieren(self): """Methode zur Initialisierung und Kalibrierung des HX711 bzw. der Wägezelle. Im ersten Schritt wird der Sensor-Rohwert auf Null (Tare) gesetzt. Bei Erfolg wird im Anschluss noch überprüft, ob sich der Rohwert innerhalb einer bestimmten Schranke (+/- ``wz_tare_abweichung``) befindet. Note: Liegt der Tare-Rohwert außerhalb einer der definierten Schranken, ist die Wägezelle belastet und eine Kalibrierung würde zu falschen Messergebnissen führen. Raises: Löst aus wenn beim Nullen (Tare) der Wägezelle ein Fehler auftritt. Returns: str: Gibt zurück ob Tarewert OK oder nicht. """ try: print("Initialisiere Drucksensor ...") # Überprüfung ob ein Fehler aufgetreten ist tare_fehler = self.hx.zero() if tare_fehler: raise ValueError('Tare nicht erfolgreich.') self.tare_wert = self.hx.get_raw_data_mean() # Überprüfen ob der Tarewert innerhalb des erwarteten Bereichs liegt if self.tare_wert: if (int(self.tare_wert) < self.maximale_tare_abweichung): print('Tarewert OK.', self.tare_wert) else: print("Tare außerhalb des erlauben Bereiches") print("Ist:", self.tare_wert) print("Soll: <", self.maximale_tare_abweichung) return "Tarewert nicht OK" else: print('Kein gültiger Tarewert:', self.tare_wert) # Kalibrierung des Sensors anhand der Kalibrierwerte in # den Grundeinsellungen verhaeltnis = \ self.kalibriergewicht_rohwert / self.kalibriergewicht_in_gramm self.hx.set_scale_ratio(verhaeltnis) return "Tarewert OK" except: print("Fehler bei der Sensorkalibrierung!")
[Doku] def druck_auslesen(self): """Methode zum Auslesen des aktuellen Druckwertes. Wird ein ungültiger Druckwert ausgegeben, sendet die Methode ``get_weight_mean()`` den Bool-Wert ``False`` zurück. In diesem Fall wird der aufrufenden Methode der letzte gültige Wert des Sensors zurückgegeben. Note: Zur leichteren Vergleichbarkeit wird der ausgelesene Sensorwert in der GUI nicht als Druck in einer genormten Einheit, sondern in % ausgegeben. - 0% entsprechen dem unteren Anschlag der Aufnahme - 102% entsprechen dem oberen Anschlag der Aufnahme Raises: Löst aus, wenn es beim Auslesen der Wägezelle zu einem Fehler kommt. Returns: float: Gibt den aktuellen Druck in % zurück. """ try: druckwert = self.hx.get_weight_mean(self.samples) if druckwert: self.aktueller_druck = float("{:.4f}".format(druckwert)) self.letzter_druck = self.aktueller_druck else: self.aktueller_druck = self.letzter_druck except: print("Fehler beim Auslesen des Drucksensors!")
[Doku] def tareWert(self): """Methode zum Auslesen Tare-Rohwertes. Returns: int: Gibt den Tare-Rohwert zurück (einheitenlos). """ return self.tare_wert