Over dit project
Eenvoudige digitale multimeters (DMM's) kunnen de capaciteit niet meten en om de capaciteit te vinden, moet u ofwel voor een geavanceerde, dure DMM gaan of een speciale capaciteitsmodule zoeken.
In dit project zal ik een eenvoudige Arduino-capaciteitsmeter bouwen met de functie Auto-Ranging. Het kan capaciteit meten van 10 pF tot 10.000 μF. De meting vindt plaats in automatische modus, het is voldoende om de condensator aan te sluiten op de meetcontacten. Het apparaat heeft twee bereiken:"nF" en "μF". Bij het meten van een condensator wordt eerst het "nF" bereik ingeschakeld, is de capaciteit te groot dan vindt de overgang naar het "μF" bereik plaats.
Elke capaciteitsmeter heeft een RC-circuit met bekende weerstandswaarden en een onbekende condensatorwaarde. De Arduino meet de spanning op de condensator en registreert de tijd die nodig is om een bepaald percentage van zijn spanning te bereiken wanneer deze volledig is opgeladen (de tijdconstante). Omdat de weerstandswaarde al bekend is, kunnen we de formule gebruiken in een programma dat de onbekende capaciteit berekent. De te testen condensator wordt opgeladen met een van de weerstanden. De Arduino initieert het opladen van de condensator via een weerstand op basis van zijn capaciteit. In de capaciteitsmeter wordt elke keer dat deze wordt ingeschakeld een nulkalibratie uitgevoerd, daarom mag op het moment van inschakelen geen condensator worden aangesloten op de meetcontacten. Ook moeten alle condensatoren vooraf ontladen zijn.
De nauwkeurigheid is +/- enkele procenten en hangt voornamelijk af van de tolerantie van de gebruikte weerstanden en de stabiliteit van de voedingsspanning.
Ten slotte bevindt het hele apparaat zich in een geschikte doos en is een ander handig hulpmiddel in uw laboratorium.
Code
Arduino-codeC/C++
#include LiquidCrystal lcd (12, 11, 5, 4, 3, 2);// RS,E,D4,D5,D6,D7void setup(){ lcd.begin(16, 2 );// LCD 16X2 pinMode (A0,INPUT);} niet-ondertekende lange tijd0,tijd1,tijd2; float c,null0;byte kn,mk,i;void loop(){ lcd.setCursor(15,0); lcd.print("*"); if(mk==0){ pinMode(8,OUTPUT); pinMode(7,INPUT); digitalWrite (8, HOOG); } if(mk==1){ pinMode(7,OUTPUT); pinMode(8,INPUT); digitalWrite(7,HOOG); } tijd0=micros(); while(analogRead(A0)<644){ time2=micros()-time0; if(time2>=1000000 &&mk==0){ mk=1; tijd0=100000000; pauze; } } time1=micros()-time0; while(analogRead(A0)>0){ pinMode(7,OUTPUT); pinMode (8, UITGANG); digitalWrite(7,LAAG); digitalWrite (8, LAAG); } if(mk==1&&time1<1000){ mk=0; } lcd.setCursor(1,0); c=tijd1; c=c/1000-null0; c=abs(c); if(time1>=10000000){ lcd.setCursor(1,0); lcd.print(" TEST uF "); } anders{ lcd.print(c); if(mk==0){ lcd.print(" nF "); } if(mk==1){ lcd.print("uF"); } } if(i==0){ i++; nul0=c+0,02; } vertraging(100);}
Schema's