Tanklfüllung messen mit Arduino?

Hallo zusammen,

ich habe hier einen Tank und einen Sensor. Der Sensor hat folgende Werte:

0% = 73 Ohm
50% = 23 Ohm
100% = 10 Ohm.

Wie ich das Ding mit dem Arduino verkable weiß ich. Ich weiß nur nicht, wie ich die entsprechenden Werte errechnen soll. Habt ihr hier eine Idee?

Danke euch.

Moin,
es gab mal hier ein Thread, da wollte einer Öltank Messungen durchführen.
Am besten die void sufu() benutzen.

Und beim nächsten Post bitte mehr Angaben zum Sensor.

Servus,

den Beitrag habe ich gesehen. Leider beantwortet er meine Frage nicht.

Es geht um einen ganz normalen Benzintankgeber im Auto. Dieser hat einen Wertebereich von 10 - 73 Ohm. Wobei 10 Ohm bedeutet, dass der Tank voll ist.

Wie ich mit dem Arduino Widerstände messen kann, weiß ich bereits. Ich muss nur wissen, wie ich diese Werte von 73 Ohm bis 10 Ohm programmiertechnisch in 0% bis 100% umsetze.

Danke euch.

Wenn's linear geht nimm doch einfach die map-Funktion.

Edit: nachdem ich nochmal mit eingeschaltetem Hirn gelesen habe stelle ich fest: ist nicht linear :smiley:
Also könnte man nach guter alter Manier aus den 3 gegebenen Punkten eine Formel ableiten und die verwenden.

Vermutlich ist es der Genauigkeit aber zuträglicher, noch Zwischenwerte aufzunehmen. Oder halt nicht und dann die grobe Aufteilung zu verwenden.

Grüße
Klaus

Danke. Die MAP Funktion ist genau richtig.

hi,

die map-funktion wird's nicht bringen. da Du bei 50% füllung ein viertel des wertebereichs raufgehst, isses eher eine quadratische funktion.

gruß stefan

Wie wäre es mit linearer Interpolation ?
Die Kurve aus Stützwerten bauen, die Werte dazwischen sind Geraden.

int Outwert (int _MoD){              // _MoD = Eingangswert 
  const int Tablength = 9;
  const int Tab[Tablength][2]={ {  0 ,   5 },
				                        {360 ,  10 },
				                        {400 ,  18 },
		                         		{440 ,  39 },
				                        {520 , 111 },
			                        	{600 , 194 },
				                        {640 , 226 },
			                         	{680 , 248 },
				                        {720 , 255 }};

      


      // In Tabelle das passende Wertepaar suchen
      int i = 0;
      while (i < Tablength && _MoD > Tab[i][0])  i++;  
      
      // aus dem ermittelten Wertepaar und dem nächsten darüber den korrekten Wert interpolieren
      int _out = (   ((Tab[i][1] - Tab[i-1][1])*( _MoD - Tab[i-1][0] ))
      		 	  / (Tab[i][0] - Tab[i-1][0] ))
     		 + Tab[i-1][1];    
     return _out;
}

Beispielcode, das Array ist auf deine Bedürfnisse anzupassen.
Das ganze habe ich auch mal gebraucht und mich mit Polynomen x-Ordnung rumgeschlagen.
Bis ich dann den Tip von Gunther bekam.

Wobei du natürlich versuchen kannst eine Funktionsvorschrift aus den 3 Werten zu errechnen, ist gar nicht so komplex wenn man weiß wie.

Schaue dir die Funktion dann graphisch an, gibt genug Online Schreiber oder Excel, ob diese im gesamten Wertebereich plausible Werte liefert.
Wenn nicht dann via linearer Interpolation, evtl. mit mehr Stützwerten wenn vorhanden

Könnte aber auch der linke Ast einer Parabel sein, mal sehen…

 a = 0,0453064923
 b = -5,341268092
 c = 148,8820316901

Komme da auf diese Werte, für F(x)=ax^2 +bx +c.
Den Graph habe ich angesehen, da passen die Zwischenwerte nicht.
Also linearer Interpolation, mit 3 Werten dies

const int Tablength = 3;
  const int Tab[Tablength][2]={ { 73 , 0 },
			                             {23,50 },
		                           	{ 10,100}};

Ich würde sagen Du hast 2 Nichtlinearitäten: Den Sensor und die geometrisch Form des Tanks (Ist sicher kein Quader sondern eine sehr platgequetschte Kugel mit irgendwie rechteckigen horizontalen Querschnitt und in den verfügbaren Platz im Auto hinenmodelliert. Du brauscht mehr Meßpunkte als nur 3.

zB:

Grüße Uwe

hi,

mal ehrlich: die sicherste und genaueste methode, wäre, langsam benzin einzufüllen und bei jedem widerstandswert die menge aufzuschreiben. daraus dann ein array mit 64 werten.

gruß stefan

Hallo zusammen,

kann mich da Stefan nur anschließen. Ich würde eine Liste machen mit sovielen Werten wie möglich, diese Werte in ein Koordinatensystem eintragen, und schauen wo die Änderungen am wenigsten linear sind. Diese Bereiche sollten dann im fertigen Array stärker vertreten sein.

Grüße,

Sven

Den Tank auszulitern um viele Werte zu erhalten ist natürlich das Optimale.
Je nach Form des Tanks, wird es mit nur drei Werten ein Schätzeisen.

rudirabbit:
Den Tank auszulitern um viele Werte zu erhalten ist natürlich das Optimale.
Je nach Form des Tanks, wird es mit nur drei Werten ein Schätzeisen.

Und vor allem, wo eine richige Messung wichtig wäre ( wenn der Tank fast leer ist) ist die Nichtlinearität und damit der Fehler am größten.

Also Tank leerfahren und ein Tankauto mit einen Fahrer bestellen, der viel Gedult hat um halbliterweise aufzutanken. :wink: :wink: :wink: :wink: :wink: :wink:

Grüße Uwe

Wenn man nicht erzählt, dass man vorhat, damit Unfug zu veranstalten, kann man an Tankstellen Benzinkanister erwerben und füllen.

Wenn es einem tatsächlich darauf ankommt, an der Arduino-Anzeige den Unterschied zwischen 1% und 0.5% voll live zu erleben, ist es sowieso gut, so einen Kanister immer dabei zu haben :wink: