Stromsensor - Schwellwertanpassung

Hi zusammen,
vorweg: ich bin kompletter Arduino-Einsteiger. Bin auch kein Programmierer, habe aber einige Grunderfahrungen in diversen Sprachen, die Grundprinzipien der Programmierung sind also bekannt. (Bedingungen, Schleifen, etc…)

Ich würde gerne eine Pumpensteuerung realisieren um Modelle zu tanken.
Idee: 3 Taster, füllen, stop, leeren. Mit einem kleinen Display bissl aufgehübscht. (Spielerei)
Optional: Erkennung des Strombedarfs der Pumpe – bei abruptem Anstieg: „Tank voll - STOP“. (erhöhter Widerstand, wenn Inhalt durch den Überlauf rausgedrückt wird.) Das Gleiche für abrupten Abfall des Stromes beim Enttanken, wenn der Tank bzw. die Pumpe leer läuft.

Mal abgesehen von der Feinjustierung der Stromabschaltung stelle ich mir das unter´m Strich relativ simpel vor. Wie würdet Ihr da ran gehen? Gibt’s Startersets, die mir das bieten? Brauche ja vermutlich ein Relais für die Pumpe; im besten Fall ein 2-poliges 3-Wege Relais AN-AUS-AN um Vor und Rücklauf zu realisieren. Dazu ein Modul für die Strommessung.
Was könnt Ihr mir empfehlen? Was sollte man auf jeden Fall gelesen haben?

Danke Euch im Voraus und freue mich auf Eure Anschübe :wink:
Jones

Was sollte man auf jeden Fall gelesen haben?

Eine beliebige Abhandlung zu "endliche Automaten"
Ein C++ Buch.
Die Datenblätter zu den Komponenten.

Hallo,

in der IDE unter Beispiele gibts jede Menge zum lernen. In der Hilfe gibt eine Referenz zum Syntax. Ich denke die grösste Herausvorderung für Dein Projekt wird die Erfassung des Motorstromes für die Pumpe werden. Was soll das für ein Motor für die Pumpe sein ?
Versuche von Anfang an delay() zu vermeiden, benutzte millis(). wie man damit umgeht kannst Du dem Beispiel "BlinkWithoutDelay" und der "Nachtwächter" Erklärung entnehmen.

Heinz

Alr Relais gehen auch 2 stück mit jeweils 1 x um., oder eine H-Brücke.
Da ich den Stromverbrauch der Pumpe als relativ niedrig einschätze, würde ich die Strommessung mit einem niederohmigen Shunt in der Masseleitung testen, notfalls ein Opamp dahinter. Oder einen ACS712.

Hast du schon mal die Stromänderung mit dem Multimeter gemessen ?
Um was für eine Pumpe handelt es sich? Modellbau?

Hallo,

nimm erstmal nur Taster und Leds. Die Leds simulieren deine späteren Relais.
Und jetzt programmierst du dir eine Ablaufsteuerung oder endlicher Automat wie combie es benannt hat oder Zustandsautomat oder ...

millis wirst du benötigen

Theseus erklärt millis()

GuntherB - BlinkwithoutDelay - Die Nachtwächtererklärung

Ein C++ Buch ist nicht falsch.
Die Arduino Funktionen etc. sind hier erklärt ArduinoForum.de - Das deutschsprachige Forum rund um den Arduino - Arduino Code-Referenz (deutsch)

Ich kenne kein 3-Wege Relais. Ich kenne nur ein Umschaltrelais (common, normal close, normal open)
Grüße Uwe

Flunz:
Ich würde gerne eine Pumpensteuerung realisieren um Modelle zu tanken.

Deine Themenüberschrift "Erstes Projekt - Beginner braucht Starthilfe" trifft auf geschätzt 95% der Themen zu, ist also sehr unspezifisch. Ich mache Dir einen Alternativvorschlag. Du kannst in #0 den Thementitel ändern.

Flunz:
Gibt’s Startersets, die mir das bieten?

