Komponen · 16 mnt baca

Modul Laser KY-008 dengan Arduino: Alarm Tripwire Laser dan Timer

Modul laser KY-008 dan Arduino: pengkabelan, keamanan mata untuk laser 5 mW 650 nm, tripwire laser dengan LDR, kalibrasi ambang otomatis, cermin, timer lomba, dan notifikasi ESP32.

Modul laser adalah salah satu komponen paling mencuri perhatian yang bisa kamu pakai dengan Arduino: ia menghasilkan sinar merah tipis yang bisa menempuh beberapa meter tanpa menyebar. Modul laser KY-008 yang ada di kit hobi memuat dioda laser 650 nm sekitar 5 mW di atas board kecil; modul ini cukup disambungkan ke satu pin digital Arduino dan dinyalakan serta dimatikan dengan digitalWrite(). Sendirian ia hanya sebuah laser pointer, tapi kalau di seberangnya kamu pasang sensor cahaya, ia berubah menjadi alarm tripwire laser ala film, penghitung orang yang lewat di pintu, atau timer lomba dengan ketelitian hingga milidetik.

Di panduan ini kamu akan mempelajari spesifikasi KY-008, seberapa berbahaya laser 5 mW sebenarnya bagi mata dan aturan apa yang harus diikuti, serta cara menyambungkan modul ini dengan benar ke Arduino Uno, ESP32, dan Raspberry Pi Pico. Setelah itu kamu akan membuat penghalang laser dengan LDR, membiarkan Arduino mengukur ambangnya secara otomatis alih-alih menebak, mengubah satu laser menjadi beberapa sinar dengan cermin, menghitung lintasan dan mengukur kecepatan, lalu memakai ESP32 untuk mengirim notifikasi ke ponselmu ketika sinarnya terputus.

Modul laser KY-008 (650 nm, 5 mW)
Modul laser KY-008: kepala laser kuningan 6 mm, resistor pembatas arus di board kecil di belakangnya, dan tiga pin (S, pin tengah, dan −).

Apa itu modul laser KY-008 dan bagaimana cara kerjanya?

Jantung modul ini adalah dioda laser kecil yang dipasang di dalam tabung kuningan. Berbeda dari LED biasa, dioda laser memancarkan cahaya pada satu panjang gelombang dan secara teratur (koheren) begitu arusnya melewati ambang tertentu; lensa mungil di ujung tabung mengubah cahaya ini menjadi berkas yang hampir sejajar. Karena itulah cahaya LED sudah menyebar dalam beberapa sentimeter, sedangkan titik laser tetap hanya beberapa milimeter lebarnya bahkan dari jarak beberapa meter. 650 nm adalah merah tua yang mudah dilihat mata. Resistor di board kecil di belakang kepala laser membatasi arus yang mengalir ke dioda. Dioda laser jauh lebih peka terhadap arus berlebih dibanding LED; melewati resistor ini dan memberi daya langsung ke dioda bisa merusaknya dalam hitungan detik.

FiturNilai
ModelKY-008 (sebagian penjual menamainya HW-493)
Panjang gelombang650 nm (merah, terlihat)
Daya outputSekitar 5 mW
Kelas laser3R (IEC 60825-1), IIIa di AS
Tegangan kerja5 V (lebih redup di 3,3 V)
ArusDi bawah 40 mA; berbeda-beda tiap board
Kepala laserTabung kuningan 6 mm
PinS (sinyal), pin tengah (+5V atau tidak tersambung di kebanyakan board), − (GND)
Suhu kerja−10 sampai 40 °C

Keamanan mata: seberapa berbahaya laser 5 mW?

Bahaya laser tidak datang dari total dayanya, melainkan dari daya itu yang dipadatkan ke titik yang sangat kecil. Lensa matamu memfokuskan berkas sejajar ke satu titik seukuran mikron di retina, sehingga 5 mW yang terlihat tidak berbahaya di dinding bisa menjadi titik di retina yang lebih intens daripada menatap langsung ke matahari. Laser dibagi ke dalam beberapa kelas menurut risiko ini. Untuk laser Kelas 2 di bawah 1 mW, refleks berkedip mata (sekitar 0,25 detik) biasanya sudah cukup melindungi. Kelas 3R, tempat KY-008 berada, bisa sampai lima kali batas itu: lirikan singkat yang tidak disengaja berisiko rendah, tapi menatap sinarnya secara langsung atau lewat cermin bisa merusak mata.

KelasDaya (cahaya tampak)Risiko
1Sangat rendah, atau sinarnya tertutup di dalam perangkatAman dalam pemakaian normal
2Sampai 1 mWRefleks berkedip melindungi; jangan sengaja menatapnya
3R1–5 mW (KY-008)Melihat langsung bisa merusak mata
3B5–500 mWSinar langsung dan pantulan cermin berbahaya
4Di atas 500 mWBahaya bagi mata, kulit, dan risiko kebakaran
  • Jangan pernah menatap sinarnya: Jangan dekatkan ujung keluaran laser ke matamu, dan jangan mengayun-ayunkan modul di tangan ketika menyala.
  • Jaga sinar di bawah ketinggian mata: Pasang sinar alarm dan penghitung 20–50 cm di atas lantai. Ketinggian itu sama dengan ketinggian mata bayi yang merangkak, anak kecil, atau kucing dan anjing, jadi jangan biarkan laser menyala ketika mereka ada di sekitar.
  • Waspadai pantulan: Cermin, kaca, kaca jam tangan, dan logam mengilap bisa memantulkan sinar ke arah yang tidak terduga. Periksa jalur sinar dari awal sampai akhir dan akhiri di permukaan gelap yang doff.
  • Anak-anak tidak boleh memakainya sendirian: Laser bukan mainan; kerjakan proyek sekolah dan lomba sains di bawah pengawasan orang dewasa.
  • Jangan percaya label begitu saja: Daya asli modul murah bisa berbeda dari labelnya; perlakukan setiap modul minimal sebagai Kelas 3R.
  • Selaraskan dengan selembar kertas: Pegang kertas putih di depan sinar dan ikuti titiknya di kertas; jangan pernah menatap ke dalam sinar untuk melihat ke mana arahnya.
Mengarahkan laser ke orang, hewan, pengemudi, atau pesawat bisa menyebabkan cedera mata dan kecelakaan serius, dan di banyak negara itu termasuk tindak pidana. Di setiap proyek KY-008, pastikan sinarnya terpasang tetap, di bawah ketinggian mata, dan dalam kendalimu.

Pengkabelan KY-008: Arduino Uno, ESP32, dan Raspberry Pi Pico

KY-008 punya tiga pin: S adalah pin sinyal yang menyalakan laser ketika HIGH, − adalah GND, dan pin tengah tanpa tanda tersambung ke +5V di kebanyakan board atau tidak tersambung sama sekali. Laser berada di antara S dan −, jadi pin Arduino yang kamu sambungkan ke S langsung memasok arus laser. Di Arduino Uno hal ini tidak masalah untuk uji singkat, tapi arus modul berbeda-beda tiap board dan bisa mendekati 40 mA. Itu adalah batas maksimum absolut ATmega328P per pin; nilai yang disarankan 20 mA. Kalau laser akan menyala berjam-jam, kamu memakai lebih dari satu laser, atau bekerja dengan ESP32 atau Pico, beri daya laser dari 5V dan hidupmatikan dengan transistor NPN (BC547, S8050, atau 2N2222). Pinout transistornya bisa kamu cek di panduan transistor.

