اندوکتانس‌متر با آردینو بسازید

شنبه، ۱۷ خرداد ۱۴۰۴

اندوکتانس‌متر با آردینو بسازید

اندوکتانس‌متر ارائه‌شده در این پروژه، با استفاده از آردوینو و تعدادی قطعه الکترونیکی ساده، قادر است مقادیر اندوکتانس را در محدوده 41 میکروهانری تا 30 میلی‌هانری و حتی بیشتر اندازه‌گیری کند. مقادیر اندازه‌گیری‌شده روی نمایشگر OLED نمایش داده می‌شوند.

لیست قطعات مورد نیاز

برای ساخت این اندوکتانس‌متر، به قطعات زیر نیاز دارید:

  • آردوینو نانو یا UNO

  • مقایسه‌گر چهارگانه LM339

  • نمایشگر OLED 128x64 با رابط

  • مقاومت 150اهم

  • دو عدد مقاومت 1 کیلو اهم

  • دیود 1N4001

  • خازن 2.2 میکروفاراد (تانتالیوم یا الکترولیتی)

  • سلف با اندوکتانس نامشخص (برای اندازه‌گیری)

  • برای تهیه قطعات این پروژه وارد قسمت فروشگاه سایت شوید

کلیک کنید

نقشه مدار:

🔌 دیاگرام اتصال مدار

در تصویر زیر، نحوه اتصال قطعات به آردوینو و نمایشگر OLED نشان داده شده است:

⚙️ نحوه عملکرد مدار

مدار بر اساس اصل نوسانگر LC عمل می‌کند. در این مدار، یک خازن با ظرفیت مشخص و یک سلف با اندوکتانس نامشخص به صورت موازی متصل می‌شوند. آردوینو یک پالس 5 ولتی به مدار اعمال می‌کند که باعث شارژ و دشارژ خازن از طریق سلف می‌شود. این فرآیند منجر به ایجاد نوسانات می‌شود.

یک مدار تشخیص عبور از صفر (Zero Crossing Detector) با استفاده از مقایسه‌گر LM339، نوسانات را به سیگنال مربعی تبدیل می‌کند. آردوینو با استفاده از تابع pulseIn مدت زمان یک پالس را اندازه‌گیری کرده و فرکانس نوسان را محاسبه می‌کند. سپس با استفاده از فرمول زیر، مقدار اندوکتانس را محاسبه می‌کند.

L=14π2f2CL = \frac{1}{4\pi^2 f^2 C}L=4π2f2C1​

که در آن:

  • LLL: اندوکتانس (هانری)

  • fff: فرکانس نوسان (هرتز)

  • CCC: ظرفیت خازن (فاراد)

کد برنامه:

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#include <Fonts/FreeSans9pt7b.h>

#include <Fonts/FreeSans12pt7b.h>

#include <Fonts/FreeSansOblique12pt7b.h>

#define SCREEN_WIDTH 128

#define SCREEN_HEIGHT 64

// Initialize the SSD1306 display object

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Declare variables for pulse, frequency, capacitance, and inductance

double pulse, frequency, capacitance, inductance;

void setup() {

// Initialize the I2C communication

Wire.begin();

// Initialize the SSD1306 display with I2C address 0x3C

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

// Wait for 1 second, then clear and display the OLED screen

delay(1000);

display.clearDisplay();

display.display();

// Initialize serial communication with a baud rate of 115200

Serial.begin(115200);

// Set pin 5 as INPUT and pin 3 as OUTPUT

pinMode(5, INPUT);

pinMode(3, OUTPUT);

// Wait for 200 milliseconds

delay(200);

}

void loop() {

// Generate a 5 microseconds HIGH pulse on pin 3

digitalWrite(3, HIGH);

delay(5);

digitalWrite(3, LOW);

delayMicroseconds(100);

// Measure the duration of the HIGH pulse on pin 5

pulse = pulseIn(5, HIGH, 5000);

// Check if the measured pulse duration is greater than 0.1 microseconds

if (pulse > 0.1) {

// Update with your specific capacitance value

capacitance = 2.08E-6;

// Calculate frequency and inductance using the measured pulse duration

frequency = 1.0E6 / (2 * pulse);

inductance = 1.0 / (capacitance frequency frequency 4.0 3.14159 * 3.14159);

inductance *= 1E6;

// Print measurements to the Serial Monitor

Serial.print("High for uS:");

Serial.print(pulse);

Serial.print("\tfrequency Hz:");

Serial.print(frequency);

Serial.print("\tinductance uH:");

Serial.println(inductance);

delay(10);

// Display measurements on the OLED screen

display.clearDisplay();

display.drawRect(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, SSD1306_WHITE);

display.setFont(&FreeSans9pt7b);

display.setTextColor(SSD1306_WHITE);

display.setCursor(6, 25);

display.print("Inductance:");

// Choose appropriate units (uH or mH) based on the magnitude of inductance

if (inductance > 999) {

inductance /= 1000.0; // Convert to millihenries (mH)

display.setFont(&FreeSans12pt7b);

display.setCursor(6, 52);

display.print(inductance);

display.setCursor(58, 52);

display.print("mH");

} else if (inductance < 1000) {

display.setFont(&FreeSans12pt7b);

display.setCursor(6, 52);

display.print(inductance);

display.setCursor(85, 52);

display.print("uH");

}

// Display on the OLED screen and wait for 2 seconds

display.display();

delay(2000);

} else {

// Inductor not connected, print "Unknown" in place of inductance

display.clearDisplay();

display.drawRect(0, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, SSD1306_WHITE);

display.setTextColor(SSD1306_WHITE);

display.setFont(&FreeSans9pt7b);

display.setCursor(6, 25);

display.print("Inductance:");

display.setFont(&FreeSansOblique12pt7b);

display.setCursor(6, 52);

display.print("Unknown");

display.display();

delay(10);

}

}

تصاویر ساخته شده مدار