Overview
This 6mm 650nm 5mW red laser diode module is the smallest, simplest laser source you can drop into a project. It produces a focused red dot at 650 nm — clearly visible at typical room distances — and runs from a 5V supply. The module ships with a brass barrel housing and two pre-soldered wires (red for 5V, blue for GND), so it's plug-and-play.
Use it for line-of-sight tripwires, laser-tag receivers, optical alignment fixtures, photoresistor circuits, robotics homing beacons, and tutorial Arduino projects that need a visible light source. With only two wires and 25 mA current draw, it works directly off any GPIO that can handle ~5V via a transistor or relay — or off the Arduino 5V pin for always-on operation.
The module is class IIIA equivalent (under 5 mW). Always avoid pointing it at eyes — even at 5 mW the focused beam can damage retinas if directed straight at them.
At a Glance
Specifications
| Parameter | Value |
| Wavelength | 650 nm (visible red) |
| Output Power | 5 mW (Class IIIA) |
| Operating Voltage | 3V - 5V DC (optimal: 5V) |
| Operating Current | ~25 mA at 5V |
| Beam Type | Focused dot (focus is fixed) |
| Beam Divergence | ~1 mrad |
| Operating Temperature | -10°C to +40°C |
| Module Body | Brass barrel, 6 mm diameter |
| Wire Length | ~15 cm (red = +5V, blue = GND) |
| Lifespan | ~5,000 hours typical |
Pinout Diagram
Wiring Guide
Arduino — Always On
The simplest setup: connect the laser directly between 5V and GND for continuous operation. Use this when the laser should always be on while the Arduino is powered.
| Laser Wire | Arduino Pin |
|---|---|
| Red (+) | 5V |
| Blue (−) | GND |
GPIO-Controlled (with Transistor)
To turn the laser on and off in software, drive it through a small NPN transistor (2N2222, BC547, or similar). Direct GPIO drive isn't reliable because the laser draws ~25 mA and most Arduino pins source at most 20-40 mA.
| Connection | Component |
|---|---|
| GPIO (e.g. D9) | Through 1k resistor → NPN base |
| NPN collector | Laser blue wire (−) |
| NPN emitter | GND |
| Laser red wire (+) | 5V |
Raspberry Pi — GPIO Controlled
The Pi GPIO is 3.3V and only sources up to 16 mA, so always use a transistor. The same NPN circuit as Arduino works — just connect the base resistor to a GPIO instead.
| Connection | Component |
|---|---|
| GPIO (BCM 17 / Pin 11) | Through 1k resistor → NPN base |
| NPN collector | Laser blue wire (−) |
| NPN emitter | GND |
| Laser red wire (+) | Pin 2 (5V) |
Raspberry Pi Pico — GPIO Controlled
Pico GPIO is 3.3V at 12 mA max sourcing. Use a transistor (or MOSFET like 2N7000) to switch the laser cleanly.
| Connection | Component |
|---|---|
| GP15 | Through 1k resistor → NPN base |
| NPN collector | Laser blue wire (−) |
| NPN emitter | GND |
| Laser red wire (+) | VBUS (5V from USB) or VSYS |
Code Examples
Arduino — Blink the Laser via Transistor
// Laser Diode - Blink via NPN transistor on D9
// Wiring: D9 -> 1k resistor -> NPN base
// NPN collector -> laser GND wire
// NPN emitter -> Arduino GND
// Laser +5V wire -> Arduino 5V
const int laserPin = 9;
void setup() {
pinMode(laserPin, OUTPUT);
}
void loop() {
digitalWrite(laserPin, HIGH); // laser ON
delay(500);
digitalWrite(laserPin, LOW); // laser OFF
delay(500);
}
Arduino — Tripwire with LDR
// Laser tripwire: laser hits an LDR; if the beam is broken, the LDR
// reading drops and we trigger an alarm.
// Setup: laser pointed at LDR; LDR in voltage-divider with 10k pull-down on A0.
const int ldrPin = A0;
const int buzzPin = 8;
const int threshold = 600; // calibrate to your setup
void setup() {
Serial.begin(9600);
pinMode(buzzPin, OUTPUT);
}
void loop() {
int v = analogRead(ldrPin);
Serial.println(v);
if (v < threshold) {
digitalWrite(buzzPin, HIGH); // alarm
} else {
digitalWrite(buzzPin, LOW);
}
delay(50);
}
Raspberry Pi (Python) — On / Off
#!/usr/bin/env python3
# Laser Diode - On/Off via transistor on BCM 17
import RPi.GPIO as GPIO
import time
LASER_PIN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(LASER_PIN, GPIO.OUT)
try:
while True:
GPIO.output(LASER_PIN, GPIO.HIGH) # ON
time.sleep(0.5)
GPIO.output(LASER_PIN, GPIO.LOW) # OFF
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()