SambunganArduino UnoESP32Raspberry Pi Pico
KY-008 SD75V (VIN)VBUS (pin 40)
Pin tengah KY-008Tidak tersambung (5V kalau laser tidak menyala)5V (VIN)VBUS (pin 40)
KY-008 −GNDKolektor NPNKolektor NPN
Emitor NPN–GNDGND (pin 38)
Basis NPN (lewat 1 kΩ)–GPIO 26GP15 (pin 20)
Kaki LDR 15V3V33V3(OUT) (pin 36)
Kaki LDR 2 + ujung atas resistorA0GPIO 34GP26 (pin 31)
Ujung bawah resistor (3,3–10 kΩ)GNDGNDGND
Buzzer aktif +D8GPIO 25GP14 (pin 19)
Pin ESP32 dan Pico bekerja di 3,3 V dan hanya memasok sedikit arus; pin GPIO Pico secara default hanya memberi 4 mA dan paling banyak 12 mA. Di board ini jangan beri daya laser langsung dari pin; pakai transistor. Dan selalu beri daya pembagi LDR dari pin 3V3: pembagi yang diberi daya dari 5V akan mengirim lebih dari 3,3 V ke pin analog ketika laser mengenai LDR, dan itu bisa merusak pin. Buzzer aktif juga bisa menarik 20–30 mA: pin ESP32 masih bisa menggerakkannya langsung, tapi di Pico gerakkan buzzer lewat transistor NPN juga atau pilih buzzer 3 V berarus rendah.

Sebelum masuk ke sketch, coba laser dan LDR bersama-sama dengan program uji kecil di bawah. Program ini menyalakan dan mematikan laser setiap setengah detik dan mencetak hasil bacaan di kedua kondisi ke Serial Monitor. Makin besar selisih antara kedua nilai, makin andal penghalangmu: di Uno selisih di atas 300 sangat bagus; di bawah 100 berarti sinar tidak tepat mengenai LDR atau cahaya sekitar terlalu kuat.

C++ (Arduino IDE)
1// KY-008 + LDR ilk test: lazer açıkken ve kapalıyken değerleri gör / First test: see readings with the laser on and off
2const int LASER_PIN = 7;   // KY-008 S pini / KY-008 S pin
3const int LDR_PIN = A0;    // LDR bölücü çıkışı / LDR divider output
4
5void setup() {
6  Serial.begin(9600);
7  pinMode(LASER_PIN, OUTPUT);
8}
9
10void loop() {
11  digitalWrite(LASER_PIN, HIGH);   // lazer açık / laser on
12  delay(500);                      // LDR'nin oturmasını bekle / let the LDR settle
13  int onValue = analogRead(LDR_PIN);
14
15  digitalWrite(LASER_PIN, LOW);    // lazer kapalı / laser off
16  delay(500);
17  int offValue = analogRead(LDR_PIN);
18
19  Serial.print(F("Isin var / beam: "));
20  Serial.print(onValue);
21  Serial.print(F("  Isin yok / no beam: "));
22  Serial.print(offValue);
23  Serial.print(F("  Fark / gap: "));
24  Serial.println(onValue - offValue);
25}

Bagaimana cara kerja penghalang laser dengan LDR?

Ide di balik penghalang laser sederhana: sinar laser terus-menerus mengenai sebuah LDR (resistor peka cahaya) di sisi seberang. Ketika titik laser jatuh di atasnya, hambatan LDR turun menjadi beberapa ratus ohm; ketika sinarnya terputus, hambatannya naik menjadi puluhan kiloohm. Rangkai LDR dengan resistor tetap sebagai pembagi tegangan, maka perubahan hambatan ini menjadi perubahan tegangan di pin analog: dengan 5V → LDR → A0 → resistor → GND, A0 terbaca tinggi selama sinar ada dan rendah ketika sinar terputus. Begitu seseorang berjalan melewati sinar, nilainya turun dan Arduino membunyikan alarm.

LDR (fotoresistor)
LDR (fotoresistor)
Transistor NPN (S8050)
Transistor NPN (S8050)
Buzzer aktif
Buzzer aktif

Hitungan cepat menunjukkan kenapa laser punya efek sekuat itu pada LDR: ketika sinar 5 mW dipusatkan ke titik selebar sekitar 3 mm, intensitasnya kira-kira 700 W per meter persegi. Itu setara dengan sinar matahari tengah hari dan ratusan kali lebih terang daripada ruangan yang terang benderang. Meski begitu, musuh terbesar penghalang ini adalah cahaya sekitar: di depan jendela yang terkena matahari, LDR tetap terang walaupun sinarnya terputus, dan alarm tidak menyadari apa pun. Solusinya sangat murah: letakkan LDR di dasar tabung hitam sepanjang 3–5 cm (selongsong pulpen bekas, sedotan hitam, atau selongsong heat-shrink). Tabung ini hanya meloloskan laser yang datang lurus dari depan dan menghalangi cahaya sekitar dari samping.

KondisiHambatan LDR (contoh)analogRead dengan 10 kΩanalogRead dengan 3,3 kΩ
Laser mengenai LDR (di dalam tabung)300 Ω993938
Sinar terputus (di dalam tabung)30 kΩ256101
Sinar terputus (tanpa tabung, ruangan terang)3 kΩ787536
Selisih antara ada sinar dan tanpa sinar (di dalam tabung)–737837
Nilai terbaik untuk resistor tetap di pembagi adalah rata-rata geometrik hambatan LDR dengan dan tanpa sinar: R = √(R_sinar × R_putus). Untuk 300 Ω dan 30 kΩ di tabel, √(300 × 30.000) = 3.000 Ω; nilai standar terdekat adalah 3,3 kΩ. Ukur kedua hambatan LDR-mu sendiri dengan multimeter, coba hasilnya di kalkulator pembagi tegangan, lalu cari nilai terdekat dengan alat nilai resistor standar.

Langkah demi langkah: alarm tripwire laser dengan Arduino

  1. Sambungkan pin S KY-008 ke D7 dan pin − ke GND; biarkan pin tengah tidak tersambung (sambungkan ke 5V kalau laser tidak menyala).
  2. Sambungkan satu kaki LDR ke 5V dan kaki lainnya ke A0; pasang resistor 3,3 kΩ atau 10 kΩ antara A0 dan GND.
  3. Letakkan LDR di dasar tabung hitam dan arahkan mulut tabung ke laser.
  4. Sambungkan kaki + buzzer aktif ke D8 dan kaki − ke GND. Pasang tombol senyap antara D4 dan GND; tidak perlu resistor tambahan karena yang dipakai pull-up internal.
  5. Pasang laser dan LDR di dudukan yang kokoh; temukan dulu titik laser dengan selembar kertas putih, lalu arahkan masuk ke tabung.
  6. Upload sketch dan buka Serial Monitor di 9600 baud. Ketika mulai, tidak boleh ada orang di depan sinar; Arduino mengalibrasi dirinya sendiri dengan mematikan dan menyalakan laser sekali.
