Arduino Uno IR Infrared Sensor: Precision Proximity Detection System
Professional TCRT5000 reflective IR sensor module integration with Arduino Uno provides 2-30cm non-contact object detection through 950nm IR LED emission and matched phototransistor reception. Analog output voltage inversely proportional to target distance enables precise ranging and material discrimination.
Emitter photodiode modulated 38kHz carrier penetrates ambient light interference while receiver AGC maintains 0.1-4V dynamic range. Onboard LM393 comparator with potentiometer sets digital threshold 10-90% of ambient baseline.
Complete Components Specification
- Arduino UNO R3 microcontroller development board
- TCRT5000 IR Reflective Sensor Module (950nm)
- Male-to-male jumper wires (minimum 4 pieces)
- Solderless breadboard for prototyping
- White/reflective test targets (2-30cm range)
- 220Ω status LED resistor
Precision Optoelectronic Hardware Configuration
IR Sensor VCC (+): Arduino 5V power rail
IR Sensor GND (-): Arduino GND rail
IR Sensor OUT (Analog): Arduino Analog Pin A0 (0-5V distance signal)
IR Sensor DO (Digital): Arduino Digital Pin 2 (threshold trigger)
Onboard potentiometer clockwise increases detection threshold reducing range (30cm→2cm). Sensor cone 15°×35° FOV optimal 5-15cm operation.
// Arduino Uno TCRT5000 IR Sensor - Professional Proximity Detection
// A0: Analog distance (high voltage = close), Pin 2: Digital threshold
const int irPin = A0;
const int digitalPin = 2;
const int statusLed = 13;
// Distance calibration (adjust for your setup)
const int ambientLevel = 100; // No object baseline
const int closeThreshold = 400; // Close object
const int farThreshold = 200; // Far object
void setup() {
Serial.begin(9600);
pinMode(digitalPin, INPUT);
pinMode(statusLed, OUTPUT);
digitalWrite(statusLed, LOW);
Serial.println("IR Proximity Sensor Initialized");
Serial.println("Raw ADC | Distance | Status");
}
void loop() {
int irValue = analogRead(irPin);
int digitalState = digitalRead(digitalPin);
String distanceStatus;
if(irValue > closeThreshold) {
distanceStatus = "VERY CLOSE (<5cm)";
digitalWrite(statusLed, HIGH);
} else if(irValue > farThreshold) {
distanceStatus = "CLOSE (5-15cm)";
digitalWrite(statusLed, HIGH);
} else {
distanceStatus = "FAR (>15cm/NO OBJECT)";
digitalWrite(statusLed, LOW);
}
Serial.print("ADC: ");
Serial.print(irValue);
Serial.print(" | ");
Serial.print(distanceStatus);
Serial.print(" | Digital: ");
Serial.println(digitalState);
delay(100);
}
Arduino IDE Production Development Workflow
Create new production sketch implementing complete analog monitoring. Upload establishing stable 5V sensor power and serial feedback loop.
Serial Monitor (9600 baud) displays real-time ADC values, distance classification, and digital state. Calibrate thresholds matching installation environment.
Advanced Multi-Threshold Object Classification
// Material Discrimination - Reflective vs Absorptive Targets
const int whiteTarget = 600; // High reflectivity
const int blackTarget = 250; // Low reflectivity
const int metalTarget = 500; // Medium + specular
void loop() {
int irValue = analogRead(irPin);
String objectType;
if(irValue > whiteTarget) {
objectType = "WHITE/REFLECTIVE";
} else if(irValue > metalTarget) {
objectType = "METAL/SPECULAR";
} else if(irValue > blackTarget) {
objectType = "DARK/MATTE";
} else {
objectType = "NO OBJECT";
}
Serial.print("Target: ");
Serial.print(objectType);
Serial.print(" | Signal: ");
Serial.println(irValue);
}
IR Reflective Sensing Operating Principles
950nm IR LED modulated 38kHz carrier received by matched phototransistor. Inverse square law: Voltage ∝ 1/distance² modulated by target albedo (0.1-0.9). Ambient compensation through AGC circuit.
Industrial Automation & Robotics Applications
Line-following robot edge detection (contrast sensing)
Automated material sorting (reflectivity classification)
Proximity limit switches (non-contact positioning)
// Industrial Line Following - Dual IR Sensor Array
const int leftIR = A0;
const int rightIR = A1;
const int motorLeft = 9;
const int motorRight = 10;
void loop() {
int leftValue = analogRead(leftIR);
int rightValue = analogRead(rightIR);
if(leftValue > 400 && rightValue > 400) {
// On line - full speed
analogWrite(motorLeft, 200);
analogWrite(motorRight, 200);
} else if(leftValue > 400) {
// Veer right
analogWrite(motorLeft, 150);
analogWrite(motorRight, 250);
} else if(rightValue > 400) {
// Veer left
analogWrite(motorLeft, 250);
analogWrite(motorRight, 150);
} else {
// Lost line - stop
analogWrite(motorLeft, 0);
analogWrite(motorRight, 0);
}
}
// Robot Obstacle Avoidance with Speed Reduction
const int obstaclePin = A0;
const int motorPin = 9;
void loop() {
int distance = analogRead(obstaclePin);
if(distance > 500) {
analogWrite(motorPin, 255); // Full speed
} else if(distance > 300) {
analogWrite(motorPin, 150); // Slow approach
} else {
analogWrite(motorPin, 0); // Stop
Serial.println("*** OBSTACLE DETECTED - STOPPING ***");
}
}
TCRT5000 Optoelectronic Specifications
950nm peak emission; 10° emission angle; 120° reception FOV; 1.35V forward voltage; 60mA drive current; 0.1-4V output range; 38kHz modulation; -25 to 85°C operation.
Production Deployment Calibration
- Ambient baseline 80-150 ADC (no target)
- Close range >500 ADC (white target 2cm)
- Potentiometer CW decreases sensitivity/range
- Test multiple target materials/colors
- Shield emitter-detector from direct sunlight
Environmental Compensation Protocol
Periodic ambient recalibration compensates LED aging and dust accumulation. Multi-sensor triangulation improves directionality and accuracy.