شنبه، ۱۷ خرداد ۱۴۰۴
اندوکتانسمتر با آردینو بسازید
اندوکتانسمتر ارائهشده در این پروژه، با استفاده از آردوینو و تعدادی قطعه الکترونیکی ساده، قادر است مقادیر اندوکتانس را در محدوده 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);
}
}
تصاویر ساخته شده مدار