Ep 3 : Internal Sensor

Bonaventura Bagas Sukarno
7 min readFeb 14, 2021

--

Berbagai devices teknologi pada zaman ini biasanya sudah dilengkapi oleh berbagai sensor. Menurut KBBI, sensor adalah elemen yang mengubah sinyal fisik menjadi sinyal elektronik yang dibutuhkan komputer. Secara umum sensor berguna untuk menerima spesifik input dan dikonversi mejadi output informasi yang bermanfaat bagi user.

Parking is a nightmare for me… I still have sensors on my car that help me park. — Jordana Brewster

Untuk mendukung pengembangan dan kegunaan, ESP32 juga dilengkapi berbagai fitur sensor. Sensor sendiri dapat dibedakan menjadi 2 jenis, yaitu sensor internal dan sensor eksternal.

Ep3 ini akan membahas sensor internal dari ESP32, yaitu sensor yang sudah terpasang di board ESP32. Sensor internal yang terdapat pada ESP32 antara lain:

  1. Touch sensor (sensor sentuhan)
  2. Hall Effect sensor (sensor medan magnet)
  3. Temperature sensor (sensor suhu board)

Pada project kali ini, akan dilakukan testing terlebih dahulu pada touch sensor dan hall effect sensor. Lalu pada bagian selanjutnya akan dirancang suatu sistem embedded dengan memanfaatkan touch sensor untuk menyalakan LED sesuai dengan instruksi program.

Testing

Touch Sensor

Dilakukan untuk mengetes touch sensor yang terdapat pada board ESP32.

Komponen

  1. ESP32 — DevKitC
  2. Breadboard
  3. Kabel jumper male-to-male
  4. Kabel USB micro-B
  5. Laptop

Schematic

Diagram Skema Touch Sensor Test

Cukup pasangkan seluruh komponen seperti schematic diatas. Perlu diperhatikan bahwa :

  • Sambungkan kabel jumper male-to-male ke GPIO 4 yang diset sebagai input dari touch sensor.
  • Jika rangkaian sudah ready, jangan lupa sambungkan rangkaian menggunakan kabel USB micro-B ke laptop.

Code

Pada bagian awal, input dari touch sensor diset ke GPIO 4.

Pada setup(), diinisialisasi nilai Serial Monitor (parameter baudrate) yang digunakan untuk ditampilkan ke layar.

Serial.begin(115200);
delay(1000)

Nilai 115200 menunjukkan parameter baudrate yang digunakan. Parameter ini digunakan untuk memvisualisasi perubahan yang terjadi ke layar. Fungsi delay() selama 1 sekon diperlukan untuk memberikan waktu jeda ke monitor.

Bagian loop() digunakan agar program selalu membaca nilai input sensor dan menapilkannya ke layar dalam jeda 1 sekon.

Serial.println(touchRead(touchPin));  
delay(1000);

Fungsi touchRead() menerima input dari GPIO yang dibaca sebagai dalam sentuhan.

Result

Setelah program berhasil di-upload, maka perangkat siap menerima input sentuhan dari kabel jumper yang tersambung ke GPIO 4.

Kondisi kabel jumper tidak disentuh
Kondisi kabel jumper disentuh
Serial Monitor Touch Sensor Test
Serial Plotter Touch Sensor Test

Video testing

Dari hasil testing, diketahui bahwa nilai dari touch sensor akan turun drastis ketika kabel jumper yang tersambung ke GPIO disentuh. Pada saat tidak disentuh nilai normal dari touch sensor berkisar di nilai 60–80, namun saat disentuh nilai tersebut berada dibawah 20 (nilai ini tidak tetap).

Hall Effect Sensor

Dilakukan untuk mengetes sensor medan magnet yang terdapat pada board ESP32.

Komponen

  1. ESP32 — DevKitC
  2. Breadboard
  3. Magnet
  4. Kabel USB micro-B
  5. Laptop

Note :

  • Dapat digunakan berbagai macam magnet, namun besar medan magnet yang dihasilkan akan sangat memengaruhi nilai bacaan sensor.

Schematic