Ich habe mit einem Starterset von Funduino begonnen, weil es dort Anleitungen in Deutsch gibt. Weil ich kein konkretes Ziel hatte, habe ich mit der meisten Hardware "gespielt", um zu erfahren, was geht. Nachträglich betrachtet war das kein schlechter Einstieg, allerdings ist es fraglich, ob Du mit einem Servo "spielen" möchtest, wenn Du den später nicht einsetzen möchtest. Modellbau und Arduino passen gut zusammen.

Inzwischen kaufe ich einen Teil meiner Elektronik direkt in China, weil sensationell günstig. Auch wenn ich mit den freundlichen Chinesen gute Erfahrungen gemacht habe, ist das ein zweischneidiges Schwert, gerade für einen Anfänger.

Flunz:
Was sollte man auf jeden Fall gelesen haben?

Als Anfänger habe ich für Anfänger ein paar Anleitungen geschrieben, die möglicherweise für Dich nützlich sein könnten. Suche hier im Forum nach "agmue anleitung". Dort habe ich auch andere Links gesammelt. Beachte bitte auch die vernichtende wie lobende Kritik, ich stehe zu meinen Veröffentlichungen, Fragen sind natürlich erlaubt.

Ein Quell der Freude sind auch die MobaTools vom auch hier im Forum aktiven Autor MicroBahner.

RudiDL5 hat im Thema Anleitung: Endlicher Automat mit millis() eine Fußgängerampel mit OOP realisiert, ich dann prozedural. Da kannst Du wegen der von Dir erwähnten Grunderfahrungen mal überlegen, in welche Richtung Du gehen möchtest.

Flunz:
Was könnt Ihr mir empfehlen?

Ich würde mit einem Steckbrett mit Kabeln, Arduino UNO, 20x4 LC-Display mit I2C (Bibliotheksverwalter der IDE "hd44780" von Bill Perry), LEDs und Tastern anfangen. Die Stromerkennung würde ich zunächst mit Tastern simulieren.

Und schon kann der Spaß beginnen :slight_smile:

Hallo zusammen,

zunächst einmal "Danke" für Eure Rückmeldungen und "Sorry" für mein spätes Feedback.

Meine "Tankstation" funktioniert vom Prinzip her, bedarf aber noch einer Optimierung, was die Abschalterkennung angeht.

Ich habe 2 Taster, ein LCD, eine H-Bridge BTS7960 und ein Spannungssensor.
Als Stromsensor dient der IS-Port an der H-Bridge.

Die Statemachine läuft. Ich habe Erkennungen für lange und kurze Tastendrücke um automatisch und manuell zu tanken, Vor- & Rücklauf, gebe entsprechende Meldungen aus (voll, leer, Pumpe zieht Luft,....).

Nun zu meinem Problem:

  1. Die Pumpe (Speed400, 12V) schwankt im Betrieb.
  2. Der Anstieg des Stromes ist nicht wirklich signifikant wenn der Tank voll ist und der Sprit durch den Überlauf gedrückt wird.

Deshalb ist es schwierig Schwellwerte zu finden, welche die Schwankungen glätten, den Endanstieg aber sicher erkennen.

Was mache ich im "auto mode"?

Lager Tastendruck --> Tanken
Pumpe an.
Zunächst warte ich 2Sek ehe ich zu messen beginne, damit der Lauf der Pumpe / der Spritfluss eine gewisse Konstanz erreicht hat.
Ich nehme meinen Sensorwert und mittele ihn schon mal mit dem letzten, um erine erste Glättung zu bekommen.
Ich erzeuge ein gefiltertes Mittel über einen längeren Zeitraum: mittel = ((mittel * trägheit)+messwert)/(trägheit+1)
Trägheit hier irgendwas zwischen 10 & 1000, macht die Anpassung des Mittels eben träger oder agiler.

Ich prüfe, ob der gemssene Strom größer ist als mein Mittelwert + Schwellwert.
Ich verzögere die Entscheidung um eine gewisse Zeit (+-250ms) in der ich weiter messe.
Ist nun der Strom immer noch höher als das Mittel + Schwellwert --> Pumpe aus.

Ein bissl anders aber vom Prinzip her ähnlich funktiniert umgekehrt das Enttanken.

Ich habe also "Anpassungsvariablen" für die Trägheit meiner Glättung, den Schwellwert der überschritten werden muss und den Zeitfaktor.

