ข้ามไปที่เนื้อหาหลัก

(บล็อกที่ 18) LC Meter ใช้ Arduino: การวัดความเหนี่ยวนำและความถี่

LC Meter ใช้ Arduino: การวัดความเหนี่ยวนำและความถี่




ARDUINO
โดยซัดดัม 0
LC Meter ใช้ Arduino: วัดความเหนี่ยวนำและความถี่LC Meter ใช้ Arduino: วัดความเหนี่ยวนำและความถี่

ทุกคนที่ฝังตัวมีความคุ้นเคยกับมัลติมิเตอร์ซึ่งเป็นเครื่องมือที่ดีในการวัดแรงดันกระแสต้านทาน ฯลฯ มัลติมิเตอร์สามารถวัดได้ง่าย แต่บางครั้งเราจำเป็นต้องวัดความเหนี่ยวนำและความจุที่ไม่สามารถทำได้ด้วยเครื่องมัลติมิเตอร์แบบปกติ มีมัลติมิเตอร์แบบพิเศษที่สามารถวัดความเหนี่ยวนำและประจุตัวได้ แต่มีค่าใช้จ่ายสูง เราได้สร้างเครื่องวัดความถี่ , เครื่องวัดความสามารถและเครื่องวัดความต้านทานโดยใช้ Arduinoแล้ว ดังนั้นวันนี้เราจะไปทำให้การเหนี่ยวนำLC Meter ใช้ Arduino ในโครงการนี้เราจะแสดงค่าความเหนี่ยวนำและความจุรวมทั้งความถี่ในการแสดงผล LCD 16x2จะมีปุ่มกดในวงจรเพื่อสลับระหว่างความจุและจอแสดงผลเหนี่ยวนำ

 

องค์ประกอบที่จำเป็น

  1. Arduino Uno
  2. 741 opamp IC
  3. แบตเตอรี่ 3v
  4. ตัวต้านทาน 100 โอห์ม
  5. ตัวเก็บประจุ
  6. ตัวนำกระแสไฟฟ้า
  7. 1n4007 diode
  8. ตัวต้านทาน 10k
  9. หม้อ 10k
  10. แหล่งจ่ายไฟ
  11. กดปุ่ม
  12. Breadboard หรือ PCB
  13. สายเชื่อมต่อ

ส่วนประกอบที่จำเป็นสำหรับเครื่องวัด LC โดยใช้ Arduino

การคำนวณความถี่และความเหนี่ยวนำ

ในโครงการนี้เราจะไปวัดเหนี่ยวนำและความจุโดยใช้วงจร LC ในแบบคู่ขนาน วงจรนี้เป็นเหมือนแหวนหรือกระดิ่งซึ่งเริ่มมีเสียงสะท้อนที่ความถี่บางอย่าง เมื่อใดก็ตามที่เราใช้ชีพจรวงจร LC นี้จะเริ่มต้นการสะท้อนและความถี่เรโซแนนซ์นี้อยู่ในรูปแบบอะนาล็อก (คลื่นไซน์) ดังนั้นเราจำเป็นต้องแปลงเป็นคลื่นอัศวิน เมื่อต้องการทำเช่นนี้เราใช้ความถี่เรโซแนนซ์อนาล็อกนี้เป็น opamp (741 ในกรณีของเรา) ซึ่งจะแปลงเป็นคลื่นอัจฉริยะ (ความถี่) ที่ 50% ของรอบการทำงาน ตอนนี้เราวัดความถี่โดยใช้ Arduino และโดยใช้การคำนวณทางคณิตศาสตร์บางอย่างที่เราสามารถหาตัวเหนี่ยวนำหรือความจุ เราได้ใช้กำหนดLCสูตรการตอบสนองความถี่วงจร
f = 1 / (2 * เวลา)
ที่เวลาเป็นผลลัพธ์ของpulseIn ()ฟังก์ชั่น
ตอนนี้เรามีวงจร LC ความถี่:
f = 1/2 * Pi * รากที่สองของ (LC)

เราสามารถแก้ปัญหาได้เพื่อให้ได้ตัวเหนี่ยวนำ:
f 2 = 1 / (4Pi 2 LC) 
L = 1 / (4Pi 2 f 2 C) 
L = 1 / (4 * pi * pi * f * f * C)

