Arduino Programmierung ( Widerstandsmessung )

OP #2117325
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
Gast #2117414
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.
OP #2117752
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
#2117815
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.
#2117895
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.
Gast #2117908
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".
#2117915
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.
OP #2120890
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;-)
Persönliche Seite #2121429
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
Gast #2121513
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
#2121594
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.
Gast #2574232
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren