Project 3: Working with Internal Sensor ESP32 (Penerapan Sistem Embedded Lampu Lalu Lintas di Jalan Raya)
Bismillaahirrahmaanirrahiim..
Hello sobat setia medium-ers semua!! Gimana kabarnya?? Semoga sehat selalu yaa..
Menurut pepatah, tak kenal maka?? ya kenalan dongg.. Sebelumnya kita kenalan dulu ya guys. Kenalin namaku Muhammad Raflie Dwi Putra yang bisa dipanggil Raflie dengan NIM 18219035. Aku sedang berkuliah semester 4 di prodi Sistem dan Teknologi Informasi (STI) Institut Teknologi Bandung.
Story Medium ini awalnya sudah dikerjakan dari siang sampai malam, kemudian ketika ingin disave tiba-tiba error dan gak punya backup-nya. Alhasil harus aku harus tulis ulang ini semua :((
Disclaimer, sobat tau kah kalo ESP32 kita itu memiliki kemampuan mendeteksi sentuhan dari kulit kita, mendeteksi keberadaan magnet di sekitarnya, bahkan lebih jauhnya lagi dapat mengontrol sesuatu, misalnya, penggunaan touch sensor (sentuhan) atau hall effect sensor (magnet) untuk menyalakan lampu LED atau alarm. Penasaraan?? Yuk disimak!!!
Pada kesempatan kali ini, kita akan mencoba melakukan project pada ESP32 supaya dapat mengetahui dan mengenali sistem sensor yang ada di dalam ESP32 atau bisa disebut Internal Sensor. Sebelumnya, apa itu sensor? Secara sederhana, sensor adalah peralatan fisik yang menyediakan informasi tentang dunia. Nahh, di dalam ESP32 ini terdapat 3 jenis built-in sensor, yaitu:
- Touch Sensor
- Hall Effect Sensor
- Temperature Sensor (tidak seluruh ESP32 memiliki built-in temperature sensor)
Komponen dan Alat yang Dibutuhkan
Tentunya, untuk menjalankan program touch sensor dan hall effect sensor membutuhkan beberapa komponen atau alat yang perlu disiapkan, yaitu:
- ESP32 DEVKIT V1 DOIT Board, sebagai komponen utama untuk dimasukkan program touch sensor dan hall effect sensor.

- Kabel Micro USB (type A), sebagai kabel penghubung ESP32 Board dengan PC/Laptop untuk memasukkan program.

- Perangkat PC (Laptop / Komputer), tentunya yang sudah terinstall aplikasi Arduino IDE dan paket board ESP-32 di dalamnya.
(Catatan: Jika belum disiapkan, bisa diikuti langkah-langkah pada link ini.)

- Breadboard 830 points, sebagai tempat meletakkan ESP32 Board dan menghubungkan berbagai komponen dengan bantuan kabel jumper wires.

- Jumper Wires Male to Female and Jumper Wires Male to Male, sebagai penghubung antar komponen melalui breadboard.

- Lampu LED 5 mm, sebagai penerima output dari program ESP32 yang dengan respon menyala atau mati.

- Resistor 330 Ohm, sebagai pembagi tegangan pada rangkaian.

- Magnet Kecil, sebagai bahan (penghantar) untuk dideteksi oleh Internal Sensor ESP32 (Hall Effect Sensor).

Diagram Skema Rangkaian
Pada diagram skema rangkaian berikut, kita dapat menyusun rangkaian sesuai diagram skema ataupun dengan kreasi sendiri. Untuk menyusun rangkaian terdapat 2 pilihan jenis jumper wires yang digunakan. Jika kita menyusun rangkaian dengan tidak meletakkan ESP32 Board pada Breadboard, maka kita dapat menghubungkan Breadboard dengan ESP32 Board dengan jumper wires jenis male to female, dengan male pada Breadboard dan female pada kaki ESP32 Board. Sedangkan jika kita menyusun rangkaian dengan menanam / memasukkan semua kaki ESP32 Board pada Breadboard, maka kita dapat menghubungkan antar komponen dengan ESP32 Board dengan jumper wires jenis male to male, dengan langsung memasukkan male ke point yang sejajar kaki pin ESP32 yang sesuai pada Breadboard. Namun jika memungkinkan, menurut aku lebih baik pilihan kedua, yaitu menanamkan ESP32 board pada Breadboard, sehingga ketika ESP32 dihubungkan ke powersource (catu daya) pada Laptop/PC dapat diminimalisir tersentuhnya kaki ESP32 oleh tangan kita, karena apabila tersentuh oleh tangan dapat menyebabkan hubung singkat sehingga menurunkan performa ESP32 kita.
1. Touch Sensor

Sesuai diagram skema di atas, kita dapat memastikan bahwa:
- Pin GPIO 4 atau D4 terhubung dengan jumper wires female to male (untuk disentuh ujung lainnya)
- Pastikan bahwa: ESP32 Board sudah terhubung pada power source (catu daya) Laptop / PC dengan kabel Micro USB (type A), sehingga ESP32 Board menyala.

2. Hall Effect Sensor

Sesuai diagram skema di atas, kita dapat memastikan bahwa:
- Sudah menyiapkan magnet kecil untuk didekatkan ke body ESP32 Microcontroller sebagai penguji Hall Effect Sensor.
- Pastikan bahwa: ESP32 Board sudah terhubung pada power source (catu daya) Laptop / PC dengan kabel Micro USB (type A), sehingga ESP32 Board menyala.

3. Perancangan Sistem Embedded Berbasis ESP32 Internal Sensor Untuk Mengontrol Nyalanya 3 Buah LED (Penerapan Sistem Lalu Lintas di Jalan Raya)

Sesuai diagram skema di atas, kita dapat memastikan bahwa:
- Jika menanam ESP32 Board ke dalam Breadboard, pastikan bahwa sudah benar dengan seluruh kakinya tertanam.
- GPIO 16 atau RX2 pada ESP32 terhubung secara seri ke resistor 330 Ohm dengan jumper wire (kabel biru); kemudian ujung lainnya dari resistor tersebut terhubung seri ke kaki panjang (anoda) dari Yellow LED; lalu kaki pendek (katoda) dari Yellow LED terhubung seri ke kutub negatif (dekat garis biru) Breadboard dengan jumper wire (kabel abu-abu).
- GPIO 17 atau TX2 pada ESP32 terhubung secara seri ke resistor 330 Ohm dengan jumper wire (kabel hijau); kemudian ujung lainnya dari resistor tersebut terhubung seri ke kaki panjang (anoda) dari Red LED; lalu kaki pendek (katoda) dari Red LED terhubung seri ke kutub negatif (dekat garis biru) Breadboard dengan jumper wire (kabel ungu).
- GPIO 18 atau B18 pada ESP32 terhubung secara seri ke resistor 330 Ohm dengan jumper wire (kabel kuning); kemudian ujung lainnya dari resistor tersebut terhubung seri ke kaki panjang (anoda) dari Green LED; lalu kaki pendek (katoda) dari Green LED terhubung seri ke kutub negatif (dekat garis biru) Breadboard dengan jumper wire (kabel orange).
- GPIO 4 atau D4 pada ESP32 terhubung dengan jumper wire (kabel hijau pada skema), dengan membiarkan ujung lainnya untuk disentuh oleh kulit kita nantinya.
- Jangan lupa, Pin GND pada ESP32 terhubung dengan kutub negatif (dekat garis warna biru) pada Breadboard.
- Pastikan bahwa: ESP32 Board sudah terhubung pada power source (catu daya) Laptop / PC dengan kabel Micro USB (type A), sehingga ESP32 Board menyala.

KODE PROGRAM
1. Touch Sensor
Setelah rangkaian sesuai dengan skema di atas, maka dapat dibuat program untuk menguji perubahan/penurunan nilai pada Serial Monitor dan Serial Plotter ketika ujung jumper wire disentuh oleh kulit kita. Dapat disesuaikan dengan kode program berikut:
// ESP32 Touch Test
// Hanya menguji touch sensor - Touch0 is T0 terdapat pada GPIO 4.void setup() {
Serial.begin(115200);
delay(1000); // berikan waktu untuk menyiapkan serial monitor
Serial.println("ESP32 Touch Test");
}void loop() {
Serial.println(touchRead(4)); // nilai untuk pin Touch 0 = GPIO 4
delay(100);
}

2. Hall Effect Sensor
Setelah rangkaian sesuai dengan skema di atas, maka dapat dibuat program untuk menguji perubahan nilai pada Serial Monitor ketika magnet kecil didekatkan pada body microcontroller ESP32, baik kutub positif maupun kutub negatif. Dapat disesuaikan dengan kode program berikut:
// Sketsa sederhana untuk mengakses internal hall effect detector pada ESP32.
int val = 0;void setup() {
Serial.begin(9600);
}void loop() {
// membaca nilai hall effect sensor
val = hallRead();
// print hasilnya pada serial monitor
Serial.println(val);
delay(1000);
}

3. Perancangan Sistem Embedded Berbasis ESP32 Internal Sensor Untuk Mengontrol Nyalanya 3 Buah LED
Setelah rangkaian sesuai dengan skema di atas, maka dapat dibuat program untuk menjalankan dan mengontrol 3 buah lampu LED dengan sentuhan seperti sistem lampu lalu lintas. Penerapan sistem tersebut diharapkan dapat memenuhi kriteria berikut: Lampu hijau akan auto menyala, namun ketika ada penyeberang jalan yang menyentuh sensor, maka lampu yang menyala akan berubah menjadi merah. Namun, terdapat lampu kuning sebagai perantara antar pergantian kedua lampu tersebut yang akan menyala selama 3 detik. Adapun bila disesuaikan dengan sistem embedded sederhana berbasis ESP32, proses berjalannya program akan terus menerus dengan alur: Green LED akan menyala ketika sensor tidak disentuh; kemudian Yellow LED akan menyala selama 3 detik ketika sensor pertama disentuh dan ditahan; lalu setelah Yellow LED mati, Red LED akan menyala selama sensor tetap disentuh.
Adapun pada kode program di bawah ini terdapat suatu nilai ambang sebagai variabel ‘threshold’ yang ditentukan oleh kita. Nilai ambang ini dijadikan sebagai parameter penentuan setiap pergantian menyalanya LED. Ketika nilai yang keluar pada Serial Monitor kurang dari ambang (ketika disentuh dan ditahan) maka Green LED akan mati; Yellow LED akan menyala selama 3 detik kemudian mati; lalu Red LED akan bertahan menyala selama sensor masih disentuh. Sedangkan ketika nilai yang keluar pada Serial Monitor lebih dari ambang (ketika dilepas) maka Red LED akan mati; Yellow LED akan menyala selama 3 detik kemudian mati; lalu Green LED akan bertahan menyala selama sensor masih tidak disentuh. Untuk mengatur supaya Yellow LED hanya menyala ketika awal dilepas atau awal disentuh (tidak mengikuti loop terus menerus), maka digunakan sedikit trick pada kode program ini. Trick-nya yaitu dengan menginisialisasikan variabel yang menyimpan state (nilai) apakah Yellow LED sudah menyala di dalam loop atau belum sehingga akan dicek state tersebut setiap terjadi proses loop dan menyala hanya di awal perubahan Red LED to Green LED atau sebaliknya.
Dapat disesuaikan dengan kode program dan penjelesan detail per barisnya sebagai berikut:
(Penerapan Sistem Embedded Lalu Lintas di Jalan Raya Berbasis ESP32)
// PENERAPAN SISTEM LAMPU LALU LINTAS DI JALAN RAYA
// Lampu Hijau akan auto menyala, namun ketika ada penyeberang jalan yang menyentuh sensor, lampu akan berubah menjadi merah.
// Namun, terdapat lampu kuning sebagai perantara antara pergantian kedua lampu tersebut.
// atur nomor pin
const int touchPin = 4;
const int ledPin1 = 16; // yellow LED
const int ledPin2 = 17; // red LED
const int ledPin3 = 18; // green LED// ubah dengan nilai ambang kita
const int threshold = 35;
// variabel untuk menyimpan nilai pin sentuh
int touchValue;// inisialisasi yellow LED supaya hanya menyala sekali (tidak mengikuti loop default) setiap pergantian red to green atau sebaliknya
int yellowLED = 1;void setup(){
Serial.begin(115200);
delay(1000); // berikan waktu untuk menyiapkan serial monitor
// menginisialisasi ketiga pin LED sebagai output
pinMode (ledPin1, OUTPUT);
pinMode (ledPin2, OUTPUT);
pinMode (ledPin3, OUTPUT);
}void loop(){
// membaca nilai state dari sentuhan
touchValue = touchRead(touchPin);
Serial.print(touchValue); // periksa apakah nilai touch dibawah ambang
// jika iya, jadikan pin yellow LED menjadi HIGH
if(touchValue < threshold){
// mematikan green LED;
// menyalakan yellow LED dengan delay 3 detik, kemudian disambut red LED yang menyala
digitalWrite(ledPin3, LOW);
if(yellowLED == 1) {
digitalWrite(ledPin1, HIGH);
delay(3000);
yellowLED = 0;
}
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
Serial.println(" -> GREEN LED off & YELLOW LED on (Hati-hati) - RED LED on (Berhenti)");
} else{
// mematikan red LED;
// menyalakan yellow LED dengan delay 3 detik, kemudian disambut green LED yang menyala
digitalWrite(ledPin2, LOW);
if(yellowLED == 0) {
digitalWrite(ledPin1, HIGH);
delay(3000);
yellowLED = 1;
}
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, HIGH);
Serial.println(" -> RED LED off & YELLOW LED on (Hati-Hati) - GREEN LED on (Silakan Jalan)");
} delay(200);
}



- Jika program sudah siap, compile dengan meng-klik menu Verify yang simbolnya checklist di pojok kiri atas aplikasi Arduino IDE.
- Setelah proses compile selesai, kemudian klik menu Upload yang simbolnya panah kanan di sebelah menu Verify tadi.
- Setelah selesai proses Upload, maka kita dapat menguji keberhasilan program ini dengan menyentuh dan melepas ujung jumper wire sensor. Jika ketika sensor disentuh dan ditahan, Green LED akan mati, Yellow LED akan menyala selama 3 detik kemudian mati, Red LED menyala setelah Yellow LED mati dan Red LED akan bertahan menyala selama sensor tetap disentuh; dan ketika sensor dilepas, Red LED akan mati, Yellow LED akan menyala selama 3 detik kemudian mati, Green LED menyala setelah Yellow LED mati dan Green LED akan bertahan menyala selama sensor tetap tidak disentuh; dapat dinyatakan percobaan BERHASIL.
- Jika belum berhasil, dapat disebabkan oleh beberapa hal yang ada pada Troubleshoot berikut.
TROUBLESHOOT
- Proses upload yang gagal, dapat diatasi dengan mengulang upload sambil menahan boot button pada ESP32 sampai proses upload selesai.
- Lampu LED yang tidak mengalami perubahan, disebabkan nilai variabel ‘threshold’ atau batas ambang yang ditentukan terlalu rendah, sehingga nilai yang keluar pada Serial Monitor tidak akan lebih kecil dari nilai ambang tersebut. Solusinya, dapat dicek nilai yang tercatat pada serial monitor ketika sensor disentuh, kemudian nilai ambang batas dapat dinaikkan lebih besar dari rentang nilai terendah Serial Monitor tersebut, sehingga warna LED yang menyala akan dapat berubah setelah itu.
- Nilai pada Serial Monitor tidak keluar, solusinya nilai ‘baud’ pada pojok kanan bawah jendela Serial Monitor dapat disamakan dengan nilai ‘Serial.begin([nilai])’ yang tertulis pada kode program bagian fungsi setup.
- Program LED yang tidak berjalan sesuai kode program, dapat diatasi yang utama dengan mengecek kesesuaian kode program dengan rangkaian. Jika belum solved juga, maka mungkin hal tersebut diakibatkan oleh beberapa hal kecil tertentu, seperti ESP32 Board yang belum tertanam dengan baik pada Breadboard, kurang teliti menghubungkan jumper wires pada ESP32 karena tidak sesuai preferences GPIO ESP32 jenis kita, salah meletakkan resistor sehingga tidak terhubung seri dengan LED, terbalik menanamkan kaki panjang dan pendek LED pada Breadboard, lupa menghubungkan Ground dengan kutub negatif pada Breadboard, atau mungkin lupa menghubungkan dan memasukkan program dari laptop ke ESP32 :( Semangaatt!!!
- Lampu LED yang tidak dapat menyala, dapat diatasi dengan mengecek kembali SECARA DETAIL apakah rangkaian dan program sudah sesuai atau belum. Jika ternyata rangkaian sudah sesuai, mungkin kabel jumper wires atau LED atau resistor atau kabel Micro USB yang digunakan sudah tidak layak pakai sehingga perlu diganti. Apabila masih belum dapat teratasi, dapat diperiksa tembaga yang ada di lapisan bawah Breadboard apakah sudah menghubungkan semua point tempat kita memasang semua komponen rangkaian. Opsi terakhir apabila belum teratasi juga, dapat dilakukan dengan mengganti ESP32 Board.
HASIL PERCOBAAN
1. Touch Sensor




Video Demo Touch Sensor :
2. Hall Effect Sensor



Video Demo Hall Effect Sensor :
3. Perancangan Sistem Embedded Berbasis ESP32 Internal Sensor Untuk Mengontrol Nyalanya 3 Buah LED (Penerapan Sistem Lalu Lintas di Jalan Raya)




Video Demo Sistem Embedded Berbasis ESP32 :
KESIMPULAN
Dari eksperimen yang telah dilakukan, ESP32 berhasil untuk menjalankan program Internal Sensor yang berupa, Touch Sensor, Hall Effect Sensor, dan Sistem Embedded Berbasiskan ESP32 (Penerapan Sistem Lampu Lalu Lintas), dengan baik sesuai dengan kode program yang dibuat pada aplikasi Arduino IDE. Harapannya, sistem sederhana yang menyerupai sistem yang sudah ada ini dapat dikembangkan lebih jauh lagi.
Sistem yang sudah ada ini berfungsi untuk membantu pejalan kaki untuk menyeberang jalan raya. Pejalan kaki lainnya akan menekan atau menyentuh sensor yang ada pada tiang lampu lalu lintas sehingga lampu kuning akan menyala (menandakan kendaraan harus berhati-hati) beberapa detik, setelah itu lampu merah akan menyala (menandakan kendaraan harus berhenti). Kemudian, setelah pejalan kaki selesai menyeberang, maka sensor akan dilepas sehingga lampu kuning akan kembali menyala (menandakan kendaraan harus bersiap-siap) beberapa detik, setelah itu lampu hijau akan menyala (menandakan kendaraan harus berjalan).
Begitu pula sistem sederhana yang aku sajikan dengan lampu merah diwakilkan dengan Red LED, lampu kuning diwakilkan dengan Yellow LED, lampu hijau diwakilkan dengan Green LED, sensor pada tiang lalu lintas diwakilkan dengan sensor pada ujung jumper wire yang terhubung dengan GPIO 4, serta menyalanya Yellow LED diasumsikan selama 3 detik.
Walaupun pada setiap eksperimennya tidak langsung berhasil karena menemukan berbagai kendala yang telah disebutkan di bagian Troubleshoot. Namun, dengan adanya banyak kegagalan tersebut akan membuat kita mempunyai pengalaman lebih banyak pada project ini sehingga akan lebih lancar mengatasi problem-problem tersebut di masa yang akan datang.
Alhamdulillaah..
Sekian, terima kasih atas perhatiannya..
SELAMAT MENCOBA!!!