Forum: Mikrocontroller und Digitale Elektronik Arduino Programmierung ( Widerstandsmessung )


von Marcel K. (marcel_k)


Lesenswert?

Hallo Leute!

Habe vor geraumer Zeit etwas von diesem schicken Arduino gehört und mich 
auch entschlossen mir ein komplettes Paket inklusive Buch darüber, 
zuzulegen.
Soweit klappt auch alles wunderbar, nun habe ich aber eine Frage zum 
Thema "Widerstand auslesen"

Ich möchte gerne ein Poti auslesen, dass einen Einstellbereich von 0 Ohm 
bis ca 300 Ohm
hat. Soweit so gut, das auslesen klappt und ich kann mir die Werte auch 
auf dem "Seriellen Monitor" anzeigen lassen.

Jetzt möchte ich aber gerne erreichen, dass mir ca. alle 4 Ohm 
Widerstandsveränderung eine Zahl ausgegeben wird.Zum Beispiel : 0 Ohm = 
0 ; 4 Ohm = 1 ; 8 Ohm = 2 und so weiter. Eine Auswertung muss nur einmal 
in der Minute erfolgen wenn nicht sogar alle 5Minuten.

Wie kann ich das bewerkstelligen? Später soll diese Zahl dann per LCD 
ausgegeben werden.

Hier noch der Code den ich aus nem Tutorial habe, hier funktionierte das 
Ganze mit einem 10k-Poti :


// Poti einlesen und ausgeben //

int Poti=0;
int raw,raw_last,raw_min,raw_max=0;
int hysterese=10;


void setup()
{
  Serial.begin(9600);
  Serial.println("Momentaner Widerstandswert auslesen und ausgeben");
  Serial.println();
}


void loop()
{

  raw=analogRead(Poti);
  raw_min=raw_last-hysterese;
  raw_max=raw_last+hysterese;

  if((raw!=raw_last))
  {
    if((raw>raw_max)||(raw<raw_min))
    {
      Serial.println(raw);
      raw_last=raw;
    }
  }

}


Danke für eure Tipps!

x

von Schorsch (Gast)


Lesenswert?

Hi,

den Widerstandwert kannst du aus dem Spannungsabfall an deinem 
Spannungsteiler berechnen. Dazu musst du allerding den Strom kennen bzw. 
ermitteln der duch den Spannungsteilen fließst.

Wie sieht denn deine Schaltung im Detail aus?

Gruss,
Schorsch.

von Marcel K. (marcel_k)


Lesenswert?

Nabend Schorsch!

Die Schaltung sieht so aus, dass ein Schwimmer im Tank ist, der je nach 
Inhalt des Tankes unterschiedlich "hoch" oder "tief" schwimmt und so nen 
anderen Widerstandswert an das Zeigerinstrument liefert. Spannung wäre 
in diesem Fall 12Volt DC.
Nachfolgend die Literangaben zu den passenden Widerstandswerten.

Zeigerstellung  Inhalt (l)  Widerstand (Ohm)
leer                     <= 4   > 283
Reserve                  10      189
1/4                          20      137
1/2                          40       89
3/4                          60       62
voll                   >= 78  <  36


Müsste ich dann quasi für jeden Liter oder für jede 10Liter im Tank den 
Strom messen der
durch meine Schaltung fließt?
Sorry bin nicht so der Crack was das mit den Spannungsteilern anbelangt, 
bin deshalb für jeden Tipp dankbar.


Marcel

von Karl H. (kbuchegg)


Lesenswert?

Nun ja. Der Widerstandswert an sich interessiert dich ja gar nicht.
Was dich interessiert ist die Umrechnung des ADC Wertes in einen Wert, 
den du anzeigen kannst.

Und dazu lässt du dir dann eben eine Formel einfallen die das macht.

Wenn zb dein ADC bei leerem Tank 0 meldet und du auf deinem Display dann 
auch 0 stehen haben willst UND der ADC bei vollem Tank 768 meldet und du 
auf deinem Display dann dafür 10 stehen haben willst, dann kannst du zb 
rechnen:

         Anzeige = gemessener_Wert * 10 / 768

probiers aus. bei einem gemessenen Wert von 0 kommt aus der Formel auch 
tatsächlich 0 raus und bei einem ADC Wert von 768 kommt dann auch 
tatsächlich 10 raus. Und für kleiner ADC Werte kommt dann eben ein Wert 
zwischen 0 und 10 im richtigen Verhältnis raus.

Wenn Computer eines gut können, dann ist das rechnen. Du musst dir nur 
die entsprechende Formel dafür ausdenken.

von Marcel K. (marcel_k)


Lesenswert?

Danke für deine Antwort Karl Heinz,

jetzt muss ich das nur noch irgendwie verstehen, weil ich ja nicht so 
der Experte bin. Werde mal am WE rumtüfteln. Muss erstmal schauen, was 
das mit dem ADC genau auf sich hat.
Sorry für meine Unwissenheit.



Marcel

von Karl H. (kbuchegg)


Lesenswert?

