kondensator-testare m Arduino

Planering och tankar kring eventuella framtida projekt.
rolex42
Inlägg: 523
Blev medlem: 11 augusti 2009, 17:12:49
Ort: Uppsala

kondensator-testare m Arduino

Inlägg av rolex42 »

Tänkte att detta var ett bra 1:a projekt att lära mig lite mer. Bakgrund http://www.northcountryradio.com/PDFs/column008.pdf
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();
}
Just nu lägger jag detta på hyllan så får jag se om det blir någon fortsättning. Ska man ha en kondensator-testare är det nog billigare köpa en multimeter med den funktionen.