Project #3 Eksplorasi Sensor: ESP32 Internal Sensor
Halo para pembaca, selamat datang kembali! Setelah minggu lalu kita bermain dengan GPIO Input Output, pada kesempatan kali ini kita akan mencoba mengeksplorasi tentang sensor. Pada kondisi default, ESP 32 memiliki sensor bawaan atau internal sensor yang terdiri atas tiga sensor. Pertama, touch sensor (sensor sentuh), hall effect sensor (sensor magnet), dan terakhir temperature sensor (sensor suhu). Alat mungil seperti ini ternyata canggih sekali, bukan?
— Alat dan Bahan
- ESP 32 DOIT DEVKIT V1.
- Kabel Micro USB 2.0.
- Kabel Jumper Male to Male.
- LED 5mm F5.
- Resistor 10K Ohm dan 330 Ohm.
- Breadboard 830 Point.
- Magnet kecil.
- Arduino IDE.
— Touch Sensor
Touch sensor adalah sensor yang akan merespon masukan berupa sentuhan. ESP 32 mendukung sensor ini yaitu pada pin Touch 0 hingga pin Touch 9. Pada eksperimen kali ini saya akan mendemokan touch sensor dengan konfigurasi 3 lampu LED Eksternal dan 1 lampu LED Internal. Lampu LED merah dan kuning akan padam saat sensor disentuh dan lampu LED internal dan LED hijau akan menyala, begitu juga sebaliknya. Saya memodifikasi kode program seperti berikut.
— Kode Program
// Inisiasi LED pin
const int touchPin = 15;
const int ledPin1 = 18;
const int ledPin2 = 5;
const int ledPin3 = 19;// Nilai treshold (toleransi sentuh)
const int threshold = 35;// Variabel untuk menyimpan nilai yang dibaca sensor
int touchValue;
void setup(){
Serial.begin(115200);
delay(500);
// Menginisiasi ledPin sebagai output
pinMode (ledPin1, OUTPUT);
pinMode (ledPin2, OUTPUT);
pinMode (ledPin3, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
}
void loop(){
// Membaca nilai sensor
touchValue = touchRead(touchPin);
Serial.print(touchValue);// Memeriksa kondisi touchValue, jika sedang disentuh
// (touchValue < treshold) maka akan melakukan konfigurasiif(touchValue < threshold){
digitalWrite(ledPin1, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
Serial.println(" touch");
}// Jika touchValue < treshold (sedang tidak disentuh),
// Matikan LED dan menyalakan LED lainnya
else{
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin1, LOW);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(ledPin3, HIGH);
Serial.println(" not");
}
delay(500);
}
— Analisis
Tentunya dalam eksperimen yang saya lakukan terhadap touch sensor tidak selalu berjalan dengan mulus. Pada awalnya saya mencoba dengan satu lampu LED eksternal. Sensor GPIO tidak bisa menangkap inputan, lalu saya mengulanginya kembali dengan merombak kode program. Setelah beberapa trial and errors akhirnya program berhasil dijalankan dan sensor dapat menangkap inputan dengan baik.
Saya tidak cukup puas dengan hasil yang diperoleh. Kemudian saya menambahkan 2 lampu LED dan mengonfigurasikannya dengan LED Internal sebagai feedback ketika sensor disentuh. Akhirnya program berhasil dijalankan dan konfigurasi sensor dengan output berupa LED Internal dan LED Eksternal pun dirasa sukses!
— Hall Effect Sensor
Selanjutnya saya akan mencoba sensor kedua dari internal sensor ESP 32 ini yaitu Hall Effect Sensor. Hall Effect Sensor merupakan sensor yang dapat mendeteksi medan magnet. Singkatnya, sensor ini akan mendeteksi kutub negatif dan positif. Saya menggunakan rangkaian yang saya gunakan pada touch sensor dan hanya mengganti masukannya saja menjadi hall effect. Kode program dalam project ini terlampir sebagai berikut.
— Kode Program
// Menginisiasi hallvalue
int hallValue;// Inisiasi LED pin
const int ledPin1 = 18;
const int ledPin2 = 5;
const int ledPin3 = 19;
void setup() {
Serial.begin(115200);
delay(1000);
// Menginisiasi ledPin sebagai Output
pinMode (ledPin1, OUTPUT);
pinMode (ledPin2, OUTPUT);
pinMode (ledPin3, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
}
void loop(){
// Membaca state sensor
hallValue = hallRead();
// Mencetak nilai bacaan sensor ke serial monitor
Serial.print(hallValue);
// Mengecek bacaan sensor pada, apabila < 0 berarti kutub negatif
if(hallValue < 0){
// Menyalakan LED merah dan mematikan LED Hijau
digitalWrite(ledPin1, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
// Memberikan simbol - (kutub negatif)
Serial.println(" negative");
}
// apabila > 50 berarti kutub positif
else if (hallValue > 50){
// Menyalakan LED hijau dan mematikan LED merah
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin1, LOW);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(ledPin3, HIGH);
// Memberikan simbol + (kutub positif)
Serial.println(" positive");
// Apabila nilai antara 0 dan 50
} else {
Serial.println(" neutral");
// Mematikan kedua LED
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin1, LOW);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(ledPin3, LOW);
}
delay(500);
}
— Analisis
Pada rangkaian kedua project internal sensor kali ini saya tidak menemukan kendala yang cukup berarti. ESP32 dapat mendeteksi medan magnet dengan baik saat kondisi kutub positive, kutub negative, serta neutral. Hanya saja, sepertinya magnet yang saya miliki (karena sudah cukup berumur) sudah berkurang daya magnetnya sehingga terkadang saat kutub negative ditempelkan ke ESP32 tidak bisa terbaca dengan baik.
Saat saya menganalisis serial monitor, saya menemukan fakta bahwa saat kutub positive dihubungkan muncul angka random yang berada pada rentang 60–120. Pada kondisi neutral, angka tersebut stabil pada rentang 40 an. Lalu pada kondisi negative, serial monitor menunjuk angka -10 hingga -20. Saya kurang mengerti apakah angka ini ada hubungannya dengan kapasitansi dan daya tarik magnet. Asumsi yang saya ambil, ini semua ada hubungannya dengan daya tarik magnet karena kebetulan magnet yang saya miliki memiliki keadaan “lemah” saat negative. Hal ini ditujukkan dengan tidak seimbangnya kondisi saat positive dan negative. Namun ini hanyalah asumsi yang tidak berdasar teori apapun:D
— Temperature Sensor
Sensor terakhir yang terdapat pada internal sensor ESP32 yaitu temperature sensor. Wah, dari namanya saja seperti sudah cukup canggih ya. Temperature sensor, sesuai dengan namanya adalah sensor yang dapat mengukur temperatur yang berada di sekitar ESP32.
Namun, berdasarkan sumber-sumber yang sudah saya cari di internet terkuak fakta bahwa ternyata ESP32 tidak dapat melakukan update pada temperatur ruang dan hanya mengirimkan output berupa 53.33 C secara statis. Saya masih penasaran apakah benar seperti itu? Oleh karena itu, mari kita coba saja ya! Untuk rangkaiannya hanya diperlukan ESP32 dan kabel USB saja tanpa perlu lampu LED dan teman-temannya. Berikut adalah kode program untuk pembacaan temperatur pada ESP32.
— Kode Program
// Melakukan import library
#ifdef __cplusplus
extern "C" {
#endifuint8_t temprature_sens_read();#ifdef __cplusplus
}
#endifuint8_t temprature_sens_read();
// Inisiasi serial
void setup() {
Serial.begin(115200);
}// Melakukan looping pada temperature
void loop() {
Serial.print("Temperature: ");
// Konversi temperature dari skala Fahrenheit menjadi Celcius
Serial.print((temprature_sens_read() - 32) / 1.8);
Serial.println(" C");
delay(1000);
}
— Analisis
Ternyata hipotesis dan sumber yang beredar di internet selama ini adalah benar. Saya mendapati bahwa temperatur yang muncul pada serial monitor selalu konstan dan menunjuk angka 53.33 C. Yah, setidaknya kini rasa penasaran saya sudah hilang hehehe.
— Penutup dan Kesimpulan
Project #3 Internal Sensor ESP32 kali ini cukup membuat saya semakin terheran heran dengan ESP32. Tak disangka, alat mungil dengan harga yang dapat dibilang cukup terjangkau ini dapat melakukan berbagai macam fungsi dengan sensor-sensor yang sudah terbuild-in di dalamnya. Yah meskipun tadi saat mencoba temperature sensor tidak dapat dibilang sukses, tetapi dapat menghilangkan rasa penasaran saya tentang sensor ESP32 ini. Saya yakin, sebenarnya ESP32 ini masih dapat digali lagi potensinya. Oleh karena itu, kita akan kembali mengeksplorasinya bersama di minggu-minggu yang akan datang! Jangan lupa pantengin terus project ini yaa karena pastinya bakal banyak project-project yang lebih seru lagii!!
Terima kasih dan sampai jumpa.