電容被定義為身體存儲(chǔ)電荷的能力。電容的單位是法拉(符號(hào):F),以英國(guó)物理學(xué)家邁克爾·法拉第的名字命名。1 法拉電容器在充電時(shí)具有 1 庫(kù)侖的電荷,其板之間的電位差為 1 伏。 電容測(cè)量 每個(gè)Arduino電容計(jì)都依賴于電容器的相同基本特性 - 時(shí)間常數(shù)。電容器的時(shí)間常數(shù)定義為電容器兩端的電壓在充滿電時(shí)達(dá)到其電壓的63.2%所需的時(shí)間。較大的電容器需要更長(zhǎng)的時(shí)間來(lái)充電,因此具有較大的時(shí)間常數(shù)。Arduino可以測(cè)量電容,因?yàn)殡娙萜鞒潆娝璧臅r(shí)間與其電容直接相關(guān): TC = R * C - TC 是電容器的時(shí)間常數(shù)(以秒為單位)。
- R是電路的電阻(以歐姆為單位)。
- C是電容器的電容(以法拉為單位)1uf = .0000001法拉= 10^-6法拉。
- 示例:1 兆歐 * 1 微法拉 = 1 秒
- 示例:10k 歐姆 * 100 微法拉 = 1 秒

電容測(cè)量代碼算法 - 將放電引腳設(shè)置為 INPUT(因此無(wú)法對(duì)電容器放電)
- 將充電引腳設(shè)置為輸出并使其為高電平
- 用 millis() 記錄開(kāi)始時(shí)間
- 在環(huán)路中反復(fù)檢查電壓,直到達(dá)到總電壓的63.2%。
- 電容充電后,從開(kāi)始時(shí)間中減去電流時(shí)間,以了解電容器充電所花費(fèi)的時(shí)間。
- 將時(shí)間T(以秒為單位)除以以歐姆為單位的充電電阻R,得到電容C。
- 在串行監(jiān)視器上打印該值。
- 對(duì)電容器放電。為此,請(qǐng)執(zhí)行以下操作:
- 將充電引腳設(shè)置為輸入
- 將放電引腳設(shè)置為輸出并使其低電平
- 讀取電壓以確保電容器完全放電
- 循環(huán)并再次執(zhí)行
電容測(cè)量電路 電容測(cè)量電路
用于電容測(cè)量的 Arduino 代碼
/*電容測(cè)量
一個(gè)電容器通過(guò)一個(gè)電阻,在一個(gè)時(shí)間常數(shù)內(nèi)充電,定義為T(mén)秒,其中
* c = r * c
* TC =以秒為單位的時(shí)間常數(shù)周期
* R =電阻(歐姆)
* C =電容,單位為法拉(1微法拉(ufd) = .0000001法拉= 10^-6法拉)
*
*電容器在一個(gè)時(shí)間常數(shù)的電壓定義為充電電壓的63.2%。
*/
#define analogPin 0 // analog pin for measuring capacitor voltage
#define chargePin 13 //為電容器充電的引腳-連接到充電電阻的一端
#define dischargePin 11 // 引腳放電電容器
#define resistorValue 10000.0F // 10K將此更改為您正在使用的任何電阻值
// F formatter tells compiler it's a floating point value F格式化器告訴編譯器它是一個(gè)浮點(diǎn)值
unsigned long startTime;
unsigned long elapsedTime;//決定了給電容器充電的時(shí)間
// 電容變量進(jìn)行初始化
float microFarads; // floating point variable to preserve precision, make calculations浮點(diǎn)變量保持精度,進(jìn)行計(jì)算
float nanoFarads;
void setup(){
pinMode(chargePin, OUTPUT); // set chargePin to output
digitalWrite(chargePin, LOW);
Serial.begin(9600); // initialize serial transmission for debugging
}
void loop(){
digitalWrite(chargePin, HIGH); // set chargePin HIGH and capacitor charging
startTime = millis();//開(kāi)始計(jì)時(shí)器
while(analogRead(analogPin) < 648){ // 647是1023的63.2%,相當(dāng)于滿量程電壓,直到電容達(dá)到總電壓的63.2%才退出
}
elapsedTime= millis() - startTime;//決定了給電容器充電的時(shí)間
// convert milliseconds to seconds ( 10^-3 ) and Farads to microFarads ( 10^6 ), net 10^3 (1000) 將毫秒換算成秒(10 ^-3),將法拉換算成微法拉(10 ^6),比完凈10^3 (1000)
microFarads = ((float)elapsedTime / resistorValue) * 1000;
Serial.print(elapsedTime); // 將值打印到串口
Serial.print(" mS "); //打印單位和回車
if (microFarads > 1){//確定單元應(yīng)該是uf的還是nf的,并相應(yīng)打印
Serial.print((long)microFarads); // print the value to serial port
Serial.println(" microFarads"); // print units and carriage return
}
else
{
// if value is smaller than one microFarad, convert to nanoFarads (10^-9 Farad).
// This is a workaround because Serial.print will not print floats
//如果value小于1 microFarad,則轉(zhuǎn)換為nanoFarads (10^-9 Farad)。
//這是一個(gè)解決方案,因?yàn)榇小rint將不會(huì)打印浮點(diǎn)數(shù)
nanoFarads = microFarads * 1000.0; // multiply by 1000 to convert to nanoFarads (10^-9 Farads)//乘以1000轉(zhuǎn)換為nanoFarads
Serial.print((long)nanoFarads); // print the value to serial port
Serial.println(" nanoFarads"); // print units and carriage return
}
/* dicharge the capacitor */
/*給電容器放電*/
digitalWrite(chargePin, LOW); // set charge pin to LOW 停止充電電容器
pinMode(dischargePin, OUTPUT); // set discharge pin to output 允許電容器放電
digitalWrite(dischargePin, LOW); // set discharge pin LOW
while(analogRead(analogPin) > 0){ // wait until capacitor is completely discharged//等待直到電容器完全放電
}
pinMode(dischargePin, INPUT); // set discharge pin back to input//防止電容器放電
} 電容測(cè)量結(jié)果 - 如果沒(méi)有電容連接,代碼將在此行上等待" while(analogRead(analogPin) < 648) // 647 是 1023 的 63.2%,對(duì)應(yīng)于滿量程電壓"
- 連接測(cè)試端子之間的電容,觀察串口監(jiān)視器將顯示結(jié)果。如果沒(méi)有電容連接,串行端將不會(huì)顯示任何內(nèi)容。
- 該程序?qū)⒎磸?fù)測(cè)試電容器,并且值可能會(huì)略有不同。最好取這些值的平均值。
注:此傳感器對(duì)于 1 μF 至 3500 μF 之間的電容值最為精確。
電容測(cè)量結(jié)果

無(wú)電容
|