IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động Laser Module KY-008: Diode Laser 650nm, Cộng Hưởng Quang Học & An Toàn Laser

KY-008 là module diode laser đỏ 650nm, phổ biến trong bộ kit Arduino 37 module. Khác với LED thông thường phát ánh sáng khuếch tán, laser diode tạo ra chùm ánh sáng kết hợp (coherent), đơn sắc và hội tụ. Bài này giải thích nguyên lý vật lý làm cho laser diode khác biệt, quy tắc an toàn quan trọng, và ứng dụng laser tripwire thực tế.

Nguyên Lý Hoạt Động

1. Laser Diode vs LED — Sự Khác Biệt Cơ Bản

Cả laser diode và LED đều là p-n junction semiconductor phát sáng khi dòng điện chạy qua. Nhưng cơ chế khác nhau hoàn toàn.

LED (Light Emitting Diode):

Electron + Hole → Photon (phát xạ tự phát)
                  Bước sóng: dải rộng 20-50nm (ví dụ 630-680nm)
                  Hướng: phân kỳ mọi hướng ~120°
                  Phase: ngẫu nhiên (incoherent)

Laser Diode:

Electron + Hole → Photon (phát xạ tự phát)
Photon đó kích thích electron khác → 2 photon cùng tần số + cùng pha (stimulated emission)
2 photon đó kích thích → 4 photon → ... → cascade
Buồng cộng hưởng khuếch đại → Chùm laser ra ngoài

2. Buồng Cộng Hưởng Fabry-Pérot

Đây là điểm cốt lõi tạo ra laser. Laser diode có hai mặt tinh thể được chẻ phẳng (cleaved facets) ở hai đầu — đóng vai trò gương bán phản chiếu:

                 Gương bán phản       Gương bán phản
                 R₁ ≈ 30%            R₂ ≈ 30%
GND ──┤ p-layer ├──────────────────────────────┤ n-layer ├── VCC
               ↑ Mặt chẻ (gương)          Mặt chẻ (gương) ↑

Photon bouncing:
    →→→→→ Phản xạ ←←←←←
    →→→→→ Phản xạ ←←←←←  → Khi đủ khuếch đại
    →→→→→ Phản xạ ←←←←←  → Thoát ra ngoài qua mặt gương bán phản
    ───────────────────── → Chùm laser hội tụ

Ngưỡng laser (Threshold current):

  • Dưới ngưỡng: phát xạ tự phát (như LED) — ánh sáng yếu, phân kỳ
  • Trên ngưỡng: phát xạ cưỡng bức thắng → chùm laser hội tụ, mạnh

KY-008 mặc định hoạt động trên ngưỡng khi cấp điện đúng (điện trở 1kΩ tích hợp giới hạn dòng phù hợp).

3. Đặc Điểm Chùm Laser 650nm

Chùm sáng laser (so sánh với LED):

LED:                              Laser diode:
    ╱│╲                               ─────→
   ╱ │ ╲                              ─────→  (song song, divergence nhỏ ~10-20°)
  ╱  │  ╲                             ─────→
 [LED]                             [Laser]
Góc: ~120°                         Góc: ~10-20° (trước khi đi qua thấu kính hội tụ)
Bước sóng: dải rộng (~20-50nm)     Bước sóng: rất hẹp (<1nm, thường <0.1nm)

Bước sóng 650nm — màu đỏ: Đây là giới hạn giữa đỏ và gần hồng ngoại. Mắt người nhạy nhất với 550nm (xanh lá), kém nhạy với 650nm → 650nm cần công suất quang học cao hơn để nhìn thấy tương đương với 550nm. Tuy nhiên, 650nm rất rẻ để sản xuất → phổ biến nhất trong laser diode thương mại.

4. Mạch Trong KY-008

KY-008 module (cực đơn giản):

Pin S (Signal)
    │
   [1kΩ]  ← Điện trở hạn dòng tích hợp
    │
[Laser Diode Anode]
[Laser Diode Cathode]
    │
   GND

Không có IC điều khiển. Không có điều chỉnh công suất. Chỉ là laser diode + điện trở nối tiếp:

  • Cấp 5V: dòng ≈ (5V – V_f) / 1kΩ ≈ (5 – 2.5) / 1000 = 2.5mA → công suất quang học thấp nhưng đủ thấy được
  • Tăng cao hơn 5V → có thể hỏng diode