Das funktioniert 10x problemlos(!), 5min später gehen 6 von 10 Versuchen in die Hose; aber auch das ohne System. Mal schaltet es mitten drin ab (Schwellwert offensichtilich zu niedrig), mal wird die Abschaltung nicht ausgelöst (Schwellwert offensichtlich zu hoch).

Habt Ihr Ideen, wie man das weiter glätten, oder sicherer erfassen könnte?

Jones

Flunz:
.....
Habt Ihr Ideen, .....

Dir wurde ein Tipp gegeben. deinen Titel zu verbessern.
Warum machst du das nicht ?

HotSystems:
Dir wurde ein Tipp gegeben. deinen Titel zu verbessern.
Warum machst du das nicht ?

Weil das meine Frage nicht beantwortet?

Ist erledigt.

Flunz:
Weil das meine Frage nicht beantwortet?

Klar kann das deine Frage nicht beantworten.
Diese wird aber einfacher gefunden und ist somit evtl. besser zu beantworten.

Im Grunde geht es dir um eine “automatisierte Betankung von Modellen” richtig?
ich fasse nochmal zusammen was ich verstanden habe, was du willst:

  • Pumpe mit Vorlauf/Stopp/Rücklauf (3 Taster).
  • Erkennung Tank voll/leer.
  • Displayanzeige.

Ich stelle mir folgende Fragen:

  • was für eine Pumpe wird verwendet, hast du einen Link zur Speed400 oder ist das nur der Graupner Motor?
  • wie wird die Pumpe angesteuert und versorgt, DC oder PWM-Spannung?
  • wie erkennt man zuverlässig ob ein Tank voll oder leer ist?
  • gibt es dafür Sensoren?
  • was soll wann auf dem Display angezeigt werden?

Meine Antworten dazu sind:

  • Wenn deine Pumpe mir einer Gleichspannung arbeitet und sie durch Umpolung rückwärts laufen kann,
    dann kannst du eine H-Brücke wie den L298N verwenden.
    Der BTS7960 ist zwar etwas überdimensioniert aber besser als der zu schwache L293D.

  • Ob ein Tank voll bzw. leer ist, kann man fast nur mit Sensoren zuverlässig erkenne.
    Strommessung und auch Druck fallen in deinem Fall aus.
    Der Überlauf macht das so schwer das es nicht zuverlässig arbeiten kann.
    Sinnvolle, günstige Sensoren sind Durchfluss und Wiederstand.

  • Mit einem Durchflusssensor kann man halbwegs genau einen Zähler bauen,
    um zu messen wieviel Treibstoff eingefüllt wurde. Dann stoppt der Arduino nach Menge.
    Eine Platzierung im Überlauf anstelle dem Zulauf ist auch eine Möglichkeit.

  • Mit einem Wiederstandssensor würde das eher wie beim Blumengießen funktionieren.
    Der Tank des Modell müsste dann einen Sensor haben der je nach füllmenge seinen Wiederstand ändert.
    Problem dabei, solche Sensoren werden von Treibstoff schnell zerfressen.

  • Also kombiniere deine unzuverlässige Strommessung mit einem Durchflussensor.
    Der Durchflusssensor kann dann das Zeitfenster für die Strommessung deutlich verringern.

  • Auf dem Display würde ich zum einen anzeigen was die Pumpe gerade macht (Vorlauf/Stopp/Rücklauf),
    aber auch den aktuellen Messwert des Sensor und bei welchem Wert er stoppt.

Pumpe: Vorlauf
Gefüllt: 53ml / 100ml

Wenn du das Thema mit dem Strom professionell aufgreifen willst musst du für eine vernünftige Lösung etwas Geld in die Hand nehmen. Beispielsweise könntest du eine schrittmotorgesteuerte Pumpe mit einem Trinamic Motortreiber steuern der wiederum zurück geben kann wie stark der Wiederstand ist dem er entgegen wirken muss. Das nennt sich dann StallGuard Trinamic stallGuard2™ and coolStep™ - YouTube
Genau genommen ist es ein Mikrocontroller gesteuerter Chopper für einen Schrittmotor.
Für einen Anfänger geht das aber so weit in die Tiefe, das man sich verirrt.
Trinamic liefert solche Antriebe z.b. für Dialysegeräte.

