2022 개정 교육과정 연계 온디바이스 미세유체공학·디지털분자진단 STEM 시리즈 #57

미세유체 ddPCR 에멀션 안정화 서보 엔진

플루오린화 오일-물 2상 유동 모세관 수($Ca$) 제어 및 0-Alloc C# 나노리터 액적 단분산성 유지 제어 루프

핵심 연구 개요 및 교과 연계

암 조기 진단 및 미량 병원체 희귀 돌연변이를 절대 정량(Absolute Quantification)하는 혁신 기술인 액적 디지털 PCR(ddPCR, Droplet Digital PCR)은 $20\,\mu\text{L}$의 반응액을 약 2만 개의 균일한 $1\text{ nL}$ 피코리터 수중유(Water-in-Oil) 액적으로 분할합니다. 유동 집속(Flow-Focusing) 미세유체 칩 노즐에서 연속 오일 상과 분산 수용액 상이 교차할 때, 레일리-플라토(Rayleigh-Plateau) 계면 불안정성에 의해 자발적 액적 핀치오프(Pinch-off)가 발생합니다. 그러나 불소계 계면활성제(Fluorosurfactant) 농도 변동이나 압력 맥동은 액적 크기 다분산성(Polydispersity)을 유발하거나 열순환(Thermal Cycling, $95^\circ\text{C}$) 중 액적 병합(Coalescence)을 일으켜 포아송 통계(Poisson Statistics) 신뢰도를 붕괴시킵니다.

