Panduan · 9 mnt baca

Jenis Sensor Jarak Arduino: HC-SR04, IR, VL53L0X, dan LiDAR

Perbandingan sensor jarak Arduino: HC-SR04, JSN-SR04T, Sharp IR, VL53L0X/VL53L1X, TF-Luna, dan TCRT5000; jangkauan, akurasi, sudut berkas, permukaan, dan contoh kode.

Memilih di antara jenis sensor jarak Arduino awalnya terlihat seperti soal “mana yang bisa mengukur paling jauh”, tetapi penentu sebenarnya adalah permukaan yang kamu ukur, akurasi yang diperlukan, seberapa sempit berkasnya harus dibuat, dan kondisi di sekitarnya. HC-SR04 yang mampu mengukur jarak ke dinding hingga satuan sentimeter bisa memberikan hasil tidak menentu pada kain sofa yang lembut, sedangkan sensor laser murah dengan presisi milimeter bisa kehilangan separuh jangkauannya di bawah sinar matahari. Dalam panduan ini, kita membandingkan enam sensor yang paling sering dipakai dalam proyek Arduino.

Sensor yang kita bandingkan adalah: sensor ultrasonik HC-SR04 dan saudaranya yang tahan air, JSN-SR04T, sensor triangulasi inframerah Sharp GP2Y0A21, sensor laser time-of-flight (ToF) VL53L0X dan VL53L1X, LiDAR kecil TF-Luna, serta sensor kedekatan jarak pendek TCRT5000. Untuk masing-masing sensor, kita menjelaskan prinsip kerja, jangkauan, akurasi, sudut berkas, respons terhadap permukaan, dan antarmukanya, serta memberikan contoh sketch yang telah dikompilasi. Di bagian akhir, sebuah tabel merangkum sensor yang cocok untuk setiap proyek.

Sensor jarak ultrasonik HC-SR04
HC-SR04: dua transduser ultrasonik, satu memancarkan suara dan satu mendengarkan gema; sensor jarak yang paling umum di dunia Arduino.

Bagaimana sensor jarak mengukur? Tiga prinsip dasar

Hampir semua sensor jarak yang dipakai dengan Arduino mengandalkan salah satu dari tiga metode. Waktu tempuh: sensor memancarkan pulsa suara atau cahaya dan mengukur waktu yang diperlukan pantulannya untuk kembali; jarak adalah setengah hasil kali waktu dan kecepatan. Sensor ultrasonik melakukannya dengan suara, sedangkan VL53L0X dan TF-Luna dengan cahaya. Karena cahaya sekitar sejuta kali lebih cepat daripada suara, sensor ToF memiliki chip khusus dengan pengukuran waktu pada tingkat pikodetik. Triangulasi: sensor Sharp IR memancarkan berkas inframerah ke target dan melihat posisi jatuhnya cahaya pantulan pada detektor peka posisi (PSD); untuk benda dekat, titik cahaya bergeser ke satu ujung, dan untuk benda jauh ke ujung lainnya. Intensitas pantulan: sensor sederhana seperti TCRT5000 hanya mengukur seberapa kuat cahaya yang kembali; karena ini sangat bergantung pada warna permukaan, hasilnya berupa deteksi kedekatan, bukan pengukuran jarak yang sebenarnya.

PrinsipSensorKelebihanKekurangan
Waktu tempuh dengan suaraHC-SR04, JSN-SR04TMurah, tidak dipengaruhi warna dan cahayaBerkas lebar, lemah pada permukaan lembut dan miring, peka terhadap suhu
Waktu tempuh dengan cahayaVL53L0X, VL53L1X, TF-LunaCepat, berkas sempit, akurasi baikSinar matahari dan kaca menimbulkan masalah
Triangulasi inframerahSharp GP2Y0A21Sedikit dipengaruhi warna, output analog sederhanaOutput tidak linear, jangkauan sempit, menyesatkan di bawah 10 cm
Intensitas pantulanTCRT5000Sangat murah, sangat cepatHanya beberapa mm hingga cm, sangat bergantung pada warna

Tabel perbandingan lengkap

Tabel berikut merangkum nilai tipikal modul untuk setiap sensor. Jangkauan berasal dari angka produsen; dalam proyek nyata, jangkauan bisa lebih pendek tergantung permukaan dan lingkungan. Harga berbeda-beda menurut negara, sehingga ditampilkan secara relatif.

