Cara Membuat Solder C210 DIY Dengan ESP32 Murah dan Mudah

Table of Contents

Solder tipe C210 semakin populer di kalangan teknisi elektronik, hobiis, hingga perakit perangkat DIY karena kemampuannya menghasilkan panas cepat dengan kontrol suhu yang presisi. Berbeda dengan solder konvensional, C210 menggunakan konsep cartridge heater yang menggabungkan elemen pemanas dan sensor suhu dalam satu ujung tip. Hal ini membuat respon pemanasan jauh lebih cepat dan stabil, sangat cocok untuk pekerjaan SMD berukuran kecil hingga menengah.

Dalam proyek ini, solder C210 dirancang menggunakan sistem modular berbasis MCU ESP32. Pendekatan ini memungkinkan kontrol suhu berbasis PID, pembacaan arus dan tegangan secara real-time, serta fitur tambahan seperti sleep otomatis dan deteksi tip. Dengan memanfaatkan modul plug and play (PnP), perakitan menjadi lebih fleksibel dan mudah dikembangkan di kemudian hari, baik untuk kebutuhan personal maupun pengembangan produk.

Prinsip Kerja Solder C210

Prinsip kerja solder C210 berbeda cukup jauh dibanding solder konvensional berbasis kawat nikelin. Pada solder C210, elemen pemanas dan sensor suhu berada di dalam satu cartridge tertutup. Sensor yang digunakan umumnya adalah termokopel tipe K yang tertanam sangat dekat dengan elemen pemanas. Posisi ini membuat pembacaan suhu terjadi hampir secara real-time, karena panas tidak perlu merambat jauh sebelum terdeteksi sensor. Ketika arus dialirkan ke cartridge, elemen pemanas langsung menghasilkan panas dan menaikkan suhu ujung tip dalam hitungan detik.

Sinyal suhu dari termokopel kemudian dibaca oleh rangkaian antarmuka, biasanya menggunakan IC pembaca termokopel seperti MAX6675 atau MAX31855. Data suhu ini dikirim ke MCU untuk dibandingkan dengan suhu target. MCU akan mengatur besar kecilnya daya pemanas menggunakan PWM melalui MOSFET. Semakin jauh selisih suhu aktual dengan setpoint, semakin besar duty cycle PWM yang diberikan. Sistem kontrol PID sering digunakan agar suhu stabil, tidak overshoot, dan cepat kembali ke setpoint saat ujung tip menyentuh timah atau pad PCB.

Keunggulan utama solder C210 ada pada respon pemanasannya yang sangat cepat, stabilitas suhu yang tinggi, dan ukuran tip yang kecil sehingga cocok untuk komponen SMD padat. Konsumsi daya juga lebih efisien karena panas langsung difokuskan ke ujung kerja. Kekurangannya, tip relatif mahal dan rangkaian kontrolnya menuntut desain yang lebih rapi agar tidak terganggu noise PWM.

Untuk proyek DIY, berbagai MCU bisa digunakan. Dari keluarga Arduino, Arduino Nano atau Uno sering dipakai karena sederhana dan mudah diprogram. ATmega328P standalone juga populer untuk desain custom. Dari STM32, seri STM32F103C8 (Blue Pill) banyak digunakan karena ADC cepat dan timer presisi. Sementara itu, ESP32 menjadi pilihan modern karena memiliki PWM hardware, ADC cukup baik, kecepatan tinggi, serta fitur tambahan seperti WiFi dan Bluetooth untuk monitoring suhu secara nirkabel.

Modul dan Komponen Yang Dibutuhkan

Modul DC-DC Step Down 12V to 5V

Modul step down yang sering digunakan pada proyek solder C210 adalah LM2596 dan MP1584 karena keduanya mampu bekerja stabil pada arus menengah hingga tinggi. Fungsi utamanya menurunkan tegangan input 12V menjadi 5V yang aman untuk MCU, sensor suhu, dan rangkaian logika lainnya. Di marketplace lokal, modul LM2596 umumnya dijual di kisaran Rp10.000 hingga Rp18.000, sedangkan MP1584 berada pada rentang Rp15.000 hingga Rp25.000. Kedua modul ini mudah disetel melalui trimpot onboard, memiliki efisiensi tinggi, serta panas yang relatif rendah saat digunakan terus-menerus.

Modul Sensor Temperatur

Untuk membaca suhu pada tip solder C210, modul sensor MAX6675 dan MAX31855 menjadi pilihan yang sangat umum digunakan. Kedua modul ini dirancang khusus untuk membaca termokopel tipe K dengan tingkat akurasi dan stabilitas yang baik. MAX6675 lebih sering dipakai pada proyek DIY karena rangkaiannya sederhana dan harganya relatif terjangkau, berkisar antara Rp30.000 hingga Rp45.000 di marketplace lokal. Modul ini berkomunikasi menggunakan antarmuka SPI, sehingga proses pembacaan data suhu lebih tahan terhadap gangguan noise dan mudah diintegrasikan dengan MCU seperti ESP32.

Modul Pembaca Arus Beban

Untuk membaca arus yang mengalir ke tip solder C210, modul INA219 dan ACS712 sama-sama dapat digunakan, namun INA219 lebih sering dipilih karena akurasinya lebih tinggi dan lebih stabil. Modul INA219 mampu mengukur arus sekaligus tegangan melalui komunikasi I2C, sehingga integrasinya dengan MCU menjadi lebih sederhana. Di marketplace lokal, harga modul INA219 umumnya berada pada kisaran Rp35.000 hingga Rp55.000. Informasi arus ini sangat penting untuk memantau konsumsi daya pemanas, mendeteksi beban tidak normal, serta membantu sistem proteksi saat terjadi gangguan pada tip solder.

Modul Rotary Encoder

Rotary encoder tipe KY-040 sering digunakan sebagai input utama untuk mengatur suhu pada solder C210 DIY. Modul ini memiliki dua sinyal pulsa A dan B untuk mendeteksi arah putaran, serta satu tombol push yang dapat difungsikan sebagai konfirmasi atau menu. Di marketplace lokal, harga KY-040 umumnya berada di kisaran Rp8.000 hingga Rp15.000. Kegunaan encoder ini adalah memberikan kontrol manual yang presisi dan responsif, sehingga pengguna dapat menaikkan atau menurunkan suhu dengan akurat, sekaligus mengakses fitur tambahan seperti mode sleep, penguncian suhu, atau pengaturan cepat pada antarmuka solder digital.

Rangkaian Pembaca Tegangan Output PWM

Rangkaian pembaca tegangan PWM ini berfungsi untuk memantau besarnya daya yang benar-benar diberikan ke elemen pemanas solder C210. Dalam sistem pemanas dikenal dua tipe pengaturan PWM, yaitu low-side PWM dan high-side PWM. Low-side PWM mengendalikan jalur ground, sedangkan high-side PWM mengendalikan jalur positif tegangan. Pada perancangan solder C210 ini digunakan metode high-side PWM karena lebih stabil terhadap referensi ground sensor dan mampu mengurangi gangguan pembacaan suhu. 

@tjphonerepair PWM Control #diyproject #tjphonerepair #esp32project #T12 #c210 ♬ Black Four - Jamvana

Resistor divider digunakan untuk menurunkan level tegangan agar aman dibaca oleh ADC ESP32, sementara kapasitor low-pass berperan meratakan sinyal PWM menjadi tegangan DC yang stabil. Op-amp buffer bersifat opsional untuk meningkatkan kestabilan dan mengurangi beban sumber sinyal. Dengan rangkaian ini, MCU dapat mengetahui duty cycle aktual, memverifikasi kerja PWM, serta mendeteksi kondisi abnormal seperti pemanas tidak aktif atau daya yang tidak sesuai perintah kontrol.

Rangkaian Sensor Sleep

Sensor sleep digunakan untuk mendeteksi kondisi saat solder C210 tidak sedang dipakai atau diletakkan dalam posisi diam. Sensor ini dapat berupa tilt switch, accelerometer, atau limit switch sederhana yang dipasang pada dudukan solder. Komponen pendukungnya meliputi resistor pull-up dan satu jalur input GPIO ke MCU. Ketika tidak ada perubahan posisi atau gerakan dalam waktu tertentu, MCU akan mengaktifkan mode sleep dengan menurunkan suhu pemanas secara otomatis. Fungsi ini berguna untuk menghemat konsumsi daya, mengurangi risiko overheat, serta memperpanjang umur cartridge dan tip solder.

Rangkaian Deteksi Tip (Opsional)

Rangkaian deteksi tip berfungsi untuk memastikan bahwa cartridge solder C210 benar-benar terpasang sebelum pemanas diaktifkan. Metode yang umum digunakan adalah membaca nilai resistansi awal cartridge melalui resistor presisi yang terhubung ke jalur ADC MCU. Saat tip terpasang, nilai resistansi akan berada pada rentang tertentu yang sudah ditentukan, sedangkan ketika tip dilepas nilainya akan berubah signifikan. 

Untuk meningkatkan kestabilan dan akurasi pembacaan, sinyal ini dapat diperkuat atau dibuffer menggunakan op-amp LM358 sebelum masuk ke ADC. Dengan bantuan LM358, noise dapat ditekan dan level tegangan menjadi lebih konsisten. Sistem ini memungkinkan MCU menonaktifkan pemanasan secara otomatis untuk mencegah kerusakan rangkaian, meningkatkan keamanan, serta melindungi elemen pemanas dari kondisi kerja tanpa beban.

Firmware MCU ESP32

Firmware pada MCU ESP32 menjadi inti dari seluruh sistem kontrol solder C210, karena seluruh proses pembacaan sensor, pengolahan data, dan pengendalian pemanas dijalankan melalui perangkat lunak ini. Melalui firmware, ESP32 membaca suhu dari sensor termokopel, memantau arus dan tegangan pemanas, mengolah input dari rotary encoder, serta menentukan besar kecilnya daya pemanas menggunakan algoritma kontrol seperti PID. Perancangan firmware yang rapi dan terstruktur sangat berpengaruh pada stabilitas suhu, respon pemanasan, serta keandalan fitur tambahan seperti sleep otomatis dan deteksi tip pada solder C210 DIY.

Pembacaan Sensor Tegangan


float readVoltage() {
    int rawADC = analogRead(VOLTAGE_SENSOR_ANALOG_PIN);
    float voltage = rawADC * (3.3 / 4095.0);
    return voltage * 12.2;  // sesuaikan ratio
}
  

Pembacaan Sensor Arus


float readCurrent() {
    int rawADC = analogRead(CURRENT_SENSOR_ANALOG_PIN);
    float voltage_out = rawADC * (3.3 / 4095.0);

    // kalibrasi otomatis saat pertama kali pembacaan stabil
    if (!currentCalibrated && voltage_out > 0.05) {  
        // asumsikan arus awal stabil sekitar 1 A untuk auto kalibrasi
        currentRatio = voltage_out / 1.0;
        currentCalibrated = true;
    }

    return voltage_out / currentRatio;  // gunakan rasio hasil auto kalibrasi
}
  

Pembacaan Sensor Suhu MAX6675


void updateTemperatureFilter(float raw_temp) {
    if (isnan(raw_temp) || raw_temp < -20.0f || raw_temp > 600.0f) return;

    static float lastValid = 0.0f;
    if (lastValid != 0.0f && fabs(raw_temp - lastValid) > 50.0f) {
        // abaikan spike besar
        return;
    }
    lastValid = raw_temp;

    tempSamples[sampleIndex] = raw_temp;
    sampleIndex = (sampleIndex + 1) % TEMP_SAMPLE_SIZE;
    if (tempSampleCount < TEMP_SAMPLE_SIZE) tempSampleCount++;

    float sum = 0.0f;
    for (int i = 0; i < tempSampleCount; ++i) sum += tempSamples[i];
    if (tempSampleCount > 0) filteredTemp = sum / (float)tempSampleCount;
    else filteredTemp = raw_temp;

    current_temp = filteredTemp;
}
  

Pembacaan Sensor Sleep


void handleSleepTransition() {
    bool tipInHolder = (digitalRead(SLEEP_SENSOR_DIGITAL_PIN) == LOW); // LOW

    // Jika sedang aktif dan solder masuk holder → mulai delay sleep
    if (solderMode == ACTIVE_MODE && tipInHolder) {
        if (!isDelayingSleep) {
            isDelayingSleep = true;
            sleepDelayStartTime = millis();
        }

        // Jika delay sudah habis → aktifkan mode sleep
        if (isDelayingSleep && (millis() - sleepDelayStartTime >= SLEEP_DELAY_TIME)) {
            solderMode = SLEEP_MODE;
            isDelayingSleep = false;
            lastActiveSetpoint = setpoint_temp;  // simpan suhu aktif terakhir
            setpoint_temp = STANDBY_TEMP;        // turunkan target ke standby (90°C)
            triggerBuzzerNonBlocking("BeepOnce");
            updateSleepIcon(true);
        }
    }

    // Jika selama delay reed switch lepas (solder diangkat) → batalkan sleep
    else if (solderMode == ACTIVE_MODE && !tipInHolder && isDelayingSleep) {
        isDelayingSleep = false;
    }

    // Jika sedang sleep dan reed switch lepas → wake up
    else if (solderMode == SLEEP_MODE && !tipInHolder) {
        solderMode = ACTIVE_MODE;
        setpoint_temp = lastActiveSetpoint;      // kembalikan suhu target sebelumnya
        triggerBuzzerNonBlocking("BeepOnce");
        updateSleepIcon(false);
    }
}
  

Pembacaan Sensor Deteksi Tip


void updateTipStatus() {
    unsigned long now = millis();

    // Hindari pembacaan terlalu sering
    if (now - lastTipCheck < TIP_CHECK_INTERVAL) return;
    lastTipCheck = now;

    bool tipNow = readTipState();

    // Tidak usah update display kalau statusnya masih sama
    if (tipNow == tipAttached) return;
    tipAttached = tipNow;

    if (tipNow) {
        lv_obj_remove_style_all(status_label);
        lv_obj_add_style(status_label, &style_status_ready, 0);
        lv_label_set_text(status_label, "READY");
    } else {
        lv_obj_remove_style_all(status_label);
        lv_obj_add_style(status_label, &style_status_no_tip, 0);
        lv_label_set_text(status_label, "NO TIP");
    }
    lv_obj_align(status_label, LV_ALIGN_BOTTOM_LEFT, 10, -10);
}
  

Pengaturan Encoder


void updateSetpointFromEncoder() {
    // Jika tombol encoder sedang ditekan, abaikan perubahan encoder (menghindari noise saat hold)
    if (digitalRead(ENC_BUTTON) == LOW) {
        // reset flag agar tidak diproses berulang saat tombol dilepas
        encoderMoved = false;
        encoderPos = 0;
        return;
    }

    // Hanya eksekusi jika encoder diputar
    if (encoderMoved) {
        encoderMoved = false;
        if (encoderPos != 0) {  // pastikan ada perubahan
            setpoint_temp += encoderPos;
            encoderPos = 0;

            // Batasi range setpoint
            if (setpoint_temp < 50) setpoint_temp = 50;
            if (setpoint_temp > 450) setpoint_temp = 450;

            // Update tampilan
            char buf[16];
            sprintf(buf, "%d", (int)setpoint_temp);
            lv_label_set_text(setpoint_temp_label, buf);

            // Simpan ke EEPROM
            EEPROM.put(EEPROM_SETPOINT_ADDR, setpoint_temp);
            EEPROM.commit();
        }
    }
}
  

Pengaturan PWM


