Med Arduino mäts tiden det tar att ladda upp en kondensator.
Kan användas för att ta reda på okänd konding eller bara testa en.
(Jag vet, det finns multimetrar som har denna funktion.
Det finns säkert färdiga beskrivningar liknande detta, men jag bestämde mig för att inte titta på någon för jag vill klara av denna "enkla" grej själv.)
Arduino Digital utgång 7 har ett 220 ohm skyddsmotstånd, direkt kopplat på arduino. Därifrån koppling till labb-kort.
På labb-kort sitter motståndet R (1M alt 10M beroende på storlek på konding). Jag valde 1% motstånd för att få noga mätning. Andra sidan av R kopplas till Analog ingång 0 och till konding. Andra änden på konding till GND.
I koden ändrar man variabeln R beroende på om man har 1M el 10M. 1M är lämpligt för större kondingar, microF och 10M för nanoF. Till att börja med är utgången 0V och kondingen laddar ur. När urladdad sätts utgången till 5V dvs uppladdn börjar och start-tiden sparas. Tiden det tar att ladda till 63% anger kondingen storlek. Koden går runt i loopen & gör uppladdning/urladdning hela tiden. Det fungerar relativt bra på höga värden men sämre på låga.
Kod: Markera allt
int sensorPin = A0; // Analog0 - the input pin for the potentiometer
int output = 7; // select the pin for output
int sensorValue = 0; // variable to store the value coming from the sensor
int timeunit_volt = 644; // 63% of 1023
boolean down = true; // flag indicating upload or download
long starttime = 0; // time when measurement starts
float t = 0;
long R = 1000220; // Resistance 1M
//long R = 10000220; // Resistance 10M
void setup() {
Serial.begin(9600);
// declare the output as an OUTPUT:
pinMode(output, OUTPUT);
digitalWrite(output, LOW);
}
void loop() {
// read the value from the sensor
sensorValue = analogRead(sensorPin);
if (down && sensorValue<3) {
down = false;
digitalWrite(output, HIGH);
starttime=micros();
}
if (!down && sensorValue > timeunit_volt) {
down = true;
Serial.print("\r\nTime: ");
t = (micros() - starttime);
Serial.print(t, 9);
Serial.print(" micros \r\nC: ");
Serial.print((t/R)/1000000, 9);
Serial.print(" = ");
Serial.print(t/R, 1);
Serial.print(" micro ");
Serial.print(1000*t/R, 1);
Serial.print(" nano");
// turn the output to zero
digitalWrite(output, LOW);
}
Serial.flush();
}