C++ (Arduino IDE)
1// KY-008 lazer + LDR ile lazerli alarm / Laser tripwire alarm with KY-008 + LDR
2const int LASER_PIN = 7;       // KY-008 S pini ya da transistör bazı / KY-008 S pin or transistor base
3const int LDR_PIN = A0;        // LDR bölücü çıkışı / LDR divider output
4const int BUZZER_PIN = 8;      // aktif buzzer / active buzzer
5const int LED_PIN = 13;        // kart üzerindeki LED / on-board LED
6const int RESET_PIN = 4;       // susturma butonu, diğer ucu GND / silence button, other leg to GND
7
8const int BREAK_PCT = 40;                // %40'ın altı = ışın kesik / below 40% = beam broken
9const int RESTORE_PCT = 60;              // %60'ın üstü = ışın sağlam / above 60% = beam intact
10const unsigned long CONFIRM_MS = 30;     // en az bu kadar kesik kalmalı / must stay broken this long
11const unsigned long ALARM_MS = 10000;    // alarm süresi / alarm duration
12
13int onLevel = 0, offLevel = 0;           // ışınlı ve ışınsız ölçüm / reading with and without the beam
14bool beamOk = true;
15bool alarmOn = false;
16unsigned long brokenSince = 0;
17unsigned long alarmStart = 0;
18
19int readAvg() {
20  long sum = 0;
21  for (int i = 0; i < 8; i++) sum += analogRead(LDR_PIN);  // 8 ölçüm ortalaması / average of 8 readings
22  return sum / 8;
23}
24
25void calibrate() {
26  while (true) {
27    digitalWrite(LASER_PIN, LOW);        // lazer kapalı = kesik ışın / laser off = broken beam
28    delay(300);                          // LDR yavaştır, bekle / the LDR is slow, wait
29    offLevel = readAvg();
30    digitalWrite(LASER_PIN, HIGH);       // lazer açık = sağlam ışın / laser on = intact beam
31    delay(300);
32    onLevel = readAvg();
33    Serial.print(F("Isinli / beam: "));
34    Serial.print(onLevel);
35    Serial.print(F("  Isinsiz / no beam: "));
36    Serial.println(offLevel);
37    if (abs(onLevel - offLevel) >= 100) return;   // yeterli fark var / enough difference
38    Serial.println(F("Isin LDR'ye ulasmiyor, hizala! / Beam misses the LDR, align it!"));
39    delay(2000);
40  }
41}
42
43// 100 = ışın tam, 0 = ışın yok; LDR'nin yönü fark etmez / 100 = full beam, 0 = no beam; LDR polarity doesn't matter
44int beamPercent() {
45  return (long)(readAvg() - offLevel) * 100 / (onLevel - offLevel);
46}
47
48void setup() {
49  Serial.begin(9600);
50  pinMode(LASER_PIN, OUTPUT);
51  pinMode(BUZZER_PIN, OUTPUT);
52  pinMode(LED_PIN, OUTPUT);
53  pinMode(RESET_PIN, INPUT_PULLUP);
54  calibrate();
55  Serial.println(F("Alarm hazir / Alarm armed"));
56}
57
58void loop() {
59  unsigned long now = millis();
60  int pct = beamPercent();
61
62  if (beamOk && pct < BREAK_PCT) {       // ışın yeni kesildi / beam just broke
63    beamOk = false;
64    brokenSince = now;
65  } else if (!beamOk && pct > RESTORE_PCT) {
66    beamOk = true;                       // ışın geri geldi / beam restored
67  }
68
69  if (!beamOk && !alarmOn && now - brokenSince >= CONFIRM_MS) {
70    alarmOn = true;
71    alarmStart = now;
72    Serial.println(F("ALARM: isin kesildi! / beam broken!"));
73  }
74
75  if (alarmOn && (now - alarmStart >= ALARM_MS || digitalRead(RESET_PIN) == LOW)) {
76    alarmOn = false;                     // süre doldu ya da butona basıldı / timeout or button pressed
77  }
78
79  digitalWrite(LED_PIN, beamOk ? LOW : HIGH);
80  digitalWrite(BUZZER_PIN, (alarmOn && (now / 200) % 2) ? HIGH : LOW);  // kesik siren / beeping siren
81}

Sketch ini tidak memakai ambang tetap. Ketika mulai, calibrate() mematikan laser dan mengukur nilai LDR tanpa sinar, lalu menyalakannya dan mengukur nilai dengan sinar. beamPercent() mengubah setiap pembacaan menjadi persentase antara 0 dan 100 berdasarkan kedua nilai itu: 100 berarti sinar datang penuh, 0 berarti terhalang sepenuhnya. Perhitungan ini tidak peduli apakah LDR berada di bagian atas atau bawah pembagi; hasilnya sama, entah nilai bacaan naik atau turun karena cahaya. Kalau sinar turun di bawah 40% dan bertahan di sana minimal 30 ms, alarm berbunyi putus-putus selama 10 detik, dan tombol di D4 bisa menghentikannya lebih awal. Kalau sinarnya masih terputus, alarm berbunyi lagi, jadi sistem tidak akan diam selama ada orang yang berdiri di jalur sinar.

Kalibrasi ambang: kenapa kamu sebaiknya tidak menulis angka tetap di kode

Banyak contoh alarm laser di internet memakai ambang tetap seperti “analogRead(A0) < 500”. Cara itu berhasil di malam ketika kamu mengujinya di meja, tapi gagal keesokan paginya ketika matahari masuk ke ruangan, ketika laser tersenggol beberapa milimeter, atau ketika kamu mengganti LDR. Ambang yang tepat berada persis di tengah-tengah antara nilai dengan sinar dan tanpa sinar. Kalibrasi otomatis, yang mengukur ulang kedua nilai setiap kali mulai, membuat sistem menyesuaikan diri dengan lingkungannya. Di sketch di atas ambangnya bukan satu angka, melainkan dua: sinar dianggap terputus ketika turun di bawah 40% dan dianggap utuh ketika naik di atas 60%. Celah ini disebut histeresis; histeresis mencegah alarm menyala dan mati puluhan kali per detik ketika nilai bacaan berada tepat di sekitar ambang.

PengaturanNilai di kodeFungsinya apa?Kapan sebaiknya diubah?
BREAK_PCT (ambang putus)40Level ketika sinar dianggap terputusNaikkan ke 60–70 supaya benda semi-transparan (kaca, kain tipis) juga terdeteksi
RESTORE_PCT (ambang pulih)60Level ketika sinar dianggap utuh kembaliSelalu jaga 15–20 poin di atas BREAK_PCT
CONFIRM_MS (waktu konfirmasi)30Mengabaikan gangguan singkat (serangga, debu, getaran)Naikkan ke 100–200 ms kalau sering ada alarm palsu; turunkan kalau lintasan cepat terlewat
Jumlah pembacaan yang dirata-rata8Menghaluskan derau listrik dan kedipan lampuSetiap pembacaan butuh sekitar 0,1 ms di Uno; 8 pembacaan tetap di bawah 1 ms
Selisih kalibrasi100Menghentikan setup kalau sinar tidak sampai ke LDRBisa kamu turunkan ke 50 untuk jarak yang sangat jauh atau ruangan yang sangat terang

Di sistem yang berjalan lama, cahaya sekitar berubah perlahan sepanjang hari. Cara mudah untuk mengimbanginya adalah memanggil calibrate() lagi selama sinar utuh dan alarm tidak berbunyi (misalnya setiap pergantian jam). Karena Arduino sendiri yang mematikan laser, kegelapan singkat ini tidak akan dianggap sebagai penyusup. Serial Plotter di Arduino IDE sangat berguna untuk memantau hasil bacaan: lambaikan tanganmu melewati sinar dan kamu akan melihat seberapa dalam grafiknya turun dan berapa lama ia pulih.

Banyak sinar dengan cermin: menganyam jaring dengan satu laser

Satu sinar mudah dilewati dengan merunduk di bawahnya atau melangkahinya. Untuk membuat jaring laser seperti di film, alih-alih memberi setiap sinar laser dan LDR sendiri, kamu bisa memantulkan satu laser secara zig-zag dengan cermin. Kamu memasang cermin yang saling berhadapan di kedua sisi pintu atau lorong; sinarnya memantul dari sisi ke sisi dan akhirnya sampai ke LDR. Kalau ada bagian yang terputus, LDR menjadi gelap, jadi satu LDR dan sketch yang sama sudah melindungi seluruh jaring. Karena sudut pantul sama dengan sudut datang, kamu cukup memiringkan setiap cermin sedikit sekali supaya sinarnya terkirim ke tengah cermin berikutnya.

Setiap cermin menghilangkan sebagian cahaya. Cermin kamar mandi biasa memantulkan sekitar 90% dan menghasilkan titik kedua yang samar (pantulan bayangan) dari kaca di depannya. Cermin permukaan depan (front-surface mirror), yang lapisan pemantulnya berada di atas kaca, memantulkan 95% atau lebih dan memberi satu titik yang bersih. Kehilangannya berlipat ganda, jadi cahaya yang sampai ke LDR cepat berkurang setiap kali kamu menambah cermin:

Jumlah cerminCermin biasa (90%)Cermin permukaan depan (95%)
190%95%
281%90%
466%81%
653%74%
843%66%

Tabel ini menunjukkan hal penting: bahkan 43% pun lebih dari cukup untuk sketch yang sudah dikalibrasi, karena titik laser ratusan kali lebih terang daripada cahaya sekitar. Tantangan sebenarnya bukan kehilangan daya, melainkan penyelarasan. Makin panjang jalur sinar, makin besar efek kesalahan sudut yang kecil: kesalahan 1 derajat menggeser titik sekitar 9 cm pada jarak 5 m. Sinar laser murah juga sedikit melebar di sepanjang jalan; setelah beberapa meter titiknya bisa lebih besar daripada permukaan LDR yang hanya 5 mm.

  1. Pasang laser, cermin, dan tabung LDR di dudukan yang kokoh (siku L yang disekrup, dudukan cetak 3D, atau balok kayu yang ditempel dengan lem tembak); cermin yang dipegang tangan tidak akan pernah tetap selaras.
  2. Redupkan ruangan dan temukan titik laser dengan memegang kertas putih di depan cermin pertama.
  3. Selaraskan cermin berurutan dari awal sampai akhir: miringkan masing-masing sedikit sekali sampai titiknya jatuh di tengah cermin berikutnya.
  4. Arahkan sinar terakhir ke mulut tabung LDR dan jalankan sketch uji untuk menemukan posisi dengan selisih terbesar di Serial Monitor.
  5. Setelah semuanya selaras, kunci sudut cermin dengan lem tembak atau sekrup pengunci; ketukan kecil di meja saja bisa merusak penyelarasannya.
  6. Uji setiap bagian jaring dengan memutusnya satu per satu memakai tanganmu, dan pastikan alarm berbunyi setiap kali.
Kalau kamu ingin semua kabel ada di satu sisi, pantulkan sinarnya kembali dengan cermin di dinding seberang: laser dan LDR duduk bersebelahan, dan di sisi lain hanya ada cermin yang tidak butuh daya. Di udara bersih sinar laser tidak terlihat dari samping, yang terlihat hanya titik tempat ia jatuh; kalau kamu ingin melihat jalur sinarnya, tambahkan sedikit uap air atau kabut ke udara.

Penghitung lintasan: berapa yang lewat, dan berapa lama?

Penghalang yang sama bisa menghitung orang yang lewat di pintu, kotak yang bergerak di konveyor, atau bola yang jatuh ke dalam wadah. Kuncinya adalah menghitung setiap lintasan sekali. Sketch di bawah mencatat momen ketika sinar terputus dan menghitung lintasan ketika sinar kembali, jadi orang yang berdiri di jalur sinar selama beberapa waktu tetap dihitung sebagai satu lintasan. Putusnya sinar yang lebih singkat dari 15 ms dianggap debu atau derau listrik dan diabaikan. Sketch ini juga mencetak berapa lama sinarnya terhalang: kalau kamu tahu panjang bendanya, waktu ini langsung memberimu kecepatannya (v = L / t). Misalnya, kalau mobil mainan sepanjang 25 cm menghalangi sinar selama 50 ms, kecepatannya 0,25 / 0,05 = 5 m/dtk.

C++ (Arduino IDE)
1// Lazer bariyeriyle geçiş sayacı ve kesilme süresi / Laser barrier pass counter and block time
2const int LASER_PIN = 7;                 // KY-008 S pini / KY-008 S pin
3const int LDR_PIN = A0;                  // LDR bölücü çıkışı / LDR divider output
4const unsigned long MIN_BREAK_MS = 15;   // daha kısa kesintiler parazittir / shorter breaks are noise
5const float OBJECT_LENGTH_M = 0.0;       // cismin boyu biliniyorsa yaz (ör. 0.25) / object length if known (e.g. 0.25)
6
7int onLevel = 0, offLevel = 0;
8bool beamOk = true;
9unsigned long brokenSince = 0;
10unsigned long passCount = 0;
11
12int readAvg() {
13  long sum = 0;
14  for (int i = 0; i < 4; i++) sum += analogRead(LDR_PIN);  // 4 ölçüm yeterli ve hızlı / 4 readings: enough and fast
15  return sum / 4;
16}
17
18void calibrate() {
19  while (true) {
20    digitalWrite(LASER_PIN, LOW);
21    delay(300);
22    offLevel = readAvg();
23    digitalWrite(LASER_PIN, HIGH);
24    delay(300);
25    onLevel = readAvg();
26    if (abs(onLevel - offLevel) >= 100) return;
27    Serial.println(F("Isin LDR'ye ulasmiyor / Beam misses the LDR"));
28    delay(2000);
29  }
30}
31
32int beamPercent() {
33  return (long)(readAvg() - offLevel) * 100 / (onLevel - offLevel);
34}
35
36void setup() {
37  Serial.begin(9600);
38  pinMode(LASER_PIN, OUTPUT);
39  calibrate();
40  Serial.println(F("Sayac hazir / Counter ready"));
41}
42
43void loop() {
44  unsigned long now = millis();
45  int pct = beamPercent();
46
47  if (beamOk && pct < 40) {
48    beamOk = false;
49    brokenSince = now;                   // kesilme anı / moment of the break
50  } else if (!beamOk && pct > 60) {
51    beamOk = true;
52    unsigned long blocked = now - brokenSince;   // ışın ne kadar kesik kaldı / how long the beam was blocked
53    if (blocked >= MIN_BREAK_MS) {
54      passCount++;
55      Serial.print(F("Gecis / Pass #"));
56      Serial.print(passCount);
57      Serial.print(F("  Sure / Time: "));
58      Serial.print(blocked);
59      Serial.print(F(" ms"));
60      if (OBJECT_LENGTH_M > 0) {
61        float speed = OBJECT_LENGTH_M / (blocked / 1000.0);  // v = L / t
62        Serial.print(F("  Hiz / Speed: "));
63        Serial.print(speed, 2);
64        Serial.print(F(" m/s"));
65      }
66      Serial.println();
67    }
68  }
69}

Kalau kamu ingin tahu ke arah mana seseorang lewat, pakai dua sinar sejajar berjarak 10–15 cm. Kalau sinar luar A terputus lebih dulu lalu sinar dalam B, orang itu sedang masuk; kalau B lebih dulu lalu A, ia sedang keluar. Kalau hanya A yang terputus dan sinarnya kembali tanpa B pernah terputus, orang itu mendekati pintu lalu berubah pikiran, jadi tidak dihitung. Jumlah orang di dalam kamu dapat dengan mengurangkan jumlah keluar dari jumlah masuk, dan bisa kamu tampilkan di display 7-segmen atau layar LCD I2C. Jarak kedua sinar harus cukup sempit supaya tubuh seseorang bisa menghalangi keduanya pada momen yang sama.

Timer lomba dan pengukuran kecepatan

Mengukur waktu di antara dua gerbang laser memberimu stopwatch yang presisi untuk lari, bersepeda, mobil mainan, atau eksperimen fisika. Kamu memasang gerbang start dan finis dengan jarak yang diketahui (d), dan kecepatannya adalah v = d / t. Orang yang berlari di lintasan 10 m dalam 2,5 detik berlari dengan kecepatan 4 m per detik, atau 14,4 km/jam. Untuk menyalakan dan mematikan kedua laser bersamaan, sambungkan pin − masing-masing ke kolektor satu transistor 2N2222 atau S8050; sambungkan pin S dan pin tengah ke 5V, emitor transistor ke GND, dan basisnya ke D7 lewat 1 kΩ. LDR gerbang start masuk ke A0 dan LDR gerbang finis ke A1.

C++ (Arduino IDE)
1// İki lazer kapılı yarış zamanlayıcı ve hız ölçer / Two-gate laser race timer and speed meter
2const int LASER_PIN = 7;                 // iki lazer tek transistörle / both lasers through one transistor
3const int START_LDR = A0;                // başlangıç kapısı / start gate
4const int FINISH_LDR = A1;               // bitiş kapısı / finish gate
5const int BUZZER_PIN = 8;                // aktif buzzer / active buzzer
6const float DISTANCE_M = 10.0;           // kapılar arası mesafe (metre) / distance between the gates (m)
7const unsigned long TIMEOUT_MS = 60000;  // 60 sn'de bitmezse iptal / cancel after 60 s
8
9int onA, offA, onB, offB;
10enum State { READY, RUNNING, DONE };
11State state = READY;
12unsigned long startUs = 0;
13unsigned long startMs = 0;
14unsigned long doneMs = 0;
15
16int readAvg(int pin) {
17  long sum = 0;
18  for (int i = 0; i < 4; i++) sum += analogRead(pin);
19  return sum / 4;
20}
21
22bool isBroken(int pin, int on, int off) {
23  long pct = (long)(readAvg(pin) - off) * 100 / (on - off);
24  return pct < 40;                       // %40'ın altı = kesik / below 40% = broken
25}
26
27void calibrate() {
28  while (true) {
29    digitalWrite(LASER_PIN, LOW);        // iki lazer de kapalı / both lasers off
30    delay(300);
31    offA = readAvg(START_LDR);
32    offB = readAvg(FINISH_LDR);
33    digitalWrite(LASER_PIN, HIGH);       // iki lazer de açık / both lasers on
34    delay(300);
35    onA = readAvg(START_LDR);
36    onB = readAvg(FINISH_LDR);
37    if (abs(onA - offA) >= 100 && abs(onB - offB) >= 100) return;
38    Serial.println(F("Kapilardan biri hizali degil / One gate is misaligned"));
39    delay(2000);
40  }
41}
42
43void beep(int ms) {
44  digitalWrite(BUZZER_PIN, HIGH);
45  delay(ms);
46  digitalWrite(BUZZER_PIN, LOW);
47}
48
49void setup() {
50  Serial.begin(9600);
51  pinMode(LASER_PIN, OUTPUT);
52  pinMode(BUZZER_PIN, OUTPUT);
53  calibrate();
54  Serial.println(F("Hazir: baslangic kapisini gec / Ready: cross the start gate"));
55}
56
57void loop() {
58  if (state == READY && isBroken(START_LDR, onA, offA)) {
59    startUs = micros();                  // zamanı hemen al / grab the time immediately
60    startMs = millis();
61    state = RUNNING;
62    beep(30);
63  } else if (state == RUNNING) {
64    if (isBroken(FINISH_LDR, onB, offB)) {
65      unsigned long elapsedUs = micros() - startUs;
66      float seconds = elapsedUs / 1000000.0;
67      float speed = DISTANCE_M / seconds;            // v = d / t
68      Serial.print(F("Sure / Time: "));
69      Serial.print(seconds, 3);
70      Serial.print(F(" s  Hiz / Speed: "));
71      Serial.print(speed, 2);
72      Serial.print(F(" m/s = "));
73      Serial.print(speed * 3.6, 1);
74      Serial.println(F(" km/h"));
75      beep(300);
76      state = DONE;
77      doneMs = millis();
78    } else if (millis() - startMs > TIMEOUT_MS) {
79      Serial.println(F("Zaman asimi / Timeout"));
80      state = READY;
81    }
82  } else if (state == DONE && millis() - doneMs > 3000 &&
83             !isBroken(START_LDR, onA, offA) && !isBroken(FINISH_LDR, onB, offB)) {
84    state = READY;                       // 3 sn sonra yeni tur / new run after 3 s
85    Serial.println(F("Hazir / Ready"));
86  }
87}

