- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Widerstandsmessung mit Arduino

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.02.2006
    Beiträge
    267

    Frage Widerstandsmessung mit Arduino

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ich habe nun ein Material für mein Projekt mit der Lagebestimmung über den elektrischen Widerstand einer leitenden Bahn gefunden.
    Versuche nun das Ganze über Arduino zu messen, habe mir zu diesem Zweck einen der üblichen Sketches zur Widerstandsmessung über Referenzwiderstände kopiert.
    Hier der Code:

    Code:
    const int sensorPin = A0;  // Analog input pin that senses Vout
    int sensorValue = 0;       // sensorPin default value
    float Vin = 5;             // Input voltage
    float Vout = 0;            // Vout default value
    float Rref = 1000;          // Reference resistor's value in ohms (you can give this value in kiloohms or megaohms - the resistance of the tested resistor will be given in the same units)
    float R = 0;               // Tested resistors default value
    
    
    void setup ()
    {
      Serial.begin(9600);      // Initialize serial communications at 9600 bps
    }
    
    
    void loop ()
    {
      sensorValue = analogRead(sensorPin);  // Read Vout on analog input pin A0 (Arduino can sense from 0-1023, 1023 is 5V)
      Vout = (Vin * sensorValue) / 1023;    // Convert Vout to volts
      R = Rref * (1 / ((Vin / Vout) - 1));  // Formula to calculate tested resistor's value
      Serial.print("R: ");                  
      Serial.println(R);                    // Give calculated resistance in Serial Monitor
      delay(100);                          // Delay in milliseconds between reeds
    }
    Der Refernzwiderstand ist 1MegaOhm, da 1K zu schnell zu heiß werden, irgendwie.

    Nun schließe ich das Ganze an und fahre die Bahn ab, bleibe dabei auf einem Punkt stehen und sehe auf dem Seriellen Monitor dass kurz zwei Werte zu sehen sind welche dann wieder verschwinden, das passiert einige Male. Ich öffne dann den Seriellen Plotter und sehe dass sich dies in gleichen Zeitabständen wiederholt, die Werte ändern sich dabei nicht.

    Wieso kann ich nicht durchgehend den Widerstand auslesen?
    Was habe ich hier übersehen?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Hallo!

    Deine Beschreibung ist etwas schwer zu lesen. Wenn ich dich richtig verstanden habe, hast du den oben genannten Code auf den Arduino gespielt und dein Ergebnis ist, dass du 'kurz zwei Werte siehst'.
    Das Programm selbst ist ok, und ich schließe es erstmal als Fehlerquelle aus.
    Meine Vermutung ist die Spannungsversorgung des Arduino, sodass der Arduino ständig resetet. Um das herauszufinden, ändere
    Code:
    void setup ()
    {
      Serial.begin(9600);      // Initialize serial communications at 9600 bps
    }
    in
    Code:
    void setup ()
    {
      Serial.begin(9600);      // Initialize serial communications at 9600 bps
      Serial.println("Start...");
    }
    um. Wenn du jetzt auf dem Seriellen Monitor ständig 'Start...' liest, wird es wahrscheinlich an der Spannungsversorgung des Arduino liegen.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Beiträge
    80
    Zitat Zitat von Modellbauer Beitrag anzeigen
    Der Refernzwiderstand ist 1MegaOhm, da 1K zu schnell zu heiß werden, irgendwie.
    Ich weiß ja nicht wie der Schaltplan aussieht - aber der 1k-Referenzwiderstand sollte doch vermutlich auch nur an die 5V angeschlossen sein, oder? Dann sollte er aber nur 5V x 5mA = 25mW verbraten und davon wird kein normaler Widerstand heiß. Ich vermute also da liegt ein Problem mit dem Schaltungsaufbau vor...

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.02.2006
    Beiträge
    267
    Also die Schaltung sueht so aus wie auf dieser Seite hier:
    http://electronfun.com/project_4.php

    Nur der eine Testwiderstand ist durch die Bahn ersetzt worden. Es handelt sich dabei um eine Leitende Bahn mit hohem Widerstand die ich mit einem Kontakt abfahren kann.

    Ich habe auch, wie empfohlen, den Code geändert. Es kommt nur einmal "Start" am Anfang, dann nur die Messwerte.
    So sieht das dann im Plotter aus wenn ich mich an einem Punkt der Bahn aufhalte.

    Klicke auf die Grafik für eine größere Ansicht

