[II2260 Embedded System] Project 3: ESP32 Internal Sensor

Raden Dizi Assyafadi Putra
7 min readFeb 15, 2023

--

Welcome back to my blog!

Hi peeps, apa kabs? semoga baik ya :3. Kemarin nih, kita sudah belajar bagaimana cara mengunakan I/O di ESP32 (kalo belum kalian bisa mengunjungi link-nya disini [II2260 Embedded System] Project 2 : ESP32 Input-Output using Push Button and LED). Nah, sekarang kita lanjut ke project selanjutnya yaitu, ESP32’s Internal Sensor.

+ What is the project about?

ESP32 yang super duper amat sangat canggih dan pastinya ((tidak rapuh)) ini memiliki beberapa sensor internal yang terembed di dalamnya. Sensor ini adalah Touch Sensor, Hall Effect Sensor, dan Temperature Sensor. Disclaimer: Tidak semua ESP32 memiliki temperature sensor. Nah sekarang mari kita implementasikan bagaimana cara kerja sensor tersebut.

Dan sebagai TAMBAHAN CHALLENGE kita akan menggunakan LED sebagai output dari sensor ini. Kita akan membuat sebuah pola menggunakan hasil dari input sensor dan menciptakan sebuah moving pattern dari led tersebut.

+ What tools do you need?

Things you probably gonna need are:

  1. ESP32nya pasti dong ((jangan barbar ya makenya :<))
  2. Micro USB Cable
  3. Kabel Jumper male to male
  4. 4 Lampu LED RGB dan White
  5. 4 Resistor 330 ohm untuk 4 lampu
  6. Laptop Geming (gadeng) yang memiliki Arduino IDE. Jangan lupa disetting dulu ya ges biar bisa ngoding dengan lancar jaya
Component you need

+ What are the steps?

— Touch Sensor

Touch sensor ini adalah sebuah makhluk di dalam ESP32 yang akan merespon apabila sensor tersebut disentuh. ESP32 telah mendukung Touch sensor dengan memberikan pin yang dapat menerima touch input yaitu Touch0 hingga Touch9. Masih ingat kan pembagian pinnya dari project sebelumnya? ak mrh sih kl km lp soalny ak ajh gk luffh km :<

Pin pada ESP32. Source: https://randomnerdtutorials.com/esp32-pinout-reference-gpios/

Pada percobaan ini kita akan mencoba untuk bermain dengan sensor ini dengan memberikan outputnya di Serial Monitor. Sebenarnya ada sih challengenya disini tapi ntar itu di section paling bawah :>

Steps-nya? Hanya dua. Hubungkan ESP32 ke komputer dengan kabel male to male terhubung ke Touch0–9 lalu upload kode ini

// ESP32 Touch Test
const int touchPin = 15;

int touchVal;
void setup() {
Serial.begin(115200);
delay(1000); // give me time to bring up serial monitor
Serial.println("ESP32 Touch Test");
}

void loop() {
touchVal = touchRead(touchPin)
Serial.println(touchVal);
delay(500);
}

— Hall Effect Sensor

Jadi gini… ESP32 itu keren bingitz ges. Dia bisa deteksi medan magnet lho. Jadi kalau kalian deketin magnet ke esp32, maka esp32 dapat mendeteksi perubahan medan tersebut. Makanya, biar ga penasaran mari kita coba output hasil dari perubahan tersebut ke serial monitor.

ingfo stepsnya gan

  1. Pasang ESP32 ke Computer
  2. Upload this code
int val = 0;

void setup() {
Serial.begin(9600);
}

// put your main code here, to run repeatedly
void loop() {
// read hall effect sensor value
val = hallRead();
// print the results to the serial monitor
Serial.println(val);
delay(1000);
}

hah gitu doang? iya itu aja stepsnya :>

— Temperature Sensor

Dan yang (aduh kesterum pas ngetik ril) terakhir adalah Temperature sensor. Sesuai namanya, sensor ini berguna untuk mendeteksi suhu. Namun karena tidak semua ESP32 punya sensor suhu mari kita coba cek apakah sensor kita punya :<

— stepsnya apa aja kak?

  1. Colok dan upload ke Komputer :>
// Mengimport library yang diperlukan
#ifdef __cplusplus
extern "C" {
#endif

uint8_t temprature_sens_read();

#ifdef __cplusplus
}
#endif

uint8_t temprature_sens_read();
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.print("Temperature: ");

// Mengubah temperature dalam Farenheit menjadi Celcius
Serial.print((temprature_sens_read() - 32) / 1.8);
Serial.println(" C");
delay(1000);
}

Kita tidak perlu menancapkan apapun selain ESP32 ke breadboard karena sensor ini menerima input langsung dari ESP32 itu sendiri.

+ Code Analysis!!!

— Touch Sensor

Dalam eksperimen kita, kode paling penting adalah bagian ini.

void loop() {
touchVal = touchRead(touchPin)
Serial.println(touchVal);
delay(500);
}