SensorJangkauanAkurasiSudut berkasAntarmukaCatu dayaHarga relatif
HC-SR042–400 cmSekitar ±0,3–1 cmSekitar 15°Pulsa Trig/Echo5 V (HC-SR04P: 3,3–5 V)Sangat murah
JSN-SR04TSekitar 25–450 cmSekitar ±1 cmLebar (sekitar 45° atau lebih)Trig/Echo, UART pada beberapa versi5 VMurah
Sharp GP2Y0A2110–80 cmBaik pada jarak dekat, lemah pada jarak jauhSempit (beberapa derajat)Tegangan analog4,5–5,5 VSedang
VL53L0X3 cm – 2 m (default ~1,2 m)Sekitar ±3%25°I2C (0x29)Modul 3,3–5 VMurah
VL53L1X4 cm – 4 mSekitar ±3%, resolusi mm27° (bisa dipersempit menjadi 15°)I2C (0x29)Modul 3,3–5 VSedang
TF-Luna0,2–8 m±6 cm (hingga 3 m), ±2% (3–8 m)2°UART atau I2C5 V, logika 3,3 VMahal
TCRT5000Sekitar 0,2–15 mm (terbaik pada 2,5 mm)Bukan jarak, ada/tidak adaSempitDigital (DO) + analog (AO)3,3–5 VSangat murah

HC-SR04: sensor ultrasonik klasik

HC-SR04 memancarkan delapan pulsa suara 40 kHz dan mempertahankan pin ECHO pada HIGH sampai gema kembali. Arduino mengukur durasi pulsa ini dalam mikrodetik dengan pulseIn(). Pada 20 °C, suara merambat sekitar 343 meter per detik, atau 0,0343 cm per mikrodetik; karena suara bergerak menuju target lalu kembali, jarak = waktu × 0,0343 / 2. Kecepatan suara berubah sesuai suhu (sekitar 331,3 + 0,606 × T m/dtk): antara 0 °C dan 35 °C terdapat selisih sekitar 6%, yang berarti galat hingga 12 cm pada jarak 2 meter. Kode di bawah menerapkan koreksi ini dan mengambil median dari lima pembacaan untuk menyaring gema keliru yang sesekali muncul.

C++ (Arduino IDE)
1const int TRIG_PIN = 9;
2const int ECHO_PIN = 10;
3const float SICAKLIK = 20.0;     // ortam sıcaklığı, °C / ambient temperature, °C
4float sesHizi;                   // cm/µs
5
6float mesafeOlc() {
7  digitalWrite(TRIG_PIN, LOW);
8  delayMicroseconds(2);
9  digitalWrite(TRIG_PIN, HIGH);  // 10 µs tetik darbesi / 10 µs trigger pulse
10  delayMicroseconds(10);
11  digitalWrite(TRIG_PIN, LOW);
12  unsigned long sure = pulseIn(ECHO_PIN, HIGH, 30000UL);   // 30 ms ≈ 5 m sınırı / ~5 m limit
13  if (sure == 0) return -1;      // yankı yok / no echo
14  return sure * sesHizi / 2.0;   // gidiş-dönüş / round trip
15}
16
17void setup() {
18  Serial.begin(9600);
19  pinMode(TRIG_PIN, OUTPUT);
20  pinMode(ECHO_PIN, INPUT);
21  sesHizi = (331.3 + 0.606 * SICAKLIK) / 10000.0;   // m/s -> cm/µs (20 °C: 0,0343)
22}
23
24void loop() {
25  float olcum[5];
26  for (int i = 0; i < 5; i++) {  // 5 ölçüm, aralarında 60 ms / 5 readings, 60 ms apart
27    olcum[i] = mesafeOlc();
28    delay(60);
29  }
30  for (int i = 1; i < 5; i++) {  // sırala / sort
31    float x = olcum[i];
32    int j = i - 1;
33    while (j >= 0 && olcum[j] > x) { olcum[j + 1] = olcum[j]; j--; }
34    olcum[j + 1] = x;
35  }
36  float d = olcum[2];            // ortanca / median
37  if (d < 0) Serial.println("Menzil disi / out of range");
38  else { Serial.print(d, 1); Serial.println(" cm"); }
39}
40
  • Tunggu setidaknya 60 ms antar pembacaan: jika kamu mengukur lagi ketika gema pulsa sebelumnya masih memantul di ruangan, hasilnya akan keliru.
  • Permukaan lembut dan miring: kain, busa, dan tirai menyerap suara; permukaan yang miring lebih dari 45 derajat memantulkan gema menjauhi sensor.
  • Berkas lebar: kerucut sekitar 15 derajat mencakup area selebar hampir 50 cm pada jarak 2 meter; di lorong sempit, sensor juga bisa mendeteksi dinding samping.
  • Board 3,3 V: HC-SR04 klasik memerlukan 5 V dan output ECHO-nya 5 V; pada ESP32 dan Pico, pasang pembagi tegangan pada ECHO atau gunakan HC-SR04P yang bekerja pada 3,3 V.
  • Beberapa sensor: dua HC-SR04 yang dipicu bersamaan mendengar gema satu sama lain; picu keduanya secara bergantian.

Pengkabelan HC-SR04 serta penggunaannya dengan Serial Monitor dan LCD dibahas secara terperinci dalam artikel sensor jarak HC-SR04; di sini kita berfokus pada perbandingannya.

JSN-SR04T: sensor ultrasonik tahan air