Name:	Ohmmeter.jpg
Hits:	30
Größe:	14,3 KB
ID:	33099

    Die Abstände sind recht regelmäßig, keine Ahnung wieso das nicht konstant angezeigt wird, es ist auch nicht bei 100ms die ich als Messintervale angegeben habe.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Beiträge
    80
    Da ist was faul an Deinem Aufbau oder Du hantierst mit den falschen Widerständen. Ein 1k-R kann an 5V niemals heiß werden, wie gesagt.

    Besorg Dir mal ein Multimeter und meß die von Dir verwendeten Widerstände nach. Meß dann auch scherzhalber mal die Spannung am 5V-Pin (nach GND natürlich). In DC-Stellung sollten 5V +- 0,2V anstehen, in AC-Stellung höchstens einige mV. Beide Messungen sind wichtig um die Güte der Arduino-Betriebsspannung zu beurteilen.

    Wenn das ok ist dann laß mal Deine Bahn weg und bau das genauso auf wie abgebildet, und zwar wie dort mit 2x mindestens 220R. Und starte das Meßprogrammchen nochmal.

    Der Referenzwiderstand sollte für die beste Meßauflösung in der Größenordnung des Meßwiderstands liegen - das wird dann also von Deiner Bahn bestimmt. Ich habe jetzt zwar nicht die Eingangswiderstände der Arduino-Analogeingänge im Kopf aber 1M-Ohm als Meß- oder Ref.widerstand dürfte ziemlich schon in der Grauzone liegen. Wenn Du wirklich so hochohmig messen willst (oder auch wenn's niederohmiger als 100R wird) mußt Du mehr externen Schaltungsaufwand treiben.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    Beiträge
    2.814
    Ein Multimeter als Mindestausstattung an Messgeräten sollte wirklich vorhanden sein.

    Und auch das Wissen wie man mißt ohne zum einen "Mist" zu messen und zum anderen das Messgerät zu beschädigen oder zu zerstören.

    Heutige Kleinlastwiederstände haben üblicherweise 1/16W (früher 1/8W)

    beim I=U/R

    I=5V/1000Ohm (1kOhm)

    I=0,005A=5mA

    und P=U*I

    P=5V*0,005A

    P=0,025W

    sollte ein 1/16 W Widerstand nicht heiß werden.

    1/16W=0,0625W

    0,025W=X
    0,0625W=100%

    X=(0,025W*100%)/0,0625W

    X=40%

    Also mal durchmessen ob der vermeintliche 1k Widerstand wirklich ein k hat.
    (bei meinem letzten Einkauf in einer Conrad Filiale, hat es der Verkäufer bei 8 unterschiedlichen Widerständen geschafft zwei falsche einzupacken)
    Kann also durchaus vorkommen, das man nicht das bekommt was man wollte.
    Im Extremfall kann sogar mal ein Widerstand beim Umstellen der Produktionslinie mit dem falschen Wert gekennzeichnet sein und der wurde dann ausversehen nicht weggeschmissen sondern landete dann im Verkauf.
    (hatte ich einmal 1993, allerdings war da Wert höher als der Ringcode angab)

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.02.2006
    Beiträge
    267
    Nun habe ich das Ding mit Widerständen aufgebaut und es sieht nun wieder so aus:
    Klicke auf die Grafik für eine größere Ansicht

Name:	Arduino Messung.jpg
Hits:	27
Größe:	12,6 KB
ID:	33136
    Sollte das nicht bei einer Messung auf dem selben Wert bleiben, schon weil es ein einfacher Widerstand ist?
    Das Ganze sieht ziemlich ungenau aus.

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    Beiträge
    2.814
    Du rechnest munter mit "float" und "int".
    Ich selbst vermeide float wo es nur geht, da die Verarbeitung deutlich langsamer ist als bei int.
    Wenn ich mir mal kurz die Arduino Referenz ansehe:
    https://www.arduino.cc/reference/en/...a-types/float/

    Versuch doch mal als erstes:
    Vout = (Vin * sensorValue) / 1023;
    in
    Vout = (Vin * (float)sensorValue) / 1023;
    zu ändern.
    Dann rechnest Du zumindest schon mal nicht mehr mit Äpfeln (int) und Birnen (float).

    https://www.arduino.cc/en/Reference/Cast

    Schneller wäre die ganze Berechung mit Int oder (wenn den 32 Bit benötigt werden) mit long durchzuführen.
    Mann kann das ganze ja auf Millivolt oder Mikrovolt trimmen. Die Umrechnung in Volt und den Nachkomma Bereich ist dann nicht so schwer.
    Geändert von i_make_it (25.12.2017 um 14:56 Uhr)

  9. #9
    HaWe
    Gast
    Zitat Zitat von i_make_it Beitrag anzeigen
    Du rechnest munter mit "float" und "int".
    Ich selbst vermeide float wo es nur geht, da die Verarbeitung deutlich langsamer ist als bei int.
    Wenn ich mir mal kurz die Arduino Referenz ansehe:
    https://www.arduino.cc/reference/en/...a-types/float/

    Versuch doch mal als erstes:
    Vout = (Vin * sensorValue) / 1023;
    in
    Vout = (Vin * (float)sensorValue) / 1023;
    zu ändern.
    Dann rechnest Du zumindest schon mal nicht mehr mit Äpfeln (int) und Birnen (float).

    https://www.arduino.cc/en/Reference/Cast

    Schneller wäre die ganze Berechung mit Int oder (wenn den 32 Bit benötigt werden) mit long durchzuführen.
    Mann kann das ganze ja auf Millivolt oder Mikrovolt trimmen. Die Umrechnung in Volt und den Nachkomma Bereich ist dann nicht so schwer.
    das stimmt nicht, (Vin * sensorValue) wird automatisch (implizit) zu float gecastet, weil einer der beiden Faktoren bereits als float vordefiniert ist.
    Außerdem hat der OP sicherlich kein Timing-Problem mit float.
    delay(100); // Delay in milliseconds between reeds

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.02.2006
    Beiträge
    267
    Ich push das mal nach oben weil das Problem noch besteht und ich dazu eine weitere Frage habe:

    Kann es sein dass die genannten Abstände durch die HArdware selbst, also durch deren Beschränkungen zustande kommen?
    Wie kann ich das am Besten mit einem Oszilloskop durchmessen und bestätigen oder widerlegen?

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Weitere Frage zur Widerstandsmessung II
    Von Modellbauer im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 12.07.2016, 17:53
  2. Komische Widerstandsmessung bei Schrittmotor
    Von chris61233 im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 09.09.2009, 15:28
  3. Widerstandsmessung - Frage
    Von Hei.Mor im Forum AVR Hardwarethemen
    Antworten: 11
    Letzter Beitrag: 08.12.2007, 22:45
  4. ATMega32 - Widerstandsmessung
    Von julien im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 21.04.2007, 13:31
  5. Multimeter Spannung bei Widerstandsmessung
    Von ChrisM im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 19.08.2005, 16:09

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test