Bagian ini yang memberi output ke Serial Monitor mengenai besaran input yang dirasakan sensor. Disini aku menggunakan TouchPin pada Pin Digital 15 (Touch 3) dan menggunakan Serial.println untuk memberikan hasilnya di Serial Monitor. Kalian bisa menggunakan pin yang lain seperti Pin 2 (Touch 2) dan Pin 4 (Touch 0).

Semakin rendah artinya sensor berhasil mendeteksi input touch. Kalian bisa melihat demo-nya di foto dibawah ini.

Hasil output serial monitor

Bisa dilihat bahwa saat pin touch menerima input maka Output Value dari Touch Sensor akan semakin menurun bahkan bisa sampai 0. Bagaimana hasil dari setiap pin Touch? Mari kita coba analisis.

Perbandingan Tiap Input

Lho??? Kenapa Pin 2 tidak bisa? My uneducated guess is, Arsitektur dari ESP32 yang sekarang sudah tidak mendukung input pada pin 2 karena pin 2 lebih dikhususkan untuk input dari sensor tertentu. But please take it with a grain of salt.

— Magnet Sensor

Inisiasi magnet sensor cukup mudah dimana kita hanya perlu sebuah fungsi hallRead() untuk membaca medan magnet. Untuk dapat mendeteksi perubahan dari medan magnet tersebut, aku menyarankan kalian menggunakan magnet berkutub agar terlihat perubahannya. Berikut adalah perubahan yang aku dapatkan beserta demonstrasinya.

Perubahan pada Serial Monitor saat didekatkan kutub magnet

Bisa dilihat ketika aku mendekatkan kutub magnet ke Sensor maka output pada serial monitor akan berubah. Itu terjadi karena sensor mendeteksi kutub positif magnet. Bila kita mendekatkan kutub negatif magnet maka output dari sensor akan bernilai negatif.

— Temperature Sensor

// Mengimport library yang diperlukan
#ifdef __cplusplus
extern "C" {
#endif

uint8_t temprature_sens_read();

#ifdef __cplusplus
}
#endif

uint8_t temprature_sens_read();
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.print("Temperature: ");

// Mengubah temperature dalam Farenheit menjadi Celcius
Serial.print((temprature_sens_read() - 32) / 1.8);
Serial.println(" C");
delay(1000);
}

Header yang didefine di atas itu berguna untuk mengkonversi input dari sensor ke dalam Celcius atau Fahrenheit. Sensor ini (seharusnya) dapat mendeteksi perubahan suhu misalnya saat aku mengosokkan kedua tanganku lalu menutupi esp32 dengan tangan ku yang hangat (ewh kaya bahasa AU). Tapi

Ternyata esp32 kita ga compatible lagi sensornya :(

Sensor tidak mendeteksi perubahan

Hal ini karena ESP32 sudah menyatakan bahwa sensor mereka DEPRECATED (tidak diperbaharui lagi) sehingga ESP32 yang sekarang sudah tidak dapat mendeteksi temperatur dengan baik lagi. But oh well, at least kita udah coba jadi kita tau :>

— Touch Sensor With Added Challenge

OKE, CHALLENGE TIME. Sekarang aku akan menggunakan LED untuk mengoutput hasil input dari touch sensor. Aku akan membuat pola cantik dengan LED tersebut. Ready?

Gunakan code ini ya ges ya

// ESP32 Touch Test
const int touchPin = 15;
const int led1 = 21;
const int led2 = 19;
const int led3 = 22;
const int ledC = 23;

int touchVal;
int threshold = 30;

void setup() {
Serial.begin(115200);

pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
pinMode (ledC, OUTPUT);
}

void loop() {
touchVal = touchRead(touchPin);
Serial.println(touchVal);

if(touchVal < threshold){
digitalWrite(led1, HIGH);
delay(200);
digitalWrite(led1, LOW);
delay(200);

digitalWrite(led2, HIGH);
delay(200);
digitalWrite(led2, LOW);
delay(200);

digitalWrite(led3, HIGH);
delay(200);
digitalWrite(led3, LOW);
delay(200);

digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(ledC, HIGH);
delay(400);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(ledC, LOW);;
}
delay(500);
}

Kode ini menggunakan delay-delay seperti biasa untuk menciptakan sebuah pola. Mau liat?

Tadaa.. liat keren bingitz kan? Led tersebut akan tertrigger jika dan hanya jika touch pin mendapat input. Dan voila terjadilah pola indah itu.

+ Summary

Nah, demikian deh kita sudah berhasil membuat project dengan Internal Sensor dari ESP32. Walau memang codenya cukup sedikit jadi bagi si paling coding ini kureng gitu, aku suka dengan hasilnya karena banyak sekali variasi yang bisa dikembangkan dari proyek ini. Tapi ril, ESP32 flop banget gabisa mendukung temperature sensor jadi mau gamau harus pake external sensor (NEXT WEEK TUNGGUIN YH)

Ongkeh, sekian blowg dr akoeh. Semowga klean sk sm blogny yh

+ References

--

--