Ich hoffe ich konnte dir damit einen kleinen Denkanstoß geben. :wink:

Hallo Avoid,

danke für Deine Rückmeldung.

Deine Fragen:
Pumpe:
ja, stinknormaler Speed400, 12V, Gleichstrom mit angeflanschter Pumpe von Ullermann welche in beide Richtungen fördern kann. Derzeit ohne PWM, über die H-Brücke nur vorlauf-aus-rücklauf.

Wie man "voll" erkennt?
Ich hoffe am Strom (nein, das ist so); jedenfalls ist der steigende Widerstand der Pumpe deutlich hörbar, wenn der Tank voll ist und überläuft.
Die Erkennung "leer" beim Enttanken ist zuverlässig: bei leerdrehender Pumpe sinkt der Strom signifikant.

Ich habe Tankkonstellationen, da ist ein "Stopfen" im Überlauf - genauer ein Stückchen Spaxschraube durch deren Gewinde (2-3 Gänge) der Tank im Betrieb luft ziehen kann. (hat aerodynamische Gründe, warum man das macht) Hier funktioniert alles Perfekt, da der Strom signifikant ansteigt, wenn die Pumpe den Sprit durch die Schraube drücken muss. Da ist das finden eines Schwellwertes einfach.

Aber nicht alle Tanks haben diesen Stopfen.
Mir geht es jetzt im Prinzip nur noch um einen Algorithmus, eine Idee, wie ich die Erkennung präzisieren kann.

Sensoren:
Alles was mit Sensoren am Tank zu tun hat fällt raus, da es nicht um einen Tank geht, sondern um viele. Diese haben unterschiedliche Größen, verschieden lange und dicke Verschlauchungen und verschiedene zu überwindende Förderhöhen. (mit Absolut-Werten lässt sich also auch nicht arbeiten)

Mengen zu messen ergibt auch nicht wirklich Sinn; es ist nicht bekannt a)wie groß der Tank ist, b)wieviel ggf. bereits im Tank ist.

Display ist nebensächlich; das funktioniert alles. Das waren mehr meine Einstiegsfragen, da bin ich glaub ich drüber weg :wink:

Jones

Flunz:
Weil das meine Frage nicht beantwortet?

Eine informative Überschrift bringt Dir mutmaßlich die richtigen Helfer.

Flunz:
... stinknormaler Speed400 ...

Bedenke bitte, Du schreibst in einem Arduino-Forum, nicht bei den Modellbauern.

Ich mache Dir keine Vorschriften, sondern möchte Dir durch meine Perspektive auf Deine Frage helfen.

Flunz:
... jedenfalls ist der steigende Widerstand der Pumpe deutlich hörbar ...

Was hörst Du da? Ist es die sich ändernde Drehzahl? Wäre es eine Idee, die Drehzahl auszuwerten?

Oder könnte man die Änderung beim Durchfluß messen?

Alles nur Ideen, wenn es mit dem Strom nicht funktionieren sollte.

ok, wenn das mit den Tanks und sogar der förderhöhe so unterschiedlich ist, wundert es nicht das du so Probleme hast Referenzwerte deiner Strommessung zu finden.

Dann fällt mir nur noch eine Lösung ein.
Mach's wie jede normale Tankstelle!

Spendiere deinem Schlauch der befüllt, einen innen liegenden kleineren schlauch als Rücklauf.
Hier würde ich dann anstelle einer Mechanik einfach einen Durchflusssensor anbringen.
Wenn der Sensor merkt das Kraftstoff durch den Rücklauf kommt, kann der Arduino anschalten.
Oder anderes herum gezielt Pumpen bis Luft kommt.
So hast du auf Seite deiner Tankstation einen sauberen Kreislauf und es kann dir sogar egal sein ob der Tank den du befüllst einen überlauf hat weil Überdruck in form von Luft und Treibstoff zurückgeführt wird.

Ich würde z.b. so einen Sensor verwenden:

Du kannst dich aber auch im Bereich von Computer Wasserkühlung umsehen, leider haben die dortigen Sensoren nicht die Genauigkeit und reagieren gerne auch auf Luft.