Diagram Skema Hall Effect Sensor Test

Rangkaian untuk testing bagian ini sangat mudah, cukup sambungkan pasang board ESP32 ke breadboard, lalu sambungkan rangkaian menggunakan kabel USB micro-B ke laptop.

Code

Pada setup() diinisialisasi nilai Serial Monitor (parameter baudrate) yang digunakan untuk ditampilkan ke layar.

Serial.begin(9600);

Nilai 9600 menunjukkan parameter baudrate yang digunakan.

Pada loop() ditulis program untuk membaca nilai sensor dan menampilkannya ke layar.

// membaca nilai hall effect sensor
value = hallRead();

Fungsi hallRead() berguna untuk membaca nilai dari hall effect sensor.

Result

Setelah program berhasil di-upload, device dapat mendeteksi nilai medan magnet disekitar. Dalam beberapa kondisi ditampilkan nilai sesuai bacaan sensor sebagai berikut.

Serial Monitor Hall Effect Test
Serial Plotter Hall Effect Test

Video testing

Ketika magnet didekatkan ke board ESP32, terjadi perubahan signifikan nilai bacaan dari hall effect sensor. Nilai dari hall effect sensor ini dapat meningkat atau menurun drastis bergantung pada kutub saat magnet didekatkan ke sensor. Semakin dekat magnet dengan sensor maka semakin besar perubahan nilai sensor yang terjadi.

Dari video dan foto, pada keadaan normal nilai yang ditampilkan hall effect sensor berkitar 16–31 (rata-rata 20-an). Sedangkan ketika magnet didekatkan, hall effect sensor berada pada nilai diatas 32 atau dibawah 15.

Note :

  • Pada testing yang saya lakukan, perubahan nilai bacaan hall effect sensor tidak terlalu drastis. Hal ini disebabkan magnet yang saya gunakan adalah magnet lama sehingga memiliki medan magnet yang tidak terlalu kuat.

Setelah melakukan dua testing dari sensor internal ESP32, sekarang saatnya merancang main project dari modul ini (dengan memanfaatkan salah satu sensor internal). Saya memilih merancang sistem dengan memanfaatkan touch sensor untuk menyalakan LED — pertimbangan karena magnet yang tersedia sudah cukup lemah — .

Things used in this project

  1. ESP32 — DevKitC
  2. BreadBoard
  3. Kabel jumper male-to-male (5 pcs)
  4. 3mm LED (3 pcs)
  5. Resistor 330 Ohm (3 pcs)
  6. Kabel USB micro-B
  7. Laptop

Note :

  • Warna dari setiap komponen bisa disesuaikan dengan kebutuhan masing-masing 😃

Schematic

Diagram Skema Internal Sensor

Rangkai seluruh komponen yang ada seperti schematic diatas. Perlu diperhatikan :

  • Digunakan dua pin touch sensor. Pin touch 1 disambugkan ke GPIO 15 dan pin touch 2 disambungkan ke GPIO 4.
  • Sesuai dengan gambar, sambungkan Green LED ke GPIO 13, Yellow LED ke GPIO 12, dan Red LED ke GPIO 14.

Program

Pada bagian awal diinisialisasi varibel dan GPIO yang digunakan pada touch sensor dan LED.

// mengeset nomor pin
const int touchPin1 = 15; // pin touch sensor
const int touchPin2 = 4;
const int ledPinGreen = 13; // pin LED
const int ledPinYellow = 12;
const int ledPinRed = 14;

Bagian selanjutnya diinisialisasi variabel threshold , touchValue1, dan touchValue2.

// mengeset nilai threshold(batas)
const int threshold = 20;

threshold adalah nilai batas atas ketika kabel jumper sedang disentuh. Nilai threshold bisa jadi berbeda tiap kasus, oleh karena itu lakukan testing sensor terlebih dulu untuk mencari nilai threshold 😃.

// variabel untuk menyimpan nilai pin touch sensor
int touchValue1;
int touchValue2;

Variabel touchValue1 dan touchValue2 digunakan untuk menyimpan nilai yang dibaca dari touch sensor.

Pada setup() diinisialisasi paramater baudrate dan output yang digunakan.

Serial.begin(115200);
delay(1000); // delay waktu untuk menampilkan ke seial monitor

Nilai 115200 menunjukkan parameter baudrate yang digunakan. Parameter ini digunakan untuk memvisualisasi perubahan yang terjadi ke layar. Fungsi delay() selama 1 sekon diperlukan untuk memberikan waktu jeda ke monitor.

// mengeset pin LED sebagai output
pinMode(ledPinGreen, OUTPUT);
pinMode(ledPinYellow, OUTPUT);
pinMode(ledPinRed, OUTPUT);

Kode diatas digunakan untuk mengeset LED sebagai OUPUT.

Pada loop(), terdapat kode program untuk membaca nilai touch sensor, menampilkan nilai ke layar, dan menjalankan instruksi output.

// membaca dan menampilkan nilai pin touch
touchValue1 = touchRead(touchPin1);
Serial.print("Value 1 = ");
Serial.print(touchValue1);
touchValue2 = touchRead(touchPin2);
Serial.print("\tValue 2 = ");
Serial.print(touchValue2);

Kode diatas digunakan untuk membaca dan menampilkan nilai bacaan dari touch sensor. Pembacaan nilai touch sensor dilakukan oleh fungsi touchRead().

Bagian selanjutnya adalah instruksi khusus pada output.

// mengecek apabila touchValue1 berada dibawah threshold
// jika ya, LED Green dihidupkan
if(touchValue1 < threshold){
// menghidupkan LED
digitalWrite(ledPinGreen, HIGH);
Serial.print("\tGreen-ON");
} else {
// mematikan LED
digitalWrite(ledPinGreen, LOW);
Serial.print("\tGreen-OFF");
}

Jika touchValue1 berada dibawah nilai threshold (touchPin1 sedang disentuh), maka LED Green akan menyala.

// mengecek apabila touchValue2 berada dibawah threshold
// jika ya, LED Yellow dihidupkan
if(touchValue2 < threshold){
// menghidupkan LED
digitalWrite(ledPinYellow, HIGH);
Serial.print("\tYellow-ON");
} else {
// mematikan LED
digitalWrite(ledPinYellow, LOW);
Serial.print("\tYellow-OFF");
}

Jika touchValue2 berada dibawah nilai threshold (touchPin2 sedang disentuh), maka LED Yellow akan menyala.

// mengecek apabila touchValue1 dan touchValue2 berada dibawah threshold
// jika ya, LED Red dihidupkan
if(touchValue1 < threshold && touchValue2 < threshold){
// menghidupkan LED
digitalWrite(ledPinRed, HIGH);
Serial.println("\tRed-ON");
} else {
// mematikan LED
digitalWrite(ledPinRed, LOW);
Serial.println("\tRed-OFF");
}

Jika touchValue1 dan touchValue2 berada dibawah nilai threshold (touchPin1 dan touchPin2 sedang disentuh), maka LED Red akan menyala.

Result

Setelah kode program selesai di-upload, well device berhasil berjalan sesuai dengan spesifikasi program yang diberikan 😃.

Serial Monitor
Serial Plotter

Video project.

Kondisi touchPin1 disentuh

Dari video dan gambar, ditunjukkan berbagai kondisi device ketika touchPin disentuh. Saat touchPin1 tidak disentuh, LED Green mati dan tercetak Green-OFF di serial monitor. Sedangkan bila disentuh, LED Green menyala dan terlihat tulisan Green-ON.

Kondisi touchPin2 disentuh

Saat touchPin2 tidak disentuh, LED Yellow mati dan tercetak Yellow-OFF di serial monitor. Sedangkan bila disentuh, LED Yellow menyala dan terlihat tulisan Yellow-ON.

Kondisi touchPin1 dan touchPin2 disentuh

Ketika touchPin1 dan touchPin2 tidak disentuh, LED Red mati serta tercetak Red-OFF di layar. Sedangkan bila disentuh, LED Red menyala dan terlihat tulisan Red-ON.

Thanks for reading
See you on another ep! 😄

--

--