NEWS
Widerstands-Tankgeber auslesen
-
Habe jetzt mal eben ein wenig gerechnet ...
Der ADC hat soweit ich weiß eine maximale Eingangsspannung von 1 Volt - um diese mit 3,3 V auszureizen, müsste man einen Vorwiderstand von 437 Ohm benutzen.
Mit 470 Ohm ist man nahe genug daran ...
Wenn man die Schaltung mit 24 Volt speist, müsste der Vorwiderstand 4370 Ohm betragen, also 4,7 kOhm. Die Nichtlinearität wäre da deutlich geringer ...
gnuplot
gnuplot> set xrange [0:190] gnuplot> set yrange [-0.1:1.0] gnuplot> plot [0:190] 3.3*x/(470+x), x/190, 24*x/(4700+x) gnuplot>Ist aber eigentlich eine akademische Diskussion, da ja auch die Behältergeometrie eingeht ...
Wenn man der Mathematik ausweichen will, ggfs einfach eine Lookup-Table verwenden ...
@MartinP
Schöne Berechnungen.
Aber ob es "linear" ist oder nicht, macht doch nichts aus.
Er kennt ja seine Konfig und kann aus der Spannung am ADC den Widerstand vom Geber berechnen.
Und von da an ist es dann wieder linear (natürlich Tankformabhängig)Speisung via 3.3V hat meiner Meinung nach mehrere Vorteile:
-
Weniger "Verlustleistung"
-
Gleiche Source für ADC und Geber (Falls z:B die 24V varieren, variert auch der ADC Ausgang obwohl am Geber nichts ändert
-
Beim "Kratzen" steigt die Spannung sicher nie über 3.3V
-
Sehr kleinlich, aber bei tiefen Füllständen hast du mit 3.3V (gemäss deinem Plot) die bessere Auflösung ;-)
-
-
Vielen Dank für die rege Unterstützung und euer Interesse. Auf dem ESP32 hatte ich Tasmota Firmware geflasht. Ich bin davon ausgegangen, dass die Sketche von Arduino mit Tasmota kompatibel sind und deshalb einen Fehler vermutet. Nun ja, war es auch. Im nachhinein hatte ich noch gelesen, dass der Speicherplatz auf dem ESP für mein Vorhaben zu klein ist. Ich habe mich also nach einer Alternative umgeschaut. Nun versuche ich ein Javascript auszuprobieren. Übrigens der Tankgeber war tatsächlich defekt. Gestern kam Ersatz, den habe ich gleich mal getestet und siehe da, ich konnte entsprechende Werte auf meinem Spannungsmesser ablesen.
Die Tankgrößen sind mir bekannt. Somit kann ich die gemessenen Werte an den Tankinhalt anpassen. Es kommt mir dabei nicht so sehr auf den Liter an, es ei denn die Abweichungen sind gravierend. Ich möchte nur verhindern, dass ich nicht "leerlaufe".
Vielen Dank auch für die Berechnungen und der Grafik. So kann ich mir ein genaueres Bild machen. BG -
Hallo zusammen, ich hätte nicht gedacht, dass mein Vorhaben so kompliziert wird, auch wenn es Spaß macht.
Also ich habe jetzt meinen Tankgeber auf einem Breadboard nachgestellt. Funktioniert alles sehr gut, aber der simulierte Widerstand des Tankgebers bei 190 Ohm erfordert einen Vorwiderstand des Spannungsteilers von 1295 Ohm um einen Wert von 3,12 Volt zu bekommen. Das wäre erst einmal ein guter Anfang. Mein ESP32 zeigt mir auch diesen Wert auf der Tasmota Software an.
Ich konnte den ESP32 auch im IOBroker einbinden. Der ESP32 ist unter dem Ordner: sonoff.0.ESP32_Wroom_1 angelegt mit einigen Unterordnern und States. Unter den Unterordnern Results/States ist der Datenpunkt für den GPIO34 zu finden."sonoff.0.ESP32_Wroom_1.RESULT.GPIO.34" und auch hier "javascript.0.esp32.gpio34_voltage"
Beide zeigen keinen Wert, außer 0 bzw. 0V, an und das ist mein Problem. ich bekomme die Werte von Tasmota nicht in den IOBroker eingelesen. Ich habe verschiedene Sachen ausprobiert, aber keine Lösung gefunden. Vielleich kann mir jemand einen Schubs in die richtige Richtung geben? Das wäre sehr nett. Das hier ist mein letzter Versuch.
var dp = 'sonoff.0.ESP32_Wroom_1.RESULT.GPIO.34'; var voltageDP = 'javascript.0.esp32.gpio34_voltage'; createState(voltageDP, 0, { name: 'GPIO34 Spannung', unit: 'V', type: 'number', role: 'value.voltage' }); // Alle 1 Sekunde den Datenpunkt abfragen setInterval(function() { getState(dp, function(state) { if (state && state.val !== null) { var voltage = parseFloat(state.val); if (!isNaN(voltage)) { setState(voltageDP, voltage, true); log('Spannung GPIO34: ' + voltage + ' V'); } } }); }, 1000); // Intervall in MillisekundenBeste Grüße