ทำเครื่องวัด ตัวเก็บประจุใช้เอง วัดCง่ายๆ

อุปกรณ์

  1. บอร์ด Arduino Uno
  2. ตัวต้านทาน 220โอห์ม 1ตัว
  3. ตัวต้านทาน 10kโอห์ม 1ตัว
  4. 7-Segment 8หลัก (ใช้แสดงผลค่า)

หลักการทำงาน

  • ขออธิบายแบบเข้าใจง่าย แล้วกันนะครับ
  • บนบอร์ด arduino ขา 11 ต่อกับ R10k ทำหน้าที่ ชาร์จประจุให้กับ C ที่จะนำมาวัด, ขา 13 ต่อกับ R220 ทำหน้าที่ ดิทชาร์จ คลายประจุกับตัวเก็บประจุหลังจากจบขั้นตอนวัด, ขา A0 รับค่า analog การชาร์จ ในโปรแกรมเมื่อมีการเริ่มวัดจะจับเวลาไปเรื่อยๆ จนกว่าค่า analog ที่ขา A0 จะมีค่ามากกว่า 648 ถึงจะทำงานโค้ดบรรทัดถัดๆไป ซึ่งเวลาที่จับก็จะหลุดนับ แล้วนำไปเข้าสูตรคำนวณ C = T / R โดยผลลัพธ์ที่ได้จะเป็นหน่วย ไมโครฟารัด(uF) จากนั้นแสดงผลค่า serial.println ในพอร์ต 9600 ถัดมาเราข้ามไปที่บรรทัดท้ายๆเลยครับ
  • จะเห็นโค้ดส่วนที่ digitalwrite LOW ไปที่ขา 11, 13 เพื่อ ดิทชาร์จ ประจุ C
  • ส่วนการแสดงผล เราเพียงแค่ไปหา จอ หรือ 7segment มาเพิ่มโค้ดเข้าไปนิดหน่อยก็สามารถใช้งานได้แล้วครับ

ต่อวงจรแบบแรก อ่านค่าผ่าน serial port

Code:
#define analogPin 0          
#define chargePin 13        
#define dischargePin 11        
#define resistorValue 10000.0F  

unsigned long startTime;
unsigned long elapsedTime;
float microFarads;                
float nanoFarads;

void setup(){
  pinMode(chargePin, OUTPUT);    
  digitalWrite(chargePin, LOW);  
  Serial.begin(9600);            
}

void loop(){
  digitalWrite(chargePin, HIGH);  
  startTime = millis();
  while(analogRead(analogPin) < 648){      
  }

  elapsedTime= millis() - startTime;
  microFarads = ((float)elapsedTime / resistorValue) * 1000;  
  Serial.print(elapsedTime);      
  Serial.print(" mS    ");        

  if (microFarads > 1){
    Serial.print((long)microFarads);      
    Serial.println(" microFarads");        
  }

  else{
    nanoFarads = microFarads * 1000.0;      
    Serial.print((long)nanoFarads);        
    Serial.println(" nanoFarads");          
    delay(500);
  }

  digitalWrite(chargePin, LOW);            
  pinMode(dischargePin, OUTPUT);            
  digitalWrite(dischargePin, LOW);          
  while(analogRead(analogPin) > 0){        
  }

  pinMode(dischargePin, INPUT);            
}


ต่อวงจรแบบที่ 2 อ่านค่าผ่าน 7-Segment

ต้องทำการ Import ไลบรารี่ LedControl โหลดที่ : https://www.arduinolibraries.info/libraries/led-control
Code:
#include "LedControl.h"
#define analogPin 0          
#define chargePin 13        
#define dischargePin 11        
#define resistorValue 10000.0F

unsigned long startTime;
unsigned long elapsedTime;
float microFarads;                
float nanoFarads;

LedControl lc = LedControl(7, 6, 5, 1);

void setup() {
  pinMode(12, INPUT);
  pinMode(chargePin, OUTPUT);    
  digitalWrite(chargePin, LOW);  
  Serial.begin(9600);

  lc.shutdown(0, false);
  lc.setIntensity(0, 7);
  lc.clearDisplay(0);
}

void meter_run(){
  digitalWrite(chargePin, HIGH);  
  startTime = millis();
  while(analogRead(analogPin) < 648){  }

  elapsedTime= millis() - startTime;
  microFarads = ((float)elapsedTime / resistorValue) * 1000;  
  Serial.print(elapsedTime);      
  Serial.print(" mS    ");        

  if (microFarads >= 100){    
    String capacitanceString = String(long(microFarads));
    int numChars = capacitanceString.length();
    Serial.println(numChars);
    lc.shutdown(0, true);
    lc.clearDisplay(0);
    lc.shutdown(0, false);
    lc.setChar(0, 0, 'F', false);
    for (int i = 0; i < capacitanceString.length(); i++) {
      char digit = capacitanceString[i];
      Serial.println(microFarads);
      if (numChars == 3){
      if(i==0){
        lc.setChar(0, 5, digit, false);
      }
      else if(i==1){
        lc.setChar(0, 4, digit, false);
      }
      else if(i==2){
        lc.setChar(0, 3, digit, false);
      }
      }
      if (numChars >= 4){
      if(i==0){
        lc.setChar(0, 6, digit, false);
      }
      else if(i==1){
        lc.setChar(0, 5, digit, false);
      }
      else if(i==2){
        lc.setChar(0, 4, digit, false);
      }
      else if(i==3){
        lc.setChar(0, 3, digit, false);
      }
      }
  }

  }
  else if (microFarads >= 1 & microFarads < 100){    
    String capacitanceString = String((microFarads));
    int numChars = capacitanceString.length();
    Serial.println(numChars);
    lc.shutdown(0, true);
    lc.clearDisplay(0);
    lc.shutdown(0, false);
    delay(100);
    for (int i = 0; i < capacitanceString.length(); i++) {
      char digit = capacitanceString[i];
      Serial.println(microFarads);
      if (numChars >= 3 & numChars <= 5){
      if(i==0){
        lc.setChar(0, 6, digit, false);
      }
      else if(i==1){
        lc.setChar(0, 5, digit, false);
      }
      else if(i==2){
        lc.setChar(0, 4, digit, false);
      }
      else if(i==3){
        lc.setChar(0, 3, digit, false);
      }
      else if(i==4){
        lc.setChar(0, 2, digit, false);
      }
      else if(i==5){
        lc.setChar(0, 1, digit, false);
      }
      lc.setChar(0, 0, 'F', false);
     
  }
    }
    delay(1000);
  }

  digitalWrite(chargePin, LOW);            
  pinMode(dischargePin, OUTPUT);            
  digitalWrite(dischargePin, LOW);          
  while(analogRead(analogPin) > 0){        
  }

  pinMode(dischargePin, INPUT);            
}

void loop(){
  meter_run();
}

แสดงความคิดเห็น

0 ความคิดเห็น