JSN-SR04T bekerja dengan logika pemicu dan gema yang sama seperti HC-SR04, tetapi transdusernya berada dalam kapsul tahan air pada kabel, terpisah dari board elektroniknya. Karena itu, sensor ini menjadi pilihan untuk tempat lembap seperti tangki air, sumur, tangki air hujan, dan sensor parkir luar ruangan. Ada dua perbedaan penting: karena satu transduser digunakan untuk memancarkan sekaligus mendengarkan, terdapat zona buta pada jarak dekat (sekitar 20–25 cm), dan berkasnya lebih lebar daripada HC-SR04. Pasang sensor pada tutup atas tangki, setidaknya 25 cm di atas level air tertinggi. Kode di bawah mengubah jarak menjadi persentase isi.

C++ (Arduino IDE)
1// JSN-SR04T ile su deposu doluluğu / water tank level with a JSN-SR04T
2const int TRIG_PIN = 9;
3const int ECHO_PIN = 10;
4const float SENSOR_BOSLUK = 25.0;  // sensörden en yüksek su seviyesine, cm (ölü bölge) / sensor to max level (blind zone)
5const float DEPO_DERINLIK = 120.0; // en yüksek seviyeden depo dibine, cm / max level to tank bottom
6
7float mesafeOlc() {
8  digitalWrite(TRIG_PIN, LOW);
9  delayMicroseconds(5);
10  digitalWrite(TRIG_PIN, HIGH);
11  delayMicroseconds(20);           // JSN-SR04T 10 µs'den uzun darbeyi sever / likes a longer pulse
12  digitalWrite(TRIG_PIN, LOW);
13  unsigned long sure = pulseIn(ECHO_PIN, HIGH, 40000UL);
14  if (sure == 0) return -1;
15  return sure * 0.0343 / 2.0;      // 20 °C ses hızı / speed of sound at 20 °C
16}
17
18void setup() {
19  Serial.begin(9600);
20  pinMode(TRIG_PIN, OUTPUT);
21  pinMode(ECHO_PIN, INPUT);
22}
23
24void loop() {
25  float d = mesafeOlc();
26  if (d < 0) {
27    Serial.println("Yanki yok / no echo");
28  } else {
29    float suYuksekligi = DEPO_DERINLIK - (d - SENSOR_BOSLUK);   // dipten su yüksekliği / water height
30    float yuzde = constrain(suYuksekligi / DEPO_DERINLIK * 100.0, 0, 100);
31    Serial.print("Mesafe / distance: ");
32    Serial.print(d, 1);
33    Serial.print(" cm  Doluluk / fill: %");
34    Serial.println(yuzde, 0);
35  }
36  delay(1000);                     // su yüzeyi dalgalanır, sık ölçme / water ripples, measure slowly
37}
38
Tangga, pipa, atau pelampung di dalam tangki dapat memantulkan gema karena berkas yang lebar; tempatkan sensor jauh dari benda-benda tersebut, dekat bagian tengah tangki. Jika tetesan kondensasi menumpuk pada transduser, pembacaan menjadi keliru; memasang sensor sedikit miring membuat tetesan mengalir turun. Jika permukaan air beriak, gunakan median dari beberapa pembacaan.

Sharp GP2Y0A21: inframerah analog

Sharp GP2Y0A21YK0F adalah sensor inframerah yang bekerja pada jarak 10 hingga 80 cm dan menghasilkan tegangan analog sesuai jarak. Karena memakai triangulasi, sensor ini kurang peka terhadap warna target dibandingkan sensor berbasis intensitas pantulan. Output-nya tidak linear: sekitar 2,3 V pada 10 cm dan 0,4 V pada 80 cm, serta mengikuti kurva pangkat terbalik di antaranya. Kode mengonversi kurva ini dengan pendekatan jarak = 29.988 × V^-1.173. Jebakan terbesarnya ada di bawah 10 cm: ketika target semakin dekat, output kembali turun, sehingga benda pada jarak 5 cm bisa terlihat seolah berada pada 20 cm. Pasang sensor agar target tidak pernah bisa mendekat hingga kurang dari 10 cm.

C++ (Arduino IDE)
1// Sharp GP2Y0A21YK0F (10–80 cm), analog / analog output
2const int SHARP_PIN = A0;
3
4float sharpCm() {
5  long toplam = 0;
6  for (int i = 0; i < 20; i++) {          // 20 okumanın ortalaması / average of 20 readings
7    toplam += analogRead(SHARP_PIN);
8    delay(2);
9  }
10  float volt = toplam / 20.0 * 5.0 / 1023.0;
11  if (volt < 0.35) return -1;             // 80 cm'den uzak / farther than 80 cm
12  float cm = 29.988 * pow(volt, -1.173);  // ters güç eğrisi / inverse power curve
13  if (cm > 80) return -1;
14  return cm;                              // 10 cm altı yanıltıcı / misleading below 10 cm
15}
16
17void setup() {
18  Serial.begin(9600);
19}
20
21void loop() {
22  float cm = sharpCm();
23  if (cm < 0) Serial.println("Menzil disi / out of range");
24  else { Serial.print(cm, 1); Serial.println(" cm"); }
25  delay(100);
26}
27