Thông Số Kỹ Thuật

Thông sốGiá trị
Điện áp hoạt động5V (3.3V cũng hoạt động nhưng yếu hơn)
Điện trở hạn dòng1kΩ (tích hợp trên module)
Bước sóng650nm (đỏ)
Công suất quang~5mW (tùy dòng điện)
Phân kỳ chùm tia~10–30° (trước thấu kính)
Class laserIIIa / Class 3R
Kích thước module15mm × 13mm

Phân Loại An Toàn Laser

QUAN TRỌNG — Đọc trước khi dùng:

ClassCông suấtMức độ nguy hiểm
Class 1<0.4mW (visible)An toàn hoàn toàn
Class 21–1mWAn toàn — reflex blink bảo vệ
Class 3R / IIIa1–5mWNhìn trực tiếp >0.25s có thể hại mắt
Class 3B / IIIb5–500mWNguy hiểm — bỏng võng mạc nhanh
Class 4>500mWCháy da, mắt, vật liệu

KY-008 là Class 3R (~5mW):

  • KHÔNG nhìn trực tiếp vào chùm tia
  • KHÔNG chiếu vào mắt người khác
  • Phản xạ khuếch tán (từ giấy, tường) thường an toàn
  • Phản xạ gương (từ gương, kim loại nhẵn) vẫn nguy hiểm

Sơ Đồ Chân (Pinout)

KY-008 Module (nhìn từ phía sau board):

 S    Middle   GND
 │      │       │
[1kΩ]   │       │
 │      │       │
[Laser Diode Anode ─── Cathode]
ChânKý hiệuChức năng
1S (Signal)Nối với 1kΩ → anode laser diode
2(Middle)Cùng nối với S qua PCB trace — thường bỏ qua
3GNDCathode laser diode, đất

Thực tế sử dụng: Nối VCC (5V) vào S (hoặc Middle), GND vào GND → laser sáng. Muốn bật/tắt qua MCU: dùng transistor NPN hoặc MOSFET điều khiển dòng.

So Sánh Laser Diode Modules Phổ Biến

ModuleBước sóngCông suấtGhi chú
KY-008650nm (đỏ)~5mWPhổ biến nhất, kit 37 module
Laser xanh 532nm532nm5-50mWĐắt hơn, mắt nhạy hơn → thấy rõ hơn
Laser tím 405nm405nm5-50mWPhổ UV, tẩy vải/keo UV
Laser IR 850nm850nm10-100mWKhông thấy bằng mắt thường

Kết Nối Phần Cứng

Kết Nối KY-008 với ESP32 — Điều Khiển Trực Tiếp GPIO

Cách 1: Nối thẳng (đơn giản)

ESP32 DevKit V1              KY-008
─────────────────────        ─────────────
3V3 hoặc 5V ──────────────→  S (Signal)
GND  ──────────────────────→  GND

Laser luôn sáng khi có nguồn. Không điều khiển ON/OFF từ MCU.

Cách 2: Điều khiển bật/tắt qua GPIO (đúng cách)

ESP32 GPIO → 2N2222 NPN Transistor → Laser

ESP32                  2N2222 NPN         KY-008
─────────────────      ──────────────     ───────
GPIO5 ─────────────→ Base (qua 1kΩ)
                     Collector ──────────→ S (Signal)
                     Emitter  ──────────→ GND (chung)
5V ───────────────→ VCC KY-008 (trực tiếp)
GND ──────────────→ GND (chung)

Tại sao cần transistor: GPIO ESP32 (3.3V, 12mA max) không đủ dòng/điện áp để cấp laser 5V cần ~5mA. Transistor NPN làm “công tắc”: GPIO HIGH → transistor dẫn → laser sáng.

Kết Nối KY-008 với Arduino Uno

Arduino Uno 5V → cấp trực tiếp hơn:

Arduino Uno              KY-008
─────────────────────    ─────────────
Pin 9 (PWM/Digital)────→ S (Signal)  ← GPIO Uno 5V, 40mA — đủ dùng
GND  ──────────────────→ GND

