Sensor infrarojo como detector de obstaculos

Indice

  1. 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:

  1. El sensor lee constantemente si hay un objeto frente a él
  2. Si detecta un obstáculo (LOW), muestra: «¡El obstáculo está presente!»
  3. Si no detecta nada (HIGH), muestra: «El obstáculo NO está presente»
  4. 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