Sensor Sharp menarik pulsa arus tinggi yang singkat selama mengukur, dan pulsa ini menimbulkan derau pada jalur catu daya. Kapasitor sekitar 10 µF di dekat pin VCC dan GND sensor membuat pembacaan jauh lebih stabil. Keluarga ini juga memiliki anggota dengan jangkauan lain: GP2Y0A41SK0F bekerja pada 4 hingga 30 cm, sedangkan GP2Y0A02YK0F pada 20 hingga 150 cm; masing-masing memiliki koefisien kurva berbeda.

VL53L0X dan VL53L1X: sensor laser ToF

VL53L0X dan VL53L1X adalah sensor laser time-of-flight mungil dari STMicroelectronics. Keduanya memancarkan pulsa laser tak terlihat 940 nm, mengukur waktu kembalinya pantulan dengan penghitung foton, lalu mengirim hasil langsung dalam milimeter melalui I2C. Keduanya hampir tidak bergantung pada warna, berkasnya lebih sempit daripada sensor ultrasonik, dan satu pengukuran memerlukan 20–50 ms. VL53L0X mengukur hingga sekitar 1,2 meter pada mode default dan 2 meter pada mode jarak jauh; VL53L1X mencapai 4 meter dan bidang pandangnya (ROI) dapat dipersempit melalui perangkat lunak. Keduanya memiliki alamat I2C default 0x29. Kode di bawah menggunakan library VL53L0X dari Pololu; cari “VL53L0X” di Library Manager lalu instal versi Pololu.

C++ (Arduino IDE)
1#include <Wire.h>
2#include <VL53L0X.h>              // Pololu VL53L0X kütüphanesi / library
3
4VL53L0X sensor;
5
6void setup() {
7  Serial.begin(9600);
8  Wire.begin();                    // Uno: SDA A4, SCL A5 / ESP32: SDA 21, SCL 22
9  sensor.setTimeout(500);
10  if (!sensor.init()) {
11    Serial.println("VL53L0X bulunamadi / not found");
12    while (true) {}
13  }
14  // Uzun menzil modu (2 m'ye kadar, daha gürültülü) / long range mode (up to 2 m, noisier):
15  // sensor.setSignalRateLimit(0.1);
16  // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
17  // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
18  sensor.setMeasurementTimingBudget(50000);   // 50 ms: daha kararlı ölçüm / steadier reading
19  sensor.startContinuous();
20}
21
22void loop() {
23  uint16_t mm = sensor.readRangeContinuousMillimeters();
24  if (sensor.timeoutOccurred()) {
25    Serial.println("Zaman asimi / timeout");
26  } else if (mm >= 8190) {         // 8190-8191: hedef yok / no target
27    Serial.println("Menzil disi / out of range");
28  } else {
29    Serial.print(mm);
30    Serial.println(" mm");
31  }
32}
33

Alokasi waktu pengukuran menentukan keseimbangan antara akurasi dan kecepatan: 20 ms cepat tetapi berderau, sedangkan 200 ms lambat tetapi stabil. Sinar matahari dan sumber inframerah yang kuat memperpendek jangkauan secara nyata; ingat hal ini jika kamu akan mengukur di luar ruangan. Untuk menghubungkan dua VL53L0X ke bus I2C yang sama, karena keduanya beralamat 0x29, tahan salah satunya dalam keadaan mati melalui pin XSHUT dan beri alamat baru pada yang lain (setAddress); penjelasan I2C ada dalam artikel Apa Itu I2C?.

TF-Luna: 8 meter dengan LiDAR kecil

TF-Luna adalah LiDAR satu titik berukuran kecil dari Benewake: sensor ini mengukur waktu tempuh dengan memodulasi cahaya inframerah 850 nm, bekerja pada jarak 0,2 hingga 8 meter dengan berkas sangat sempit, hanya 2 derajat, dan dapat melakukan hingga 250 pembacaan per detik. Secara default, setiap pembacaan dikirim melalui UART pada 115200 baud sebagai paket 9-byte: dua byte header 0x59, jarak (cm), kekuatan sinyal, suhu internal, dan checksum. Jika kekuatan sinyal di bawah 100 atau sama dengan 65535 (paparan berlebih), pembacaan dianggap tidak andal. Catu dayanya 5 V, tetapi level logika UART-nya 3,3 V, sehingga bisa langsung terhubung ke ESP32. Karena SoftwareSerial pada Uno tidak andal pada 115200 baud, pilih board dengan UART perangkat keras seperti ESP32 atau Mega; logika penguraian paket UART dijelaskan dalam artikel Apa Itu UART?.

