Reaktion auf Sensorwert

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen, ich stehe gerade etwas auf dem Schlauch und bräuchte eure Hilfe...

    Ich möchte in Python gerne folgendes Schema als Dauerschleife programmieren...

    Wenn Sensorwert <850 print "keine Störung"

    wenn Sensorwert >850 print "Störung"

    Der Sensorwert soll jede Sekunde gecheckt werden und wenn sich der Wert des Sensors nach dieser Sekunde im selben Bereich ( <850 oder >850) befindet soll nichts passieren.

    Ich hoffe ich konnte mich richtig ausdrücken und ihr könnt mir kurz helfen,

    besten Gruß

  • Da ich denke, dass dem noch nicht den Anforderungen entspricht aufgrund von:

    Der Sensorwert soll jede Sekunde gecheckt werden und wenn sich der Wert des Sensors nach dieser Sekunde im selben Bereich ( <850 oder >850) befindet soll nichts passieren.

    Hier mein Vorschlag (was soll eigentlich bei genau 850 passieren? da kann es sein dass du die Logik noch anpassen musst, bei mir ist bei 850 noch ok):

    Die Variablen und Attributnamen müssen noch durch bessere ersetzt werden, außerdem wiederholen/ähneln sich Zeile 34-43 sehr, womit das evtl besser in einer Funktion aufgehoben ist :thumbup:

  • Glaubt ihr wirklich, dass dieser OO-Code den "Neuling" pabau001 weiter bringt oder postet und liket ihr sowas nur aus reiner Selbstgefälligkeit?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ja glaube ich das es ihm weiter bringt, oder glaubst du wirklich dass es bei print(xy) bleibt? Nein natürlich nicht.

    Also wie bekommt man das am besten wartbar und erweiterbar?

    Richtig mit dem genannten OO.

    Und wenn man wo was nicht versteht kann man entweder Schritt für Schritt Devisen oder nachfragen.

    Wer Python verwendet muss sich zwangsläufig mit OO beschäftigen. Jedes Modul setzt darauf

  • Glaubt ihr wirklich, dass dieser OO-Code den "Neuling" pabau001 weiter bringt [...]

    nur so lernt er, wie man in Python richtig programmiert.

  • Hallo,

    Hofei ich habe deinen Code mal etwas abgeändert, wie ich ihn auf den ersten Blick schreiben würde, siehst du darin einen Nachteil im Vergleich zu deinem? Habe ich etwas wichtiges weggekürzt wo du vermutlich schon einen Schritt weiter gedacht hast?

    Sorry an den TE für die Zwischenfrage, aber vielleicht hilft es dir ja auch weiter.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Dennis89

    Dass man das Ganze viel mehr in die Klasse verlagern kann, ist natürlich richtig :thumbup:

    Zeile 36 würd ich so jedoch nicht machen. Denn wenn du sicherstellen willst, dass jede Sekunde (bzw. die Zeit in MESSINTERVALL gemessen wird, dann darf natürlich nicht solange geschlafen werden, denn die anderen Aktionen benötigen ja auch Zeit.

    Weshalb ich das immer so löse wie in Zeile 30 in meinen Code.

    Habe gerade noch einen Fehler im Code entdeckt und ihn um Zeile 44 erweitert.

    Mein Vorgehen ist, ich vergleiche die Differenz der aktuellen Zeit zu dem letzten Messzeitpunkt mit dem gewünschten Messintervall, wenn größer oder gleich führe die Messung aus.

    Geschlafen wird ein Bruchteil des gewünschten Messintervalls. Wie exakter der Messzeitpunkt getroffen werden soll, desto höher der Teiler.

    Außerdem möchte der TE das eine Aktion nur einmalig nach dem Wechsel des Zustandes ausgeführt wird:

    und wenn sich der Wert des Sensors nach dieser Sekunde im selben Bereich ( <850 oder >850) befindet soll nichts passieren.

    In deinem Code wird bei jedem Messvorgang das print("keine Störung") oder print("Störung") ausgegeben.

  • Um Gnom zu beruhigen, es geht auch ohne Klassen.

    Die Klasse Sensor ist ausschließlich zur Simulation des Sensors da und kann gelöscht werden.

  • Klar, da steckte noch nicht viel drin.

    Da der TE aber Probleme hatte, Aktionen nur einmalig auszulösen beschränkte ich es damit.

    Wie Dennis es ja schon richtig fortgesetzt hatte, kann da drin dann natürlich die ganze Logik ausgewertet und Aktionen ausgelöst werden.

    So wie das hier aber gelaufen ist, wurde nicht der Code ansich kritisiert, sondern die Person angegriffen. Ich werds überleben, aber ob das richtig ist?

  • Nein.

    Hab auch ehrlich gesagt nicht die Lust mir das Video anzusehen, hast du gelesen was ich zuvor schrieb? Wohl auch nicht.

    Wie Dennis es ja schon richtig fortgesetzt hatte, kann da drin dann natürlich die ganze Logik ausgewertet und Aktionen ausgelöst werden.

    der glaubst du wirklich dass es bei print(xy) bleibt? Nein natürlich nicht.

    Aber klar, da machts natürlich erstrecht viel mehr Sinn :thumbup::lol:

    Code
    class Sensor:
        """
        Die Klasse simuliert den Sensor.
        Der User muss irgendeinen Float eingeben
        Dieser Wert wird dann verglichen
        """
        def read_sensor(self):
            return float(input("Sensor-Wert: "))

    Das nächste mal gibts bei mir nur noch Empfehlungen mit global und / oder auf Modulebene, das macht nicht so viel Wirbel und man muss sich nicht so oft und lange rechtfertigen. :no_sad::thumbdown: Aber es macht eh den Anschein, dass nicht mehr richtig gelesen wird was geschrieben wird

  • MCP3008 - ACS712

    Hinweis: Der ACS712 benötigt 5V VCC und 4.5 V VCC ist das Minimum.

    D.h. der MCP3008 braucht dann auch 5V VCC und um den RPI nicht zu zerstören, werden Pegelwandler für den SPI-Bus benötigt, da der Pegel von VCC abhängig ist. D.h. wenn man den MCP mit 3.3V versorgt, kann man den ohne Bedenken an den GPIOs des RPI nutzen.
    Sobald 5V VCC verwendet wird, killt das Signal die Eingänge. Bezüglich Pegelwandler gibt es hier andere mit mehr Erfahrung.

    Benötigt wird gpiozero und das SPI-Interface muss aktiviert sein (rpi-config).

    Dann gpiozero installieren:


    Um den ADC zu testen:

    Python
    from gpiozero import MCP3008
    
    
    # Kanal 0 am ADC
    # Pegelwandler für die SPI-Signale nicht vergessen
    
    sensor = MCP3008(0, max_voltage=5)
    # 5V bezogen auf den VCC
    # 2.5 V wären dann 0 A
    print(sensor.value)

    Als Letztes kommt dann die Skalierung auf Strom.

    Leider geht mir gerade die Zeit aus, da ich noch was anderes machen muss.

    Die Skalierung des Messwerts ist etwas tricky.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!