Marcel Kerwin schrieb:
> Danke für deine Antwort Karl Heinz,
>
> jetzt muss ich das nur noch irgendwie verstehen, weil ich ja nicht so
> der Experte bin.

Das hat doch nix mit Experte zu tun!
Die meisten Formeln folgen doch immer em gleichen Muster:

   Was ist mein Eingangsmaximalwert?

   Wenn ich daher den gemessenen Wert durch diesen Maximalwert
   dividiere, dann lande ich im Zahlenbereich von 0 bis 1

   Multiplizere ich diesen Zahlenbereich mit 25, dann strecke
   ich die 0 bis 1  eben auf 0 bis 25 auf.

   In Summe habe ich damit eine Umrechnung, die mir Zahlen im Bereich
   0 bis zum Maximalwert in einen anderen Zahlenbereich 0 bis a 
umrechnet
   wobei ich das a frei bestimmen kann.

Mehr steckt da erst mal nicht dahinter.


Soviel Mathe kann jeder, der in der Grundschule nicht gepennt hat.

von Marcel K. (marcel_k)


Lesenswert?

Grundschule was ist denn das? Nee Spass beiseite so langsam dämmerts 
wieder, werde am WE ausgiebig testen und ausprobieren.



Schönen Abend an dich Karl Heinz.




Marcel

von Tobias (Gast)


Lesenswert?

ADC=Analog/Digital-Converter

Das ist das Teil, dass aus der Spannung, die du am Arduino anlegst, 
intern deinen Wert generiert.
In dem Beispielprogramm geschieht das indirekt hier:
raw=analogRead(Poti);
da wird der Analog-Digital-Converter "angeworfen", konvertiert den 
analogen Wert (Spannung) in den digitalen Wert (eine Zahl) und speichert 
sie in der Variable "raw".

von Karl H. (kbuchegg)


Lesenswert?

Marcel Kerwin schrieb:
> Grundschule was ist denn das? Nee Spass beiseite so langsam dämmerts
> wieder, werde am WE ausgiebig testen und ausprobieren.

Beispiel:
Durch Experimente hast du rausgefunden, dass dein ADC dir Werte von 0 
bis 768 liefert. 0 wenn der Tank leer ist, 768 wenn der Tank voll ist.

Dividierst du daher deinen Messwert durch die 768, dann landen alle 
Messwerte, die du vom ADC erhältst im Bereich 0 bis 1

Beispiel:

ADC liefert      nach der Division
 100               0.1302
 258               0.3359
 380               0.49479     (380 ist ungefähr die Hälfte von 768)
 640               0.8333
 760               0.9895
 768               1.0000

Größere Werte als 768 können per Definition nicht auftreten, denn 768 
war ja schon als Maximalwert festgelegt und auch empirisch festgestellt.

Jetzt hast du deine Messwerte im Bereich 0 bis 1

Du willst aber für Ausgabezwecke nicht 0 bis 1, sondern zb 2 bis 14

2 bis 14, das ist ein Bereich von 12.
Also multiplizierst du jeden Wert mit 12. Damit würdest du Werte von 0 
bis 12 kriegen und wenn du da dann noch 2 dazuzählst, dann hast du den 
angestrebten Bereich 2 bis 14

0.1302     * 12 + 2   = 3.56
0.3359     * 12 + 2   = 6.03
0.49479    * 12 + 2   = 7.9317
0.8333     * 12 + 2   = 11.9996
0.9895     * 12 + 2   = 13.874
1.0        * 12 + 2   = 14


Der ADC Messwert von 380 war ungefähr die Hälfte das maximal möglichen 
ADC Wertes. Und im Endergebnis kommt 7.9 (also nahezu 8) raus, und das 
liegt wiederrum in der Mitte zwischen 2 und 14. Passt also


Wenn dein ADC bei leerem Tank nicht 0 liefert sondern zb 58, dann muss 
man eben die Umrechnung in den Bereich 0 bis 1 entsprechend anpassen. 
Vorher die 58 abziehen und durch die Bereichsbreite dividieren, damit 
man wieder bei 0 bis 1 landet.

von Marcel K. (marcel_k)


Lesenswert?

Alter Schwede!

Danke für deine ausführliche Beschreibung, also jetzt kann ja gar nix 
mehr schief gehen. Juhu, werds glaube ich schon morgen mal antesten.


Danke danke.




Marcel

von Marcel K. (marcel_k)



Lesenswert?

Hallo Leute!

Habe gerade mit Erschrecken feststellen müssen, dass der Tankgeber 
keinen Poti im eigentlichen Sinne eingebaut hat sondern es ist vielmehr 
ein veränderbarer Widerstand!
Es führen nämlich nur zwei Anschlusskabel aus dem Teil raus und nicht 
drei, wie ich ursprünglich erst dachte!
Lässt dieser sich trotzdem irgendwie an den Controller anschliessen?


Marcel


Das Bild stammt nicht von mir, sondern aus nem Wiki aus dem Netz;-)

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Einfach einen zweiten Widerstand seriell schalten.
Siehe Spannungsteiler!

Wenn der zweite Widerstand genau gleich groß ist, dann hast du bei einen 
Bereich von 0V bis 1/2*VCC Volt.

