Ohmmeter mit Arduino

OP #7475394
Lesenswert?

Hallo liebe Leute,

ich versuche gerade einen Ohmmeter mit dem Arduino DUE aufzubauen. Ich habe als festen Widerstand 1k verwendet. Den Poti habe ich auf 140 Ohm gestellt bzw. der vermeintlich unbekannte Widerstand ist ca. 140 Ohm. Die Referenzspannung liegt bei 5V. Als Ausgabe des unbekannten Widerstandes bekomme ich jedoch 230 Ohm und nicht 140 Ohm.

1
#define PIN_MEASURE A0
2

3

4
#define V_IN   5.0   // source voltage in Volt
5
#define REF_R2 1000 // value of the known resistor in Ohm
6

7
void setup()
8
{
9
  Serial.begin(9600);
10
  pinMode(PIN_MEASURE, INPUT);
11
}
12

13
void loop()
14
{
15
    measureResistance();
16
    delay(10000);
17
  
18
}
19

20
void measureResistance()
21
{
22
  // measure 10 times and calculate the average
23
  long reading = 0;
24
  for (byte i = 0; i < 10; i++) {
25
    reading += analogRead(PIN_MEASURE);
26
  }
27
  reading = (long)(reading / 10);
28

29
  Serial.print("A0: ");
30
  Serial.println(reading);
31

32
  // calculate voltage
33
  float voltageR1 = (V_IN / 1023.0) * reading;
34
  Serial.print("Voltage over R1: ");
35
  Serial.print(voltageR1, 2);
36
  Serial.println(" V");
37

38
  // formula: R1 = R2 * (U2/U1)
39
  int resistance = REF_R2 * (voltageR1 / (V_IN - voltageR1));
40
  Serial.println("Resistor R1: " + String(resistance) + " Ω\n\n");
41
}
Gast #7475427
Lesenswert?

von der Arduino-Webseite:

1
Warning: Unlike most Arduino boards, the Arduino Due board runs at 3.3V. The maximum voltage that the I/O pins can tolerate is 3.3V. Applying voltages higher than 3.3V to any I/O pin could damage the board.

Also: Schaltung bitte!

Gruesse

Th.

OP #7475444
Lesenswert?

Thomas W. schrieb:

von der Arduino-Webseite: Warning: Unlike most Arduino boards, the Arduino Due board runs at 3.3V. The maximum voltage that the I/O pins can tolerate is 3.3V. Applying voltages higher than 3.3V to any I/O pin could damage the board.

Danke für die Information. Der Arduino DUE hat einen 5V- Pin. Diesen habe ich auch mit einem Multimeter nachweislich messen können.

#7475451
Lesenswert?

Mans A. schrieb:

Arduino DUE

Mans A. schrieb:

Die Referenzspannung liegt bei 5V.

Autsch.

Mans A. schrieb:

formula: R1 = R2 * (U2/U1)

Angenommen U1 ist die Spannung über R1 und U2 die Spannung uber R2 ist die Formel falsch.

1
R1   R2         R2 * U1
2
-- = --    R1 = -------
3
U1   U2            U2

int resistance = REF_R2 * (voltageR1 / (V_IN - voltageR1));

Was soll V_IN sein, die ADC Eingangsspannung ? Sicher nicht, sondern die 5V. voltageR1 ist die ADC Eingangsspannung.

V_IN - voltageR1 wäre damit voltageR2

R2 x voltageR1 / ( voltageR2 ) solte R1 ergeben.

OP #7475477
Lesenswert?

Michael B. schrieb:

Mans A. schrieb:

Arduino DUE

Mans A. schrieb:

Die Referenzspannung liegt bei 5V.

Autsch.

Warum Autsch.

Mans A. schrieb:

formula: R1 = R2 * (U2/U1)

Angenommen U1 ist die Spannung über R1 und U2 die Spannung uber R2 ist die Formel falsch.

Ok, steht aber in einem Kommentar! War aus Versehen!

Was soll V_IN sein, die ADC Eingangsspannung ?

Nein, die Verorgungsspannung des Arduinos! 5V

V_IN - voltageR1 wäre damit voltageR2

R2 x voltageR1 / ( voltageR2 ) solte R1 ergeben.

Genau!! So habe ich das doch auch!!!

#7475530
Lesenswert?

Mans A. schrieb:

float voltageR1 = (V_IN / 1023.0) * reading;

Und wieder der typische Arduino-Fehler... der ADC kann 1024 verschiedene Werte ausgeben, jeder Wert entspricht 1/1024 des Messbereichs.

Falls das zu Verständnisschwierigkeiten führt: Überleg dir wie es möglich sein kann, dass du 5 Finger hast, aber nur 4 Zwischenräume zwischen den Fingern.

Und ja, der Fehler ist klein und meist zu vernachlässigen. Trotzdem zeigt er dem Leser des Quelltexts, dass da ein (freundlich ausgedrückt) blutiger Anfänger wild irgendwelchen Rotz aus dem Internet zusammenkopiert hat.

#7475628
Lesenswert?

Mans A. schrieb:

Michael B. schrieb:

Mans A. schrieb:

Arduino DUE

Mans A. schrieb:

Die Referenzspannung liegt bei 5V.

Autsch.

Warum Autsch.

Die Referenzspannung des Due für analogRead ist die Versorgungsspannung des ATSAM3X8EA, und die ist 3.3V. Schau dir https://www.arduino.cc/en/uploads/Main/arduino-Due-schematic.pdf mal diesbezüglich genau an. Ob VIN oder USBVCC, der nachgeschaltete NCP1117 wandelt die on-board +5V in on-board 3.3V um, und die 3.3V speisen den uC.

LG, Sebastian

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