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.

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.
| Prinsip | Sensor | Kelebihan | Kekurangan |
|---|---|---|---|
| Waktu tempuh dengan suara | HC-SR04, JSN-SR04T | Murah, tidak dipengaruhi warna dan cahaya | Berkas lebar, lemah pada permukaan lembut dan miring, peka terhadap suhu |
| Waktu tempuh dengan cahaya | VL53L0X, VL53L1X, TF-Luna | Cepat, berkas sempit, akurasi baik | Sinar matahari dan kaca menimbulkan masalah |
| Triangulasi inframerah | Sharp GP2Y0A21 | Sedikit dipengaruhi warna, output analog sederhana | Output tidak linear, jangkauan sempit, menyesatkan di bawah 10 cm |
| Intensitas pantulan | TCRT5000 | Sangat murah, sangat cepat | Hanya 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.
| Sensor | Jangkauan | Akurasi | Sudut berkas | Antarmuka | Catu daya | Harga relatif |
|---|---|---|---|---|---|---|
| HC-SR04 | 2–400 cm | Sekitar ±0,3–1 cm | Sekitar 15° | Pulsa Trig/Echo | 5 V (HC-SR04P: 3,3–5 V) | Sangat murah |
| JSN-SR04T | Sekitar 25–450 cm | Sekitar ±1 cm | Lebar (sekitar 45° atau lebih) | Trig/Echo, UART pada beberapa versi | 5 V | Murah |
| Sharp GP2Y0A21 | 10–80 cm | Baik pada jarak dekat, lemah pada jarak jauh | Sempit (beberapa derajat) | Tegangan analog | 4,5–5,5 V | Sedang |
| VL53L0X | 3 cm – 2 m (default ~1,2 m) | Sekitar ±3% | 25° | I2C (0x29) | Modul 3,3–5 V | Murah |
| VL53L1X | 4 cm – 4 m | Sekitar ±3%, resolusi mm | 27° (bisa dipersempit menjadi 15°) | I2C (0x29) | Modul 3,3–5 V | Sedang |
| TF-Luna | 0,2–8 m | ±6 cm (hingga 3 m), ±2% (3–8 m) | 2° | UART atau I2C | 5 V, logika 3,3 V | Mahal |
| TCRT5000 | Sekitar 0,2–15 mm (terbaik pada 2,5 mm) | Bukan jarak, ada/tidak ada | Sempit | Digital (DO) + analog (AO) | 3,3–5 V | Sangat 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.
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.
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}
38Sharp 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.
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}
27Sensor 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.
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}
33Alokasi 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?.
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}
44TCRT5000: deteksi kedekatan dan garis

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.
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}
20Pengaruh 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 / lingkungan | Ultrasonik (HC-SR04) | Sharp IR | Laser ToF (VL53, TF-Luna) | TCRT5000 |
|---|---|---|---|---|
| Dinding keras dan datar | Sangat baik | Baik | Sangat baik | Baik (hanya sangat dekat) |
| Kain, busa, tirai | Lemah (suara diserap) | Baik | Baik | Sedang |
| Permukaan hitam dof | Baik | Sedang | Jangkauan memendek | Sangat lemah |
| Kaca, cermin, logam mengilap | Baik (suara dipantulkan) | Menyesatkan | Menyesatkan (cahaya menembus atau dibelokkan) | Menyesatkan |
| Permukaan miring | Lemah (gema dibelokkan) | Sedang | Baik | Sedang |
| Sinar matahari, luar ruangan | Tidak terpengaruh | Terpengaruh | Jangkauan turun drastis | Terpengaruh |
| Permukaan air | Baik (pengukuran tangki) | Lemah | Bervariasi | Tidak cocok |
| Perubahan suhu | Kecepatan suara berubah, perlu koreksi | Sedikit terpengaruh | Sedikit terpengaruh | Sedikit terpengaruh |
Ringkasan pengkabelan: Uno, ESP32, dan Pico
| Sensor | Arduino Uno | ESP32 | Raspberry Pi Pico | Catatan |
|---|---|---|---|---|
| HC-SR04 / JSN-SR04T | TRIG D9, ECHO D10, 5V | TRIG 5, ECHO 18 (melalui pembagi), VIN 5V | TRIG GP14, ECHO GP15 (melalui pembagi), VBUS | ECHO mengeluarkan 5 V |
| Sharp GP2Y0A21 | A0, 5V | GPIO 34 (melalui pembagi), VIN 5V | GP26 (melalui pembagi), VBUS | Output dapat mencapai 3,1 V |
| VL53L0X / VL53L1X | SDA A4, SCL A5 | SDA 21, SCL 22 | SDA GP4, SCL GP5 | Alamat 0x29 |
| TF-Luna | SoftwareSerial tidak disarankan | TX → GPIO 16, RX → GPIO 17 | TX → GP1 (uart0 RX), RX → GP0 | Catu daya 5 V, logika 3,3 V |
| Modul TCRT5000 | DO D7, AO A1 | DO 27, AO 34 | DO GP16, AO GP27 | 3,3–5 V |
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.
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)
23Sensor jarak mana untuk proyek apa?
| Proyek | Sensor yang disarankan | Mengapa? |
|---|---|---|
| Robot penghindar rintangan | HC-SR04 (hemat biaya) atau VL53L0X | Berkas lebar tidak melewatkan rintangan; VL53L0X lebih cepat dan lebih kecil |
| Level air tangki atau sumur | JSN-SR04T | Probe tahan air, mendeteksi permukaan air dengan baik |
| Sensor parkir mobil | JSN-SR04T atau HC-SR04 | Tahan di luar ruangan, jangkauan 2–3 m sudah cukup |
| Robot pengikut garis | TCRT5000 | Dirancang untuk membedakan hitam dan putih |
| Mini sumo, pengukuran presisi di atas meja | VL53L0X / VL53L1X | Resolusi milimeter, berkas sempit, ukuran kecil |
| Radar Arduino (sapuan servo) | HC-SR04 atau TF-Luna | HC-SR04 murah; berkas 2° TF-Luna menghasilkan peta yang jauh lebih tajam |
| Pengukur tinggi badan, penghitung di pintu | VL53L1X atau TF-Luna | Jangkauan jauh dan pembacaan stabil |
| Drone, jarak jauh | TF-Luna | Jangkauan 8 m, hingga 250 Hz |
| Keran tanpa sentuhan, deteksi tangan | Sharp GP2Y0A21 | Jangkauan 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
| Gejala | Kemungkinan penyebab | Solusi |
|---|---|---|
| HC-SR04 selalu membaca 0 atau di luar jangkauan | Tidak ada gema, masalah pengkabelan atau daya | Periksa catu daya 5 V dan pin TRIG/ECHO, beri batas waktu pada pulseIn |
| Pembacaan ultrasonik sesekali melonjak | Gema pulsa sebelumnya atau dinding samping | Tunggu 60 ms antar pembacaan, gunakan filter median |
| JSN-SR04T tidak bisa mengukur jarak dekat | Zona buta (20–25 cm) | Pasang sensor setidaknya 25 cm dari target |
| Sharp memberikan nilai besar yang keliru pada jarak sangat dekat | Kurva berbalik di bawah 10 cm | Cegah target mendekat hingga kurang dari 10 cm |
| Pembacaan Sharp berderau | Pulsa arus mengganggu catu daya | Pasang kapasitor 10 µF antara VCC-GND, ambil rata-rata pembacaan |
| VL53L0X tidak ditemukan | Pengkabelan I2C atau konflik alamat | Periksa SDA/SCL dan alamat 0x29 dengan scanner I2C |
| Sensor laser membaca jarak terlalu pendek di luar ruangan | Inframerah pada sinar matahari | Tambahkan peneduh, tambah alokasi waktu pengukuran, atau gunakan ultrasonik |
| Data TF-Luna kacau | Baud rate salah atau SoftwareSerial tidak mampu mengikuti | Gunakan 115200 baud dan UART perangkat keras, periksa checksum |
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.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
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

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

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

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

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.

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.

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

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
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