Sketch ini bekerja seperti state machine: dalam state READY ia mencatat waktu dengan micros() ketika sinar start terputus dan pindah ke RUNNING; ketika sinar finis terputus ia mencetak waktu tempuh dan kecepatan, lalu setelah 3 detik siap untuk percobaan berikutnya. Kalau gerbang finis tidak dilewati dalam 60 detik, percobaan dibatalkan. Jujur soal akurasi: kodenya sendiri mengukur dengan resolusi lebih baik dari 1 ms, tapi LDR butuh 10–30 ms untuk merespons kegelapan. Untungnya, karena kamu memakai jenis LDR yang sama di kedua gerbang, keterlambatan ini terjadi di kedua ujung dan sebagian besar saling meniadakan; untuk lari dan bersepeda hasilnya lebih dari cukup.

Untuk benda cepat yang memutus sinar kurang dari 50 ms (bola yang dilempar, mobil mainan yang melaju kencang), LDR tidak cukup: sinarnya sudah kembali sebelum nilai bacaan sempat turun. Dalam kasus itu, pakai fototransistor atau fotodioda yang merespons dalam hitungan mikrodetik sebagai pengganti LDR, sambungkan outputnya ke pin digital, dan tangkap waktunya dengan interrupt. Kenapa pengukuran waktu sebaiknya memakai millis() dan micros(), bukan delay(), bisa kamu temukan di panduan millis dan delay.

Notifikasi ke ponsel dengan ESP32 (Telegram)

Supaya alarm tetap berguna ketika kamu tidak di rumah, kamu bisa memakai ESP32: begitu sinar terputus, ia mengirim pesan ke ponselmu lewat Telegram. Pengkabelannya seperti di tabel di atas: laser diberi daya dari 5V dan dihidupmatikan oleh transistor NPN yang tersambung ke GPIO 26, sedangkan pembagi LDR diberi daya dari 3V3 dan tersambung ke GPIO 34. Pilihan itu tidak asal: pin ADC2 di ESP32 tidak berfungsi ketika Wi-Fi menyala, jadi selalu sambungkan sensor analog ke pin ADC1 (GPIO 32–39). ADC ESP32 beresolusi 12-bit dan mengembalikan nilai 0 sampai 4095, itulah sebabnya selisih kalibrasi minimum di kode adalah 400. Cara membuat bot serta mendapatkan token dan chat ID sudah kami bahas terperinci di panduan bot Telegram ESP32; untuk sketch ini, instal library UniversalTelegramBot dan ArduinoJson dari Library Manager.

C++ (Arduino IDE)
1// ESP32 lazer bariyeri + Telegram bildirimi / ESP32 laser tripwire + Telegram notification
2#include <WiFi.h>
3#include <WiFiClientSecure.h>
4#include <UniversalTelegramBot.h>        // ArduinoJson kütüphanesi de gerekir / also needs the ArduinoJson library
5
6const char* WIFI_SSID = "WIFI_ADI";      // Wi-Fi ağının adı / your Wi-Fi name
7const char* WIFI_PASS = "WIFI_SIFRESI";  // Wi-Fi şifren / your Wi-Fi password
8#define BOT_TOKEN "1234567890:ABCdefGhIJKlmNoPQRstuVWXyz"  // BotFather'dan / from BotFather
9#define CHAT_ID "123456789"              // senin chat ID'n / your chat ID
10
11const int LASER_PIN = 26;                // NPN transistör bazına 1 kΩ ile / to the NPN base via 1 kΩ
12const int LDR_PIN = 34;                  // ADC1 pini, Wi-Fi ile çalışır / ADC1 pin, works with Wi-Fi
13const int BUZZER_PIN = 25;               // aktif buzzer / active buzzer
14const unsigned long CONFIRM_MS = 30;     // en az bu kadar kesik kalmalı / must stay broken this long
15const unsigned long SIREN_MS = 5000;     // siren süresi / siren duration
16const unsigned long COOLDOWN_MS = 30000; // iki deneme arası en az 30 sn / at least 30 s between attempts
17
18WiFiClientSecure client;
19UniversalTelegramBot bot(BOT_TOKEN, client);
20
21int onLevel = 0, offLevel = 0;
22bool beamOk = true;
23bool counted = false;                    // bu kesinti sayıldı mı / has this break been counted
24unsigned long brokenSince = 0;
25bool sirenOn = false;
26unsigned long sirenStart = 0;
27unsigned long breakCount = 0;
28bool pending = false;                    // gönderilecek bildirim var / a notification is waiting
29bool triedOnce = false;
30unsigned long lastTry = 0;
31
32int readAvg() {
33  long sum = 0;
34  for (int i = 0; i < 16; i++) sum += analogRead(LDR_PIN);  // 16 ölçüm ortalaması / average of 16 readings
35  return sum / 16;
36}
37
38void calibrate() {
39  while (true) {
40    digitalWrite(LASER_PIN, LOW);        // lazer kapalı = kesik ışın / laser off = broken beam
41    delay(300);
42    offLevel = readAvg();
43    digitalWrite(LASER_PIN, HIGH);       // lazer açık = sağlam ışın / laser on = intact beam
44    delay(300);
45    onLevel = readAvg();
46    Serial.printf("Isinli / beam: %d  Isinsiz / no beam: %d\n", onLevel, offLevel);
47    if (abs(onLevel - offLevel) >= 400) return;   // 12 bit ölçekte yeterli fark / enough gap on the 12-bit scale
48    Serial.println("Isin LDR'ye ulasmiyor / Beam misses the LDR");
49    delay(2000);
50  }
51}
52
53int beamPercent() {
54  return (long)(readAvg() - offLevel) * 100 / (onLevel - offLevel);
55}
56
57void setup() {
58  Serial.begin(115200);
59  pinMode(LASER_PIN, OUTPUT);
60  pinMode(BUZZER_PIN, OUTPUT);
61  calibrate();
62
63  WiFi.mode(WIFI_STA);
64  WiFi.begin(WIFI_SSID, WIFI_PASS);
65  client.setCACert(TELEGRAM_CERTIFICATE_ROOT);    // api.telegram.org kök sertifikası / root certificate
66  unsigned long start = millis();
67  while (WiFi.status() != WL_CONNECTED && millis() - start < 15000) {  // en fazla 15 sn bekle / wait up to 15 s
68    delay(500);
69    Serial.print(".");
70  }
71  if (WiFi.status() == WL_CONNECTED) {
72    Serial.println(WiFi.localIP());
73    bot.sendMessage(CHAT_ID, "Lazer alarmi devrede / Laser alarm armed", "");
74  }
75}
76
77void loop() {
78  unsigned long now = millis();
79  int pct = beamPercent();
80
81  if (beamOk && pct < 40) {              // ışın yeni kesildi / beam just broke
82    beamOk = false;
83    counted = false;
84    brokenSince = now;
85  } else if (!beamOk && pct > 60) {
86    beamOk = true;                       // ışın geri geldi / beam restored
87  }
88
89  if (!beamOk && !counted && now - brokenSince >= CONFIRM_MS) {
90    counted = true;                      // her kesinti bir kez sayılır / each break counts once
91    breakCount++;
92    pending = true;
93    sirenOn = true;
94    sirenStart = now;
95    Serial.printf("Kesinti / Break #%lu\n", breakCount);
96  }
97
98  if (sirenOn && now - sirenStart >= SIREN_MS) sirenOn = false;
99  digitalWrite(BUZZER_PIN, (sirenOn && (now / 200) % 2) ? HIGH : LOW);  // kesik siren / beeping siren
100
101  if (pending && (!triedOnce || now - lastTry >= COOLDOWN_MS)) {
102    triedOnce = true;
103    lastTry = now;
104    if (WiFi.status() == WL_CONNECTED) {
105      String text = "Lazer bariyeri kesildi! / Laser beam broken! Toplam / Total: " + String(breakCount);
106      if (bot.sendMessage(CHAT_ID, text, "")) pending = false;  // gitmezse 30 sn sonra yeniden / retry in 30 s if it fails
107    } else {
108      WiFi.reconnect();                  // bağlantı koptuysa yeniden dene / reconnect if the link dropped
109    }
110  }
111}

