.
Sensor infrarojo como detector de obstaculos
Indice
- detector de obstaculo con infrarojo
1.Detector de obstaculo con infrarojo

const int PIN_SENSOR_IR = 8; // Pin digital donde está conectado el sensor infrarrojo
void setup() {
// Inicializar la comunicación serial a 9600 bits por segundo:
Serial.begin(9600);
// Configurar el pin del Arduino como entrada
pinMode(PIN_SENSOR_IR, INPUT);
}
void loop() {
// Leer el estado del pin de entrada:
int estado = digitalRead(PIN_SENSOR_IR);
if (estado == LOW) // Si el sensor detecta algo (nivel BAJO)
Serial.println("¡El obstáculo está presente!");
else // Si NO detecta nada (nivel ALTO)
Serial.println("El obstáculo NO está presente");
delay(100); // Pequeña pausa de 100 milisegundos entre lecturas
}
Explicación del funcionamiento:
Sensor Infrarrojo (IR):
- Este código está diseñado para un sensor IR de obstáculos (como el FC-51 o el HW-201)
- Estos sensores emiten luz infrarroja y miden el reflejo
Lógica del sensor:
- LOW (nivel bajo = 0V) → El sensor detecta un obstáculo (la luz IR se refleja)
- HIGH (nivel alto = 5V) → No hay obstáculo (la luz IR no se refleja)
Comportamiento:
- El sensor lee constantemente si hay un objeto frente a él
- Si detecta un obstáculo (
LOW), muestra: «¡El obstáculo está presente!» - Si no detecta nada (
HIGH), muestra: «El obstáculo NO está presente» - Espera 100ms antes de la siguiente lectura para evitar saturaciones
Salida en el Monitor Serie:
text
¡El obstáculo está presente! ¡El obstáculo está presente! El obstáculo NO está presente El obstáculo NO está presente ¡El obstáculo está presente! ...
Aplicaciones comunes:
- Detectores de objetos para robots evasores de obstáculos
- Contadores de productos en cintas transportadoras
- Sistemas de estacionamiento (detección de vehículos)
- Barreras de seguridad (detectar paso de personas)
- Robots seguidores de líneas (con sensores IR especiales)
Ajustes comunes según el sensor:
Algunos sensores IR tienen la lógica invertida. Si tu sensor funciona al revés, simplemente cambia:
cpp
if (estado == HIGH) // Si detecta con nivel HIGH
Serial.println("¡El obstáculo está presente!");
Mejoras posibles:
cpp
// Agregar LED indicador y contador de obstáculos
int contadorObstaculos = 0;
int ultimoEstado = HIGH;
void loop() {
int estado = digitalRead(PIN_SENSOR_IR);
// Detectar flanco de bajada (cuando aparece un obstáculo)
if (estado == LOW && ultimoEstado == HIGH) {
contadorObstaculos++;
Serial.print("Obstáculo detectado #");
Serial.println(contadorObstaculos);
digitalWrite(LED_BUILTIN, HIGH); // Encender LED
}
else if (estado == HIGH && ultimoEstado == LOW) {
digitalWrite(LED_BUILTIN, LOW); // Apagar LED
}
ultimoEstado = estado;
delay(50);
}
Especificaciones típicas del sensor IR:
- Distancia de detección: 2cm a 30cm (ajustable con potenciómetro)
- Ángulo de detección: ~35 grados
- Voltaje de operación: 3.3V a 5V DC
- Salida: Digital (LOW/HIGH)
Nota importante:
- La distancia de detección se puede ajustar girando el potenciómetro del sensor
- Objetos negros o muy oscuros pueden no reflejar bien la luz IR
- La luz solar intensa puede interferir con la lectura