ดังที่เรากล่าวไว้แล้วว่าคลื่นของเราคือคลื่นไซน์ดังนั้นจึงมีช่วงเวลาเดียวกันในทั้งแอพพลิเคชั่นบวกและลบหมายความว่าเครื่องเปรียบเทียบจะแปลงเป็นคลื่นสี่เหลี่ยมที่มีรอบการทำงาน 50% เพื่อให้เราสามารถวัดได้โดยใช้ฟังก์ชัน pulseIn ()ของ Arduino ฟังก์ชั่นนี้จะทำให้เรามีช่วงเวลาที่สามารถแปลงเป็นความถี่ได้อย่างง่ายดายโดยการย้อนระยะเวลา เป็นฟังก์ชันpulseInวัดเพียงหนึ่งชีพจรดังนั้นตอนนี้เพื่อให้ได้ความถี่ที่ถูกต้องเราต้องคูณด้วย 2 ขณะนี้เรามีความถี่ที่สามารถแปลงเป็นตัวเหนี่ยวนำโดยใช้สูตรข้างต้น
หมายเหตุ:ในขณะที่วัดค่าตัวเหนี่ยวนำ (L1) ค่าตัวเก็บประจุ (C1) ควรเป็น 0.1uF และในขณะที่วัดค่าความจุ (C1) ค่าเหนี่ยวนำ (L1) ควรเป็น 10mH

แผนผังวงจรและคำอธิบาย

ในแผนภาพวงจร LC Meterนี้เราได้ใช้ Arduino เพื่อควบคุมการทำงานของโครงการ ในนี้เราได้ใช้วงจร LCวงจร LC นี้ประกอบด้วย Cuductor และ Capacitor ในการแปลงคลื่นความถี่ไซน์เป็นคลื่นแบบดิจิตอลหรือคลื่นสี่เหลี่ยมเราใช้เครื่องขยายเสียงในการดำเนินงานคือ 741 นี่จำเป็นต้องใช้แหล่งจ่ายไฟเชิงลบเพื่อให้ได้ความถี่เอาต์พุตที่ถูกต้อง ดังนั้นเราจึงใช้แบตเตอรี่ 3v ที่เชื่อมต่ออยู่ในขั้วย้อนกลับหมายถึงขาพิ้น 741 ที่เชื่อมต่อกับขั้วลบของแบตเตอรี่และขาบวกของแบตเตอรี่เชื่อมต่อกับพื้นของวงจรที่เหลืออยู่ สำหรับข้อมูลเพิ่มเติมโปรดดูแผนผังด้านล่าง
 แผนภาพสำหรับ LC Meter ใช้ Arduino

ที่นี่เรามีปุ่มกดเพื่อเปลี่ยนโหมดการทำงานไม่ว่าเราจะวัดความเหนี่ยวนำหรือความจุ จอ LCD ขนาด 16x2 ถูกใช้แสดงความเหนี่ยวนำหรือความจุด้วยความถี่ของวงจร LC มีการใช้หม้อขนาด 10k เพื่อควบคุมความสว่างของจอ LCDวงจรขับเคลื่อนด้วยความช่วยเหลือของแหล่งจ่ายไฟ Arduino 5v และเราสามารถใช้พลังงาน Arduino ได้ 5v โดยใช้อะแดปเตอร์ USB หรือ 12v
วงจรสำหรับ LC Meter ใช้ Arduinoการวัดความถี่และประจุไฟฟ้า

LC Meter ใช้ Arduino: วัดความเหนี่ยวนำและความถี่การวัดความถี่และการเหนี่ยวนำ

อธิบายการเขียนโปรแกรม

ส่วนการเขียนโปรแกรมของโครงการ LC Meterนี้ทำได้ง่ายมาก รหัสArduino สมบูรณ์จะได้รับที่ท้ายบทความนี้
ขั้นแรกเราต้องใส่ไลบรารีสำหรับ LCD และประกาศหมุดและมาโครบางตัว
#include <LiquidCrystal.h> 
LiquidCrystal lcd (A5, A4, A3, A2, A1, A0);

#define serial

#define charge 3 
#define freqIn 2 
#define mode 10

#define Delay 15

ความถี่คู่, ประจุ, ความเหนี่ยวนำ;

typedef struct 
{ 
  int flag: 1; 
}ธง;

ธงบิต;

