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!
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.
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.
#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");
}