Sensor Gerak PIR (HC-SR501): Mendeteksi Gerakan dengan Arduino, ESP32, dan Pico
Bagaimana cara kerja sensor gerak PIR? Pengkabelan HC-SR501, pengaturan sensitivitas dan waktu, mode pemicu H/L, kode Arduino, ESP32, dan Pico, lampu aktif gerakan, serta cara menghindari pemicuan palsu.
Sensor PIR (Passive InfraRed) adalah sensor murah berdaya sangat rendah yang mendeteksi ketika manusia atau hewan bergerak di dalam area pandangnya. Lampu tangga yang menyala sendiri, sistem alarm, dan bel pintu otomatis biasanya memakai PIR. Kata “pasif” berarti sensor ini tidak memancarkan apa pun: ia hanya “mendengarkan” radiasi inframerah yang dipancarkan benda-benda hangat di sekitarnya. Model paling populer di proyek Arduino adalah HC-SR501.

Bagaimana cara kerja sensor PIR?
Setiap benda yang lebih hangat dari nol mutlak memancarkan radiasi inframerah, dan tubuh manusia memancarkannya paling kuat pada panjang gelombang 9–10 mikrometer. Inti sensor ini adalah elemen piroelektrik yang bereaksi terhadap radiasi tersebut, dan elemen itu terbagi menjadi dua bagian. Ketika tidak ada yang bergerak, kedua bagian menerima radiasi yang sama, sinyalnya saling meniadakan, dan output tetap diam. Ketika seseorang melintasi area pandang, mula-mula satu bagian lalu bagian lainnya menerima radiasi lebih banyak; rangkaian modul menangkap perbedaan ini dan pin OUT menjadi HIGH.
Kubah putih di atasnya adalah lensa Fresnel. Lensa ini membagi area pandang menjadi puluhan zona kecil dan memfokuskan radiasi dari setiap zona ke elemen sensor. Ketika seseorang berpindah dari satu zona ke zona berikutnya, sinyalnya berubah; itulah sebabnya sensor PIR sangat bagus mendeteksi gerakan, tetapi tidak bisa mendeteksi orang yang berdiri diam sama sekali.
Spesifikasi HC-SR501
| Fitur | Nilai |
|---|---|
| Tegangan catu daya | 4,5–20 V (disarankan 5 V) |
| Arus siaga | Sekitar 50 µA |
| Output | Digital: 3,3 V jika ada gerakan, 0 V jika tidak |
| Jangkauan deteksi | 3–7 m (bisa diatur) |
| Sudut deteksi | Sekitar 110° |
| Waktu output | Sekitar 3 detik – 5 menit (bisa diatur) |
| Waktu blokir | Sekitar 2,5 detik setelah output mati |
| Waktu pemanasan | 30–60 detik ketika baru dinyalakan |
Pengaturan di modul
- Potensiometer Sx (sensitivitas): mengatur jangkauan deteksi. Memutarnya searah jarum jam menambah jangkauan dari sekitar 3 menjadi 7 meter.
- Potensiometer Tx (waktu): mengatur berapa lama output tetap HIGH setelah gerakan terdeteksi. Memutarnya searah jarum jam membuatnya lebih lama.
- Jumper pemicu H (berulang): timer dimulai ulang setiap kali selama gerakan berlanjut; ideal untuk mengendalikan lampu.
- Jumper pemicu L (tunggal): output menjadi LOW ketika waktunya habis, walaupun gerakan masih berlanjut; setelah itu perlu pemicu baru.
- Waktu blokir: selama sekitar 2,5 detik setelah output menjadi LOW, gerakan baru tidak terdeteksi; ini tidak bisa diatur.
Pinout dan pengkabelan HC-SR501
| Pin | Fungsi | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| VCC | Daya | 5V | VIN (5V) | VBUS (5V) |
| OUT | Output digital (3,3 V) | D2 | GPIO 27 | GP16 |
| GND | Ground | GND | GND | GND |
Mendeteksi gerakan dengan Arduino
Kode di bawah menunggu sensor selesai pemanasan, lalu menulis pesan di Serial Monitor sekali ketika gerakan dimulai dan sekali ketika gerakan berakhir, sambil menyalakan dan mematikan LED bawaan Arduino. Hanya memantau perubahan kondisi, bukannya menampilkan output berulang-ulang, juga merupakan cara yang akan kamu pakai di proyek nyata.
1const int PIR_PIN = 2;
2const int LED_PIN = 13; // dahili LED / built-in LED
3
4bool motion = false;
5
6void setup() {
7 pinMode(PIR_PIN, INPUT);
8 pinMode(LED_PIN, OUTPUT);
9 Serial.begin(9600);
10 Serial.println("Sensör ısınıyor / warming up...");
11 delay(30000); // ilk 30 sn kararsız / unstable for ~30 s
12 Serial.println("Hazır / ready");
13}
14
15void loop() {
16 bool now = digitalRead(PIR_PIN);
17 if (now && !motion) {
18 Serial.println("Hareket algılandı / motion detected");
19 digitalWrite(LED_PIN, HIGH);
20 motion = true;
21 } else if (!now && motion) {
22 Serial.println("Hareket bitti / motion ended");
23 digitalWrite(LED_PIN, LOW);
24 motion = false;
25 }
26}Lampu aktif gerakan: mengatur waktu dengan millis()
Menyimpan lama waktu nyala di kode, bukan di potensiometer Tx modul, jauh lebih fleksibel. Kode di bawah mencatat waktu setiap kali gerakan terdeteksi dan mematikan lampu 20 detik setelah gerakan terakhir, sehingga lampu tetap menyala selama ada orang yang bergerak di ruangan. Kamu bisa menghubungkan LED ke LIGHT_PIN, atau modul relay untuk lampu listrik rumah; kalau kamu memakai relay aktif LOW, tukar HIGH dan LOW di baris terakhir. Pengkabelan relay dibahas di Apa Itu Modul Relay?
1const int PIR_PIN = 2;
2const int LIGHT_PIN = 7; // LED ya da röle / LED or relay
3const unsigned long ON_TIME = 20000; // son hareketten sonra 20 sn / 20 s after last motion
4
5unsigned long lastMotion = 0;
6
7void setup() {
8 pinMode(PIR_PIN, INPUT);
9 pinMode(LIGHT_PIN, OUTPUT);
10}
11
12void loop() {
13 if (digitalRead(PIR_PIN) == HIGH) {
14 lastMotion = millis(); // her harekette süreyi yenile / refresh on every motion
15 }
16 bool on = (lastMotion != 0) && (millis() - lastMotion < ON_TIME);
17 digitalWrite(LIGHT_PIN, on ? HIGH : LOW);
18}PIR dengan ESP32 dan Raspberry Pi Pico
Output HC-SR501 sudah 3,3 V, jadi bisa dihubungkan langsung ke ESP32 dan Pico tanpa pembagi tegangan. Namun, modulnya sendiri tetap diberi daya 5 V, karena regulator di board-nya tidak stabil di bawah 4,5 V. Kode Arduino yang sama berjalan di ESP32; di proyek bertenaga baterai, membuat ESP32 masuk deep sleep lalu membangunkannya dengan output PIR (ext0 wakeup) memperpanjang umur baterai sampai berminggu-minggu. Di Pico dengan MicroPython, kamu bisa memakai interrupt supaya tidak ada gerakan yang terlewat:
1from machine import Pin
2import time
3
4pir = Pin(16, Pin.IN) # GP16
5led = Pin(25, Pin.OUT) # dahili LED; Pico W'de Pin("LED") / onboard LED; Pin("LED") on Pico W
6
7def on_motion(pin):
8 led.value(pin.value()) # hareket varken yanar / on while there is motion
9 print("Hareket / motion" if pin.value() else "Bitti / ended")
10
11pir.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=on_motion)
12
13while True:
14 time.sleep(1)Menghindari pemicuan palsu
- Jangan arahkan ke sumber panas: radiator, lubang angin AC, jendela yang terkena matahari, dan lampu panas memicu sensor dengan perubahan suhu yang tiba-tiba.
- Jauhkan dari benda yang bergerak: gorden, tanaman, atau dahan yang bergoyang tertiup angin terlihat seperti gerakan jika sudah hangat terkena matahari.
- Bersihkan catu daya: relay dan modul Wi-Fi menambah derau di catu daya; pasang kapasitor 100 µF di antara VCC dan GND sensor.
- Beri sedikit jarak dari ESP32: HC-SR501 yang tepat di sebelah antena Wi-Fi sesekali bisa terpicu sendiri; jarak beberapa sentimeter dan kabel pendek biasanya menyelesaikannya.
- Untuk hewan peliharaan: turunkan sensitivitasnya dan pasang sensor di tempat tinggi, sedikit miring ke bawah.
- Jangan pasang di balik kaca: kaca biasa menghalangi radiasi inframerah, jadi sensor di balik jendela tidak bisa melihat gerakan di luar.
PIR, radar gelombang mikro, atau ultrasonik?
| Fitur | PIR (HC-SR501) | Radar gelombang mikro (RCWL-0516) | Ultrasonik (HC-SR04) |
|---|---|---|---|
| Yang dideteksi | Benda hangat yang bergerak | Gerakan apa pun | Jarak ke benda di depannya |
| Menembus dinding tipis atau casing | Tidak | Ya | Tidak |
| Orang yang berdiri diam | Tidak | Tidak | Terukur sebagai jarak |
| Konsumsi daya | Sangat rendah (~50 µA) | Rendah (~3 mA) | Sedang (~15 mA) |
| Pemakaian umum | Lampu, alarm | Sensor tersembunyi, pembuka pintu | Deteksi rintangan, pengukuran level |
Kalau yang ingin kamu ketahui adalah apakah ada orang yang bergerak, bukan apakah ada orang di ruangan, PIR adalah solusi paling hemat. Kalau kamu perlu mengukur seberapa jauh sebuah benda, lihat Sensor Jarak HC-SR04.
Ide proyek dengan sensor PIR
- Lampu lorong otomatis: nyalakan lampu dengan relay ketika gerakan terdeteksi dan matikan setelah 30 detik tanpa gerakan.
- Alarm maling: bunyikan buzzer jika gerakan terdeteksi dalam mode malam; untuk bagian suaranya, lihat Apa Itu Buzzer?
- Lampu tidur pintar: gabungkan PIR dengan Sensor Cahaya LDR untuk lampu yang hanya menyala ketika gelap dan ada orang bergerak.
- Notifikasi ke ponsel: kirim pesan Telegram dari ESP32 ketika gerakan terdeteksi.
- Layar hemat daya: nyalakan lampu latar LCD ketika ada orang mendekat dan matikan ketika orang itu pergi.
- Penghitung pengunjung: hitung setiap gerakan yang melewati pintu dan tampilkan di layar.
Kesalahan umum dan cara mengatasinya
- Output terus HIGH: waktu Tx terlalu lama, atau ada gerakan terus-menerus dalam mode H; putar potensiometernya ke bawah dan pastikan sensor tidak menghadap sumber panas.
- Tidak pernah terpicu: mungkin VCC bukan 5 V, sensor masih dalam pemanasan, atau kabel OUT terpasang di pin yang berbeda dari yang ada di kodemu.
- Terpicu sendiri setiap beberapa detik: catu dayanya berisik; tambahkan kapasitor dan jauhkan dari relay dan modul Wi-Fi.
- Tidak langsung mendeteksi lagi setelah gerakan berakhir: waktu blokir sekitar 2,5 detik itu normal; sensornya tidak rusak.
- Memasang dengan arah yang salah: PIR mendeteksi paling baik ketika gerakan melintasi area pandangnya dari samping; orang yang berjalan lurus ke arahnya baru disadari belakangan.
Sensor PIR adalah salah satu titik awal terbaik untuk proyek rumah pintar pertamamu: cukup tiga kabel dan hasilnya langsung terlihat. Di aplikasi BlueGrays kamu akan menemukan proyek lampu sensor gerak, bel pintu, dan alarm langkah demi langkah lengkap dengan skema rangkaian dan kode.
Pertanyaan umum
Seberapa jauh sensor PIR bisa mendeteksi?
HC-SR501 mendeteksi pada jarak 3 sampai 7 meter dengan sudut sekitar 110 derajat. Jangkauannya diatur dengan potensiometer Sx (sensitivitas) di modul; memutarnya searah jarum jam akan menambah jangkauan.
Apakah sensor PIR bisa mendeteksi orang yang berdiri diam?
Tidak. PIR hanya mendeteksi perubahan radiasi inframerah, dengan kata lain gerakan. Sensor ini tidak akan menyadari orang yang duduk diam sama sekali. Untuk mengetahui apakah ada orang di ruangan, dipakai radar kehadiran mmWave seperti LD2410.
Apakah sensor PIR bisa bekerja menembus kaca?
Tidak. Kaca jendela biasa tidak meneruskan radiasi inframerah yang dipancarkan tubuh manusia, jadi sensor di balik kaca tidak bisa melihat gerakan di luar. Untuk pemakaian di luar ruangan, pasang sensor di luar di tempat yang terlindung dari hujan.
Apakah HC-SR501 bisa bekerja di 3,3 V?
Regulatornya tidak stabil di bawah 4,5 V, jadi butuh catu daya 5 V. Output-nya sudah 3,3 V, jadi bisa langsung dihubungkan ke ESP32 atau Pico. Kalau kamu ingin sistem yang sepenuhnya 3,3 V, pakai modul PIR kecil AM312 yang bekerja di 2,7–12 V.
Kenapa sensor PIR-ku terpicu sendiri?
Penyebab paling umum adalah masa pemanasan, sumber panas yang dihadapi sensor (radiator, matahari, AC), dan derau di catu daya. Abaikan 60 detik pertama, arahkan sensor menjauhi sumber panas, pasang kapasitor di antara VCC dan GND, dan jauhkan dari modul Wi-Fi.
Apa perbedaan mode H dan L di HC-SR501?
Dalam mode H (berulang), timer output dimulai ulang di setiap deteksi selama gerakan berlanjut, sehingga lampu tetap menyala selama ada gerakan. Dalam mode L (tunggal), output mati ketika waktu yang diatur habis, walaupun gerakan masih berlanjut; pemicu baru datang setelah waktu blokir.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
Pendeteksi Gerakan dengan Sensor Gerak
Penjaga sederhana yang memberi tahu ketika ada orang masuk ke ruangan. Sensor gerak menangkap panas yang dipancarkan tubuh manusia, dan Arduino menjaga LED tetap menyala selama ada gerakan lalu memati