หลังจากนั้นในฟังก์ชันการตั้งค่าเราได้เริ่มต้นการสื่อสาร LCD และ Serialเพื่อแสดงค่าที่วัดได้ผ่านจอ LCD และจอภาพอนุกรม
void setup () 
{ 
#ifdef 
  Serial.begin 
แบบอนุกรม(9600); endif # 
  lcd.begin (16, 2); 
  pinMode (freqIn, INPUT); 
  pinMode (ค่า, OUTPUT); 
  pinMode (โหมด, INPUT_PULLUP); 
  lcd.print ("LC Meter Using"); 
  lcd.setCursor (0, 1); 
  lcd.print ("Arduino"); 
  ล่าช้า (2000); 
  lcd.clear (); 
  lcd.print ("วงจรย่อย"); 
  ล่าช้า (2000); 
}

จากนั้นในฟังก์ชันลูปให้ใช้ชีพจรของช่วงเวลาที่กำหนดไปยังวงจร LC ซึ่งจะชาร์จวงจร LC หลังจากถอดวงจรชีพจร LC จะเริ่มสะท้อน จากนั้นเราอ่านการแปลงคลื่นสแควร์ที่มาจาก op-amp โดยใช้ฟังก์ชัน pulseIn ()และแปลงข้อมูลโดยคูณด้วย 2 ที่นี่เราได้นำตัวอย่างบางส่วนมาใช้ด้วย นั่นคือวิธีการคำนวณความถี่ :
void loop () 
{ 
  สำหรับ (int i = 0; i <Delay; i ++) 
  { 
    digitalWrite (เรียกเก็บเงิน, สูง); 
    delayMicroseconds (100); 
    digitalWrite (ค่าใช้จ่ายต่ำ); 
    delayMicroseconds (50); 
  ชีพจรสองครั้ง = ชีพจร (freqIn, HIGH, 10000); 
  ถ้า (ชีพจร> 0.1) 
    ความถี่ + = 1.E6 / (2 * ชีพจร); 
    ล่าช้า (20); 
  } 
  ความถี่ / = ล่าช้า; 
#ifdef serial serial 
  ("ความถี่:"); 
  Serial.print (ความถี่); 
  Serial.print ("Hz"); 
endif #

  lcd.setCursor (0, 0); 
  lcd.print ( "ความถี่:"); 
  lcd.print (ความถี่); 
  lcd.print ("Hz");

หลังจากรับค่าความถี่แล้วเราได้แปลงค่าเป็นค่าความเหนี่ยวนำโดยใช้โค้ดที่ให้มา
capacitance = 0.1E-6; 
    ตัวเหนี่ยวนำ = (1. / (ความจุ * ความถี่ * ความถี่ * 4. * 3.14159 * 3.14159)) * 1.E6; 
#ifdef serial 
    serial.print ("ind:"); 
    ถ้า (เหนี่ยวนำ> = 1000) 
    { 
    Serial.print (เหนี่ยวนำ / 1000); 
    Serial.println ("mH"); 
    } 
    else 
   { 
    Serial.print (ตัวเหนี่ยวนำ); 
    Serial.println ("uH"); 
  } 
#endif

    lcd.setCursor (0, 1); 
    lcd.print ( "Ind:"); 
    ถ้า (inductance> = 1000) 
    { 
    lcd.print (inductance / 1000); 
    lcd.print ("mH"); 
    } 
    else 
   { 
    lcd.print (ตัวเหนี่ยวนำ); 
    lcd.print ("uH"); 
  } 
  }

และโดยการใช้รหัสให้เราคำนวณความจุ
if (Bit.flag) 
  { 
    inductance = 1.E-3; 
    capacitance = ((1. / (ความเหนี่ยวนำ * ความถี่ * ความถี่ * 4. * 3.14159 * 3.14159)) * 1.E9); 
    ถ้า capacitance (int) <0) 
    capacitance = 0; 
#ifdef serial serial 
    ("Capacitance:"); 
    Serial.print (ความจุ, 6); 
    Serial.println ("uF"); 
endif # 
    lcd.setCursor (0, 1); 
    lcd.print ("Cap:"); 
    ถ้า (ความจุ> 47) 
    { 
      lcd.print ((capacitance / 1000)); 
    lcd.print ("uF"); 
    } 
    else 
    { 
       lcd.print (capacitance); 
       lcd.print ("nF"); 
    } 
  }

