Pertemuan 6
Sensor Jarak Ultrasonik (HC-SR04)
Peringatan keselamatan: Jika HC-SR04 dipasang ke ESP32, pin Echo mengeluarkan sinyal 5V yang melebihi batas toleransi pin GPIO ESP32 (3.3V). Gunakan pembagi tegangan pada jalur Echo agar tidak berisiko merusak pin ESP32.
Tujuan Pembelajaran
- Memahami prinsip kerja sensor ultrasonik dalam mengukur jarak.
- Mampu memasang dan membaca data jarak dari sensor HC-SR04.
- Mampu menghitung jarak dari waktu pantul gelombang suara.
Penjelasan Konsep
Prinsip kerja
Sensor HC-SR04 memancarkan gelombang ultrasonik (suara frekuensi tinggi, tidak terdengar manusia) lewat pin Trig, lalu menunggu pantulannya diterima di pin Echo. Waktu tempuh gelombang dipakai untuk menghitung jarak, mirip prinsip sonar/radar.
Rumus perhitungan jarak
Karena gelombang suara merambat dengan kecepatan kurang lebih 343 m/detik di udara, dan sinyal Echo mengukur waktu pergi-pulang (ke objek dan kembali), rumusnya:
Jarak (cm) = waktu (mikrodetik) × 0.0343 / 2
Fungsi pulseIn() di Arduino dipakai untuk mengukur berapa lama pin Echo berada di kondisi HIGH.
Braket sensor
HC-SR04 di kelas ini sudah dilengkapi braket dudukan - pasang braket sebelum wiring agar posisi sensor stabil saat dipakai di robot/project bergerak (relevan untuk Semester 2).
Keterbatasan
Sensor ultrasonik kurang akurat untuk objek yang menyerap suara (misalnya kain tebal) atau permukaan miring yang memantulkan gelombang ke arah lain.
Kesalahan umum
- Menyambung Echo langsung ke pin ESP32 tanpa pembagi tegangan - HC-SR04 mengeluarkan Echo di level 5V, sedangkan pin GPIO ESP32 hanya toleran hingga 3.3V. Ini bisa merusak pin secara bertahap.
- Tidak memberi jeda
delayMicroseconds(2)sebelum trigger - tanpa memastikan pin Trig LOW dulu, pulsa trigger bisa tidak terbentuk dengan bersih dan hasil pengukuran meleset. - Objek terlalu dekat atau terlalu jauh dari jangkauan sensor - HC-SR04 punya batas jarak minimum dan maksimum (biasanya sekitar 2 cm – 400 cm); di luar rentang itu,
pulseIn()bisa mengembalikan 0 atau nilai yang tidak masuk akal. - Lupa memberi nilai timeout pada
pulseIn()- jika Echo tidak pernah HIGH (misalnya wiring salah),pulseIn()akan menunggu hingga timeout default (1 detik), membuat program terasa "macet" sesaat di setiap loop.
Komponen yang Dibutuhkan
- 1x Arduino Uno atau ESP32
- 1x Sensor ultrasonik HC-SR04 + braket
- Breadboard, kabel jumper
Diagram / Skema Pengkabelan
HC-SR04:
VCC -> 5V
Trig -> pin digital (mis. D9)
Echo -> pin digital (mis. D10)
GND -> GND
Catatan: HC-SR04 standar butuh 5V untuk bekerja optimal. Jika dipasang ke board 3.3V (seperti ESP32), sebaiknya gunakan pembagi tegangan pada pin Echo agar tidak melebihi batas aman pin input ESP32.
Contoh Kode Program
// Mengukur jarak dengan sensor ultrasonik HC-SR04
const int pinTrig = 9;
const int pinEcho = 10;
void setup() {
pinMode(pinTrig, OUTPUT);
pinMode(pinEcho, INPUT);
Serial.begin(9600);
}
void loop() {
// Kirim pulsa trigger 10 mikrodetik
digitalWrite(pinTrig, LOW);
delayMicroseconds(2);
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
// Ukur durasi pulsa HIGH di pin Echo
long durasi = pulseIn(pinEcho, HIGH);
float jarakCm = durasi * 0.0343 / 2;
Serial.print("Jarak: ");
Serial.print(jarakCm);
Serial.println(" cm");
delay(300);
}Tugas / Latihan
- Ukur jarak beberapa benda di sekitarmu dengan sensor, lalu bandingkan dengan pengukuran penggaris manual - hitung selisih error-nya.
- Buat program yang menampilkan peringatan "Objek terlalu dekat!" jika jarak kurang dari 10 cm.
- (Tantangan) Tambahkan nilai timeout pada
pulseIn()(parameter ketiga, dalam mikrodetik) agar program tidak menunggu terlalu lama jika Echo tidak pernah HIGH, lalu tampilkan pesan "Tidak ada pantulan" saat itu terjadi.