Bel Pintu dan Lampu dengan Sensor Gerak
Ketika ada orang datang ke pintumu, kamu sudah tahu bahkan sebelum ia membunyikan bel. Begitu sensor gerak melihat seseorang, LED menyala dan buzzer memainkan bunyi bel tiga nada dari tinggi ke rendah

Lampu Otomatis dengan Sensor Gerak PIR ESP32
Di proyek ini, sensor gerak PIR HC-SR501 mendeteksi ketika seseorang masuk ke ruangan dan otomatis menyalakan LED. Lama LED menyala dilacak dengan millis(); setiap bacaan HIGH memperbarui waktu gerakan terakhir, dan LED mati minimal 10 detik setelah bacaan HIGH terakhir. Kode yang sekarang juga menunggu 50 ms di setiap loop dengan delay(50), jadi loopnya belum sepenuhnya non-blocking. Proyek ini bisa dipakai untuk lampu tangga.

Lampu Pintar ESP32 (PIR + LDR + Relay + OLED)
Ubah lorong, kamar mandi, atau gudangmu menjadi lampu pintar dengan ESP32! Dengan sensor gerak PIR, sensor cahaya LDR, dan modul relay, kita membuat skenario klasik "lampu menyala ketika ada gerakan dalam gelap"; jika sudah terang, gerakan TIDAK menyalakan lampu, jadi energi hemat di siang hari. Lampu menyala 30 detik; jika gerakan berlanjut, timer diulang. OLED SSD1306 menampilkan status dengan font besar (NYALA / SIANG / MENUNGGU) dan hitung mundur.

Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
Sistem alarm keamanan pintar yang menyalakan buzzer dan LED ketika sensor PIR mendeteksi gerakan, sekaligus mengirim notifikasi instan ke pemilik lewat Telegram. Cooldown 30 detik membatasi seberapa sering alarm berulang; mekanisme ini tidak memvalidasi deteksi PIR atau menghilangkan pemicu palsu. Cocok untuk rumah, garasi, gudang, atau ruang kerja. Dengan ESP32-CAM bisa ditambahkan notifikasi berfoto; dengan ESP32 DevKit V1 klasik, notifikasinya berupa teks.

Sistem Peringatan Laser
Kamu memasang pagar sinar tak terlihat, persis seperti di film. Laser menyorot sensor cahaya di sisi seberang; begitu ada orang lewat dan memutus sinarnya, LED menyala dan buzzer berbunyi, dan ketika

Sistem Keamanan Laser
Persis seperti adegan perampokan dengan laser di film: sinar laser menyorot sensor cahaya, dan begitu ada orang masuk dan memutus sinarnya, LED merah menyala dan buzzer mulai berbunyi. Alarmnya tidak
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