본 백서는 2022 개정 화학 II (콜로이드와 에멀션의 안정도, 계면활성제의 친수성-소수성 균형(HLB), 표면장력), 생명과학 II (DNA 복제와 중합효소 연쇄 반응(PCR), 단일 분자 포아송 확률 분포), 미적분 (모세관 수 $Ca = \frac{\mu U}{\gamma}$ 비선형 미분 및 2상 계면 곡률 적분), 그리고 정보 (C# 13 0-Alloc 스택 연산)를 결합하여, 광학 센서의 액적 통과 주파수 및 산란 펄스 폭으로부터 액적 직경을 실시간 역산하고 공압 펌프 차압비를 1,000Hz로 제어하는 온디바이스 디지털 PCR 서보 엔진을 완성합니다.

1. 유동 집속 액적 생성 및 모세관 수($Ca$) 수리 모델

오일 상(연속상) 점도 $\mu_c$, 평균 유속 $U_c$, 계면장력 $\gamma$에 의해 정의되는 모세관 수(Capillary Number) $Ca$는 점성 전단력과 계면장력의 상대적 비를 나타냅니다:

$$Ca = \frac{\mu_c U_c}{\gamma}$$

짜냄 영역(Squeezing Regime, $Ca < 0.01$)에서 생성되는 액적 부피 $V_{drop}$는 수용액 유량 $Q_d$와 오일 유량 $Q_c$의 비율 및 노즐 단면적 $A$에 비례합니다:

$$V_{drop} \approx \alpha_{geom} \cdot w^2 h \cdot \left( 1 + \beta \frac{Q_d}{Q_c} \right)$$

총 $N$개의 액적 중 표적 DNA 분자가 $k$개 들어갈 확률은 포아송 분포 $P(k; \lambda) = \frac{\lambda^k e^{-\lambda}}{k!}$를 따르며, 음성 액적 분율 $f_{neg} = \frac{N_{neg}}{N_{total}} = e^{-\lambda}$로부터 초기 분자 농도 $\lambda = -\ln(f_{neg})$가 유도됩니다. 모든 액적의 체적 편차(CV)가 $3\%$ 이내로 제어되어야만 정확한 $\lambda$ 추정이 성립합니다.

2. 0-Alloc C# 스택 기반 ddPCR 액적 단분산성 제어 서보

광센서의 액적 통과 광도 펄스 폭과 발생 주파수로부터 액적 체적을 산출하고 오일-수용액 펌프 차압을 미세 튜닝하는 ref struct 루프입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.Microfluidics
{
    public readonly ref struct DropletGenerationTelemetry
    {
        public readonly double DropletFrequencyHz;
        public readonly double OpticalPulseWidthMicroSec;
        public readonly double AqueousInletPressureKpa;
        public readonly double OilInletPressureKpa;
        public readonly double MicrofluidicChipTempC;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public DropletGenerationTelemetry(double freqHz, double pulseWidthUs, double pAq, double pOil, double tempC)
        {
            DropletFrequencyHz = freqHz;
            OpticalPulseWidthMicroSec = pulseWidthUs;
            AqueousInletPressureKpa = pAq;
            OilInletPressureKpa = pOil;
            MicrofluidicChipTempC = tempC;
        }
    }

    public readonly ref struct DropletControlResult
    {
        public readonly double EstimatedDropletVolumeNl;
        public readonly double VolumeErrorPercent;
        public readonly double OilPressureDeltaKpa;
        public readonly bool IsMonodisperse;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public DropletControlResult(double volumeNl, double errPct, double deltaOil, bool mono)
        {
            EstimatedDropletVolumeNl = volumeNl;
            VolumeErrorPercent = errPct;
            OilPressureDeltaKpa = deltaOil;
            IsMonodisperse = mono;
        }
    }

    public ref struct MicrofluidicDropletServo
    {
        private const double TargetVolumeNl = 0.85; // 0.85 nL 목표
        private const double ReferencePulseWidthUs = 450.0;
        private readonly double _kpPressure;
        private readonly double _kiPressure;
        private double _integratedVolumeError;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public MicrofluidicDropletServo(double kp, double ki)
        {
            _kpPressure = kp;
            _kiPressure = ki;
            _integratedVolumeError = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public DropletControlResult Step(in DropletGenerationTelemetry telemetry, double dt)
        {
            // 1. 광학 펄스 폭으로부터 액적 체적 추정: V = TargetVolume * (Width / RefWidth)
            double estimatedVolumeNl = TargetVolumeNl * (telemetry.OpticalPulseWidthMicroSec / ReferencePulseWidthUs);

            // 2. 체적 오차율 산출
            double volumeError = estimatedVolumeNl - TargetVolumeNl;
            double errorPercent = (volumeError / TargetVolumeNl) * 100.0;
            _integratedVolumeError += volumeError * dt;

            // 3. PI 컨트롤러 기반 오일 펌프 압력 보정 (액적이 너무 크면 오일 압력을 높여 전단 핀치오프 가속)
            double oilPressureDelta = _kpPressure * volumeError + _kiPressure * _integratedVolumeError;
            oilPressureDelta = Math.Clamp(oilPressureDelta, -5.0, 5.0); // +-5 kPa 제한

            // 4. 단분산성 (CV < 3%) 판정
            bool isMonodisperse = Math.Abs(errorPercent) < 3.0 && telemetry.DropletFrequencyHz > 800.0;

            return new DropletControlResult(estimatedVolumeNl, errorPercent, oilPressureDelta, isMonodisperse);
        }
    }
}

3. 교육적 가치 및 중고교 실험 시뮬레이션 적용

2022 개정 교육과정 연계 수업 가이드

  • 화학 II [콜로이드와 계면 활성제]: 물과 기름이 섞이지 않는 경계면에서 계면활성제가 표면장력을 낮추어 안정한 나노 에멀션을 형성하는 물리화학적 메커니즘 학습.
  • 생명과학 II [유전공학 기술과 확률 통계]: 연속 PCR과 달리 반응액을 2만 개로 쪼개어 단일 분자 유무(0과 1)를 포아송 분포로 세는 디지털 계수(Digital Counting) 원리 체험.
  • 정보 [임베디드 유체 제어 프로그래밍]: 액적 통과 센서 신호의 마이크로초 펄스 폭을 실시간 측정하여 미세 공압 펌프를 제어하는 바이오 메카트로닉스 구현.