void setupPWM() {
    // Tentukan Speed Mode (Pilih salah satu, HIGH_SPEED_MODE lebih efisien untuk frekuensi tinggi)
    const ledc_mode_t speed_mode = LEDC_HIGH_SPEED_MODE; 
    
    // --- 1. Konfigurasi Timer (Frekuensi & Resolusi) ---
    ledc_timer_config_t ledc_timer = {
        .speed_mode     = speed_mode,
        .duty_resolution = (ledc_timer_bit_t)HEATER_PWM_RESOLUTION, // Misalnya 8 bit
        .timer_num      = (ledc_timer_t)HEATER_PWM_TIMER,      // Channel 0 digunakan sebagai Timer 0
        .freq_hz        = HEATER_PWM_FREQ,                        // Misalnya 25000 Hz
        .clk_cfg        = LEDC_AUTO_CLK
    };
    // Terapkan konfigurasi timer
    esp_err_t err_timer = ledc_timer_config(&ledc_timer);

    if (err_timer != ESP_OK) {
        return;
    }

    // --- 2. Konfigurasi Channel (Kaitkan Pin ke Timer) ---
    ledc_channel_config_t ledc_channel = {
        .gpio_num       = HEATER_PWM_PIN,
        .speed_mode     = speed_mode,
        .channel        = (ledc_channel_t)HEATER_PWM_CHANNEL, // Menggunakan Channel yang sama
        .intr_type      = LEDC_INTR_DISABLE, 
        .timer_sel      = (ledc_timer_t)HEATER_PWM_TIMER, // Pilih Timer yang sudah dikonfigurasi
        .duty           = 0, // Duty cycle awal
        .hpoint         = 0
    };
    // Terapkan konfigurasi channel
    esp_err_t err_channel = ledc_channel_config(&ledc_channel);

    if (err_channel != ESP_OK) {
        return;
    }

    // Hitung RAW MAX dari resolusi
    HEATER_PWM_RAW_MAX = (1 << HEATER_PWM_RESOLUTION) - 1;

    // Pastikan heater off pada awal
    applyHeaterDutyRaw(0);     
}
  

PID Controller


void updateHeaterHybridSafe() {
    static unsigned long lastPIDTimeLocal = 0;
    unsigned long now = millis();
    if (now - lastPIDTimeLocal < PID_INTERVAL) return;
    float dt = (now - lastPIDTimeLocal) / 1000.0f; // waktu detik
    lastPIDTimeLocal = now;

    // Jika pembacaan suhu invalid, jangan ubah duty
    if (isnan(current_temp) || current_temp < MIN_VALID_TEMP || current_temp > 600.0f) {
        return;
    }

    // PID terms (gunakan variabel global Kp, Ki, Kd)
    float error = setpoint_temp - (float)current_temp;
    static float integral_local = 0.0f;
    static float lastError_local = 0.0f;

    // Proportional
    float P = (float)Kp * error;

    // Integral dengan anti-windup: hanya integrasi saat output belum saturasi
    integral_local += error * dt;
    // batasi integral agar tidak overflow
    const float INTEGRAL_LIMIT = 2000.0f;
    if (integral_local > INTEGRAL_LIMIT) integral_local = INTEGRAL_LIMIT;
    if (integral_local < -INTEGRAL_LIMIT) integral_local = -INTEGRAL_LIMIT;
    float I = (float)Ki * integral_local;

    // Derivative
    float derivative = 0.0f;
    if (dt > 0) derivative = (error - lastError_local) / dt;
    float D = (float)Kd * derivative;
    lastError_local = error;

    // Hitung duty percent
    float dutyPercent = P + I + D;

    // Safety rules: jika suhu sudah lewat setpoint, langsung 0
    if (error <= 0.0f) {
        dutyPercent = 0.0f;
        // kurangi integral sedikit untuk mencegah overshoot berikutnya (anti-windup)
        integral_local *= 0.5f;
    }

    // Bound duty
    if (dutyPercent > 100.0f) dutyPercent = 100.0f;
    if (dutyPercent < 0.0f) dutyPercent = 0.0f;

    // mapping ke raw pwm
    int pwmRaw = map((int)round(dutyPercent), 0, 100, 0, HEATER_PWM_RAW_MAX);
    applyHeaterDutyRaw(pwmRaw);
}

  

Rangkaian solder C210 berbasis ESP32 memberikan fleksibilitas tinggi dan performa yang mendekati perangkat profesional. Dengan kontrol suhu presisi dan fitur proteksi yang lengkap, proyek ini cocok untuk pengembangan jangka panjang.

Pendekatan modular membuat sistem mudah dimodifikasi sesuai kebutuhan. Selama perakitan dilakukan dengan perhatian pada jalur daya dan sensor, solder C210 DIY dapat menjadi alat kerja yang handal dan stabil.

  • Download skema disini!
  • Download Firmware Solder disini!


Post a Comment