C++ (Arduino IDE)
1// TF-Luna LiDAR, UART (115200), ESP32 Serial2
2// TF-Luna TX -> GPIO 16, RX -> GPIO 17, VCC 5V, GND
3const int RXD2 = 16, TXD2 = 17;
4
5uint8_t kare[9];                   // 0x59 0x59 DistL DistH AmpL AmpH TempL TempH Checksum
6int konum = 0;
7
8void setup() {
9  Serial.begin(115200);
10  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
11}
12
13void loop() {
14  while (Serial2.available()) {
15    uint8_t b = Serial2.read();
16    if (konum < 2) {               // iki 0x59 başlık baytını bekle / wait for two 0x59 header bytes
17      if (b == 0x59) kare[konum++] = b;
18      else konum = 0;
19      continue;
20    }
21    kare[konum++] = b;
22    if (konum < 9) continue;
23    konum = 0;
24
25    uint8_t toplam = 0;
26    for (int i = 0; i < 8; i++) toplam += kare[i];
27    if (toplam != kare[8]) continue;             // sağlama toplamı hatalı / bad checksum
28
29    uint16_t mesafe = kare[2] | (kare[3] << 8);  // cm
30    uint16_t guc = kare[4] | (kare[5] << 8);     // sinyal gücü / signal strength
31    float derece = (kare[6] | (kare[7] << 8)) / 8.0 - 256.0;
32
33    if (guc < 100 || guc == 65535) {             // zayıf ya da aşırı sinyal / weak or saturated
34      Serial.println("Guvenilmez / unreliable");
35    } else {
36      Serial.print(mesafe);
37      Serial.print(" cm  guc / amp: ");
38      Serial.print(guc);
39      Serial.print("  ic sicaklik / chip temp: ");
40      Serial.println(derece, 1);
41    }
42  }
43}
44

TCRT5000: deteksi kedekatan dan garis

Sensor reflektif inframerah TCRT5000
TCRT5000: LED inframerah dan fototransistor berdampingan; board modul memiliki komparator, potensiometer ambang, serta output digital dan analog.

TCRT5000 bukan pengukur jarak, melainkan sensor reflektif: cahaya LED inframerah dipantulkan permukaan dan fototransistor di sebelahnya mengukur banyaknya cahaya yang kembali. Sensor ini bekerja paling baik pada sekitar 2,5 mm, dan sinyal melemah dengan cepat setelah 1,5 cm. Karena permukaan putih memantulkan banyak cahaya dan permukaan hitam sangat sedikit, nilainya sangat berbeda tergantung warna meskipun jaraknya sama; itulah sebabnya sensor ini dipakai untuk membedakan hitam dan putih pada robot pengikut garis, menghitung lubang pada cakram encoder, dan mendeteksi benda yang sangat dekat. Komparator pada modul mengalihkan output digital ketika ambang yang diatur dengan potensiometer terlewati. Penjelasannya ada dalam artikel sensor inframerah TCRT5000.

C++ (Arduino IDE)
1// TCRT5000 modülü: DO dijital, AO analog / TCRT5000 module: DO digital, AO analog
2const int DO_PIN = 7;
3const int AO_PIN = A1;
4const int LED_PIN = 13;
5
6void setup() {
7  Serial.begin(9600);
8  pinMode(DO_PIN, INPUT);
9  pinMode(LED_PIN, OUTPUT);
10}
11
12void loop() {
13  bool nesneVar = (digitalRead(DO_PIN) == LOW);  // çoğu modülde LOW = yansıma var / LOW = reflection on most modules
14  int yansima = analogRead(AO_PIN);              // düşük değer = güçlü yansıma / low value = strong reflection
15  digitalWrite(LED_PIN, nesneVar);
16  Serial.print(nesneVar ? "Nesne VAR / object  " : "Nesne yok / none  ");
17  Serial.println(yansima);
18  delay(100);
19}
20

Pengaruh permukaan dan lingkungan

Jangkauan sensor di atas kertas berubah ketika berhadapan dengan permukaan yang kamu ukur. Sensor ultrasonik sangat baik pada permukaan keras yang memantulkan suara, tetapi kesulitan pada kain yang menyerapnya; sensor berbasis cahaya dipengaruhi warna, kilap, dan sinar matahari. Tabel berikut menunjukkan sensor yang tetap andal dalam setiap situasi untuk membantumu merancang proyek.

Permukaan / lingkunganUltrasonik (HC-SR04)Sharp IRLaser ToF (VL53, TF-Luna)TCRT5000
Dinding keras dan datarSangat baikBaikSangat baikBaik (hanya sangat dekat)
Kain, busa, tiraiLemah (suara diserap)BaikBaikSedang
Permukaan hitam dofBaikSedangJangkauan memendekSangat lemah
Kaca, cermin, logam mengilapBaik (suara dipantulkan)MenyesatkanMenyesatkan (cahaya menembus atau dibelokkan)Menyesatkan
Permukaan miringLemah (gema dibelokkan)SedangBaikSedang
Sinar matahari, luar ruanganTidak terpengaruhTerpengaruhJangkauan turun drastisTerpengaruh
Permukaan airBaik (pengukuran tangki)LemahBervariasiTidak cocok
Perubahan suhuKecepatan suara berubah, perlu koreksiSedikit terpengaruhSedikit terpengaruhSedikit terpengaruh

