#include <Arduino.h>
#include <math.h>
const float pi = 3.14159265358979323846; // Nilai pi
const float characteristicImpedance = 50.0; // Impedansi karakteristik dalam ohm
const float supplyVoltage = 3.3; // Tegangan referensi ADC dalam volt
const float adcResolution = 4095.0; // Resolusi ADC (12 bit)
const float frequency = 1000000.0; // Frekuensi operasional dalam Hz (1 MHz)
const int adcPin1 = 34; // Pin ADC untuk input 1
const int adcPin2 = 35; // Pin ADC untuk input 2
void setup() {
Serial.begin(115200);
analogReadResolution(12); // Set resolusi ADC menjadi 12-bit
}
void loop() {
// Baca nilai ADC dari dua input
int adcValue1 = analogRead(adcPin1);
int adcValue2 = analogRead(adcPin2);
// Konversi nilai ADC menjadi tegangan
float voltage1 = adcToVoltage(adcValue1);
float voltage2 = adcToVoltage(adcValue2);
// Hitung amplitudo dan fase dari dua sinyal
float amplitude1 = calculateAmplitude(voltage1);
float amplitude2 = calculateAmplitude(voltage2);
float phase1 = calculatePhase(voltage1);
float phase2 = calculatePhase(voltage2);
// Hitung SWR
float swr = calculateSWR(amplitude1, amplitude2);
// Hitung induktansi (L)
float inductance = calculateInductance(amplitude1, amplitude2);
// Hitung kapasitansi (C)
float capacitance = calculateCapacitance(amplitude1, amplitude2);
// Hitung reaktansi (X)
float reactance = calculateReactance(inductance, capacitance, frequency);
// Hitung impedansi (Z)
float impedance = calculateImpedance(amplitude1, amplitude2, phase1, phase2);
// Hitung fase (phi)
float phase = phase1 - phase2;
// Tampilkan hasil
Serial.print("SWR: ");
Serial.println(swr);
Serial.print("Inductance (L): ");
Serial.println(inductance);
Serial.print("Capacitance (C): ");
Serial.println(capacitance);
Serial.print("Reactance (X): ");
Serial.println(reactance);
Serial.print("Impedance (Z): ");
Serial.println(impedance);
Serial.print("Phase (phi): ");
Serial.println(phase);
delay(1000); // Delay untuk membaca setiap detik
}
// Fungsi untuk mengonversi nilai ADC menjadi tegangan
float adcToVoltage(int adcValue) {
return (adcValue * supplyVoltage) / adcResolution; // Rumus konversi
}
// Fungsi untuk menghitung amplitudo
float calculateAmplitude(float voltage) {
return voltage / sqrt(2); // RMS value
}
// Fungsi untuk menghitung fase
float calculatePhase(float voltage) {
return atan2(voltage, voltage); // Menggunakan arctan
}
// Fungsi untuk menghitung SWR
float calculateSWR(float amplitude1, float amplitude2) {
return (1 + amplitude2 / amplitude1) / (1 - amplitude2 / amplitude1);
}
// Fungsi untuk menghitung induktansi (L)
float calculateInductance(float amplitude1, float amplitude2) {
// Rumus: L = X / (2 * pi * f)
float reactance = sqrt(amplitude2 * amplitude2 + amplitude1 * amplitude1 - 2 * amplitude1 * amplitude2);
return reactance / (2 * pi * frequency);
}
// Fungsi untuk menghitung kapasitansi (C)
float calculateCapacitance(float amplitude1, float amplitude2) {
// Rumus: C = 1 / (2 * pi * f * X)
float reactance = sqrt(amplitude2 * amplitude2 + amplitude1 * amplitude1 - 2 * amplitude1 * amplitude2);
return 1 / (2 * pi * frequency * reactance);
}
// Fungsi untuk menghitung reaktansi (X)
float calculateReactance(float inductance, float capacitance, float frequency) {
// Rumus: X = 1 / (2 * pi * f * C) - 2 * pi * f * L
return 1 / (2 * pi * frequency * capacitance) - 2 * pi * frequency * inductance;
}
// Fungsi untuk menghitung impedansi (Z)
float calculateImpedance(float amplitude1, float amplitude2, float phase1, float phase2) {
// Rumus: Z = Z_0 * (1 + A_ref / A_fwd) / (1 - A_ref / A_fwd)
float amplitudeReflected = sqrt(amplitude2 * amplitude2 + amplitude1 * amplitude1 - 2 * amplitude1 * amplitude2 * cos(phase1 - phase2));
return characteristicImpedance * (amplitude1 + amplitudeReflected) / (amplitude1 - amplitudeReflected);
}