นี่คือวิธีที่เราคำนวณความถี่, ค่าความจุและความเหนี่ยวนำโดยใช้ Arduinoและแสดงบนจอ LCD ขนาด 16x2
รหัส
#include <LiquidCrystal.h> 
LiquidCrystal lcd (A5, A4, A3, A2, A1, A0);
#define serial
#define charge 3 
#define freqIn 2 
#define mode 10
#define Delay 15
ความถี่คู่, ประจุ, ความเหนี่ยวนำ;
typedef struct 

  int flag: 1; 
}ธง;
ธงบิต;
void setup () 

#ifdef 
  Serial.begin แบบอนุกรม(9600); 
endif # 
  lcd.begin (16, 2); 
  pinMode (freqIn, INPUT); 
  pinMode (ค่า, OUTPUT); 
  pinMode (โหมด, INPUT_PULLUP); 
  lcd.print ("LC Meter Using"); 
  lcd.setCursor (0, 1); 
  lcd.print ("Arduino"); 
  ล่าช้า (2000); 
  lcd.clear (); 
  lcd.print ("วงจรย่อย"); 
  ล่าช้า (2000); 
}
void loop () 

  สำหรับ (int i = 0; i <Delay; i ++) 
  { 
    digitalWrite (เรียกเก็บเงิน, สูง); 
    delayMicroseconds (100); 
    digitalWrite (ค่าใช้จ่ายต่ำ); 
    delayMicroseconds (50); 
  ชีพจรสองครั้ง = ชีพจร (freqIn, HIGH, 10000); 
  ถ้า (ชีพจร> 0.1) 
    ความถี่ + = 1.E6 / (2 * ชีพจร); 
    ล่าช้า (20); 
  } 
  ความถี่ / = ล่าช้า; 
#ifdef serial serial 
  ("ความถี่:"); 
  Serial.print (ความถี่); 
  Serial.print ("Hz"); 
endif #
  lcd.setCursor (0, 0); 
  lcd.print ( "ความถี่:"); 
  lcd.print (ความถี่); 
  lcd.print ("Hz");
  if (Bit.flag) 
  { 
    inductance = 1.E-3; 
    capacitance = ((1. / (ความเหนี่ยวนำ * ความถี่ * ความถี่ * 4. * 3.14159 * 3.14159)) * 1.E9); 
    ถ้า capacitance (int) <0) 
    capacitance = 0; 
#ifdef serial serial 
    ("Capacitance:"); 
    Serial.print (ความจุ, 6); 
    Serial.println ("uF"); 
endif # 
    lcd.setCursor (0, 1); 
    lcd.print ("Cap:"); 
    ถ้า (ความจุ> 47) 
    { 
      lcd.print ((capacitance / 1000)); 
    lcd.print ("uF"); 
    } 
    else 
    { 
       lcd.print (capacitance); 
       lcd.print ("nF"); 
    } 
  } 

  else 
  { 
    capacitance = 0.1E-6; 
    ตัวเหนี่ยวนำ = (1. / (ความจุ * ความถี่ * ความถี่ * 4. * 3.14159 * 3.14159)) * 1.E6; 
#ifdef serial 
    serial.print ("ind:"); 
    ถ้า (เหนี่ยวนำ> = 1000) 
    { 
    Serial.print (เหนี่ยวนำ / 1000); 
    Serial.println ("mH"); 
    } 
    else 
   { 
    Serial.print (ตัวเหนี่ยวนำ); 
    Serial.println ("uH"); 
  } 
#endif
    lcd.setCursor (0, 1); 
    lcd.print ( "Ind:"); 
    ถ้า (inductance> = 1000) 
    { 
    lcd.print (inductance / 1000); 
    lcd.print ("mH"); 
    } 
    else 
   { 
    lcd.print (ตัวเหนี่ยวนำ); 
    lcd.print ("uH"); 
  } 
  }
  ถ้า (digitalRead (โหมด) == LOW) 
  { 
    Bit.flag =! Bit.flag; 
    ล่าช้า (1000) 
    ขณะที่ (digitalRead (โหมด) == ต่ำ); 
  } 
  ล่าช้า (50); 
}

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การเขียนผังงาน (Flowchart)

โครงงานเรื่อง ล้อวัดระยะทางด้วย Encoder (งานที่ 17)

(บล็อกที่ 9). code รถบังคับจากแผ่นซีดี ควบคุมด้วยแอพแอนดรอยด์