Ringkasan pengkabelan: Uno, ESP32, dan Pico

SensorArduino UnoESP32Raspberry Pi PicoCatatan
HC-SR04 / JSN-SR04TTRIG D9, ECHO D10, 5VTRIG 5, ECHO 18 (melalui pembagi), VIN 5VTRIG GP14, ECHO GP15 (melalui pembagi), VBUSECHO mengeluarkan 5 V
Sharp GP2Y0A21A0, 5VGPIO 34 (melalui pembagi), VIN 5VGP26 (melalui pembagi), VBUSOutput dapat mencapai 3,1 V
VL53L0X / VL53L1XSDA A4, SCL A5SDA 21, SCL 22SDA GP4, SCL GP5Alamat 0x29
TF-LunaSoftwareSerial tidak disarankanTX → GPIO 16, RX → GPIO 17TX → GP1 (uart0 RX), RX → GP0Catu daya 5 V, logika 3,3 V
Modul TCRT5000DO D7, AO A1DO 27, AO 34DO GP16, AO GP273,3–5 V
Ketika menghubungkan output sensor bercatu 5 V (ECHO HC-SR04, output analog Sharp) ke ESP32 atau Pico, jangan lupa memasang pembagi tegangan; pin board ini tidak tahan 5 V. Karena output Sharp dapat mencapai 3,1 V, nilainya mendekati batas ADC dengan referensi 3,3 V; mengukur melalui pembagi seperti 10 kΩ + 20 kΩ lalu mengalikan hasilnya dengan 1,5 lebih aman.

Pengukuran ultrasonik dengan Raspberry Pi Pico

Dalam MicroPython, durasi pulsa diukur dengan machine.time_pulse_us(); fungsinya sama dengan pulseIn() pada Arduino dan mengembalikan nilai negatif jika batas waktu terlampaui. Beri daya HC-SR04 dari pin VBUS (USB 5 V) Pico lalu pasang pembagi 1 kΩ + 2 kΩ pada jalur ECHO, atau gunakan HC-SR04P yang bekerja langsung pada 3,3 V. Driver MicroPython juga tersedia untuk VL53L0X dan TF-Luna; kamu bisa dengan mudah mengurai paket UART TF-Luna dengan machine.UART memakai logika yang sama seperti kode Arduino.

MicroPython
1from machine import Pin, time_pulse_us
2import time
3
4trig = Pin(14, Pin.OUT)
5echo = Pin(15, Pin.IN)             # 5 V ECHO için gerilim bölücü şart / divider required for a 5 V ECHO
6SES_HIZI = 0.0343                  # cm/µs, 20 °C
7
8def mesafe_olc():
9    trig.low()
10    time.sleep_us(2)
11    trig.high()
12    time.sleep_us(10)              # 10 µs tetik / 10 µs trigger
13    trig.low()
14    sure = time_pulse_us(echo, 1, 30000)   # zaman aşımında eksi döner / negative on timeout
15    if sure < 0:
16        return None
17    return sure * SES_HIZI / 2
18
19while True:
20    d = mesafe_olc()
21    print("Menzil disi" if d is None else "{:.1f} cm".format(d))
22    time.sleep_ms(100)
23

Sensor jarak mana untuk proyek apa?

ProyekSensor yang disarankanMengapa?
Robot penghindar rintanganHC-SR04 (hemat biaya) atau VL53L0XBerkas lebar tidak melewatkan rintangan; VL53L0X lebih cepat dan lebih kecil
Level air tangki atau sumurJSN-SR04TProbe tahan air, mendeteksi permukaan air dengan baik
Sensor parkir mobilJSN-SR04T atau HC-SR04Tahan di luar ruangan, jangkauan 2–3 m sudah cukup
Robot pengikut garisTCRT5000Dirancang untuk membedakan hitam dan putih
Mini sumo, pengukuran presisi di atas mejaVL53L0X / VL53L1XResolusi milimeter, berkas sempit, ukuran kecil
Radar Arduino (sapuan servo)HC-SR04 atau TF-LunaHC-SR04 murah; berkas 2° TF-Luna menghasilkan peta yang jauh lebih tajam
Pengukur tinggi badan, penghitung di pintuVL53L1X atau TF-LunaJangkauan jauh dan pembacaan stabil
Drone, jarak jauhTF-LunaJangkauan 8 m, hingga 250 Hz
Keran tanpa sentuhan, deteksi tanganSharp GP2Y0A21Jangkauan 10–80 cm dan output analog sederhana

