资讯详情

arduino——Arduino电容测量计

Arduino电容测量计

点击Arduino在线模拟电容测量计

定义为身体储存电荷的能力。电容器的单位是法拉(符号:F),英国物理学家迈克尔·法拉第的名字命名。 法拉电容器充电时有 1 库仑电荷间的电位差为 1 伏。

每个Arduino电容计依赖于电容器的相同基本特性 - 。电容器的时间常数定义为。较大的电容器需要更长的时间来充电,因此具有较大的时间常数。Arduino由于电容器充电所需的时间与电容器直接相关:

TC = R * C

  • TC 是电容器的时间常数(以秒为单位)。
  • R是电路的电阻(以欧姆为单位)。
  • C是电容器的电容器(以法拉为单位)1uf = .0000001法拉= 10^-6法拉。
  • 示例:1 兆欧 * 1 微法拉 = 1 秒
  • 示例:10k 欧姆 * 100 微法拉 = 1 秒 在这里插入图片描述

电容测量代码算法

  1. 将放电引脚设置为 INPUT(因此,电容器电容器)
  2. 将充电引脚设置为高电平输出
  3. millis() 记录开始时间
  4. 反复检查环路中的电压,直到达到总电压63.2%。
  5. 电容器充电后,从开始时间减去电流时间,了解电容器充电时间。
  6. 串行监视器上打印该值。
  7. 放电电容器。以下操作:
  8. 将充电引脚设置为输入
  9. 将放电引脚设置为低电平输出
  10. 读取电压确保电容器完全放电
  11. 循环并重新执行

电容测量电路

/*电容测量 一个电容器在一个时间常数内通过电阻充电,定义为T秒 * c = r * c * TC =时间常数周期以秒为单位 * R =电阻(欧姆) * C =电容,单位为法拉(1微法拉(ufd) = .0000001法拉= 10^-6法拉) * *一次常数电压定义为充电电压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格式化器告诉编译器它是浮点值  unsigned long startTime; unsigned long elapsedTime;///决定了给电容器充电的时间  // 初始化电容变量 float microFarads;                // floating point variable to preserve precision, make calculations保持浮点变量的精度,计算 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();//开始计时器

  while(analogRead(analogPin) < 648){ 
           // 647是1023的63.2%,相当于满量程电压,直到电容达到总电压的63.2%才退出
  }

  elapsedTime= millis() - startTime;//决定了给电容器充电的时间
 // 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){ 
        //确定单元应该是uf的还是nf的,并相应打印
    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,则转换为nanoFarads (10^-9 Farad)。
	//这是一个解决方案,因为串行。Print将不会打印浮点数

    nanoFarads = microFarads * 1000.0;      // multiply by 1000 to convert to nanoFarads (10^-9 Farads)//乘以1000转换为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//防止电容器放电
}

  • 如果没有电容连接,代码将在此行上等待*" while(analogRead(analogPin) < 648) // 647 是 1023 的 63.2%,对应于满量程电压"*
  • 连接测试端子之间的电容,观察串口监视器将显示结果。如果没有电容连接,串行端将不会显示任何内容。
  • 该程序将反复测试电容器,并且值可能会略有不同。最好取这些值的平均值。

传感器对于 1 μF 至 3500 μF 之间的电容值最为精确。 电容测量结果 无电容

标签: arduino电位器串口监视器应配多少uf电容10k电容器1200微法电容510nf电容电容510nf

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台