Setiap putusnya sinar dihitung sekali, sirine berbunyi selama 5 detik, dan satu notifikasi masuk antrean. Notifikasi dicoba paling sering sekali setiap 30 detik; putusnya sinar yang terjadi di sela waktu itu ditambahkan ke total dan muncul di pesan berikutnya. Dengan begitu ponselmu tidak dibanjiri pesan ketika seseorang mondar-mandir melewati sinar. Kalau pesan gagal terkirim, kode mencoba lagi 30 detik kemudian, dan kalau Wi-Fi terputus, kode mulai menyambung ulang. sendMessage() butuh satu-dua detik karena membuka koneksi HTTPS yang aman; selama itu pola sirine membeku dan sinar tidak dipantau, dan itu normal.

Penghalang laser dengan Raspberry Pi Pico dan MicroPython

Di Raspberry Pi Pico kamu bisa membangun logika yang sama dengan beberapa baris MicroPython. Laser diberi daya dari VBUS (USB 5 V, pin 40) dan dihidupmatikan oleh transistor NPN yang tersambung ke GP15; pembagi LDR diberi daya dari pin 3V3(OUT) dan tersambung ke GP26 (ADC0), dan buzzer aktif masuk ke GP14. Karena ADC Pico mengembalikan nilai 0 sampai 65535 dengan read_u16(), selisih kalibrasi minimumnya 6000. Kodenya memakai perhitungan persentase, histeresis, dan waktu konfirmasi yang sama; ia menghitung setiap putusnya sinar, membunyikan sirine selama 5 detik, dan mencetak berapa lama sinarnya terhalang. Supaya Pico bisa berjalan tanpa komputer, simpan file-nya ke board sebagai main.py memakai Thonny.

MicroPython
1# Raspberry Pi Pico lazer bariyeri: alarm + geçiş sayacı / Laser barrier: alarm + pass counter
2from machine import Pin, ADC
3import time
4
5laser = Pin(15, Pin.OUT)        # NPN transistör bazına 1 kΩ ile / to the NPN base via 1 kΩ
6ldr = ADC(26)                   # GP26 = ADC0, bölücü 3V3'ten / divider fed from 3V3
7buzzer = Pin(14, Pin.OUT)       # aktif buzzer / active buzzer
8
9CONFIRM_MS = 30                 # en az bu kadar kesik kalmalı / must stay broken this long
10SIREN_MS = 5000                 # siren süresi / siren duration
11
12
13def read_avg(n=8):
14    total = 0
15    for _ in range(n):
16        total += ldr.read_u16()
17    return total // n
18
19
20def calibrate():
21    while True:
22        laser.value(0)          # lazer kapalı = kesik ışın / laser off = broken beam
23        time.sleep_ms(300)
24        off = read_avg(32)
25        laser.value(1)          # lazer açık = sağlam ışın / laser on = intact beam
26        time.sleep_ms(300)
27        on = read_avg(32)
28        print("Isinli / beam:", on, " Isinsiz / no beam:", off)
29        if abs(on - off) > 6000:          # 16 bit ölçekte yeterli fark / enough gap on the 16-bit scale
30            return on, off
31        print("Isin LDR'ye ulasmiyor / Beam misses the LDR")
32        time.sleep(2)
33
34
35on_level, off_level = calibrate()
36beam_ok = True
37counted = False
38broken_at = time.ticks_ms()
39siren_until = time.ticks_ms()
40count = 0
41
42while True:
43    now = time.ticks_ms()
44    pct = (read_avg() - off_level) * 100 // (on_level - off_level)   # 100 = ışın tam / full beam
45
46    if beam_ok and pct < 40:            # ışın yeni kesildi / beam just broke
47        beam_ok = False
48        counted = False
49        broken_at = now
50    elif not beam_ok and pct > 60:      # ışın geri geldi / beam restored
51        beam_ok = True
52        print("Kesik kaldigi sure / blocked for", time.ticks_diff(now, broken_at), "ms")
53
54    if not beam_ok and not counted and time.ticks_diff(now, broken_at) >= CONFIRM_MS:
55        counted = True                  # her kesinti bir kez sayılır / each break counts once
56        count += 1
57        siren_until = time.ticks_add(now, SIREN_MS)
58        print("Gecis / Pass:", count)
59
60    siren = time.ticks_diff(siren_until, now) > 0
61    buzzer.value(1 if siren and (now // 200) % 2 else 0)   # kesik siren / beeping siren

Ide proyek modul laser

  • Alarm rumah laser: Gabungkan sinar di pintu dan lorong dengan sensor gerak PIR dan kumpulkan semua input di satu unit kendali; detailnya di panduan sistem alarm Arduino.
  • Harpa laser: Pasang 5–7 sinar berdampingan dan mainkan nada yang berbeda di buzzer pasif setiap kali sebuah sinar terputus.
  • Penghitung pengunjung: Pisahkan orang masuk dan keluar dengan dua sinar dan tampilkan jumlah orang di dalam pada sebuah layar.
  • Pengukur kecepatan untuk lomba sains: Pakai dua gerbang untuk mengukur kecepatan benda yang meluncur di bidang miring dan bandingkan gesekannya; untuk ide lainnya lihat panduan ide proyek Arduino untuk lomba sains.
  • Game labirin laser: Buat jaring sinar dengan cermin di bawah ketinggian lutut; catat waktu pemain yang mencoba melewatinya tanpa menyentuh, dan beri penalti untuk setiap sentuhan.
  • Pelindung laci dan brankas: Deteksi sinar yang terputus ketika tutupnya terbuka dan kirim notifikasi ke ponselmu dengan ESP32.

Kesalahan umum dan cara mengatasinya

GejalaKemungkinan penyebabSolusi
Laser sama sekali tidak menyalaS dan − tertukar, atau board yang pin tengahnya butuh dayaCek label pin, sambungkan pin tengah ke 5V, lalu coba lagi
Laser sangat redupModul diberi 3,3 V atau pin tidak mampu memasok arus yang cukupBeri daya laser dari 5V dan hidupmatikan dengan transistor
Pesan “Isin LDR'ye ulasmiyor” (bahasa Turki untuk “sinar tidak sampai ke LDR”)Titik laser tidak mengenai LDR atau cahaya sekitar terlalu kuatTemukan titiknya dengan kertas dan letakkan LDR di dalam tabung hitam
Alarm terus berbunyiPenyelarasan bergeser, laser atau cermin goyangKencangkan dudukannya dan pantau nilai bacaan di Serial Plotter
Alarm tidak pernah berbunyiWalaupun sinar terputus, sinar matahari atau lampu tetap menerangi LDRTambahkan tabung dan putar sensor menjauhi jendela
Lintasan cepat tidak terhitungWaktu respons LDR (10–30 ms) terlalu lambatTurunkan CONFIRM_MS dan MIN_BREAK_MS atau pakai fototransistor
Arduino reset atau sebuah pin jadi panasBeberapa laser digerakkan dari satu pinBeri daya laser dari 5V dan hidupmatikan dengan transistor
Di ESP32 nilai bacaan kacau begitu Wi-Fi menyalaLDR tersambung ke pin ADC2Pindahkan LDR ke pin ADC1 antara GPIO 32 dan 39
Pesan Telegram tidak masukToken atau chat ID salah, atau kamu belum pernah mengirim pesan ke botKirim /start ke bot dan cek lagi token serta chat ID-nya
Setelah terpasang, uji sistemnya dalam kondisi nyata: gelapkan ruangan, nyalakan lampu, buka gorden, dan catat selisih antara nilai dengan sinar dan tanpa sinar di Serial Monitor setiap kali. Kalau selisihnya tetap di atas 100 bahkan dalam kondisi terburuk, penghalangmu bisa diandalkan. Anggap proyek ini sebagai alarm untuk belajar dan hobi; sistem keamanan profesional memakai sinar inframerah yang tidak terlihat dan penerima termodulasi.

Modul laser KY-008 memungkinkan salah satu proyek langka yang mengajarkan optik, pembagi tegangan, kalibrasi, dan pengukuran waktu sekaligus hanya dengan satu komponen murah. Mulailah dengan melihat selisihnya lewat sketch uji, lalu buat alarmnya, dan kembangkan proyekmu dengan cermin, penghitung, dan timer. Di aplikasi BlueGrays kamu akan menemukan proyek Sistem Peringatan Laser dan Sistem Keamanan Laser, Mengukur Intensitas Cahaya dengan LDR dan Lampu Tidur dengan LDR, Sistem Alarm Gerakan ESP32, serta notifikasi Telegram langkah demi langkah, lengkap dengan skema rangkaian dan kodenya.

Pertanyaan umum

Modul laser KY-008 butuh tegangan berapa?

KY-008 dirancang untuk 5 V, dan berkat resistor pembatas arus di modulnya, ia bisa disambungkan langsung ke pin digital Arduino Uno. Di 3,3 V ia juga menyala, tapi lebih redup. Jangan pernah memberi modul ini lebih dari 5 V, dan jangan pernah memberi daya dioda laser tanpa resistornya.

Apakah laser 5 mW bisa merusak mata?

Laser merah 5 mW termasuk Kelas 3R: paparan singkat yang tidak disengaja biasanya tidak menimbulkan kerusakan permanen, tapi menatap sinarnya atau terkena pantulan cermin di mata bisa melukai retina. Jaga sinar di bawah ketinggian mata, jangan pernah mengarahkannya ke orang atau hewan, dan periksa seluruh jalur sinar di rangkaian dengan cermin.

Seberapa jauh jangkauan tripwire laser?

Penyelarasan dan cahaya sekitar lebih membatasi jarak daripada daya laser itu sendiri. Dengan dudukan yang kokoh dan LDR di dalam tabung hitam, sistem ini bekerja dengan baik untuk jarak 10–20 m di dalam ruangan; di jarak yang lebih jauh titiknya membesar dan cahaya yang jatuh ke LDR makin sedikit. Di luar ruangan, sinar matahari, kabut, dan guncangan karena angin mengurangi jangkauannya secara nyata.

Apa yang bisa dipakai sebagai pengganti LDR di penghalang laser?

LDR murah dan mudah, tapi waktu responsnya 10–30 ms. Untuk timer dan penghitung yang butuh pengukuran lebih cepat, dipakai fototransistor atau fotodioda yang merespons dalam hitungan mikrodetik. Ada juga modul penerima laser siap pakai; modul ini memberi output digital ketika menerima cahaya dan bisa langsung disambungkan ke pin digital.

Apakah modul laser bisa dipakai dengan ESP32 dan Raspberry Pi Pico?

Bisa, tapi daripada memberi daya laser langsung dari pin, lebih baik beri daya dari 5V dan hidupmatikan dengan transistor NPN; pin Pico secara default hanya memasok 4 mA. Di board ini, beri daya pembagi LDR dari 3V3, dan di ESP32 pakai pin ADC1 (GPIO 32–39) yang tetap berfungsi bersama Wi-Fi.

Apakah penghalang sinar inframerah lebih baik daripada alarm laser?

Sistem keamanan profesional memakai sinar inframerah yang tidak terlihat dan penerima termodulasi; sinarnya tidak bisa terlihat dan modulasinya membuatnya hampir tidak terpengaruh sinar matahari. Sebaliknya, laser merah terlihat sehingga sangat mudah diselaraskan, dan karena itu ideal untuk proyek belajar, penghitung, dan timer.

Lihat semua proyek
Mengukur Intensitas Cahaya dengan LDR
#11Pemula

Mengukur Intensitas Cahaya dengan LDR

Ingin melihat seberapa terang kamarmu dalam bentuk angka? LDR, komponen kecil yang bereaksi terhadap cahaya, mengukur cahaya di sekitarnya, dan Arduino menulis nilainya ke layar komputermu setiap sete

4.6(81)
139
Lampu Tidur dengan LDR
#12Pemula

Lampu Tidur dengan LDR

Lampu tidur kecil yang menyala sendiri ketika gelap dan mati ketika pagi tiba. Sensor cahaya mengukur seberapa terang ruangan, dan Arduino menyalakan LED ketika cukup gelap lalu mematikannya lagi keti

4.8(102)
205
Membaca Intensitas Cahaya dengan Modul LDR ESP32
#113Pemula

Membaca Intensitas Cahaya dengan Modul LDR ESP32

Memantau secara real-time di Serial Monitor nilai ADC mentah modul LDR dan persentase cahaya relatif yang dihitung dari nilai acuan gelap dan terang. Persentase ini bukan pengukuran lux. Mengajarkan logika kalibrasi modul. Ideal dikerjakan sebelum Proyek 10, karena dipakai untuk menentukan nilai ambang.

4.6(36)
55
Sistem Peringatan Laser
#22Menengah
Premium

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

4.8(64)
83
Sistem Keamanan Laser
#23Mahir
Premium

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

4.8(60)
77
Lampu Tidur dengan LDR ESP32
#112Pemula
Premium

Lampu Tidur dengan LDR ESP32

Lampu tidur yang LED-nya otomatis menyala ketika gelap dan mati ketika terang. Yang dipakai adalah pin D0 (digital out) Modul Sensor LDR; ambang gelap diatur dengan potensiometer kecil di modul, dan modul sendiri yang menghasilkan output HIGH/LOW. ESP32 hanya membaca sinyal ini dengan digitalRead(), jadi kodenya sangat sederhana.

4.6(17)
30
Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
#145Mahir
Premium

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.

0.0(0)
9