Beberapa ide proyek juga: putar HC-SR04 pada servo untuk membuat tampilan radar Arduino; gunakan satu HC-SR04 di depan dan dua VL53L0X di sisi robot penghindar rintangan; buka tutup tempat sampah pintar ketika tangan mendekat; buat meteran digital portabel dengan layar OLED, atau kirim tingkat isi tangki airmu ke ponsel melalui ESP32 dengan JSN-SR04T.

Kesalahan umum dan solusinya

GejalaKemungkinan penyebabSolusi
HC-SR04 selalu membaca 0 atau di luar jangkauanTidak ada gema, masalah pengkabelan atau dayaPeriksa catu daya 5 V dan pin TRIG/ECHO, beri batas waktu pada pulseIn
Pembacaan ultrasonik sesekali melonjakGema pulsa sebelumnya atau dinding sampingTunggu 60 ms antar pembacaan, gunakan filter median
JSN-SR04T tidak bisa mengukur jarak dekatZona buta (20–25 cm)Pasang sensor setidaknya 25 cm dari target
Sharp memberikan nilai besar yang keliru pada jarak sangat dekatKurva berbalik di bawah 10 cmCegah target mendekat hingga kurang dari 10 cm
Pembacaan Sharp berderauPulsa arus mengganggu catu dayaPasang kapasitor 10 µF antara VCC-GND, ambil rata-rata pembacaan
VL53L0X tidak ditemukanPengkabelan I2C atau konflik alamatPeriksa SDA/SCL dan alamat 0x29 dengan scanner I2C
Sensor laser membaca jarak terlalu pendek di luar ruanganInframerah pada sinar matahariTambahkan peneduh, tambah alokasi waktu pengukuran, atau gunakan ultrasonik
Data TF-Luna kacauBaud rate salah atau SoftwareSerial tidak mampu mengikutiGunakan 115200 baud dan UART perangkat keras, periksa checksum
Sebelum memilih sensor, pikirkan targetnya: untuk target besar, keras, dan dekat, HC-SR04 biasanya sudah cukup. Jika kamu perlu mengukur titik sempit secara presisi atau mendeteksi permukaan lembut, beralihlah ke ToF; untuk tempat lembap atau luar ruangan, pilih JSN-SR04T; dan jika kamu memerlukan jarak lebih dari beberapa meter atau pembacaan sangat cepat, pilih TF-Luna.

Sensor jarak adalah cara termudah untuk membuat proyek Arduino mengenali lingkungan sekitarnya, dan memilih sensor yang tepat menentukan apakah proyek berjalan stabil atau justru membuatmu frustrasi. Tabel dan kode dalam perbandingan ini membantumu menyeimbangkan anggaran dan kinerja sesuai kebutuhanmu. Di aplikasi BlueGrays, kamu akan menemukan proyek langkah demi langkah dengan skema rangkaian dan kode untuk mengukur jarak dengan HC-SR04, sensor parkir, pengukur tinggi badan, robot penghindar rintangan, sensor parkir ESP32, serta pengukuran jarak dengan TCRT5000.

Pertanyaan umum

Apa sensor jarak terbaik untuk Arduino?

Tidak ada satu sensor yang paling baik untuk semua kebutuhan; pilihannya tergantung target dan lingkungan. HC-SR04 cocok untuk penggunaan umum berbiaya rendah, VL53L0X atau VL53L1X untuk presisi milimeter dan berkas sempit, JSN-SR04T untuk tempat lembap, serta TF-Luna untuk pengukuran cepat pada jarak lebih dari beberapa meter.

Seberapa jauh HC-SR04 bisa mengukur?

Angka dari produsen adalah 2 cm hingga 4 meter, tetapi dalam praktiknya pembacaan andal biasanya mencapai 2–3 meter. Kamu bisa mendekati batas tersebut jika target besar, keras, dan tegak lurus terhadap sensor; pada target lembut, kecil, atau miring, jangkauan menyusut secara nyata.

Apa perbedaan sensor jarak ultrasonik dan inframerah?

Sensor ultrasonik mengukur waktu gema pulsa suara; sensor ini tidak dipengaruhi warna atau cahaya, tetapi berkasnya lebar dan kesulitan menghadapi permukaan lembut. Sensor inframerah menggunakan cahaya, memiliki berkas lebih sempit dan bekerja cepat, tetapi sinar matahari, kaca, dan beberapa permukaan gelap bisa mengacaukan pembacaan.

Apa perbedaan VL53L0X dan VL53L1X?

Keduanya adalah sensor laser ToF dengan antarmuka I2C. VL53L0X mengukur hingga sekitar 2 meter, sedangkan VL53L1X mencapai 4 meter, dapat mengukur lebih cepat, dan memungkinkanmu mempersempit bidang pandang melalui perangkat lunak. VL53L0X cocok untuk robot kecil dengan jangkauan pendek, sedangkan VL53L1X untuk pengukuran lebih jauh dan lebih presisi.

Sensor jarak mana yang cocok untuk mengukur level air tangki?

JSN-SR04T dengan probe tahan air adalah pilihan paling umum; sensor dipasang pada tutup atas tangki, setidaknya 25 cm di atas level air tertinggi. HC-SR04 juga bekerja pada tangki tertutup yang kering, tetapi kelembapan dan kondensasi bisa merusaknya dengan cepat.

Apakah sensor jarak bekerja dengan ESP32 dan Raspberry Pi Pico?

Ya, tetapi kamu memerlukan pembagi tegangan untuk menurunkan output ECHO HC-SR04 dan JSN-SR04T yang bercatu 5 V serta output analog Sharp menjadi 3,3 V. Modul VL53L0X dan TF-Luna sudah memakai logika yang kompatibel dengan 3,3 V, dan HC-SR04P bekerja langsung pada 3,3 V.

Lihat semua proyek
Pengukuran Jarak HC-SR04 (Tampilan Serial)
#27Pemula

Pengukuran Jarak HC-SR04 (Tampilan Serial)

Sensor HC-SR04 bekerja persis seperti kelelawar yang mencari jalan dalam gelap: ia mengirim suara yang tidak bisa kamu dengar, mendengarkan pantulannya, dan mengukur seberapa jauh benda di depannya. A

4.6(46)
71
Sensor Parkir dengan HC-SR04
#28Menengah
Premium

Sensor Parkir dengan HC-SR04

Versi mini sensor parkir mobil: makin dekat sesuatu, makin cepat bunyi bipnya. Sensor jarak mengukur benda di depannya; jika jaraknya lebih dari 20 sentimeter LED hijau tetap menyala, dan begitu lebih

4.8(64)
85
Proyek Pengukur Tinggi Badan
#33Menengah
Premium

Proyek Pengukur Tinggi Badan

Pengukur tinggi yang digantung di kusen pintu dan memberi tahu, dalam sentimeter, tinggi orang yang berdiri di bawahnya. Pertama kamu menekan tombol pertama tanpa ada orang di bawahnya, dan sensor jar

4.5(25)
34
Robot Penghindar Rintangan
#81Mahir
Premium

Robot Penghindar Rintangan

Bagaimana kalau membuat kendaraan pintar yang mencari jalannya sendiri? Robot Penghindar Rintangan terus memindai sekelilingnya berkat sensor ultrasonik di depannya. Ketika menemui rintangan, robot be

5.0(38)
49
Sensor Jarak Ultrasonik HC-SR04 ESP32
#116Menengah

Sensor Jarak Ultrasonik HC-SR04 ESP32

Sensor ultrasonik HC-SR04 menghitung jarak dengan mengukur waktu yang dibutuhkan gelombang suara yang dipancarkannya untuk memantul dari benda lalu kembali (Time of Flight). Di proyek ini, kita mengirim pulsa 10 mikrodetik dari ESP32 ke pin TRIG sensor dan membaca durasi pantulan dari pin ECHO dengan pulseIn(). Jarak hasil hitung ditampilkan dalam sentimeter di LCD I2C 16x2. Karena HC-SR04 bekerja di 5V, pembagi tegangan wajib dipasang di pin ECHO.

4.9(28)
45
Sensor Parkir ESP32 (HC-SR04 + Bar 5 LED + Buzzer + OLED)
#142Mahir
Premium

Sensor Parkir ESP32 (HC-SR04 + Bar 5 LED + Buzzer + OLED)

Versi ESP32 dari sensor parkir mobil! Kita memakai sensor ultrasonik HC-SR04 untuk mengukur jarak ke benda di depannya. Semakin dekat jaraknya, bar 5 LED semakin penuh (hijau → kuning → merah) dan jeda bunyi bip buzzer semakin pendek. Ketika benda sudah sangat dekat (di bawah 10 cm), alarm berbunyi terus dan semua LED menyala. Layar OLED SSD1306 menampilkan jarak terkini dalam cm dengan font besar, pesan status (STOP / CAUTION / CLOSE / STOP! / DANGER), dan simulasi bar jarak.

0.0(0)
14
Membaca Pantulan (Kedekatan) dengan TCRT5000
#77Menengah
Premium

Membaca Pantulan (Kedekatan) dengan TCRT5000

Dengan sensor kecil yang memancarkan cahaya tak terlihat dan mengukur berapa banyak yang terpantul kembali, kamu bisa mendeteksi permukaan di depannya. Makin dekat sebuah benda atau permukaan berwarna

4.6(33)
43
Mengukur Jarak dengan Layar LCD
#31Mahir
Premium

Mengukur Jarak dengan Layar LCD

Alat yang mengukur jarak tanpa penggaris: gerakkan tanganmu maju-mundur di depan sensor dan lihat angkanya berubah. HC-SR04 mengirim gelombang suara dan mendengarkan pantulannya, lalu Arduino menghitu

4.6(45)
59