Arduino Uno GPIO có thể cấp 40mA — đủ cho KY-008 (chỉ ~5mA). Không cần transistor.

Mạch Laser Tripwire (Thực Tế)

[KY-008 Laser] ─────────────────────────────→ [LDR]
     │                      ~1-5m                │
   Arduino                              Arduino Uno
   GPIO9                                A0 (đọc LDR)
                                        Pull-up 10kΩ:
                                        VCC─[10kΩ]─┬─ A0
                                                   │
                                                 [LDR]
                                                   │
                                                  GND

Khi laser chiếu vào LDR → LDR điện trở thấp → A0 thấp. Khi beam bị chắn → LDR điện trở cao → A0 cao → báo động.

Code Arduino IDE

Code Bật Tắt Laser Đơn Giản — Arduino Uno

/*
 * KY-008 Laser Module — Bật tắt laser
 * Board: Arduino Uno
 * Kết nối: S→Pin9, GND→GND
 * (Điện trở 1kΩ đã có trên module — không cần thêm)
 *
 * AN TOÀN: Không hướng laser vào mắt người
 */

const int LASER_PIN = 9;

void setup() {
  Serial.begin(9600);
  pinMode(LASER_PIN, OUTPUT);
  digitalWrite(LASER_PIN, LOW); // Tắt laser ban đầu
  Serial.println("=== KY-008 Laser - Arduino Uno ===");
  Serial.println("AN TOÀN: Không hướng laser vào mắt!");
}

void loop() {
  // Bật laser 2 giây
  digitalWrite(LASER_PIN, HIGH);
  Serial.println("Laser: BẬT");
  delay(2000);

  // Tắt laser 1 giây
  digitalWrite(LASER_PIN, LOW);
  Serial.println("Laser: TẮT");
  delay(1000);
}

Code Laser Tripwire — Arduino Uno

/*
 * Laser Tripwire — Cảnh báo khi beam bị cắt
 * Board: Arduino Uno
 * Kết nối:
 *   Laser KY-008: S→Pin9, GND→GND
 *   LDR (ở đầu thu): một đầu→A0, một đầu→GND; Pull-up 10kΩ từ A0→5V
 *   Buzzer: +→Pin8, -→GND
 *
 * Đặt laser và LDR thẳng nhau, cách 0.5m-5m
 * Khi có người cắt ngang beam → LDR không nhận laser → báo động
 */

const int LASER_PIN  = 9;
const int LDR_PIN    = A0;
const int BUZZER_PIN = 8;

int beamThreshold;    // Ngưỡng — đo khi beam thẳng, set = 80% giá trị đó
bool alarmTriggered = false;

void calibrate() {
  Serial.println("Calibrating — giữ nguyên beam 3 giây...");
  delay(2000);
  int beamValue = analogRead(LDR_PIN);
  // Ngưỡng: nếu LDR đọc thấp hơn 70% giá trị ban đầu → beam bị cắt
  beamThreshold = beamValue * 0.7;
  Serial.print("Beam value: "); Serial.println(beamValue);
  Serial.print("Threshold set to: "); Serial.println(beamThreshold);
  Serial.println("Tripwire active!");
}

void setup() {
  Serial.begin(9600);
  pinMode(LASER_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN, LOW);

  // Bật laser để calibrate
  digitalWrite(LASER_PIN, HIGH);
  delay(500); // Ổn định

  calibrate();
}

void loop() {
  int ldrValue = analogRead(LDR_PIN);

  if (ldrValue < beamThreshold) {
    // Beam bị cắt → báo động
    if (!alarmTriggered) {
      alarmTriggered = true;
      Serial.println("!!! BEAM BỊ CẮT — CÓ NGƯỜI QUA !!!");
    }
    // Còi báo liên tục
    tone(BUZZER_PIN, 1000);
  } else {
    // Beam bình thường
    if (alarmTriggered) {
      alarmTriggered = false;
      Serial.println("Beam khôi phục — bình thường");
    }
    noTone(BUZZER_PIN);
  }

  delay(50); // Polling 50ms
}

Code ESP32 — Laser Tripwire + Timestamp

