Coding Vending Machine ESP32: Pakai FreeRTOS & Fisika Gerak (Part 3)

Gambar
 Halo kembali! Setelah kerangka kardus siap (Part 1) dan semua kabel sudah tercolok rapi sesuai skema (Part 2), sekarang saatnya meniupkan "roh" ke dalam alat ini. Kodingan yang akan saya bagikan ini bukan kodingan biasa . Saya menerapkan beberapa teknik pemrograman tingkat lanjut agar Vending Machine ini bekerja responsif, anti-lemot, dan akurat. Kita akan menggunakan: FreeRTOS (Multitasking): Memisahkan tugas layar LCD dan sensor di "otak" (Core) yang berbeda. NVS (Preferences): Menyimpan saldo secara permanen (mati lampu, saldo aman). Fisika Kinematika: Menghitung kecepatan jatuh koin untuk validasi anti-maling. 1. Persiapan Library Sebelum copy-paste kodingan, pastikan kalian sudah menginstal library berikut di Arduino IDE: LiquidCrystal_I2C (oleh Frank de Brabander) Keypad (oleh Mark Stanley) ESP32Servo (oleh Kevin Harrington) - Wajib pakai versi ini, jangan pakai library Servo biasa karena tidak kompatibel dengan ESP32. 2. Source Code Lengkap Berikut ad...

Bongkar Rahasia Sensor Koin & Skema Kabel Vending Machine ESP32 (Part 2)

Halo sobat kreatif! Kembali lagi di seri tutorial Mini Vending Machine.

Di Part 1 Sebelumnya, kita sudah melihat gambaran umum alat canggih yang terbuat dari kardus ini. Banyak yang bertanya, "Bang, itu sensor koinnya gimana cara kerjanya?" atau "Bagi skema kabelnya dong!".


1. Rahasia "Sensor Koin" dari LDR (The Secret Sauce)

Bagian paling menantang dari proyek ini adalah membedakan koin asli (Rp 500 atau Rp 1000) dengan benda asing. Kalau cuma pakai satu sensor cahaya, koin palsu atau potongan kardus pun bisa memicu sistem.

Maka dari itu, saya menggunakan metode Dual Sensor LDR + Fisika Kecepatan.

Konsepnya: Saya memasang dua buah sensor LDR (Light Dependent Resistor) dan LED secara vertikal (atas dan bawah) di jalur meluncurnya koin.

  1. Saat koin masuk, ia akan melewati LDR Atas (Timer Start).
  2. Koin terus jatuh dan melewati LDR Bawah (Timer Stop).
  3. ESP32 akan menghitung durasi waktu tempuh koin tersebut dalam satuan mikro-detik (microseconds).
Karena setiap koin punya berat dan diameter berbeda, kecepatan jatuhnya pun pasti unik! Kodingan saya nanti akan mengecek: "Apakah kecepatan benda ini sesuai dengan profil koin Rp 500?". Jika terlalu cepat (misal: kertas) atau terlalu lambat, sistem akan otomatis menolaknya. Cerdas, kan?


2. Skema Rangkaian (Wiring Diagram)

Berikut adalah panduan menyambungkan komponen ke ESP32 Doit DevKit V1. Pastikan kalian teliti karena salah colok bisa berakibat fatal (terutama di bagian Servo!).




Agar lebih jelas, silakan ikuti tabel berikut yang sudah disesuaikan dengan kodingan final saya:

KomponenPin PerangkatPin ESP32 (GPIO)Fungsi
Layar LCD 16x2SDAGPIO 21Jalur Data Layar
SCLGPIO 22Jalur Clock Layar
Keypad 4x4Baris (Row 1-4)32, 33, 25, 26Input Tombol
Kolom (Col 1-4)27, 14, 12, 13Output Scanning
Sensor KoinLDR AtasGPIO 34Input Analog (Deteksi Awal)
LDR BawahGPIO 35Input Analog (Validasi)
Servo SortirSignal (Oranye)GPIO 5Pemilah (Terima/Tolak)
Servo BarangServo A (Kiri)GPIO 15Pendorong Barang A
Servo BGPIO 2Pendorong Barang B
Servo CGPIO 4Pendorong Barang C
Servo D (Kanan)GPIO 17Pendorong Barang D
BuzzerPositif (+)GPIO 18Suara Beep
Catatan Penitng:Jangan mengambil daya (5V) untuk semua servo langsung dari pin 5V ESP32 jika kalian menggunakan kabel USB laptop. Arusnya tidak akan kuat dan ESP32 bisa me-restart sendiri. Gunakan Powerbank atau Adaptor 5V eksternal yang dipecah: satu jalur ke ESP32, satu jalur khusus ke Servo.

NB: Buzzer hanya sebagai tambahan dari saya jika tidak menggunakan Buzzer tidak masalah.


3. Mekanisme Servo

Di alat ini, saya menggunakan total  5 Servo:
  1. 1x Servo Sortir (Jungkat-jungkit): Posisinya ada di bawah jalur koin.
    • Posisi Netral: Menutup jalur.
    • Miring Kiri: Koin diterima (masuk tabungan).
    • Miring Kanan: Koin ditolak (refund/keluar lagi).
  2. 4x Servo Barang (Dispenser): Servo ini dimodifikasi menjadi Continuous (bisa berputar terus) atau menggunakan servo standar yang dikalibrasi. Tugasnya mendorong barang keluar dari rak penyimpanan (Barang A, B, C, D).

4. Tes Hardware Dulu (Sebelum Coding Full)

Sebelum kita masuk ke kodingan utama yang cukup kompleks (karena pakai sistem operasi FreeRTOS dan Multitasking), ada baiknya kita tes dulu apakah sensor LDR kalian sudah terpasang dengan benar.

Silakan upload kodingan simpel ini ke ESP32 kalian:

/*
  SKETCH SEDERHANA UNTUK CEK NILAI LDR
  Upload ini untuk mengecek apakah LDR kalian merespons cahaya.
  Buka Serial Monitor dengan baudrate 115200.
*/

#define LDR_TOP 34
#define LDR_BOTTOM 35

void setup() {
  Serial.begin(115200);
  pinMode(LDR_TOP, INPUT);
  pinMode(LDR_BOTTOM, INPUT);
  Serial.println("Mulai Test Sensor LDR...");
}

void loop() {
  // Membaca nilai analog (0 - 4095)
  // Nilai akan berubah drastis saat ada benda lewat menutupi cahaya
  int valTop = 4095 - analogRead(LDR_TOP);
  int valBot = 4095 - analogRead(LDR_BOTTOM);

  Serial.print("LDR Atas: ");
  Serial.print(valTop);
  Serial.print(" | LDR Bawah: ");
  Serial.println(valBot);

  delay(100); 
}

Cara Tes:
  1. Upload kode di atas.
  2. Buka Serial Monitor.
  3. Coba jatuhkan koin melewati sensor.
  4. Perhatikan apakah angka di Serial Monitor berubah drastis? Jika ya, selamat! Hardware kalian siap.

Sekarang rangkaian sudah siap, sensor sudah dites. Di artikel selanjutnya, saya akan membagikan Source Code Lengkap (Full Sketch).

Kita akan belajar coding tingkat lanjut menggunakan FreeRTOS agar LCD, Keypad, dan Sensor bisa bekerja bersamaan tanpa saling tunggu (multitasking). Plus, cara kalibrasi nilai sensor agar akurat 99%!

Stay tuned dan jangan lupa bagikan progres kalian di kolom komentar ya!


Komentar

Postingan populer dari blog ini

Coding Vending Machine ESP32: Pakai FreeRTOS & Fisika Gerak (Part 3)

Tutorial Membuat Mini Vending Machine Sendiri hanya Bermodakan Kardus & ESP32 (StandAlone/Tanpa Internet)