Mit freundlichen Grüßen,
Valentin Buck

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Ja, dann hast du einen Bereich von 0-300 Ohm.
Da du einen 300-Ohm-Wiederstand seriell geschaltet hast, bekommst du 
dann bei 5V Spannung eine Ausgangsspannung zwischen 0 und 5 Volt.
Wenn du einen anderen Wiederstand nimmst, bekommst du einen anderen 
Bereich.
So kannst du das ausrechnen:
Vout = Vin*(300Ohm/(300Ohm+DeinWiederstand))

Wenn du dann einen Wiederstand von einem Ohm in Reihe schaltest, dann 
bekommst du eine maximale Ausgangsspannung von 300/301*5V = 4.98V
Also fast deine 5V.
Allerdings ist das dann mit extrem hohem Stromverbrauch (5V * 5A = 25W 
(!!!)) verbunden, wenn dein Widerstand 0 Ohm hat.

Also nimm lieber einen 300 Ohm Wiederstand und begrenze dich auf 50% 
deines Messbereichs.

Bei 8-bit Auflösung heisst das:
Statt Maximalwert=255 nimmst du Maximalwert=127

Bitte poste deine Fragen einfach hier, dann können auch andere Leute 
davon profitieren!

Mit freundlichen Grüßen,
Valentin Buck

von Marcel K. (marcel_k)


Lesenswert?

Hallo Valentin!


Woher zauberst du denn jetzt die 5A Strom?


Marcel

von raketenfred (Gast)


Lesenswert?

U=R*I

R ist der Widerstand, also dieSUmme von Sensor und deinem 2. 
Messwiderstand

U ist die Gesamtspannung, 5V bei dir
I errechnen wir durch sauberes Umstellen: I=U/R [V/Ohm=A]

ich würde auch darauf achten, wieviel der Widerstand verkraftet. Wäre 
suboptimal, wenn dir der Tank leer läuft und der Widerstand durchschmort 
und dann trotzdem voll anzeigt.

mfg

von Marcel K. (marcel_k)


Lesenswert?

Also setze ich meine Werte nach "raketenfred" ein, dann habe ich das 
hier raus :

Widerstand 1 + Widerstand 2 = 300 Ohm + 300Ohm = 600Ohm

Also folgt : 5Volt / 600Ohm = 0,0083Ampere

Also wie 5Ampere siehts nicht gerade aus!


Marcel

von Karl H. (kbuchegg)


Lesenswert?

Valentin hat ja auch, nur so zum Beispiel, gemeint:

Wenn du zu den 300 Ohm noch einmal 300 Ohm in Serie schaltest, dann 
kannst du am Abgriff logischerweise die 5V nicht mehr erreichen. 
Versorgst du diesen Spannungsteiler mit 5V, dann hast du am Abgriff eine 
Spannung von 0 bis 2.5V

Jetzt könntest du auf die Idee kommen, zu den variablen 300 Ohm anstelle 
von noch einmal 300 Ohm einfach 1 Ohm in Serie zu schalten.

Dann würdest du zwar am Abgriff eine Spannung von 0 bis 4.98V erreichen 
(anstelle von 0 bis 2.5V) aber es würden maximal auch 5A rinnen. Und das 
möchtest du so sicher nicht haben.

Also bleib bei deinen 300 Ohm.

Diese 1 OHm waren ein reines Rechenbeispiel, was passieren würde, wenn 
man versucht, die 5V am Ausgang so gut wie möglich zu retten. Die 5V 
würde man zwar fast kriegen, aber der Preis dafür wäre ein enormer 
Strombedarf.

von magret (Gast)


Lesenswert?

Wie kann ich den Widerstand von Wasser mit dem Arduino Programm 
überprüfen

von magret (Gast)


Lesenswert?

Wie kann ich den Widerstand des Wassers mit dem Arduino messen?

von magret (Gast)


Lesenswert?

hey antwortet mal, ich warte

von magret (Gast)


Lesenswert?

seid ihr etwa eingeschlafen???????????????????????????????????????

von magret (Gast)


Lesenswert?

ich warte immer noch....

von magret (Gast)


Lesenswert?

hey leute. aufwachen

von Wolfgang (Gast)


Lesenswert?

Valentin Buck schrieb:
> Also nimm lieber einen 300 Ohm Wiederstand und begrenze dich auf 50%
> deines Messbereichs.

Es ist keiner gezweungen, dabei die Hälfte des Meßbereiches zu 
verschenken. Was spricht dagegen, für den ADC eine Referenzzspannung von 
VCC/2 zu verwenden. Schon nutzt man 100% des Messbereiches.

von magret (Gast)


Lesenswert?

ich mache gleich aus. beeilt euch mal

von Michael (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Die 5V würde man zwar fast kriegen, aber der Preis dafür wäre ein enormer
> Strombedarf.

... und ein verschmortes Poti im Tankgeber

von magret (Gast)


Lesenswert?

wer seid ihr

von magret (Gast)


Lesenswert?

ICH BIN MAGRET.............................

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.