/*
 * Laser Tripwire — ESP32 với transistor NPN điều khiển laser
 * Board: ESP32 DevKit V1
 * Laser: Base transistor → GPIO5 (qua 1kΩ); Collector → KY-008 S; Emitter → GND
 * LDR: GPIO34 (ADC1, input-only); Pull-up 10kΩ từ LDR → 3V3
 */

const int LASER_CTRL = 5;  // Điều khiển transistor → bật/tắt laser
const int LDR_PIN    = 34; // ADC1_CH6, input-only

int beamBaseline;   // Giá trị LDR khi beam bình thường
int threshold;      // Ngưỡng phát hiện

void calibrate() {
  Serial.println("Calibration: giữ beam thẳng, chờ 2 giây...");
  delay(2000);

  int sum = 0;
  for (int i = 0; i < 20; i++) {
    sum += analogRead(LDR_PIN);
    delay(50);
  }
  beamBaseline = sum / 20;
  threshold = beamBaseline * 7 / 10; // 70% của baseline

  Serial.printf("Baseline ADC: %d | Threshold: %d\n", beamBaseline, threshold);
  Serial.println("Tripwire ACTIVE!");
}

void setup() {
  Serial.begin(115200);
  pinMode(LASER_CTRL, OUTPUT);
  analogSetAttenuation(ADC_11db);
  analogReadResolution(12);

  // Bật laser
  digitalWrite(LASER_CTRL, HIGH);
  delay(500);

  calibrate();
}

void loop() {
  int ldrVal = analogRead(LDR_PIN);

  if (ldrVal < threshold) {
    // Beam bị cắt
    Serial.printf("[%lums] !!! BEAM CẮT! LDR=%d (threshold=%d) !!!\n",
      millis(), ldrVal, threshold);
    delay(500); // Debounce
  }

  delay(50);
}

Kết Quả Mong Đợi

=== KY-008 Laser Tripwire ===
Calibration: giữ beam thẳng, chờ 2 giây...
Baseline ADC: 3850 | Threshold: 2695
Tripwire ACTIVE!
[12345ms] !!! BEAM CẮT! LDR=1200 (threshold=2695) !!!
[13890ms] !!! BEAM CẮT! LDR=980 (threshold=2695) !!!

Ứng Dụng Thực Tế

Ứng dụngChi tiết
Laser tripwire cảnh báoBảo vệ cửa, kho hàng
Đếm vật thể đi quaĐếm sản phẩm trên băng chuyền
Laser level markerĐánh dấu đường thẳng khi lắp đặt
Demo nguyên lý laser/quang họcGiáo dục
Photo booth triggerChụp ảnh khi người đi qua

Lưu Ý Khi Sử Dụng

1. AN TOÀN MẮT — Quan trọng nhất

KY-008 là Class 3R (~5mW). Không nhìn trực tiếp vào chùm tia. Không chiếu về phía mắt. Phản xạ từ gương/kim loại nhẵn vẫn nguy hiểm. Phản xạ từ giấy/tường (diffuse) thường an toàn nhưng tránh nhìn trực tiếp điểm sáng. Đặc biệt nguy hiểm với trẻ em — không để trẻ em chơi module laser không có giám sát.

2. Không điều chỉnh dòng vượt quá điện trở 1kΩ tích hợp

Điện trở 1kΩ bảo vệ diode khỏi quá dòng. Không bỏ điện trở hoặc shunt để “tăng sáng” → sẽ hỏng diode laser ngay lập tức. Dòng quá cao làm hỏng buồng cộng hưởng không sửa được.

3. Transistor hoặc MOSFET khi điều khiển từ ESP32

GPIO ESP32 chỉ 3.3V, 12mA max. Laser cần 5V để sáng đúng, dòng ~5mA. Dùng transistor NPN (2N2222, BC547, S8050) hoặc N-MOSFET (2N7000) để điều khiển. GPIO → base transistor (qua 1kΩ) → transistor đóng/mở mạch laser.

4. Calibrate tripwire tại chỗ thực tế

Độ sáng phòng, khoảng cách, loại LDR đều ảnh hưởng baseline ADC. Luôn calibrate sau khi lắp đặt xong — không dùng giá trị threshold cố định. Code calibration đo giá trị khi beam bình thường → set ngưỡng 70-80% giá trị đó.

Bài tiếp theo: