Ohmmeter mit Arduino

Mit einer recht einfachen Schaltung kann man den Arduino als Ohmmeter verwenden.
Der Gesamtwiderstand von R1 und R2 zwischen "5V" und "GND" sollte nicht kleiner als 125Ω sein, denn dann würden mehr als 40mA fließen (R = U/I; 5V / 40mA = 125Ω), was u.U. den Mikrocontroller beschädigen könnte. 40mA ist die maximale Belastbarkeit des Arduino!

Ohmmeter

Die Messgenauigkeit hängt von vielen Faktoren wie der Spannung des USB-Ports, der Genauigkeit des Referenzwiderstands und dem Verhältnis zum zu messenden Widerstand ab. Die Schaltung beruht auf einem Spannungsteiler. Die Spannung, die am Analog-Pin anliegt, hängt vom Verhältnis der Widerstände zueinander ab. Kennt man nun den Wert eines Widerstandes und weiß man von einem der Widerstände, wie viel Spannung daran abfällt, kann man das Verhältnis berechnen. Über das Verhältnis kann man wiederum auf den Wert des gefragten Widerstandes schließen.

Verwendete Bauteile

Aufbau

R2 ist der bekannte Referenz-Widerstand (hier: 1kΩ = 1000 Ohm), der möglichst genau spezifiziert werden sollte, damit das Messergebnis optimale Werte liefert. Dazu verwendet man ein Multimeter, um den exakten Ohm-Wert von R2 zu ermitteln und schreibt diesen Wert dann in die Definition REF_R2 des folgenden Sketches. R1 ist der zu ermittelnde Widerstand.

Schaltplan
Abb.: Schaltplan
Aufbau der Schaltung
Abb.: Aufbau der Schaltung

Sketch

#define PIN_MEASURE A0
#define PIN_BUTTON   2

#define V_IN   5.0   // source voltage in Volt
#define REF_R2 1028  // value of the known resistor in Ohm

void setup()
{
	Serial.begin(9600);
	pinMode(PIN_MEASURE, INPUT);
	pinMode(PIN_BUTTON, INPUT_PULLUP);
}

void loop()
{
	if (digitalRead(PIN_BUTTON) == 0) {
		measureResistance();
		delay(500);
	}
}

void measureResistance()
{
	// measure 10 times and calculate the average
	long reading = 0;
	for (byte i = 0; i < 10; i++) {
		reading += analogRead(PIN_MEASURE);
	}
	reading = (long)(reading / 10);

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

	// formula: R1 = R2 * (U2/U1)
	int resistance = REF_R2 * (voltageR1 / (V_IN - voltageR1));
	Serial.println("Resistor R1: " + String(resistance) + " Ω\n\n");
}

Ergebnis

Ausgabe in der seriellen Konsole
Abb.: Ausgabe der Messung in der seriellen Konsole: Die erste Messung war ein 2,2kΩ-Widerstand und die zweite Messung ein 20kΩ-Widerstand.
zurück